{"version":3,"sources":["CoveoJsSearch.Dependencies.js","webpack/universalModuleDefinition","CoveoJsSearch.min.js","webpack/bootstrap cfa70eb6e857dd903e70","src/Index.ts","~/es6-promise/dist/es6-promise.js","~/process/browser.js","(webpack)/buildin/module.js","(webpack)/buildin/amd-define.js","src/BaseModules.ts","src/misc/PromisesShim.ts","src/misc/CustomEventPolyfill.ts","src/misc/Version.ts","src/rest/SearchEndpoint.ts","src/rest/EndpointCaller.ts","src/misc/Logger.ts","src/misc/Assert.ts","src/utils/Utils.ts","~/underscore/underscore.js","src/utils/TimeSpanUtils.ts","src/utils/DeviceUtils.ts","src/ui/ResponsiveComponents/ResponsiveComponents.ts","src/utils/JQueryutils.ts","src/rest/AjaxError.ts","src/rest/MissingAuthenticationError.ts","src/utils/QueryUtils.ts","src/rest/QueryError.ts","src/ExternalModulesShim.ts","~/modal-box/bin/ModalBox.min.js","~/coveomagicbox/bin/MagicBox.min.js","lib/l10n/l10n.min.js","src/strings/DefaultLanguage.ts","webpack:///lib/globalize/globalize.min.js?780d","lib/globalize/globalize.min.js","src/MiscModules.ts","src/misc/Cache.ts","src/misc/Defer.ts","src/misc/L10N.ts","src/misc/Options.ts","src/strings/Strings.ts","src/RestModules.ts","src/rest/AnalyticsEndpoint.ts","src/utils/CookieUtils.ts","src/EventsModules.ts","src/events/AdvancedSearchEvents.ts","src/events/AnalyticsEvents.ts","src/events/BreadcrumbEvents.ts","src/events/DebugEvents.ts","src/events/ImageResultListEvents.ts","src/events/InitializationEvents.ts","src/events/OmniboxEvents.ts","src/events/PreferencesPanelEvents.ts","src/events/QueryEvents.ts","src/events/ResultListEvents.ts","src/events/ResultLayoutEvents.ts","src/events/SearchAlertEvents.ts","src/events/SettingsEvents.ts","src/events/SliderEvents.ts","src/events/StandaloneSearchInterfaceEvents.ts","src/UtilsModules.ts","src/utils/ColorUtils.ts","src/utils/CurrencyUtils.ts","src/utils/DateUtils.ts","src/utils/Dom.ts","src/utils/DomUtils.ts","src/ui/Misc/FileTypes.ts","src/utils/StringUtils.ts","~/latinize/latinize.js","src/utils/EmailUtils.ts","src/utils/HashUtils.ts","src/utils/HighlightUtils.ts","src/utils/HtmlUtils.ts","src/utils/KeyboardUtils.ts","src/utils/LocalStorageUtils.ts","src/utils/OSUtils.ts","src/utils/PopupUtils.ts","src/utils/StreamHighlightUtils.ts","src/ControllersModules.ts","src/controllers/QueryController.ts","src/ui/Base/RootComponent.ts","src/ui/Base/BaseComponent.ts","src/ui/Base/QueryBuilder.ts","src/ui/Base/ExpressionBuilder.ts","src/rest/SearchEndpointWithDefaultCallOptions.ts","~/coveo.analytics/dist/index.js","~/coveo.analytics/dist/analytics.js","~/coveo.analytics/dist/history.js","~/coveo.analytics/dist/storage.js","~/coveo.analytics/dist/detector.js","~/coveo.analytics/dist/cookieutils.js","~/whatwg-fetch/fetch.js","~/coveo.analytics/dist/simpleanalytics.js","~/coveo.analytics/dist/objectassign.js","~/coveo.analytics/dist/utils.js","~/coveo.analytics/dist/donottrack.js","src/controllers/FacetQueryController.ts","src/ui/Facet/FacetSearchParameters.ts","src/ui/Facet/FacetUtils.ts","src/controllers/FacetRangeQueryController.ts","src/controllers/FacetSliderQueryController.ts","src/controllers/HierarchicalFacetQueryController.ts","src/controllers/HistoryController.ts","src/models/Model.ts","src/controllers/LocalStorageHistoryController.ts","src/ModelsModules.ts","src/models/QueryStateModel.ts","src/models/ComponentOptionsModel.ts","src/models/ComponentStateModel.ts","src/UIBaseModules.ts","src/ui/Base/RegisteredNamedMethods.ts","src/ui/Base/Initialization.ts","src/ui/Base/Component.ts","src/ui/SearchInterface/SearchInterface.ts","src/ui/Base/ComponentOptions.ts","src/ui/Templates/TemplateCache.ts","src/ui/Templates/Template.ts","src/ui/Templates/TemplateConditionEvaluator.ts","src/ui/Templates/TemplateFieldsEvaluator.ts","src/ui/Templates/UnderscoreTemplate.ts","src/ui/Templates/TemplateFromAScriptTag.ts","src/ui/Templates/DefaultResultTemplate.ts","src/ui/Templates/HtmlTemplate.ts","src/ui/Templates/TemplateList.ts","src/ui/Analytics/NoopAnalyticsClient.ts","src/ui/Debug/Debug.ts","~/fastclick/lib/fastclick.js","~/jstimezonedetect/dist/jstz.js","(webpack)/buildin/amd-options.js","src/misc/SentryLogger.ts","src/ui/Analytics/AnalyticsActionListMeta.ts","src/ui/Analytics/Analytics.ts","src/ui/Analytics/LiveAnalyticsClient.ts","src/ui/Analytics/PendingSearchEvent.ts","src/rest/APIAnalyticsBuilder.ts","src/ui/Analytics/PendingSearchAsYouTypeSearchEvent.ts","src/ui/Analytics/MultiAnalyticsClient.ts","src/ui/Recommendation/Recommendation.ts","src/events/QuickviewEvents.ts","src/ui/ResponsiveComponents/ResponsiveRecommendation.ts","src/ui/ResponsiveComponents/ResponsiveComponentsManager.ts","src/ui/Tab/Tab.ts","src/ui/ResponsiveComponents/ResponsiveTabs.ts","src/utils/EventsUtils.ts","src/ui/ResponsiveComponents/ResponsiveComponentsUtils.ts","src/ui/ResponsiveComponents/ResponsiveDropdown/RecommendationDropdownContent.ts","src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownContent.ts","src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownHeader.ts","src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdown.ts","src/ui/FacetSlider/FacetSlider.ts","src/ui/Misc/Slider.ts","~/d3-scale/build/d3-scale.js","~/d3-array/build/d3-array.js","~/d3-collection/build/d3-collection.js","~/d3-interpolate/build/d3-interpolate.js","~/d3-color/build/d3-color.js","~/d3-format/build/d3-format.js","~/d3-time/build/d3-time.js","~/d3-time-format/build/d3-time-format.js","~/d3/build/d3.js","src/ui/ResponsiveComponents/ResponsiveFacets.ts","src/ui/Facet/Facet.ts","src/ui/Facet/FacetValues.ts","src/ui/Facet/FacetSearch.ts","src/ui/Facet/FacetValueElement.ts","src/ui/Facet/ValueElement.ts","src/ui/Facet/ValueElementRenderer.ts","src/ui/Facet/FacetValuesOrder.ts","src/ui/Facet/FacetSettings.ts","src/ui/Facet/FacetSort.ts","src/ui/Facet/FacetValuesList.ts","src/ui/Facet/FacetHeader.ts","src/ui/Facet/BreadcrumbValueElement.ts","src/ui/Facet/BreadcrumbValuesList.ts","src/ui/Facet/FacetSearchValuesList.ts","src/ui/Facet/OmniboxValueElement.ts","src/ui/Facet/OmniboxValuesList.ts","src/ui/Analytics/RecommendationAnalyticsClient.ts","src/ui/Base/CoveoJQuery.ts","src/TemplatesModules.ts","src/ui/Templates/TemplateHelpers.ts","src/ui/Templates/CoreHelpers.ts","src/ui/Icon/Icon.ts","src/ui/Quickview/Quickview.ts","src/ui/Quickview/DefaultQuickviewTemplate.ts","src/ui/Quickview/QuickviewDocument.ts","src/ui/ResultList/ResultList.ts","src/ui/Templates/DefaultRecommendationTemplate.ts","src/ui/ResponsiveComponents/ResponsiveDefaultResultTemplate.ts","src/ui/Aggregate/Aggregate.ts","src/ui/Querybox/Querybox.ts","src/ui/Querybox/QueryboxQueryParameters.ts","src/ui/SearchButton/SearchButton.ts","src/ui/Searchbox/Searchbox.ts","src/ui/Omnibox/Omnibox.ts","src/ui/Omnibox/FieldAddon.ts","src/ui/Omnibox/QueryExtensionAddon.ts","src/ui/Omnibox/RevealQuerySuggestAddon.ts","src/ui/Omnibox/OldOmniboxAddon.ts","src/ui/Breadcrumb/Breadcrumb.ts","src/ui/FacetRange/FacetRange.ts","src/ui/Pager/Pager.ts","src/ui/ResultsPerPage/ResultsPerPage.ts","src/ui/ResultLayout/ResultLayout.ts","src/ui/ResponsiveComponents/ResponsiveResultLayout.ts","src/ui/Excerpt/Excerpt.ts","src/ui/ResultLink/ResultLink.ts","src/ui/Thumbnail/Thumbnail.ts","src/ui/FieldTable/FieldTable.ts","src/ui/FieldTable/FieldValue.ts","src/ui/PrintableUri/PrintableUri.ts","src/ui/DidYouMean/DidYouMean.ts","src/ui/ErrorReport/ErrorReport.ts","src/ui/ExportToExcel/ExportToExcel.ts","src/ui/Folding/Folding.ts","src/ui/Sort/SortCriteria.ts","src/ui/HiddenQuery/HiddenQuery.ts","src/ui/HierarchicalFacet/HierarchicalFacet.ts","src/ui/HierarchicalFacet/HierarchicalFacetValuesList.ts","src/ui/HierarchicalFacet/HierarchicalFacetSearchValuesList.ts","src/ui/HierarchicalFacet/HierarchicalFacetSearchValueElement.ts","src/ui/HierarchicalFacet/HierarchicalFacetSearch.ts","src/ui/HierarchicalFacet/HierarchicalBreadcrumbValuesList.ts","src/ui/HierarchicalFacet/HierarchicalBreadcrumbValueElement.ts","src/ui/HierarchicalFacet/OmniboxHierarchicalValuesList.ts","src/ui/HierarchicalFacet/OmniboxHierarchicalValueElement.ts","src/ui/HierarchicalFacet/HierarchicalFacetValueElement.ts","src/ui/Matrix/Matrix.ts","src/ui/Matrix/Cell.ts","src/ui/Matrix/DefaultMatrixResultPreviewTemplate.ts","src/ui/YouTube/YouTubeThumbnail.ts","src/ui/ResultAttachments/ResultAttachments.ts","src/ui/ResultAttachments/DefaultResultAttachmentTemplate.ts","src/ui/ResultFolding/ResultFolding.ts","src/ui/ResultFolding/DefaultFoldingTemplate.ts","src/ui/FieldTable/Badge.ts","src/ui/ResultRating/ResultRating.ts","src/ui/PreferencesPanel/PreferencesPanel.ts","src/ui/ResultsFiltersPreferences/ResultsFiltersPreferences.ts","src/ui/PreferencesPanel/PreferencesPanelItem.ts","src/ui/QueryDuration/QueryDuration.ts","src/ui/QuerySummary/QuerySummary.ts","src/events/QuerySummaryEvents.ts","src/ui/Settings/Settings.ts","src/ui/ShareQuery/ShareQuery.ts","src/ui/Sort/Sort.ts","src/ui/Triggers/Triggers.ts","src/ui/Recommendation/RecommendationQuery.ts","src/ui/TemplateLoader/TemplateLoader.ts","src/ui/Misc/SuggestionForOmnibox.ts","src/ui/AnalyticsSuggestions/AnalyticsSuggestions.ts","src/ui/FieldSuggestions/FieldSuggestions.ts","src/ui/AuthenticationProvider/AuthenticationProvider.ts","src/ui/ResultTagging/ResultTagging.ts","src/ui/ResultsPreferences/ResultsPreferences.ts","src/ui/PipelineContext/PipelineContext.ts","src/ui/OmniboxResultList/OmniboxResultList.ts","src/ui/CurrentTab/CurrentTab.ts","src/ui/ImageResultList/ImageResultList.ts","src/ui/Base/CoveoUnderscore.ts","src/ui/AdvancedSearch/AdvancedSearch.ts","src/ui/AdvancedSearch/AdvancedSearchInputFactory.ts","src/ui/AdvancedSearch/KeywordsInput/AllKeywordsInput.ts","src/ui/AdvancedSearch/KeywordsInput/KeywordsInput.ts","src/ui/AdvancedSearch/Form/TextInput.ts","src/ui/AdvancedSearch/KeywordsInput/ExactKeywordsInput.ts","src/ui/AdvancedSearch/KeywordsInput/AnyKeywordsInput.ts","src/ui/AdvancedSearch/KeywordsInput/NoneKeywordsInput.ts","src/ui/AdvancedSearch/DateInput/AnytimeDateInput.ts","src/ui/AdvancedSearch/DateInput/DateInput.ts","src/ui/AdvancedSearch/Form/RadioButton.ts","src/ui/AdvancedSearch/DateInput/InTheLastDateInput.ts","src/ui/AdvancedSearch/Form/Dropdown.ts","src/ui/AdvancedSearch/Form/NumericSpinner.ts","src/ui/AdvancedSearch/DateInput/BetweenDateInput.ts","src/ui/AdvancedSearch/Form/DatePicker.ts","~/pikaday/pikaday.js","~/moment/moment.js","~/moment/locale ^/.*$","~/moment/locale/af.js","~/moment/locale/ar.js","~/moment/locale/ar-dz.js","~/moment/locale/ar-kw.js","~/moment/locale/ar-ly.js","~/moment/locale/ar-ma.js","~/moment/locale/ar-sa.js","~/moment/locale/ar-tn.js","~/moment/locale/az.js","~/moment/locale/be.js","~/moment/locale/bg.js","~/moment/locale/bm.js","~/moment/locale/bn.js","~/moment/locale/bo.js","~/moment/locale/br.js","~/moment/locale/bs.js","~/moment/locale/ca.js","~/moment/locale/cs.js","~/moment/locale/cv.js","~/moment/locale/cy.js","~/moment/locale/da.js","~/moment/locale/de.js","~/moment/locale/de-at.js","~/moment/locale/de-ch.js","~/moment/locale/dv.js","~/moment/locale/el.js","~/moment/locale/en-au.js","~/moment/locale/en-ca.js","~/moment/locale/en-gb.js","~/moment/locale/en-ie.js","~/moment/locale/en-il.js","~/moment/locale/en-nz.js","~/moment/locale/eo.js","~/moment/locale/es.js","~/moment/locale/es-do.js","~/moment/locale/es-us.js","~/moment/locale/et.js","~/moment/locale/eu.js","~/moment/locale/fa.js","~/moment/locale/fi.js","~/moment/locale/fo.js","~/moment/locale/fr.js","~/moment/locale/fr-ca.js","~/moment/locale/fr-ch.js","~/moment/locale/fy.js","~/moment/locale/gd.js","~/moment/locale/gl.js","~/moment/locale/gom-latn.js","~/moment/locale/gu.js","~/moment/locale/he.js","~/moment/locale/hi.js","~/moment/locale/hr.js","~/moment/locale/hu.js","~/moment/locale/hy-am.js","~/moment/locale/id.js","~/moment/locale/is.js","~/moment/locale/it.js","~/moment/locale/ja.js","~/moment/locale/jv.js","~/moment/locale/ka.js","~/moment/locale/kk.js","~/moment/locale/km.js","~/moment/locale/kn.js","~/moment/locale/ko.js","~/moment/locale/ky.js","~/moment/locale/lb.js","~/moment/locale/lo.js","~/moment/locale/lt.js","~/moment/locale/lv.js","~/moment/locale/me.js","~/moment/locale/mi.js","~/moment/locale/mk.js","~/moment/locale/ml.js","~/moment/locale/mn.js","~/moment/locale/mr.js","~/moment/locale/ms.js","~/moment/locale/ms-my.js","~/moment/locale/mt.js","~/moment/locale/my.js","~/moment/locale/nb.js","~/moment/locale/ne.js","~/moment/locale/nl.js","~/moment/locale/nl-be.js","~/moment/locale/nn.js","~/moment/locale/pa-in.js","~/moment/locale/pl.js","~/moment/locale/pt.js","~/moment/locale/pt-br.js","~/moment/locale/ro.js","~/moment/locale/ru.js","~/moment/locale/sd.js","~/moment/locale/se.js","~/moment/locale/si.js","~/moment/locale/sk.js","~/moment/locale/sl.js","~/moment/locale/sq.js","~/moment/locale/sr.js","~/moment/locale/sr-cyrl.js","~/moment/locale/ss.js","~/moment/locale/sv.js","~/moment/locale/sw.js","~/moment/locale/ta.js","~/moment/locale/te.js","~/moment/locale/tet.js","~/moment/locale/tg.js","~/moment/locale/th.js","~/moment/locale/tl-ph.js","~/moment/locale/tlh.js","~/moment/locale/tr.js","~/moment/locale/tzl.js","~/moment/locale/tzm.js","~/moment/locale/tzm-latn.js","~/moment/locale/ug-cn.js","~/moment/locale/uk.js","~/moment/locale/ur.js","~/moment/locale/uz.js","~/moment/locale/uz-latn.js","~/moment/locale/vi.js","~/moment/locale/x-pseudo.js","~/moment/locale/yo.js","~/moment/locale/zh-cn.js","~/moment/locale/zh-hk.js","~/moment/locale/zh-tw.js","src/ui/AdvancedSearch/DocumentInput/SimpleFieldInput.ts","src/ui/AdvancedSearch/DocumentInput/DocumentInput.ts","src/ui/AdvancedSearch/DocumentInput/AdvancedFieldInput.ts","src/ui/AdvancedSearch/DocumentInput/SizeInput.ts","src/ui/SearchAlerts/FollowItem.ts","src/rest/Subscription.ts","src/ui/SearchAlerts/SearchAlerts.ts","src/ui/SearchAlerts/SearchAlertsMessage.ts","src/ui/Text/Text.ts","src/ui/Folding/FoldingForThread.ts","src/ui/ChatterLikedBy/ChatterLikedBy.ts","src/utils/ChatterUtils.ts","src/ui/ChatterPostAttachment/ChatterPostAttachment.ts","src/ui/ChatterPostedBy/ChatterPostedBy.ts","src/ui/ChatterTopic/ChatterTopic.ts","src/ui/Logo/Logo.ts","src/ui/Backdrop/Backdrop.ts","src/ui/CardOverlay/CardOverlay.ts","src/events/CardOverlayEvents.ts","src/ui/CardActionBar/CardActionBar.ts","src/SwapVar.ts"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","DOMEval","code","node","doc","i","val","script","createElement","text","preservedScriptAttributes","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","obj","class2type","toString","call","isArrayLike","length","type","isFunction","isWindow","nodeName","elem","name","toLowerCase","winnow","elements","qualifier","not","jQuery","grep","nodeType","indexOf","filter","sibling","cur","dir","createOptions","options","object","each","match","rnothtmlwhite","_","flag","Identity","v","Thrower","ex","adoptValue","value","resolve","reject","noValue","method","promise","done","fail","then","apply","undefined","slice","completed","removeEventListener","ready","fcamelCase","all","letter","toUpperCase","camelCase","string","replace","rmsPrefix","rdashAlpha","Data","expando","uid","getData","data","rbrace","test","JSON","parse","dataAttr","key","rmultiDash","e","dataUser","set","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","css","initial","unit","cssNumber","initialInUnit","rcssNum","exec","style","start","end","getDefaultDisplay","temp","ownerDocument","display","defaultDisplayMap","body","showHide","show","values","index","dataPriv","get","isHiddenWithinTree","getAll","context","tag","ret","getElementsByTagName","querySelectorAll","merge","setGlobalEval","elems","refElements","l","buildFragment","scripts","selection","ignored","tmp","wrap","attached","j","fragment","createDocumentFragment","nodes","rhtml","rtagName","wrapMap","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","push","createTextNode","inArray","isAttached","rscriptType","returnTrue","returnFalse","expectSync","safeActiveElement","activeElement","err","on","types","selector","fn","one","origFn","event","off","arguments","guid","add","leverageNative","el","namespace","handler","notAsync","result","saved","isTrigger","special","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","extend","shift","Event","prototype","manipulationTarget","content","children","disableScript","restoreScript","removeAttribute","cloneCopyEvent","src","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","fixInput","rcheckableType","checked","defaultValue","domManip","collection","args","callback","concat","first","hasScripts","iNoClone","valueIsFunction","support","checkClone","rchecked","self","eq","html","map","clone","contains","_evalUrl","noModule","nonce","rcleanScript","remove","keepData","cleanData","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","pixelBoxStyles","rnumnonpx","rboxStyle","addGetHookIf","conditionFn","hookFn","vendorPropName","capName","cssPrefixes","emptyStyle","finalPropName","final","cssProps","vendorProps","setPositiveNumber","subtract","matches","Math","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","cssExpand","ceil","getWidthOrHeight","boxSizingNeeded","boxSizingReliable","valueIsBorderBox","offsetProp","parseFloat","getClientRects","Tween","easing","init","schedule","inProgress","hidden","requestAnimationFrame","setTimeout","fx","interval","tick","createFxNow","fxNow","Date","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","Animation","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","propTween","restoreDisplay","isBox","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","rfxtypes","isEmptyObject","overflow","overflowX","overflowY","propFilter","specialEasing","Array","isArray","cssHooks","expand","properties","stopped","prefilters","deferred","Deferred","currentTime","remaining","startTime","duration","percent","tweens","run","notifyWith","resolveWith","originalProperties","originalOptions","stop","gotoEnd","rejectWith","bind","progress","complete","timer","stripAndCollapse","tokens","join","getClass","classesToArray","buildParams","prefix","traditional","rbracket","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","contents","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","prev","responseFields","dataFilter","split","throws","state","error","arr","getProto","Object","getPrototypeOf","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","version","rtrim","jquery","constructor","toArray","num","pushStack","prevObject","last","len","sort","splice","copy","copyIsArray","isPlainObject","random","isReady","msg","noop","proto","Ctor","globalEval","trim","makeArray","results","second","invert","callbackInverse","callbackExpect","arg","Symbol","iterator","Sizzle","seed","m","nid","groups","newSelector","newContext","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","id","getElementsByClassName","qsa","nonnativeSelectorCache","rbuggyQSA","rdescend","rcssescape","fcssescape","tokenize","toSelector","rsibling","testContext","qsaError","select","createCache","cache","keys","Expr","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","a","b","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","disabled","isDisabled","inDisabledFieldset","createPositionalPseudo","argument","matchIndexes","setFilters","addCombinator","matcher","combinator","base","skip","next","checkNonElements","doneName","xml","oldCache","uniqueCache","outerCache","newCache","dirruns","uniqueID","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","find","dirrunsUnique","pop","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","ch","asCodePoint","charCodeAt","unloadHandler","els","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","attr","specified","escape","sel","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","parent","useCache","pseudo","idx","matched","has","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","reverse","Callbacks","firing","memory","fired","locked","firingIndex","once","stopOnFalse","disable","lock","fireWith","tuples","catch","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","depth","that","mightThrow","maxDepth","TypeError","process","exceptionHook","stackTrace","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","readyWait","wait","readyState","doScroll","chainable","emptyGet","raw","bulk","acceptData","owner","defineProperty","configurable","removeData","_data","_removeData","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","composed","attachShadow","getRootNode","swap","old","hide","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","div","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","handleObjIn","eventHandle","t","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","blur","mouseenter","mouseleave","pointerenter","pointerleave","related","rxhtmlTag","rnoInnerhtml","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","opener","getComputedStyle","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","suffix","expanded","parts","propHooks","eased","pos","step","scrollTop","scrollLeft","linear","p","swing","cos","PI","rrun","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","removeProp","propFix","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rCRLF","rsubmitterTypes","rsubmittable","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","allTypes","originAnchor","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","urlAnchor","uncached","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","overrideMimeType","abort","finalText","crossDomain","host","hasContent","beforeSend","send","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","define","amd","_jQuery","_$","$","noConflict","modules","__webpack_require__","moduleId","installedModules","loaded","c","__export","Function","polyfill","CoreHelpers_1","CoreHelpers","SearchInterface_1","SearchInterface","StandaloneSearchInterface","Aggregate_1","Aggregate","Analytics_1","Analytics","PendingSearchEvent_1","PendingSearchEvent","PendingSearchAsYouTypeSearchEvent_1","PendingSearchAsYouTypeSearchEvent","AnalyticsActionListMeta_1","analyticsActionCauseList","NoopAnalyticsClient_1","NoopAnalyticsClient","LiveAnalyticsClient_1","LiveAnalyticsClient","RecommendationAnalyticsClient_1","RecommendationAnalyticsClient","MultiAnalyticsClient_1","MultiAnalyticsClient","Querybox_1","Querybox","SearchButton_1","SearchButton","Searchbox_1","Searchbox","Breadcrumb_1","Breadcrumb","Facet_1","Facet","FacetHeader_1","FacetHeader","FacetSearchValuesList_1","FacetSearchValuesList","FacetSettings_1","FacetSettings","FacetSort_1","FacetSort","FacetUtils_1","FacetUtils","FacetValueElement_1","FacetValueElement","FacetValues_1","FacetValue","FacetValues","ValueElementRenderer_1","ValueElementRenderer","FacetSearch_1","FacetSearch","FacetSearchParameters_1","FacetSearchParameters","Slider_1","Slider","FacetSlider_1","FacetSlider","FacetRange_1","FacetRange","Pager_1","Pager","ResultsPerPage_1","ResultsPerPage","ResultList_1","ResultList","ResultLayout_1","ResultLayout","DefaultRecommendationTemplate_1","DefaultRecommendationTemplate","Excerpt_1","Excerpt","ResultLink_1","ResultLink","Icon_1","Icon","Thumbnail_1","Thumbnail","PrintableUri_1","PrintableUri","Quickview_1","Quickview","DidYouMean_1","DidYouMean","ErrorReport_1","ErrorReport","ExportToExcel_1","ExportToExcel","Folding_1","Folding","HiddenQuery_1","HiddenQuery","HierarchicalFacet_1","HierarchicalFacet","Matrix_1","Matrix","QuickviewDocument_1","QuickviewDocument","YouTubeThumbnail_1","YouTubeThumbnail","ResultAttachments_1","ResultAttachments","ResultFolding_1","ResultFolding","FieldTable_1","FieldTable","FieldValue_1","FieldValue","Badge_1","Badge","ResultRating_1","ResultRating","PreferencesPanel_1","PreferencesPanel","ResultsFiltersPreferences_1","ResultsFiltersPreferences","Tab_1","Tab","Omnibox_1","Omnibox","QueryDuration_1","QueryDuration","QuerySummary_1","QuerySummary","Debug_1","Debug","Settings_1","Settings","ShareQuery_1","ShareQuery","Sort_1","Sort","SortCriteria_1","SortCriteria","Triggers_1","Triggers","Recommendation_1","Recommendation","RecommendationQuery_1","RecommendationQuery","TemplateLoader_1","TemplateLoader","Template_1","Template","SuggestionForOmnibox_1","SuggestionForOmnibox","AnalyticsSuggestions_1","AnalyticsSuggestions","FieldSuggestions_1","FieldSuggestions","AuthenticationProvider_1","AuthenticationProvider","ResultTagging_1","ResultTagging","ResultsPreferences_1","ResultsPreferences","PipelineContext_1","PipelineContext","OmniboxResultList_1","OmniboxResultList","CurrentTab_1","CurrentTab","QueryboxQueryParameters_1","QueryboxQueryParameters","ImageResultList_1","ImageResultList","CoveoJQuery_1","jQueryInstance","CoveoUnderscore_1","underscoreInstance","AdvancedSearch_1","AdvancedSearch","NumericSpinner_1","NumericSpinner","DatePicker_1","DatePicker","Dropdown_1","Dropdown","TextInput_1","TextInput","RadioButton_1","RadioButton","FollowItem_1","FollowItem","SearchAlerts_1","SearchAlerts","SearchAlertsMessage_1","SearchAlertsMessage","Text_1","Text","FoldingForThread_1","FoldingForThread","ChatterLikedBy_1","ChatterLikedBy","ChatterPostAttachment_1","ChatterPostAttachment","ChatterPostedBy_1","ChatterPostedBy","ChatterTopic_1","ChatterTopic","ChatterUtils_1","ChatterUtils","Logo_1","Logo","Backdrop_1","Backdrop","CardOverlay_1","CardOverlay","CardActionBar_1","CardActionBar","HashUtils_1","HashUtils","DeviceUtils_1","DeviceUtils","ColorUtils_1","ColorUtils","CookieUtils_1","Cookie","CurrencyUtils_1","CurrencyUtils","DateUtils_1","DateUtils","SwapVar_1","swapVar","__WEBPACK_AMD_DEFINE_RESULT__","lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","P","Promise","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","Item","array","title","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","webpackPolyfill","deprecate","paths","PromisesShim_1","shim","CustomEventPolyfill_1","customEventPolyfill","Version_1","SearchEndpoint_1","SearchEndpoint","DefaultLanguage_1","defaultLanguage","DefaultLanguage_2","setLanguageAfterPageLoaded","doShim","promiseInstance","rethrowError","globalPromise","localPromise","CustomEvent","customEvent","createEvent","initCustomEvent","lib","product","supportedApiVersion","path","descriptor","originalMethod","nbParams","_i","uri","buildBaseUri","queryString","requestData","errorsAsSuccess","alertsPath","buildSearchAlertsUri","requestDataType","met","resp","accessTokenInUrl","tokenKey","buildAccessToken","__decorate","decorators","desc","d","r","getOwnPropertyDescriptor","Reflect","decorate","EndpointCaller_1","Logger_1","Assert_1","AjaxError_1","MissingAuthenticationError_1","QueryUtils_1","QueryError_1","Utils_1","DefaultSearchEndpointOptions","queryStringArguments","anonymous","isGuestUser","_this","Assert","exists","restUri","defaultOptions","Utils","isNonEmptyString","accessToken","isDebugArgumentPresent","onUnload","handleUnload","logger","Logger","createEndpointCaller","configureSampleEndpoint","otherOptions","isUseLocalArgumentPresent","endpoints","searchAlertsUri","configureSampleEndpointV2","optionsOPtions","organizationID","viewAllContent","configureCloudEndpoint","organization","organizationId","merged","mergeConfigOptions","removeUndefinedConfigOption","configureCloudV2Endpoint","configureOnPremiseEndpoint","config","setRequestModifier","requestModifier","caller","getBaseUri","getBaseAlertsUri","getAuthenticationProviderUri","provider","returnUri","callOptions","callParams","buildBaseQueryString","isJsonp","useJsonp","search","query","info","performOneCall","apiVersion","isNullOrEmptyString","searchUid","QueryUtils","createGuid","setIndexAndUidOnQueryResults","pipeline","splitTestRun","setTermsToHighlightOnQueryResults","getExportToExcelLink","numberOfResults","buildCompleteQueryString","getRawDataStream","documentUniqueId","dataStreamType","buildViewAsHtmlQueryString","getViewAsDatastreamUri","documentUniqueID","queryObject","getDocument","getDocumentText","getDocumentHtml","q","getViewAsHtmlUri","uniq","batchFieldValues","request","listFieldValues","listFields","fields","extensions","rateDocument","ratingRequest","tagDocument","taggingRequest","getRevealQuerySuggest","follow","listSubscriptions","page","currentListSubscriptions","updateSubscription","subscription","deleteSubscription","logError","sentryLog","nuke","EndpointCaller","isRedirecting","isString","removeTrailingSlash","name_1","authentication","fieldsToInclude","field","uniqueId","requestedOutputSize","autoRenewToken","clientDuration","canRenewAccessToken","isAccessTokenExpiredStatus","renewAccessToken","handleErrorResponse","errorResponse","isMissingAuthenticationProviderStatus","MissingAuthenticationError","QueryError","AjaxError","hasTrailingSlash","substr","charAt","XMLHttpRequestStatus","TimeSpanUtils_1","JQueryutils_1","OPENED","HEADERS_RECEIVED","DONE","requestInfo","begun","buildRequestHeaders","trace","urlObject","parseURL","isLocalHost","hostname","currentPort","port","isSamePort","isCrossOrigin","callUsingAjaxJsonP","isCORSSupported","callUsingXMLHttpRequest","isXDomainRequestSupported","callUsingXDomainRequest","xmlHttpRequest","getXmlHttpRequest","sent","ev","isSuccessHttpStatus","getDeviceName","tryParseResponseText","handleSuccessfulResponseThatMightBeAnError","handleError","withCredentials","headerValue","headerKey","stringify","convertJsonToFormBody","convertJsonToQueryString","combineUrlAndQueryString","xDomainRequest","XDomainRequest","onprogress","JQueryUtils","getJQuery","JSONP_ERROR_TIMEOUT","newXmlHttpRequest","isObject","isErrorResponseBody","handleSuccess","querySuccess","TimeSpan","fromDates","getMilliseconds","queryError","questionMark","btoa","log","debug","clear","dirxml","group","groupCollapsed","groupEnd","msIsIndependentlyComposed","element","profile","profileEnd","timeEnd","stuff","level","TRACE","DEBUG","INFO","WARN","ERROR","executionTime","enable","NOTHING","__extends","extendStatics","setPrototypeOf","__proto__","__","create","failureHandler","condition","isUndefined","isNotUndefined","isNull","isNotNull","isNullOrUndefined","doesNotExists","stringStartsWith","str","isNumber","isLargerThan","expected","actual","isLargerOrEqualsThan","isSmallerThan","isSmallerOrEqualsThan","PreconditionFailedException","_super","isCoveoFieldRegex","toNotNullString","anyTypeToString","isEmptyString","startWith","isNonEmptyArray","isEmptyArray","isHtmlElement","HTMLElement","parseIntIfNotUndefined","parseFloatIfNotUndefined","decimals","pow","parseBooleanIfNotUndefined","encodeHTMLEntities","rawStr","decodeHTMLEntities","rawString","dec","arrayEqual","array1","array2","sameOrder","isEqual","arrays_1","difference","objectEqual","obj1","obj2","isCoveoField","escapeRegexCharacter","getCaseInsensitiveProperty","lowerCaseName_1","matchingKey","getFieldValue","throttle","previous","later","leading","getTime","trailing","extendDeep","toReturn","getQueryStringValue","isValidUrl","regexp","debounce","stackTraceTimeout","readCookie","nameEQ","ca","cookie","substring","toDashCase","camelCased","g","parseXml","ActiveXObject","xmlDoc","loadXML","copyObject","copyObjectAttributes","__WEBPACK_AMD_DEFINE_ARRAY__","createReduce","iteratee","memo","currentKey","optimizeCb","createPredicateIndexFinder","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","min","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","ObjProto","previousUnderscore","ArrayProto","FuncProto","nativeIsArray","nativeKeys","nativeBind","nativeCreate","_wrapped","VERSION","argCount","other","accumulator","identity","property","Infinity","createAssigner","keysFunc","undefinedOnly","baseCreate","MAX_ARRAY_INDEX","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","findIndex","findKey","negate","every","some","any","includes","include","fromIndex","guard","invoke","isFunc","pluck","where","findWhere","lastComputed","shuffle","rand","shuffled","sample","sortBy","criteria","behavior","groupBy","indexBy","countBy","size","partition","pass","take","rest","tail","drop","compact","flatten","shallow","strict","startIndex","output","isArguments","without","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","mid","floor","lastIndexOf","range","executeBound","sourceFunc","boundFunc","callingContext","bound","partial","boundArgs","bindAll","memoize","hasher","address","immediate","timestamp","callNow","wrapper","compose","times","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","defaults","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEmpty","isElement","Int8Array","constant","propertyOf","accum","escapeMap","&","<","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","unescape","fallback","idCounter","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","oldSettings","variable","render","chain","instance","_chain","mixin","valueOf","toJSON","isMilliseconds","milliseconds","getSeconds","getMinutes","getHours","getDays","getWeeks","getHHMMSS","hoursString","minutesString","secondsString","hours","minutes","seconds","hhmmss","from","ResponsiveComponents_1","mobile","navigator","userAgent","isAndroid","isIos","deviceName","isIE8or9","myNav","isMobileDevice","isSmallScreenWidth","ResponsiveComponents","MEDIUM_SCREEN_WIDTH","SMALL_SCREEN_WIDTH","windoh","setSmallScreenWidth","getMediumScreenWidth","smallScreenWidth","setMediumScreenWidth","getSmallScreenWidth","mediumScreenWidth","clientWidth","isMediumScreenWidth","isLargeScreenWidth","isInstanceOfJQuery","jq","isInstanceOfJqueryEvent","isMissingAuthentication","crypto","generateWithCrypto","generateWithRandom","buf","Uint16Array","getRandomValues","S4","setStateObjectOnQueryResults","setPropertyOnResults","setStateObjectOnQueryResult","setPropertyOnResult","setSearchInterfaceObjectOnQueryResult","searchInterface","queryUid","firstResult","termsToHighlight","phrasesToHighlight","splitFlags","flags","delimiter","isAttachment","containsAttachment","hasHTMLVersion","hasThumbnail","hasExcerpt","excerpt","getAuthor","getUriHash","getObjectType","getCollection","getSource","getLanguage","getPermanentId","fieldValue","fieldUsed","permanentId","quoteAndEscapeIfNeeded","isAtomicString","isRangeString","isRangeWithoutOuterBoundsString","quoteAndEscape","escapeString","buildFieldExpression","buildFieldNotEqualExpression","mergeQueryString","queryStringPosition","mergePath","urlSplit","afterOneLoop","childResults","parentResult","getUrlParameter","decodeURIComponent","isStratusAgnosticField","fieldToVerify","fieldToMatch","checkForSystem","matchFieldToVerify","matchFieldToMatch","queryExecutionReport","executionReport","ModalBox","MagicBox","LocaleString","Coveo","o","fullscreen","titleClose","validation","parentElement","querySelector","u","OK","APPLY","YES","NO","CANCEL","overlayClose","modalBox","overlay","close","BUTTON","expression","subResults","findParent","findAll","resultAt","getExpect","getBestExpect","getHumanReadableExpect","getHumanReadable","toHtmlElement","clean","ExpressionConstant","Result","ExpressionEndOfInput","EndOfInputResult","failAttempt","OptionResult","RefResult","grammar","ExpressionFunction","ExpressionList","ExpressionOptions","ref","occurrence","getExpression","parseOnce","parseMany","ExpressionRef","ExpressionRegExp","expressions","addExpressions","addExpression","buildExpression","buildStringExpression","isRegExp","stringMatch","spliter","Number","Grammar","onchange","magicBox","justPressedTab","underlay","highlightContainer","ghostTextContainer","$$","spellcheck","setupHandler","updateInput","setCursor","getValue","updateHighlight","updateWordCompletion","wordCompletion","updateScroll","scrollWidth","updateScrollDefer","setResult","setWordCompletion","createTextRange","move","selectionStart","setSelectionRange","getCursor","onblur","onfocus","onkeydown","keydown","onkeyup","keyup","onclick","onchangecursor","oncut","onInputChange","onpaste","hasSuggestions","tabPress","ontabpress","showSuggestion","getWordCompletion","InputManager","selectableClass","selectedClass","handleMouseOver","handleMouseOut","addSelectedClass","moveDown","returnMoved","moveUp","mergeSuggestions","pendingSuggestion","updateSuggestions","dom","separator","onSelect","suggestion","SuggestionsManager","highlightText","innerText","nodeListToArray","tagName","traverseAncestorForClass","findClass","findId","CLASS_NAME_REGEX","dispatchEvent","ONLY_WHITE_SPACE_REGEX","isDescendant","Dom","basicExpressions","grammars","Start","Expressions","ExpressionsList","Expression","BasicExpression","OptionalSpaces","Spaces","Empty","ExpressionsGrammar","Grammars","notWordStart","notInWord","Basic","DoubleQuoted","NotDoubleQuote","SingleQuoted","NotSingleQuote","Word","SubExpression","DateYear","DateMonth","DateDay","DateRange","DateRelative","DateRelativeTerm","DateRelativeNegative","DateRelativeNegativeRef","Field","FieldQuery","FieldQueryOperation","FieldQueryValue","FieldQueryNumeric","FieldSimpleQuery","FieldName","FieldOperator","FieldOperatorNumeric","FieldValueNumeric","FieldValueString","FieldValueList","FieldValueStringList","FieldValueSeparator","FieldValueNotQuoted","NumberRange","QueryExtension","QueryExtensionName","QueryExtensionArguments","QueryExtensionArgumentList","QueryExtensionArgument","QueryExtensionArgumentName","QueryExtensionArgumentValue","NestedQuery","NestedField","Complete","lastSuggestions","inline","displayedResult","clearDom","inputManager","setText","onselect","getFirstSuggestionText","suggestionsManager","selectableSuggestionClass","selectedSuggestionClass","suggestionTimeout","getResult","getDisplayedResult","resultAtCursor","clearSuggestion","onsubmit","onmove","focusOnSuggestion","getSuggestions","updateSuggestion","onsuggestions","onclear","Instance","f","h","y","L","language","userLanguage","T","M","O","X","toLocaleString","locales","dict","en","Globalize","culture","obj3","attrname","Unknown","And","Authenticating","Clear","CompleteQuery","Exclude","EnterTag","Next","Last","Link","Or","Previous","QueryDidntMatchAnyDocuments","QueryException","Me","Remove","Search","SearchFor","Preferences","LinkOpeningSettings","Reauthenticate","ResultsFilteringExpression","FiltersInYourPreferences","Create","SearchIn","Seconds","ShowingResultsOf","SwitchTo","Unexclude","ClearAllFilters","SkipLogin","LoginInProgress","Login","GetStarted","More","NMore","Less","Score","ScoreDescription","Occurrences","OccurrencesDescription","Label","Of","LabelDescription","Value","ValueDescription","AlphaAscending","AlphaDescending","ChiSquare","Nosort","NosortDescription","RelativeFrequency","RelativeFrequencyDescription","DateDistribution","Custom","CustomDescription","ComputedField","Ascending","Descending","noResultFor","autoCorrectedQueryTo","didYouMean","SuggestedResults","SuggestedQueries","MostRelevantItems","AllItems","ShowLess","ShowMore","HideFacet","ShowFacet","AndOthers","Others","MostRelevantPosts","CompleteThread","ShowCompleteThread","ShowOnlyTopMatchingPosts","MostRelevantReplies","AllConversation","ShowAllConversation","ShowAllReplies","ShowOnlyMostRelevantReplies","Close","Open","OpenInOutlookWhenPossible","AlwaysOpenInNewWindow","NoQuickview","OopsError","ProblemPersists","GoBack","Reset","Retry","MoreInfo","Username","Password","PostedBy","CannotConnect","BadUserPass","PleaseEnterYourCredentials","PleaseEnterYourSearchPage","Collapse","Collapsable","Expand","Today","Yesterday","Tomorrow","Duration","IndexDuration","ProxyDuration","ClientDuration","Unavailable","Reply","ReplyAll","Forward","From","Caption","Tabs","EnterExpressionName","EnterExpressionToFilterWith","SelectTab","SelectAll","PageUrl","ErrorSavingToDevice","ErrorReadingFromDevice","AppIntro","TryDemo","ContactUs","NewToCoveo","LetUsHelpGetStarted","LikesThis","CannotConnectSearchPage","AreYouSureDeleteFilter","OnlineHelp","Done","SaveFacetState","ClearFacetState","DisplayingTheOnlyMessage","NoNetworkConnection","UnknownConnection","EthernetConnection","WiFi","CELL","CELL_2G","CELL_3G","CELL_4G","Relevance","Amount","QueryExceptionNoException","QueryExceptionInvalidSyntax","QueryExceptionInvalidCustomField","QueryExceptionInvalidDate","QueryExceptionInvalidExactPhrase","QueryExceptionInvalidDateOp","QueryExceptionInvalidNear","QueryExceptionInvalidWeightedNear","QueryExceptionInvalidTerm","QueryExceptionTooManyTerms","QueryExceptionWildcardTooGeneral","QueryExceptionInvalidSortField","QueryExceptionInvalidSmallStringOp","QueryExceptionRequestedResultsMax","QueryExceptionAggregatedMirrorDead","QueryExceptionAggregatedMirrorQueryTimeOut","QueryExceptionAggregatedMirrorInvalidBuildNumber","QueryExceptionAggregatedMirrorCannotConnect","QueryExceptionNotEnoughLeadingCharsWildcard","QueryExceptionSecurityInverterNotFound","QueryExceptionSecurityInverterAccessDenied","QueryExceptionAggregatedMirrorCannotImpersonate","QueryExceptionUnexpected","QueryExceptionAccessDenied","QueryExceptionSuperUserTokenInvalid","QueryExceptionSuperUserTokenExpired","QueryExceptionLicenseQueriesExpired","QueryExceptionLicenseSuperUserTokenNotSupported","QueryExceptionInvalidSession","QueryExceptionInvalidDocument","QueryExceptionSearchDisabled","FileType","ShowAttachment","OnFeed","Author","NoTitle","CurrentSelections","AllContent","CancelLastAction","SearchTips","CheckSpelling","TryUsingFewerKeywords","SelectFewerFilters","Document","Time","StartDate","StartTime","DurationTitle","UserQuery","ShowUserActions","NoData","EventType","GoToFullSearch","GoToEdition","RemoveContext","BoxAttachToCase","AttachToCase","Attach","Attached","Detach","Details","AdditionalFilters","SelectNonContextualSearch","CopyPasteToSupport","FollowQueryDescription","SearchAlerts_Panel","SearchAlerts_PanelDescription","SearchAlerts_PanelNoSearchAlerts","SearchAlerts_Fail","SearchAlerts_Type","SearchAlerts_Content","SearchAlerts_Actions","EmptyQuery","SearchAlerts_Type_followQuery","SearchAlerts_Type_followDocument","SearchAlerts_unFollowing","SearchAlerts_follow","SearchAlerts_followed","SearchAlerts_followQuery","Subscription_StopFollowingQuery","SearchAlerts_Frequency","SubscriptionsManageSubscriptions","SubscriptionsMessageFollowQuery","SubscriptionsMessageFollow","Expiration","Monthly","Daily","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","NextDay","LastDay","StartTypingCaseForSuggestions","ExportToExcelDescription","CaseCreationNoResults","SortBy","BoxCreateArticle","Facets","Keywords","AllTheseWords","ExactPhrase","AnyOfTheseWords","NoneOfTheseWords","Anytime","InTheLast","Days","Months","Between","Language","Size","AtLeast","AtMost","Contains","DoesNotContain","Matches","Bytes","card","table","ResultLinks","EnableQuerySyntax","On","Off","Automatic","objecttype_people","objecttype_message","objecttype_feed","objecttype_thread","objecttype_file","objecttype_board","objecttype_category","objecttype_account","objecttype_annotation","objecttype_campaign","objecttype_case","objecttype_contentversion","objecttype_contact","objecttype_contract","objecttype_event","objecttype_email","objecttype_goal","objecttype_incident","objecttype_invoice","objecttype_lead","objecttype_list","objecttype_solution","objecttype_task","objecttype_user","objecttype_attachment","objecttype_casecomment","objecttype_opportunity","objecttype_opportunityproduct","objecttype_feeditem","objecttype_feedcomment","objecttype_note","objecttype_product","objecttype_partner","objecttype_queueitem","objecttype_quote","objecttype_salesliterature","objecttype_salesorder","objecttype_service","objecttype_socialprofile","objecttype_kbdocumentation","objecttype_kbtechnicalarticle","objecttype_kbsolution","objecttype_kbknowledgearticle","objecttype_kbattachment","objecttype_kbarticle","objecttype_kbarticlecomment","objecttype_knowledgearticle","filetype_box user","filetype_html","filetype_wiki","filetype_webscraperwebpage","filetype_image","filetype_folder","filetype_txt","filetype_zip","filetype_olefile","filetype_gmailmessage","filetype_pdf","filetype_swf","filetype_xml","filetype_vsd","filetype_svg","filetype_svm","filetype_rssitem","filetype_doc","filetype_docx","filetype_xls","filetype_ppt","filetype_video","filetype_youtube","filetype_saleforceitem","filetype_dynamicscrmitem","filetype_salesforceitem","filetype_odt","filetype_cfpage","filetype_cfcomment","filetype_cfspace","filetype_cfblogentry","filetype_confluencespace","filetype_exchangemessage","filetype_exchangeappointment","filetype_exchangenote","filetype_exchangetask","filetype_exchangeperson","filetype_activedirperson","filetype_exchangeactivity","filetype_exchangecalendarmessage","filetype_exchangedocument","filetype_exchangedsn","filetype_exchangefreebusy","filetype_exchangegroup","filetype_exchangerssfeed","filetype_exchangejunkmessage","filetype_exchangeofficecom","filetype_lithiummessage","filetype_lithiumthread","filetype_lithiumboard","filetype_lithiumcategory","filetype_lithiumcommunity","filetype_spportal","filetype_spsite","filetype_spuserprofile","filetype_sparea","filetype_spannouncement","filetype_spannouncementlist","filetype_spcontact","filetype_spcontactlist","filetype_spcustomlist","filetype_spdiscussionboard","filetype_spdiscussionboardlist","filetype_spdocumentlibrarylist","filetype_spevent","filetype_speventlist","filetype_spformlibrarylist","filetype_spissue","filetype_spissuelist","filetype_splink","filetype_splinklist","filetype_sppicturelibrarylist","filetype_spsurvey","filetype_spsurveylist","filetype_sptask","filetype_sptasklist","filetype_spagenda","filetype_spagendalist","filetype_spattendee","filetype_spattendeelist","filetype_spcustomgridlist","filetype_spdecision","filetype_spdecisionlist","filetype_spobjective","filetype_spobjectivelist","filetype_sptextbox","filetype_sptextboxlist","filetype_spthingstobring","filetype_spthingstobringlist","filetype_sparealisting","filetype_spmeetingserie","filetype_spmeetingserielist","filetype_spsitedirectory","filetype_spsitedirectorylist","filetype_spdatasource","filetype_spdatasourcelist","filetype_splisttemplatecataloglist","filetype_spwebpartcataloglist","filetype_spwebtemplatecataloglist","filetype_spworkspacepagelist","filetype_spunknownlist","filetype_spadministratortask","filetype_spadministratortasklist","filetype_spareadocumentlibrarylist","filetype_spblogcategory","filetype_spblogcategorylist","filetype_spblogcomment","filetype_spblogcommentlist","filetype_spblogpost","filetype_spblogpostlist","filetype_spdataconnectionlibrarylist","filetype_spdistributiongroup","filetype_spdistributiongrouplist","filetype_spipfslist","filetype_spkeyperformanceindicator","filetype_spkeyperformanceindicatorlist","filetype_splanguagesandtranslator","filetype_splanguagesandtranslatorlist","filetype_spmasterpagescataloglist","filetype_spnocodeworkflowlibrarylist","filetype_spprojecttask","filetype_spprojecttasklist","filetype_sppublishingpageslibrarylist","filetype_spreportdocumentlibrarylist","filetype_spreportlibrarylist","filetype_spslidelibrarylist","filetype_sptab","filetype_sptablist","filetype_sptranslationmanagementlibrarylist","filetype_spuserinformation","filetype_spuserinformationlist","filetype_spwikipagelibrarylist","filetype_spworkflowhistory","filetype_spworkflowhistorylist","filetype_spworkflowprocess","filetype_spworkflowprocesslist","filetype_sppublishingimageslibrarylist","filetype_spcirculation","filetype_spcirculationlist","filetype_spdashboardslibrarylist","filetype_spdataconnectionforperformancepointlibrarylist","filetype_sphealthreport","filetype_sphealthreportlist","filetype_sphealthrule","filetype_sphealthrulelist","filetype_spimedictionary","filetype_spimedictionarylist","filetype_spperformancepointcontent","filetype_spperformancepointcontentlist","filetype_spphonecallmemo","filetype_spphonecallmemolist","filetype_sprecordlibrarylist","filetype_spresource","filetype_spresourcelist","filetype_spprocessdiagramslibrarylist","filetype_spsitethemeslibrarylist","filetype_spsolutionslibrarylist","filetype_spwfpublibrarylist","filetype_spwhereabout","filetype_spwhereaboutlist","filetype_spdocumentlink","filetype_spdocumentset","filetype_spmicrofeedpost","filetype_spmicrofeedlist","filetype_splistfolder","filetype_youtubevideo","filetype_youtubeplaylistitem","k","z","F","A","cultures","cultureSelector","englishName","nativeName","isRTL","numberFormat",",",".","groupSizes","-","NaN","negativeInfinity","positiveInfinity","symbol","currency","calendars","standard","/",":","firstDay","days","namesAbbr","namesShort","months","AM","PM","eras","twoDigitYearMax","patterns","D","Y","S","messages","calendar","getFullYear","getMonth","getDate","convert","setFullYear","I","fromGregorian","lastIndex","C","H","getDay","N","monthsGenitive","getTimezoneOffset","abs","_upperDays","_upperMonths","_upperMonthsGen","_parseRegExp","regExp","G","E","toGregorian","setHours","findClosestCulture","format","localize","addCultureInfo","pri","parseDate","Cache_1","Cache","Defer_1","Defer","L10N_1","L10N","Options_1","Options","Strings_1","onEmpty","arm","flush","popOne","ExternalModulesShim_1","pluralRegex","singularRegex","formatPlSn","isPlural","provided","mergeDeep","AnalyticsEndpoint_1","AnalyticsEndpoint","endpointCallerOptions","endpointCaller","getCurrentVisitId","visitId","getCurrentVisitIdPromise","buildAnalyticsUrl","getFromService","sendSearchEvents","searchEvents","sendToService","sendDocumentViewEvent","documentViewEvent","sendCustomEvent","getTopQueries","paramName","serviceUrl","CUSTOM_ANALYTICS_VERSION","DEFAULT_ANALYTICS_VERSION","pendingRequest","res","handleAnalyticsEventResponse","paramsToSend","access_token","visitorId","VISITOR_COOKIE_TIME","DEFAULT_ANALYTICS_URI","expiration","domain","domainParts","date","expires","setTime","toGMTString","erase","AdvancedSearchEvents_1","AdvancedSearchEvents","AnalyticsEvents_1","AnalyticsEvents","BreadcrumbEvents_1","BreadcrumbEvents","DebugEvents_1","DebugEvents","ImageResultListEvents_1","ImageResultListEvents","InitializationEvents_1","InitializationEvents","OmniboxEvents_1","OmniboxEvents","PreferencesPanelEvents_1","PreferencesPanelEvents","QueryEvents_1","QueryEvents","ResultListEvents_1","ResultListEvents","ResultLayoutEvents_1","ResultLayoutEvents","SearchAlertEvents_1","SearchAlertsEvents","SettingsEvents_1","SettingsEvents","SliderEvents_1","SliderEvents","StandaloneSearchInterfaceEvents_1","StandaloneSearchInterfaceEvents","buildingAdvancedSearch","executeAdvancedSearch","searchEvent","changeAnalyticsCustomData","populateBreadcrumb","clearBreadcrumb","redrawBreadcrumb","showDebugPanel","imageResultsLayoutComplete","beforeInitialization","afterComponentsInitialization","restoreHistoryState","afterInitialization","populateOmnibox","openOmnibox","closeOmnibox","populateOmniboxSuggestions","omniboxPreprocessResultForQuery","savePreferences","exitPreferencesWithoutSave","newQuery","buildingQuery","doneBuildingQuery","duringQuery","duringFetchMoreQuery","fetchMoreSuccess","deferredQuerySuccess","preprocessResults","preprocessMoreResults","noResults","buildingCallOptions","newResultsDisplayed","newResultDisplayed","openQuickview","changeLayout","populateResultLayout","searchAlertsCreated","searchAlertsDeleted","searchAlertsFail","searchAlertsPopulateMessage","settingsPopulateMenu","startSlide","duringSlide","endSlide","graphValueSelected","beforeRedirect","Dom_1","DomUtils_1","DomUtils","EmailUtils_1","EmailUtils","HighlightUtils_1","HighlightUtils","StringAndHoles","HtmlUtils_1","HTMLUtils","KeyboardUtils_1","KEYBOARD","KeyboardUtils","LocalStorageUtils_1","LocalStorageUtils","OSUtils_1","OSUtils","OS_NAME","PopupUtils_1","PopupUtils","StreamHighlightUtils_1","StreamHighlightUtils","StringUtils_1","StringUtils","hsvToRgb","rgbToHsv","DefaultCurrencyToStringOptions","currencyToString","backup","DefaultDateToStringOptions","useTodayYesterdayAndTomorrow","useWeekdayIfThisWeek","omitYearIfCurrentOne","useLongDateFormat","includeTimeIfToday","includeTimeIfThisWeek","alwaysIncludeTime","predefinedFormat","convertFromJsonDateIfNeeded","isDate","dateForQuery","padNumber","keepOnlyDatePart","offsetDateByDays","newDate","setDate","dateToString","dateOnly","today","tomorrow","yesterday","isThisWeek","timeToString","dateTimeToString","datePart","dateWithoutTime","monthToString","month","isValid","timeBetween","toFixed","txt","nodeList","parentsFound","parentFound","sibs","currentElement","swtch","setHtml","refNode","toPrepend","modifiedType","processEventTypeToBeJQueryCompatible","modifiedType_1","once_1","idx_1","found","handlerObj","event_1","otherElem","borderTopWidth","borderLeftWidth","marginTop","clientTop","clientLeft","Win","innerHeight","innerWidth","scrollY","supportPageOffset","isCSS1Compat","scrollX","compatMode","Doc","scrollHeight","FileTypes_1","getPopUpCloseButton","captionForClose","captionForReminder","closeButton","iconClose","closeReminder","outerHTML","getBasicLoadingAnimation","loadDotClass","highlightElement","initialString","valueToSearch","regex","latinize","firstChar","lastChar","htmlEncode","getLoadingSpinner","loading","getModalBoxHeader","getQuickviewHeader","bindings","showDate","fileType","FileTypes","icon","fileTypeCaptions","objecttype","filetype","getFileType","variableValue","localizedString","getFileTypeCaptions","strings","javascriptEncode","toAdd","removeMiddle","toRemove","regexEncode","stringToRegex","ignoreAccent","encoded","accented","wildcardsToRegex","getHighlights","strToSearch","regexToFind","dataHighlightGroupTerm","indexes","desiredMatch","undesiredMatch","encodeCarriageReturn","strToEncode","equalsCaseInsensitive","str1","str2","hashCode","capitalizeFirstLetter","B","J","K","Q","R","U","V","W","Z","__WEBPACK_AMD_DEFINE_FACTORY__","characters","Á","Ă","Ắ","Ặ","Ằ","Ẳ","Ẵ","Ǎ","Â","Ấ","Ậ","Ầ","Ẩ","Ẫ","Ä","Ǟ","Ȧ","Ǡ","Ạ","Ȁ","À","Ả","Ȃ","Ā","Ą","Å","Ǻ","Ḁ","Ⱥ","Ã","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ḃ","Ḅ","Ɓ","Ḇ","Ƀ","Ƃ","Ć","Č","Ç","Ḉ","Ĉ","Ċ","Ƈ","Ȼ","Ď","Ḑ","Ḓ","Ḋ","Ḍ","Ɗ","Ḏ","Dz","Dž","Đ","Ƌ","DZ","DŽ","É","Ĕ","Ě","Ȩ","Ḝ","Ê","Ế","Ệ","Ề","Ể","Ễ","Ḙ","Ë","Ė","Ẹ","Ȅ","È","Ẻ","Ȇ","Ē","Ḗ","Ḕ","Ę","Ɇ","Ẽ","Ḛ","Ꝫ","Ḟ","Ƒ","Ǵ","Ğ","Ǧ","Ģ","Ĝ","Ġ","Ɠ","Ḡ","Ǥ","Ḫ","Ȟ","Ḩ","Ĥ","Ⱨ","Ḧ","Ḣ","Ḥ","Ħ","Í","Ĭ","Ǐ","Î","Ï","Ḯ","İ","Ị","Ȉ","Ì","Ỉ","Ȋ","Ī","Į","Ɨ","Ĩ","Ḭ","Ꝺ","Ꝼ","Ᵹ","Ꞃ","Ꞅ","Ꞇ","Ꝭ","Ĵ","Ɉ","Ḱ","Ǩ","Ķ","Ⱪ","Ꝃ","Ḳ","Ƙ","Ḵ","Ꝁ","Ꝅ","Ĺ","Ƚ","Ľ","Ļ","Ḽ","Ḷ","Ḹ","Ⱡ","Ꝉ","Ḻ","Ŀ","Ɫ","Lj","Ł","LJ","Ḿ","Ṁ","Ṃ","Ɱ","Ń","Ň","Ņ","Ṋ","Ṅ","Ṇ","Ǹ","Ɲ","Ṉ","Ƞ","Nj","Ñ","NJ","Ó","Ŏ","Ǒ","Ô","Ố","Ộ","Ồ","Ổ","Ỗ","Ö","Ȫ","Ȯ","Ȱ","Ọ","Ő","Ȍ","Ò","Ỏ","Ơ","Ớ","Ợ","Ờ","Ở","Ỡ","Ȏ","Ꝋ","Ꝍ","Ō","Ṓ","Ṑ","Ɵ","Ǫ","Ǭ","Ø","Ǿ","Õ","Ṍ","Ṏ","Ȭ","Ƣ","Ꝏ","Ɛ","Ɔ","Ȣ","Ṕ","Ṗ","Ꝓ","Ƥ","Ꝕ","Ᵽ","Ꝑ","Ꝙ","Ꝗ","Ŕ","Ř","Ŗ","Ṙ","Ṛ","Ṝ","Ȑ","Ȓ","Ṟ","Ɍ","Ɽ","Ꜿ","Ǝ","Ś","Ṥ","Š","Ṧ","Ş","Ŝ","Ș","Ṡ","Ṣ","Ṩ","ß","Ť","Ţ","Ṱ","Ț","Ⱦ","Ṫ","Ṭ","Ƭ","Ṯ","Ʈ","Ŧ","Ɐ","Ꞁ","Ɯ","Ʌ","Ꜩ","Ú","Ŭ","Ǔ","Û","Ṷ","Ü","Ǘ","Ǚ","Ǜ","Ǖ","Ṳ","Ụ","Ű","Ȕ","Ù","Ủ","Ư","Ứ","Ự","Ừ","Ử","Ữ","Ȗ","Ū","Ṻ","Ų","Ů","Ũ","Ṹ","Ṵ","Ꝟ","Ṿ","Ʋ","Ṽ","Ꝡ","Ẃ","Ŵ","Ẅ","Ẇ","Ẉ","Ẁ","Ⱳ","Ẍ","Ẋ","Ý","Ŷ","Ÿ","Ẏ","Ỵ","Ỳ","Ƴ","Ỷ","Ỿ","Ȳ","Ɏ","Ỹ","Ź","Ž","Ẑ","Ⱬ","Ż","Ẓ","Ȥ","Ẕ","Ƶ","IJ","Œ","ᴀ","ᴁ","ʙ","ᴃ","ᴄ","ᴅ","ᴇ","ꜰ","ɢ","ʛ","ʜ","ɪ","ʁ","ᴊ","ᴋ","ʟ","ᴌ","ᴍ","ɴ","ᴏ","ɶ","ᴐ","ᴕ","ᴘ","ʀ","ᴎ","ᴙ","ꜱ","ᴛ","ⱻ","ᴚ","ᴜ","ᴠ","ᴡ","ʏ","ᴢ","á","ă","ắ","ặ","ằ","ẳ","ẵ","ǎ","â","ấ","ậ","ầ","ẩ","ẫ","ä","ǟ","ȧ","ǡ","ạ","ȁ","à","ả","ȃ","ā","ą","ᶏ","ẚ","å","ǻ","ḁ","ⱥ","ã","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ḃ","ḅ","ɓ","ḇ","ᵬ","ᶀ","ƀ","ƃ","ɵ","ć","č","ç","ḉ","ĉ","ɕ","ċ","ƈ","ȼ","ď","ḑ","ḓ","ȡ","ḋ","ḍ","ɗ","ᶑ","ḏ","ᵭ","ᶁ","đ","ɖ","ƌ","ı","ȷ","ɟ","ʄ","dz","dž","é","ĕ","ě","ȩ","ḝ","ê","ế","ệ","ề","ể","ễ","ḙ","ë","ė","ẹ","ȅ","è","ẻ","ȇ","ē","ḗ","ḕ","ⱸ","ę","ᶒ","ɇ","ẽ","ḛ","ꝫ","ḟ","ƒ","ᵮ","ᶂ","ǵ","ğ","ǧ","ģ","ĝ","ġ","ɠ","ḡ","ᶃ","ǥ","ḫ","ȟ","ḩ","ĥ","ⱨ","ḧ","ḣ","ḥ","ɦ","ẖ","ħ","ƕ","í","ĭ","ǐ","î","ï","ḯ","ị","ȉ","ì","ỉ","ȋ","ī","į","ᶖ","ɨ","ĩ","ḭ","ꝺ","ꝼ","ᵹ","ꞃ","ꞅ","ꞇ","ꝭ","ǰ","ĵ","ʝ","ɉ","ḱ","ǩ","ķ","ⱪ","ꝃ","ḳ","ƙ","ḵ","ᶄ","ꝁ","ꝅ","ĺ","ƚ","ɬ","ľ","ļ","ḽ","ȴ","ḷ","ḹ","ⱡ","ꝉ","ḻ","ŀ","ɫ","ᶅ","ɭ","ł","lj","ſ","ẜ","ẛ","ẝ","ḿ","ṁ","ṃ","ɱ","ᵯ","ᶆ","ń","ň","ņ","ṋ","ȵ","ṅ","ṇ","ǹ","ɲ","ṉ","ƞ","ᵰ","ᶇ","ɳ","ñ","nj","ó","ŏ","ǒ","ô","ố","ộ","ồ","ổ","ỗ","ö","ȫ","ȯ","ȱ","ọ","ő","ȍ","ò","ỏ","ơ","ớ","ợ","ờ","ở","ỡ","ȏ","ꝋ","ꝍ","ⱺ","ō","ṓ","ṑ","ǫ","ǭ","ø","ǿ","õ","ṍ","ṏ","ȭ","ƣ","ꝏ","ɛ","ᶓ","ɔ","ᶗ","ȣ","ṕ","ṗ","ꝓ","ƥ","ᵱ","ᶈ","ꝕ","ᵽ","ꝑ","ꝙ","ʠ","ɋ","ꝗ","ŕ","ř","ŗ","ṙ","ṛ","ṝ","ȑ","ɾ","ᵳ","ȓ","ṟ","ɼ","ᵲ","ᶉ","ɍ","ɽ","ↄ","ꜿ","ɘ","ɿ","ś","ṥ","š","ṧ","ş","ŝ","ș","ṡ","ṣ","ṩ","ʂ","ᵴ","ᶊ","ȿ","ɡ","ᴑ","ᴓ","ᴝ","ť","ţ","ṱ","ț","ȶ","ẗ","ⱦ","ṫ","ṭ","ƭ","ṯ","ᵵ","ƫ","ʈ","ŧ","ᵺ","ɐ","ᴂ","ǝ","ᵷ","ɥ","ʮ","ʯ","ᴉ","ʞ","ꞁ","ɯ","ɰ","ᴔ","ɹ","ɻ","ɺ","ⱹ","ʇ","ʌ","ʍ","ʎ","ꜩ","ú","ŭ","ǔ","û","ṷ","ü","ǘ","ǚ","ǜ","ǖ","ṳ","ụ","ű","ȕ","ù","ủ","ư","ứ","ự","ừ","ử","ữ","ȗ","ū","ṻ","ų","ᶙ","ů","ũ","ṹ","ṵ","ᵫ","ꝸ","ⱴ","ꝟ","ṿ","ʋ","ᶌ","ⱱ","ṽ","ꝡ","ẃ","ŵ","ẅ","ẇ","ẉ","ẁ","ⱳ","ẘ","ẍ","ẋ","ᶍ","ý","ŷ","ÿ","ẏ","ỵ","ỳ","ƴ","ỷ","ỿ","ȳ","ẙ","ɏ","ỹ","ź","ž","ẑ","ʑ","ⱬ","ż","ẓ","ȥ","ẕ","ᵶ","ᶎ","ʐ","ƶ","ɀ","ff","ffi","ffl","fi","fl","ij","œ","st","ₐ","ₑ","ᵢ","ⱼ","ₒ","ᵣ","ᵤ","ᵥ","ₓ","Ё","Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","ё","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","Ф","Ы","В","А","П","Р","О","Л","Д","Ж","Э","ф","ы","в","а","п","р","о","л","д","ж","э","Я","Ч","С","М","И","Т","Ь","Б","Ю","я","ч","с","м","и","т","ь","б","ю","splitSemicolonSeparatedListOfEmailAddresses","addresses","addressesAsList","emailAddressesToHyperlinks","companyDomain","me","lengthLimit","truncateName","hyperlinks","emailArray","parseEmail","email","domainIndex","encodeURI","andOthers","buildEmailAddressesAndOthers","excessHyperLinks","getHash","getAjaxcrawlableHash","toParse","paramValue","getRawValue","getValueDependingOnType","encodeValues","valueToEncode","encodedValue","encodeArray","encodeObject","toParseArray","paramPos","loop","paramValuePair","getValueType","decodeObject","decodeArray","isArrayStartNotEncoded","DELIMITER","arrayStart","isArrayStartEncoded","isArrayEndNotEncoded","isArrayEndEncoded","arrayEnd","isObjectStartNotEncoded","objectStart","isObjectStartEncoded","isObjectEndNotEncoded","objectEnd","isObjectEndEncoded","isObjectStart","isObjectEnd","isArrayStart","isArrayEnd","arrayReturn","retArray","encodeValue","objectStartRegExp","objectEndRegExp","arrayStartRegExp","arrayEndRegExp","strAndHoles","holes","hole","begin","replacementSize","shortenPath","uriOrig","removed","SHORTEN_END","over","shortenString","toShortenOrig","toAppend","toShorten","WORD_SHORTER","shortenUri","highlightString","highlights","cssClass","maxIndex","highlighted","highlight","holeBegin","holeEnd","dataHighlightGroup","buildAttributeString","AnchorUtils","buildAnchor","ImageUtils","buildImage","selectImageFromResult","buildImageWithDirectSrcAttribute","endpoint","Image","dataStreamUri","buildImageWithBase64SrcAttribute","rawBinary","Uint8Array","buildImageFromResult","img","data-coveo-uri-hash","keysEqual","isAllowedKeyForOmnibox","keycode","valid","isNumberKeyPushed","isLetterKeyPushed","BACKSPACE","DELETE","isArrowKeyPushed","isAllowedKeyForSearchAsYouType","isDeleteOrBackspace","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","keypressAction","action","eventCode","localStorage","save","setItem","getLocalStorageKey","getItem","removeItem","oldObj","nav","osName","appVersion","WINDOWS","MACOSX","UNIX","LINUX","UNKNOWN","VerticalAlignment","HorizontalAlignment","positionPopup","popUp","nextTo","boundary","desiredPosition","checkForBoundary","verticalOffset","horizontalOffset","popUpPosition","basicVerticalAlignment","basicHorizontalAlignment","finalAdjustement","popUpBoundary","getBoundary","boundaryPosition","checkBoundary","checkForOutOfBoundary","horizontal","horizontalClip","vertical","newDesiredPosition","alignInsideBoundary","popUpOffSet","TOP","BOTTOM","MIDDLE","INNERTOP","INNERBOTTOM","LEFT","RIGHT","CENTER","offSetToAlignCenter","INNERLEFT","INNERRIGHT","oldPosition","toAddVertically","boundaryOffset","clientHeight","bottom","getRestHighlightsForAllTerms","toHighlight","sortedTerms","termsSorting","term","termsToIterate","regexStart","wordBoundary","indexesFound","regexFlags","phrase","origPhrase","origWord","keysFromTerms","keysFromPhrases","createStreamHTMLContainer","stream","DefaultStreamHighlightOptions","shorten","highlightStreamHTML","allElements","highlightStreamText","QueryController_1","QueryController","FacetQueryController_1","FacetQueryController","FacetRangeQueryController_1","FacetRangeQueryController","FacetSliderQueryController_1","FacetSliderQueryController","HierarchicalFacetQueryController_1","HierarchicalFacetQueryController","HistoryController_1","HistoryController","LocalStorageHistoryController_1","LocalStorageHistoryController","RootComponent_1","QueryBuilder_1","SearchEndpointWithDefaultCallOptions_1","BaseComponent_1","coveo_analytics_1","DefaultQueryOptions","searchAsYouType","closeModalBox","cancel","logInActionsHistory","usageAnalytics","showingExecutingQueryAnimation","firstQuery","historyStore","history","HistoryStore","setEndpoint","overrideEndpoint","getEndpoint","SearchEndpointWithDefaultCallOptions","getCallOptions","getLastQuery","lastQuery","QueryBuilder","build","getLastResults","lastQueryResults","executeQuery","cancelAnyCurrentPendingQuery","beforeExecuteQuery","ignoreWarningSearchEvent","warnAboutSearchEvent","showExecutingQueryAnimation","dataToSendOnNewQuery","origin","newQueryEvent","cancelQuery","queryBuilder","createQueryBuilder","logQueryInActionsHistory","isFirstQuery","endpointToUse","currentPendingQuery","queryResults","enableHistory","keepLastSearchUid","lastQueryHash","queryHash","lastSearchUid","getLastSearchUid","_reusedSearchUid","currentError","dataToSendOnPreprocessResult","preprocessResultsEvent","dataToSendOnNoResult","retryTheQuery","noResultEvent","lastQueryBuilder","dataToSendOnSuccess_1","querySuccessEvent","deferredQuerySuccessEvent","hideExecutingQueryAnimation","dataToSendOnError","dataToSendDuringQuery","duringQueryEvent","fetchMore","sendAllPendingEvents","continueLastQueryBuilder","dataToSendOnFetchMoreSuccess","fetchMoreSuccessEvent","deferExecuteQuery","ensureCreatedQueryBuilder","createdOneQueryBuilder","dataToSendDuringBuildingQuery","buildingQueryEvent","dataToSendDuringDoneBuildingQuery","doneBuildingQueryEvent","getPipelineInUrl","isStandaloneSearchbox","searchPageUri","saveLastQuery","expire","getLastQueryHash","loadLastQueryHash","debugInfo","queryDuration","buildQueryDurationSection","graph","debugRef","BaseComponent","getComponentRef","durationKeys","data-id","legend","keyDom","durationDom","queryElement","addElement","RootComponent","bindComponentToElement","component","computeCssClassNameForType","getBoundComponentsForElement","computeCssClassName","componentClass","computeSelectorForType","CoveoBoundComponents","ExpressionBuilder_1","ExpressionBuilder","advancedExpression","constantExpression","longQueryExpression","disjunctionExpression","disableQuerySyntax","requiredFields","includeRequiredFields","enableDidYouMean","enableDebug","sortCriteria","retrieveFirstSentences","queryFunctions","rankingFunctions","groupByRequests","enableDuplicateFiltering","aq","cq","lq","dq","searchHub","tab","maximumAge","wildcards","enableWildcards","enableQuestionMarks","lowercaseOperators","enableLowercaseOperators","partialMatch","enablePartialMatch","partialMatchKeywords","partialMatchThreshold","excerptLength","filterField","filterFieldRange","parentField","childField","computeFieldsToInclude","fieldsToExclude","sortField","timezone","enableCollaborativeRating","actionsHistory","recommendation","computeCompleteExpression","computeCompleteExpressionParts","full","withoutConstant","mergeUsingOr","basic","advanced","computeCompleteExpressionExcept","except","computeCompleteExpressionPartsExcept","withoutConstantAndExcept","basicAndExcept","fromExpressionBuilder","advancedAndExcept","addFieldsToInclude","addRequiredFields","addFieldsToExclude","addContextValue","addContext","wrapParts","addFieldExpression","addFieldNotEqualExpression","exp","builders","builder","nonEmpty","enrichCallOptions","analytics","SimpleAnalytics","donottrack","storage","defaultResponseTransformer","history_1","Version","Endpoints","default","production","dev","staging","Client","sendEvent","eventType","fetch","getRestEndpoint","getHeaders","mode","credentials","sendSearchEvent","sendClickEvent","sendViewEvent","referrer","store","historyElement","contentIdValue","getVisit","getHealth","Content-Type","storage_1","detector","STORE_KEY","MAX_NUMBER_OF_HISTORY_ELEMENTS","MIN_THRESHOLD_FOR_DUPLICATE_VALUE","MAX_VALUE_SIZE","getAvailableStorage","CookieStorage","hasCookieStorage","internalTime","cropQueryElement","currentHistory","getHistoryWithInternalTime","isValidEntry","setHistory","getHistory","stripInternalTime","getMostRecentElement","sorted","lastEntry","part","preferredStorage","hasLocalStorage","hasSessionStorage","sessionStorage","NullStorage","cookieutils_1","cookieEnabled","hasDocument","hasDocumentLocation","cookiePrefix","cookieArray","normalizeName","normalizeValue","iteratorFor","items","iterable","Headers","getOwnPropertyNames","consumed","bodyUsed","fileReaderReady","reader","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","readArrayBufferAsText","chars","bufferClone","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","searchParams","URLSearchParams","arrayBuffer","isDataView","_bodyArrayBuffer","ArrayBuffer","isArrayBufferView","rejected","decode","normalizeMethod","upcased","Request","form","bytes","parseHeaders","rawHeaders","preProcessedHeaders","line","Response","bodyInit","ok","viewClasses","DataView","isView","oldValue","thisArg","redirectStatuses","redirect","RangeError","responseURL","objectassign_1","utils_1","SimpleAPI","client","customData","contentIdKey","popFromObject","onLoad","simpleAPI","actionFunction","getOwnPropertySymbols","propIsEnumerable","objectAssignPonyfill","sources","symbols","ponyfill","doNotTrack","msDoNotTrack","facet","prepareForNewQuery","lastGroupByRequestIndex","expressionToUseForFacetSearch","constantExpressionToUseForFacetSearch","computeOurFilterExpression","getSelected","useAnd","excluded","getExcluded","additionalFilter","putGroupByIntoQueryBuilder","allowedValues","createGroupByAllowedValues","groupByRequest","createBasicGroupByRequest","queryOverrideObject","createGroupByQueryOverride","basicExpressionToUseForFacetSearch","advancedExpressionToUseForFacetSearch","queryOverride","advancedQueryOverride","constantQueryOverride","lastGroupByRequest","oldLength","nbResults","onResult","fieldValues","newLength","checkForFacetSearchValuesToRemove","needAnotherFacetSearch","searchPromise","getQuery","currentSearchPromise","valuesCropped_1","groupByResults","lookupValue","alwaysExclude","numberOfValuesToFetch","alwaysInclude","searchInFacetToUpdateDelta","facetValues","facetValue","waitingForDelta","completeFacetWithStandardValues","customSort","getUnionWithCustomSortLowercase","getAllowedValuesFromSelected","toCompare","filtered","keepDisplayedValuesNextTime","hasSelectedOrExcludedValues","addComputedField","nbOfRequestedValues","numberOfValues","usedValues","maximumNumberOfValues","enableMoreLess","injectionDepth","lookupField","computedField","computedFields","operation","computedFieldOperation","valueToCheckAgainst","getRegexToUseForFacetSearch","facetSearchIgnoreAccents","isAllowed","getValueCaption","numberOfValuesInFacetSearch","ignoreAccents","searchEvenIfEmpty","isNewDesign","setValueToSearch","getValuesToUseForSearchInFacet","excludeCurrentlyDisplayedValuesInSearch","searchResults","getCurrentlyShowedValueInSearch","expandedValues","getDisplayedFacetValues","getGroupByRequest","lowerCaseAll","typedByUser","queryController","facetQueryController","valueCaption","pair","buildFacetSearchPattern","currentSearchLength","newSearchLength","oldSearchLength","desiredSearchLength","addNoStateCssClassToFacetValues","noStates","noState","tryToGetTranslatedCaption","clipCaptionsToAvoidOverflowingTheirContainer","forceClip","getBindings","captions","labels","labelsMaxWidth","label","labelWidth","labelVisibleWidth","captionWidth","crop","labelMaxWidth","groupByQuery","ranges","buildGroupByQueryForPredefinedRanges","buildGroupByQueryForAutomaticRanges","generateAutomaticRanges","rangeValues","onRootElement","handleQuerySuccess","putGroupByForGraphIntoQueryBuilder","putGroupByForSliderIntoQueryBuilder","startOfSlider","endOfSlider","excludeOuterBounds","addFilterExpressionWithOuterBoundsExcluded","addFilterExpressionWithOuterBoundsIncluded","isAValidRangeResponse","rangeValuesForGraphToUse","rawValues","graphGroupByQueriesIndex","rawValue","rawSplit","dateField","getISOFormat","firstValue","getFilterDateFormat","startCompare","endCompare","startCompared","endCompared","basicGroupByRequestForGraph","isSimpleSliderConfig","createRangeValuesForGraphUsingStartAndEnd","getSliderBoundaryForQuery","completeExpression","steps","hasAGraph","_a","formatStartAndEnd","endInclusive","basicGroupByRequestForSlider","oneRange","usePrebuiltRange","buildRange","basicRangeRequest","oneStep","newStart","newEnd","getBrowserCompatibleFormat","toISOString","facetSearch","getValueInInputForFacetSearch","getAllValueHierarchy","Model_1","model","hashUtils","ignoreNextHashChange","initialHashChange","willUpdateHash","updateModelFromHash","getEventName","Model","eventTypes","updateHashFromModel","hashchange","handleHashChange","handleNuke","setHashValues","hashHasChanged","attributesThatDoNotTriggerQuery","getAttributes","toSet","valToSet","getHashValue","setMultiple","defaultAttributes","MODEL_EVENTS","PREPROCESS","CHANGE_ONE","CHANGE","RESET","ALL","eventNameSpace","attribute","anythingChanged","preprocessEvent","customAttribute","checkIfAttributeExists","parseToCorrectType","validateType","typeIsValid","checkIfAttributeChanged","silent","attributeHasChangedEvent","attributesHasChangedEvent","anyEvent","setNewDefault","setDefault","getDefault","modelWasResetEvent","registerNewAttribute","change","createAttributesChangedArgument","changeOne","createAttributeChangedArgument","preprocess","createModelChangedArgument","validateNumber","validateBoolean","validateOther","newValue","updateModelFromLocalStorage","updateLocalStorageFromModel","withoutThoseAttribute","setStorageValues","loadedFromStorage","QueryStateModel_1","QueryStateModel","ComponentOptionsModel_1","ComponentOptionsModel","ComponentStateModel_1","ComponentStateModel","setState","QUERY_STATE_ATTRIBUTES","FIRST","TG","SORT","LAYOUT","HD","HQ","QUICKVIEW","getFacetId","getFacetOperator","getFacetLookupValue","atLeastOneFacetIsActive","validate","attributesEnum","hd","hq","layout","tg","quickview","resultLink","registerComponent","componentId","currentAttribute","ComponentOptions_1","ComponentOptions","ComponentOptionsType","Component_1","Component","Initialization_1","Initialization","Initialization_2","CoveoJQuery","initCoveoJQuery","initializeFramework","initSearchInterface","initSearchbox","searchInterfaceOptions","autoTriggerQuery","hideUntilFirstQuery","initStandaloneSearchInterface","initRecommendation","mainSearchInterface","userContext","recommendationOptions","initRecommendationInterface","resolveBinding","noThrow","getCoveoAnalyticsClient","getCoveoAnalytics","analyticsElement","logCustomEvent","customEventCause","metadata","logSearchEvent","searchEventCause","logSearchAsYouTypeEvent","searchAsYouTypeEventCause","logSearchAsYouType","logClickEvent","clickEventCause","optionsToSet","registerDefaultOptions","patch","methodName","monkeyPatchComponentMethod","initBox","injectMarkup","initBoxInterface","registerNamedMethod","existing","updated","resolveDefaultOptions","optionsSoFar","optionsForThisElement","registerAutoCreateComponent","autoCreateComponents","namedMethods","isComponentClassIdRegistered","componentClassId","getListOfRegisteredComponents","getRegisteredComponent","initSearchInterfaceFunction","alreadyInitialized","performInitFunctionsOption","initExternalComponents","elemsHidden","logFirstQueryCause","shouldLogInActionHistory","originalOptionsObject","initParameters","automaticallyCreateComponentsInside","triggerQueryOnClear","triggerOnQueryClear","optionsForRecommendation","firstLoadingAnimation","ignore","codeToExecute","htmlElementsToIgnore","toIgnore","rootToIgnore","childsElementsToIgnore","classname","createFunctionThatInitializesComponentOnElements","createComponentOfThisClassOnElement","isNamedMethodRegistered","splitArg","boundComponent","originalMethodName","fromInitTypeToBoxReference","boxRef","injectFunction","getInjection","dispatchNamedMethodCall","namedMethodHandler","dispatchNamedMethodCallOrComponentCreation","isThereASingleComponentBoundToThisElement","dispatchMethodCallOnBoundComponent","isSearchFromLink","queryStateModel","firstQueryCause","meta","searchFromLink","interfaceLoad","performFunctions","componentStateModel","componentOptionsModel","initParameters_1","externalComponent","elementToInstantiate","matchingElement","optionsToUse","optionsForComponentClass","optionsForElementId","initOptions","initParamToUse","ComponentEvents","resolveRoot","resolveQueryStateModel","resolveComponentStateModel","resolveQueryController","resolveSearchInterface","resolveUA","resolveComponentOptionsModel","ensureDom","createDom","attachComponent","initDebugInfo","resolvedSearchInterface","resolveResult","boundComponents","resultElement","bindResultToElement","findDown","findUp","pointElementsToDummyForm","inputs","wrapToCallIfEnabled","htmlEl","oneRootElement","onQueryState","getQueryStateEventName","oneQueryState","evtName","fastclick","jstz","SentryLogger_1","analyticsOptions","_window","isNewDesignAttribute","attach","initComponentOptions","showAndHideFirstQueryAnimation","initializeAnalytics","SentryLogger","eventName","handlePreprocessQueryStateModel","handleBuildingQuery","handleQueryError","useLocalStorageForHistory","eventNameQuickview","handleQuickviewChanged","setupDebugInfo","responsiveComponents","showWaitAnimation","hideWaitAnimation","getComponents","detachComponent","components","attachedComponents","analyticsRef","enableDebugInfo","tgFromModel","tFromModel","getTabGroupId","getTabId","getSort","getQuickview","tabGroupId","tabGroupRef","tabGroups","tabGroup","tabId","tabRef","tabs","tabGroup_1","isElementIncludedInTabGroup","sortId","sortRef","sorts","tab_1","isElementIncludedInTab","quickviewId","quickviewRef","quickviews","getHashId","quickviewsPartition","resultsPerPage","toggleSectionState","resultsHeader","facetSection","resultsSection","facetSearchs","buildBooleanOption","enableAutomaticResponsiveMode","buildNumberOption","buildStringOption","buildFieldOption","buildChildHtmlElementOption","childSelector","defaultFunction","buildCustomOption","determine","SMALL_INTERFACE_CLASS_NAME","handleRedirect","dataToSendOnBeforeRedirect","searchboxIsEmpty","redirectIfEmpty","redirectToSearchPage","searchPage","stateValues","uaCausedBy","getCurrentEventCause","searchboxSubmit","uaMeta","getCurrentEventMeta","link","pathname","TemplateCache_1","TemplateList_1","UnderscoreTemplate_1","HtmlTemplate_1","camelCaseToHyphenRegex","fieldsSeperator","localizer","optionArgs","buildOption","BOOLEAN","loadBooleanOption","NUMBER","loadNumberOption","STRING","loadStringOption","buildIconOption","ICON","buildColorOption","COLOR","buildHelperOption","HELPER","buildJsonOption","buildLocalizedStringOption","LOCALIZED_STRING","loadLocalizedStringOption","FIELD","loadFieldOption","buildFieldsOption","FIELDS","loadFieldsOption","buildListOption","LIST","loadListOption","buildSelectorOption","SELECTOR","loadSelectorOption","CHILD_HTML_ELEMENT","loadChildHtmlElementOption","buildTemplateOption","TEMPLATE","loadTemplateOption","converter","loadOption","stringvalue","buildCustomListOption","buildObjectOption","subOptions","scopedOptions","scopedValues","scopedkey","mergeCamelCase","resultValues","resultFound","OBJECT","optionArg","attrNameFromName","attrName","camelCaseToHyphen","componentID","optionDefinition","loadFromAttribute","deprecated","validator","required","name_2","postProcessing","getAttributeFromAlias","fieldsAttr","attributeValue","locale","localeParts_1","localizers","numberValue","loadEnumOption","_enum","enumAsString","htmlElement","selectorAttr","loadChildHtmlElementFromSelector","loadChildrenHtmlElementFromSelector","templateElement","createResultTemplateFromElement","idAttr","loadResultTemplateFromId","loadChildrenResultTemplateFromSelector","templateId","TemplateCache","getTemplate","foundElements","TemplateList","findParentScrolling","isElementScrollable","alias","mimeTypes","UnderscoreTemplate","HtmlTemplate","registerTemplate","publicTemplate","defaultTemplate","resultListTemplate","templates","templateNames","resultListTemplateNames","defaultTemplates","unregisterTemplate","scanAndRegisterTemplates","getTemplates","getTemplateNames","getResultListTemplateNames","getDefaultTemplates","getDefaultTemplate","isLibraryAvailable","scanAndRegisterUnderscoreTemplates","scanAndRegisterHtmlTemplates","scriptList","TemplateConditionEvaluator_1","TemplateFieldsEvaluator_1","DefaultInstantiateTemplateOptions","currentLayout","checkCondition","wrapInDiv","dataToString","instantiateToString","instantiateOptions","tablet","desktop","conditionToParse","TemplateConditionEvaluator","evaluateCondition","fieldsToMatch","TemplateFieldsEvaluator","evaluateFieldsToMatch","instantiateToElement","instantiateTemplateOptions","getFields","getType","setConditionWithFallback","getFieldFromString","componentFields","templateShouldBeLoaded","fieldsInCondition","fieldInCondition","matchingFieldValues","evaluateMatchingFieldValues","fieldShouldNotBeNull","evaluateFieldShouldNotBeNull","evaluateShouldUseSmallScreen","foundForCurrentField","firstRegexToGetValue","secondRegexToGetValue","firstRegexToMatchNonNull","secondRegexToMatchNonNull","toMatches","toMatch","matchAtLeastOnce","TemplateFromAScriptTag_1","DefaultResultTemplate_1","templateString","templateFromAScriptTag","TemplateFromAScriptTag","extended","templateHelpers","DefaultResultTemplate","getFallbackTemplate","registerTemplateHelper","helperName","helper","fromString","scriptTag","parsedFieldsAttributes","parseFieldsAttributes","parseLayout","parseScreenSize","additionalFields","includeInResults","dataSet","dataset","queryResult","tmpl","titleContainer","resultContainer","isContextual","isActivated","currentEventCause","currentEventMeta","actionCause","setNoopCauseAndMeta","cancelAllPendingEvents","getPendingSearchEvent","setOriginContext","originContext","cause","highlightRecommendation","handleNewResultDisplayed","handleShowDebugPanel","unbindEscapeEvent","localStorageDebug","collapsedSections","buildFieldsSection","fetchFields","fieldDescriptions","fieldDescription","fieldType","splitGroupByField","parseRankingInfo","rankingInfo","documentWeights","termsWeight","totalWeight","parseWeights","terms","words","word","Correlation","TF-IDF","weights","Weights","buildStackPanel","stackDebug","indexA","customOrder","indexB","section","buildSection","buildStackPanelSection","modalbox","bindEscapeEvent","buildSearchBox","downloadLink","download","downloadHref","bodyBuilder","buildEnabledHighlightRecommendation","buildEnableDebugCheckbox","handleEscapeEvent","ESCAPE","boundEscapeKey","isRecommendation","handleResultDoubleClick","index_1","findResult_1","debugPanel","buildRankingInfoSection","templateToJson","toJson","buildProperty","lastSearch","rootProperties","findInProperty","jElement","highlightSearch","removeHighlightSearch","submatch_1","listOfWeight","weight","weightGroup","buildPromise","buildBasicProperty","buildObjectProperty","resolvedDom","valueContainer","buildKeys","labelDom","stringValue","valueDom","ondblclick","selectElementText","componentToJson","htmlToJson","toJsonRef","subValue","result_1","classList","templateObject","getSelection","createRange","selectNodeContents","removeAllRanges","addRange","textRange","moveToElementText","span","FastClick","layer","oldOnClick","trackingClick","trackingClickStart","targetElement","touchStartX","touchStartY","lastTouchIdentifier","touchBoundary","tapDelay","tapTimeout","notNeeded","deviceIsAndroid","onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","capture","rmv","Node","hijacked","adv","propagationStopped","deviceIsWindowsPhone","deviceIsIOS","deviceIsIOS4","deviceIsIOSWithBadTarget","deviceIsBlackBerry10","needsClick","needsFocus","readOnly","sendClick","clickEvent","touch","initMouseEvent","determineEventType","forwardedTouchEvent","updateScrollParent","scrollParent","fastClickScrollParent","fastClickLastScrollTop","getTargetElementFromEventTarget","eventTarget","TEXT_NODE","rangeCount","isCollapsed","lastClickTime","touchHasMoved","findControl","labelElement","control","htmlFor","forElement","targetTagName","cancelNextClick","elementFromPoint","permitted","destroy","metaViewport","chromeVersion","blackberryVersion","firefoxVersion","ontouchstart","outerWidth","msTouchAction","touchAction","HEMISPHERE_SOUTH","consts","DAY","HOUR","MINUTE","SECOND","BASELINE_YEAR","MAX_SCORE","AMBIGUITIES","America/Denver","Europe/London","America/Chicago","America/Asuncion","America/Montevideo","Asia/Beirut","Pacific/Auckland","America/Los_Angeles","America/New_York","America/Halifax","America/Godthab","Asia/Dubai","Asia/Jakarta","Asia/Shanghai","Australia/Sydney","Asia/Tokyo","Asia/Dhaka","Asia/Baku","Australia/Brisbane","Pacific/Noumea","Pacific/Majuro","Pacific/Tongatapu","Asia/Baghdad","Asia/Karachi","Africa/Johannesburg","get_date_offset","lookup_key","january_offset","june_offset","get_from_internationalization_api","Intl","DateTimeFormat","resolvedOptions","timeZone","dst_dates","year","yearstart","yearend","dst_start","dst_end","dateToCheck","dateToCheckOffset","find_dst_fold","a_date","date_start","date_end","dst_change","windows7_adaptations","rule_list","preliminary_timezone","score","best_dst_match","score_sample","rules","scoreboard","dst_zones","olson","dst_rules","zones","dst_zones_length","ambiguities","tz","get_by_dst","get_rules","years","year_rules","check_has_dst","has_dst","preliminary_tz","timezones","-720,0","-660,0","-660,1,s","-600,1","-600,0","-570,0","-540,0","-540,1","-480,1","-480,0","-420,0","-420,1","-360,0","-360,1","-360,1,s","-300,0","-300,1","-270,0","-240,1","-240,0","-240,1,s","-210,1","-180,1","-180,0","-180,1,s","-120,0","-120,1","-60,1","-60,0","0,0","0,1","60,1","60,0","60,1,s","120,1","120,0","180,0","180,1","210,1","240,0","240,1","270,0","300,1","300,0","330,0","345,0","360,0","360,1","390,0","420,1","420,0","480,0","480,1","525,0","525,1,s","540,1","540,0","570,0","570,1,s","600,0","600,1","600,1,s","630,1,s","660,1","660,0","690,0","720,1,s","720,0","765,1,s","780,0","780,1,s","840,0","__webpack_amd_options__","bindErrorHandler","oldHandler","filename","lineno","colno","errorInfo","column","errorStack","device","interfaceChange","metaMap","interfaceChangeTo","contextRemove","contextName","didyoumeanAutomatic","didyoumeanClick","resultsSort","resultsSortBy","searchboxClear","searchboxAsYouType","breadcrumbFacet","facetId","facetTitle","breadcrumbResetAll","documentTag","documentField","documentQuickview","documentTitle","documentURL","documentOpen","omniboxFacetSelect","omniboxFacetExclude","omniboxFacetDeselect","omniboxFacetUnexclude","faceId","omniboxAnalytics","partialQuery","suggestionRanking","partialQueries","suggestions","omniboxFromLink","omniboxField","facetClearAll","facetToggle","facetOperatorBefore","facetOperatorAfter","facetRangeSlider","facetRangeStart","facetRangeEnd","facetRangeGraph","facetSelect","facetSelectAll","facetDeselect","facetExclude","facetUnexclude","errorBack","errorClearQuery","errorRetry","noResultsBack","expandToFullUI","caseCreationInputChange","caseCreationSubmitButton","caseCreationCancelButton","caseCreationUnloadPage","casecontextAdd","caseID","casecontextRemove","preferencesChange","preferenceName","preferenceType","getUserHistory","userActionDocumentClick","caseAttach","resultUriHash","articleID","caseDetach","customfiltersChange","customFilterName","customFilterType","customFilterExpression","pagerNumber","pagerNext","pagerPrevious","pagerScrolling","pagerResize","triggerNotify","triggerExecute","triggerQuery","triggerRedirect","errorType","errorMessage","exportToExcel","recommendationInterfaceLoad","recommendationOpen","advancedSearch","searchAlertsFollowDocument","searchAlertsFollowQuery","searchAlertsUpdateSubscription","searchAlertsDeleteSubscription","searchAlertsUnfollowDocument","searchAlertsUnfollowQuery","resultsLayoutChange","retrieveInfoFromDefaultSearchEndpoint","initializeAnalyticsClient","cmpOptionElement","handleSearchHubChanged","initializeAnalyticsEndpoint","elementToInitializeClient","instantiateAnalyticsClient","user","userDisplayName","splitTestRunName","splitTestRunVersion","sendToCloud","defaultEndpoint","ignoreElementsInsideRecommendationInterface","getClient","foundOnElement","APIAnalyticsBuilder_1","rootElement","userId","originLevel1","pendingSearchEvent","getEventCause","pendingSearchAsYouTypeSearchEvent","getEventMeta","metaObject","buildMetaObject","pushSearchEvent","pushSearchAsYouTypeEvent","pushClickEvent","pushCustomEvent","sendRightNow","buildCustomEvent","triggerChangeAnalyticsCustomData","checkToSendAnyPendingSearchAsYouType","APIAnalyticsBuilder","convertCustomEventToAPI","stopRecording","buildSearchEvent","eventIsNotRelatedToSearchbox","cancelAnyPendingSearchAsYouTypeEvent","buildClickEvent","resultData","searchQueryUid","collectionName","sourceName","documentPosition","convertDocumentViewToAPI","buildAnalyticsEvent","actionType","responseTime","originLevel2","getOriginLevel2","originLevel3","queryText","advancedQuery","pageNumber","facets","contextual","queryPipeline","documentUri","documentUriHash","documentUrl","clickUri","documentCategory","viewMethod","rankingModifier","eventValue","resolveActiveTabFromElement","modifiedMeta","changeableAnalyticsDataObject","metaDataAsString","metaDataAsNumber","templateSearchEvent","searchPromises","cancelled","finished","handleDuringQuery","queryBoxContentToUse","fillSearchEvent","apiSearchEvents","convertSearchEventToAPI","currentQuery","totalCount","refinedKeywords","apiSearchEvent","customMetadatas","documentView","apiDocumentView","apiCustomEvent","delayBeforeSending","armBatchDelay","beforeUnloadHandler","onWindowUnload","currentQueryBeforeDelay","beforeResolve","toSendRightNow","isCancelledOrFinished","modifyCustomData","newData","modifyEventCause","newCause","analyticsClients","analyticsClient","mergeTopQueries","pageSize","QuickviewEvents_1","ResponsiveRecommendation_1","RegisteredNamedMethods_1","generateDefaultId","preventEventPropagation","bindToMainSearchInterface","handleRecommendationBuildingQuery","handleRecommendationQuerySuccess","handleRecommendationNoResults","handleRecommendationQueryError","ensureCurrentPageViewExistsInStore","ResponsiveRecommendation","hideIfNoResults","getId","displayStyle","bindComponentOptionsModelToMainSearchInterface","bindQueryEventsToMainSearchInterface","searchInterfaceComponent","onceInitialized","mainSearchInterfaceOptionsModel","mainInterfaceQuery","mainQuerySearchUID","mainQueryPipeline","modifyQueryForRecommendation","addRecommendationInfoInQuery","sendActionsHistory","historyFromStore","preventEventPropagationOn","QuickviewEvents","getAllModelEvents","NEXT_ID","enableResponsiveMode","responsiveBreakpoint","dropdownHeaderLabel","quickviewLoaded","ResponsiveComponentsManager_1","ResponsiveComponentsUtils_1","RecommendationDropdownContent_1","ResponsiveDropdownHeader_1","ResponsiveDropdown_1","coveoRoot","responsiveDropdown","recommendationRoot","getRecommendationRoot","breakpoint","defineResponsiveBreakpoint","dropdown","buildDropdown","getFacets","facetSliders","getFacetSliders","registerOnOpenHandler","registerOnCloseHandler","registerQueryEvents","dropdownContainer","DROPDOWN_CONTAINER_CSS_CLASS_NAME","findParentRootOfRecommendationComponent","ResponsiveComponentsManager","register","handleResizeEvent","needSmallMode","ResponsiveComponentsUtils","isSmallRecommendationActivated","changeToSmallMode","changeToLargeMode","isOpened","dropdownContent","positionDropdown","needDropdownWrapper","DROPDOWN_HEADER_WRAPPER_CSS_CLASS","dropdownHeader","disableFacetPreservePosition","activateSmallRecommendation","enableFacetPreservePosition","cleanUp","deactivateSmallRecommendation","buildDropdownContent","buildDropdownHeader","ResponsiveDropdown","disablePopupBackground","dropdownHeaderElement","ResponsiveDropdownHeader","dropdownContentElement","recommendationColumn","RecommendationDropdownContent","RESPONSIVE_BREAKPOINT","facetSliderElement","facetSlider","facetElement","dismissFacetSearches","currentlyDisplayedResults","completelyDismissSearch","preservePosition","drawFacetSliderGraphs","drawDelayedGraphData","recommendationInstance","handleRecommnendationQuerySucess","Index_1","disabledComponents","dropdownHeadersWrapper","searchBoxElement","getSearchBoxElement","resizeListener","addDropdownHeaderWrapperIfNeeded","shouldSwitchToSmallMode","responsiveComponent","RESIZE_DEBOUNCE_DELAY","bindNukeEvents","responsiveComponentConstructor","shouldEnableResponsiveMode","responsiveComponentsManager","componentManagers","componentManager","disableComponent","componentInitializations","remainingComponentInitializations","instantiateResponsiveComponents","resizeAllComponentsManager","componentInitialization","isTabs","aComponentNeedsTabSection","reachedBreakpoint","tabSection","ResponsiveTabs_ts_1","handleQueryStateChanged","clickAction","handleClick","ENTER","ResponsiveTabs","includedTabs","splitListOfTabs","excludedTabs","iconSpan","captionP","isSelected","showAndHideAppropriateElements","activeTab","showElements","hideElements","toggleAllComponentsUnder","togglePossibleComponent","possibleComponent","possibleCmp","EventsUtils_1","getDropdownHeaderLabel","bindDropdownContentEvents","bindDropdownHeaderEvents","manageTabSwapping","saveTabsPosition","isSmallTabsActivated","getTabsInTabSection","shouldAddTabsToDropdown","addTabsToDropdown","shouldRemoveTabsFromDropdown","removeTabsFromDropdown","mediumWidth","isLargeFormatOverflowing","isOverflowing","activateSmallTabs","emptyDropdown","cleanUpDropdown","deactivateSmallTabs","currentTab","facetDropdownHeader","addToDropdown","isDropdownEmpty","lastTabInSection","dropdownTabs","removeFromDropdown","fromDropdownToTabSection","tabs_1","virtualTabSection","closeDropdown","contentList","documentClickListener","listElement","tabElement","fadeOutFadeIn","tabsInSection","lastTabSectionSibling","previousSibling","propertyName","EventsUtils","removePrefixedEvent","addPrefixedEvent","childElement","lastTabInTabSection","DROPDOWN_HEADER_LABEL_DEFAULT_VALUE","pascalCaseEventName","prefixes","shouldDrawFacetSlider","isSmallFacetActivated","smallTabsClassName","smallFacetClassName","smallRecommendationClassName","activateSmallFacet","deactivateSmallFacet","ResponsiveDropdownContent_1","componentName","cssClassName","ResponsiveDropdownContent","DEFAULT_CSS_CLASS_NAME","dropdownContentWrapper","maxHeight","OPENED_DROPDOWN_CSS_CLASS_NAME","hideDropdown","widthRatio","ACTIVE_HEADER_CSS_CLASS_NAME","onOpenHandlers","onCloseHandlers","popupBackgroundIsEnabled","popupBackground","buildPopupBackground","bindOnClickDropdownHeaderEvent","saveContentPosition","restoreContentPosition","handlerCall","showPopupBackground","hidePopupBackground","TRANSPARENT_BACKGROUND_OPACITY","DROPDOWN_BACKGROUND_CSS_CLASS_NAME","dropdownContentPreviousSibling","dropdownContentParent","ResponsiveFacets_1","d3","slider","ResponsiveFacets","initQueryStateEvents","handleNewQuery","handleNoresults","handleDeferredQuerySuccess","handleDoneBuildingQuery","handlePopulateBreadcrumb","handlePopulateSearchAlerts","onResize","drawGraph","DEBOUNCED_RESIZE_DELAY","facetHeader","enableClearElement","enableCollapseElement","initializeState","updateQueryState","updateAppearanceDependingOnState","getSelectedValues","setSelectedValues","setupSliderIfNeeded","setValues","isActive","initialStartOfSlider","initialEndOfSlider","needToReturnABoundary","generateBoundary","delayedGraphData","handleRangeQueryStateChanged","breadcrumbs","buildBreadcrumbFacetSlider","getCaption","initSlider","buildSlider","rangeQueryStateAttribute","setRangeStateSliderStillNotCreated","rangeFromUrlState","copyValues","sliderContainer","sliderDiv","handleEndSlide","handleDuringSlide","handleGraphValueSelected","isFacetEmpty","renderToSliderGraph","getValues","rangeSlider","copyOfValues","graphData","rawGroupByResults","totalGraphResults","isDropdownHidden","facetDropdown","recommendationDropdown","generateBoundaryFromSlider","generateBoundaryFromState","startFromState","endFromState","alreadySetBoundary","trySetSliderBoundaryFromOptions","trySetSliderBoundaryFromQueryResult","trySetSliderBoundaryFromState","setupSliderStateVariables","isInError","verifySetup","setupInitialSliderStateStart","setupInitialSliderStateEnd","sliding","eraserElement","onMoving","groupByField","dateFormat","rounded","displayAsValue","unitSign","displayAsPercent","animationDuration","getSteps","d3Scale","MAX_NUMBER_OF_STEPS","buildSteps","sliderGraph","SliderGraph","sliderLine","SliderLine","sliderRange","SliderRange","sliderButton","SliderButton","btnEl","setActiveWidth","sliderCaption","SliderCaption","setBoundary","firstButton","secondButton","setButtonBoundary","draw","displayCaption","currentValues","initializeSliderRangeState","toEnd","setValue","getPosition","getPercentPosition","getPercent","getCaptionFromValue","getCaptionFromValues","leftBoundary","rightBoundary","setFromString","percentCaption","setAsPercent","setAsValue","currentStep","currentNumberOfSteps","backGround","activePart","buttonOne","buttonTwo","eventMouseDown","eventMouseMove","eventMouseUp","bindEvents","toBeginning","fromValueToPercent","fromPositionToValue","fromValueToPosition","handleStartSlide","isMouseDown","handleMoving","getUserSelect","msUserSelect","webkitUserSelect","getMousePosition","startPositionX","lastElementLeft","origUserSelect","origCursor","cursor","updatePosition","handleButtonNearEnd","origZIndex","currentPos","posx","posy","spanX","snapResult","snapToStep","diffs","diffsNext","diffsPrev","nearest","nearestNext","nearestPrevious","nextStep","previousStep","firstElem","secondElem","getCaptionFromValuesAsPercent","firstAsDate","secondAsDate","svg","scaleBand","scaleLinear","tooltip","oldData","modifyPossibleSinglePointDataIntoValidRange","sliderOuterWidth","sliderOuterHeight","applyTransformOnSvg","setXAndYRange","setXAndYDomain","bars","selectAll","currentSliderValues","renderGraphBars","setGraphBarsTransition","padGraphWithEmptyData","oneStepOfGraph","padBeginningOfGraphWithEmptyData","padEndOfGraphWithEmptyData","difToFillAtStart","nbOfStepsAtStart","lastDataIndex","diffToFillAtEnd","nbOfStepsAtEnd","enter","getFunctionForClass","bandwidth","getFunctionForHeight","getFunctionForX","getFunctionForY","getFunctionForClick","getFunctionForMouseOver","getFunctionForMouseOut","transition","getBarClass","setTooltip","d3Array","d3Collection","d3Interpolate","d3Format","d3Time","d3TimeFormat","d3Color","ordinal","unknown","implicit","band","rescale","paddingInner","paddingOuter","align","ordinalRange","rangeRound","pointish","point","number","deinterpolate","deinterpolateClamp","reinterpolateClamp","reinterpolate","bimap","d0","d1","r0","r1","polymap","bisect","clamp","continuous","deinterpolate$$","piecewise","map$1","interpolateRound","tickFormat","specifier","precision","tickStep","formatSpecifier","precisionPrefix","formatPrefix","precisionRound","precisionFixed","linearish","ticks","nice","interpolateNumber","i0","i1","x0","x1","deinterpolate$1","pow10","powp","logp","log10","log2","reflect","logs","pows","raise","exponent","sqrt","quantile$1","thresholds","quantile","invertExtent","ascending","quantiles","quantize","threshold","number$1","week","day","hour","minute","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","tickInterval","bisector","tickIntervals","durationYear","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","t0","t1","timeYear","timeMonth","timeWeek","timeDay","timeHour","timeMinute","timeSecond","timeMillisecond","timeFormat","utcTime","utcYear","utcMonth","utcWeek","utcDay","utcHour","utcMinute","utcSecond","utcMillisecond","utcFormat","UTC","colors","rainbow$1","ts","rainbow","ramp","sequential","interpolator","category10","category20b","category20c","category20","cubehelix$1","interpolateCubehelixLong","cubehelix","warm","cool","viridis","magma","inferno","plasma","scalePoint","scaleIdentity","scaleLog","scaleOrdinal","scaleImplicit","scalePow","scaleSqrt","scaleQuantile","scaleQuantize","scaleThreshold","scaleTime","scaleUtc","schemeCategory10","schemeCategory20b","schemeCategory20c","schemeCategory20","interpolateCubehelixDefault","interpolateRainbow","interpolateWarm","interpolateCool","interpolateViridis","interpolateMagma","interpolateInferno","interpolatePlasma","scaleSequential","ascendingComparator","lo","hi","descending","variance","deviation","extent","step0","step1","LN10","e10","e5","e2","sturges","LN2","histogram","xz","bin","bins","bisectRight","freedmanDiaconis","scott","mean","median","numbers","arrays","permute","permutes","scan","xi","xj","sum","transpose","matrix","row","ascendingBisect","bisectLeft","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","Map","nest","createResult","rollup","sortValues","keyValue","valuesByKey","sortKey","sortKeys","createObject","setObject","createMap","setMap","Set","basis","v0","v1","v2","v3","t2","t3","basis$1","basisClosed","exponential","hue","gamma","nogamma","rgbSpline","spline","color","rgb","nb","na","zero","am","bm","bs","bi","reA","reB","rgb$1","decompose","scaleX","scaleY","skewX","translateX","translateY","rotate","atan2","degrees","atan","parseCss","cssNode","cssRoot","cssView","transform","parseSvg","svgNode","createElementNS","baseVal","consolidate","interpolateTransform","pxComma","pxParen","degParen","translate","xa","ya","xb","yb","cosh","sinh","tanh","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","epsilon2","rho","b0","rho4","rho2","b1","coshr0","hsl$1","hsl","lab$1","lab","hcl$1","hcl","cubehelixGamma","samples","rgbGamma","rgbBasis","rgbBasisClosed","interpolateTransformCss","interpolateTransformSvg","SQRT2","hsl$2","hslLong","hcl$2","hclLong","cubehelix$2","cubehelixLong","interpolateArray","interpolateBasis","interpolateBasisClosed","interpolateDate","interpolateObject","interpolateString","interpolateZoom","interpolateRgb","interpolateRgbBasis","interpolateRgbBasisClosed","interpolateHsl","interpolateHslLong","interpolateLab","interpolateHcl","interpolateHclLong","interpolateCubehelix","definition","Color","reHex3","Rgb","reHex6","rgbn","reRgbInteger","reRgbPercent","reRgbaInteger","rgba","reRgbaPercent","reHslPercent","hsla","reHslaPercent","named","rgbConvert","Hsl","hslConvert","hsl2rgb","m1","m2","labConvert","Lab","Hcl","deg2rad","sin","rgb2xyz","xyz2lab","Xn","Yn","Zn","lab2xyz","xyz2rgb","hclConvert","rad2deg","cubehelixConvert","Cubehelix","BC_DA","ED","EB","bl","darker","brighter","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","displayable","Kn","formatDecimal","toExponential","coefficient","formatGroup","grouping","thousands","formatDefault","toPrecision","out","formatPrefixAuto","prefixExponent","formatRounded","FormatSpecifier","re","fill","sign","comma","formatTypes","formatLocale","newFormat","valuePrefix","valueSuffix","formatType","valueNegative","maybeSuffix","decimal","defaultLocale","%","formatDefaultLocale","newInterval","floori","offseti","weekday","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","getUTCSeconds","sunday","monday","tuesday","wednesday","thursday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","setMonth","setUTCSeconds","getUTCMinutes","utcMinutes","setUTCMinutes","getUTCHours","utcHours","utcDays","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","setUTCMonth","getUTCMonth","getUTCFullYear","utcMonths","setUTCFullYear","utcYears","timeInterval","timeMilliseconds","utcMilliseconds","timeSeconds","utcSeconds","timeMinutes","timeHours","timeDays","timeWeeks","timeSunday","timeSundays","timeMonday","timeMondays","timeTuesday","timeTuesdays","timeWednesday","timeWednesdays","timeThursday","timeThursdays","timeFriday","timeFridays","timeSaturday","timeSaturdays","timeMonths","timeYears","utcWeeks","localDate","utcDate","newYear","formats","pad","pads","newParse","parseSpecifier","parses","parsePeriod","periodRe","periodLookup","parseShortWeekday","shortWeekdayRe","shortWeekdayLookup","parseWeekday","weekdayRe","weekdayLookup","parseShortMonth","shortMonthRe","shortMonthLookup","parseMonth","monthRe","monthLookup","parseLocaleDateTime","locale_dateTime","parseLocaleDate","locale_date","parseLocaleTime","locale_time","formatShortWeekday","locale_shortWeekdays","formatWeekday","locale_weekdays","formatShortMonth","locale_shortMonths","locale_months","formatPeriod","locale_periods","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCPeriod","dateTime","periods","shortDays","shortMonths","formatRe","formatLookup","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekNumberSunday","formatWeekdayNumber","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekNumberSunday","formatUTCWeekdayNumber","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parseDayOfMonth","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseSeconds","parseWeekNumberSunday","parseWeekdayNumber","parseWeekNumberMonday","parseYear","parseFullYear","parseZone","parseLiteralPercent","utcParse","requote","requoteRe","numberRe","percentRe","getUTCMilliseconds","timeParse","formatIsoNative","parseIsoNative","isoSpecifier","formatIso","parseIso","timeFormatDefaultLocale","timeFormatLocale","isoFormat","isoParse","uniform","normal","mu","sigma","logNormal","randomNormal","irwinHall","bates","randomIrwinHall","lambda","quadIn","quadOut","quadInOut","cubicIn","cubicOut","easeCubicInOut","sinIn","halfPi","sinOut","sinInOut","pi","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","b3","b2","b4","b6","b5","b7","b8","b9","bounceInOut","area","polygon","centroid","cross","lexicographicOrder","computeUpperHullIndexes","points","hull","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","y1","y0","inside","length$1","perimeter","Path","_x0","_y0","_x1","_y1","tree_add","_x","_y","cover","tree","xm","ym","xp","yp","_root","leaf","addAll","yz","tree_cover","tree_data","visit","tree_extent","Quad","tree_find","radius","x2","y2","x3","y3","quads","tree_remove","retainer","removeAll","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","quadtree","Quadtree","leaf_copy","Queue","_size","_call","_error","_tasks","_waiting","_active","_ended","_start","poke","noabort","maybeNotify","concurrency","constant$1","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","asin","halfPi$1","intersect","x10","y10","x32","y32","cornerTangents","rc","cw","x01","y01","ox","oy","x11","y11","x00","y00","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","arc","a0","a1","da","epsilon$1","tau$2","moveTo","a01","a11","a00","a10","da0","da1","rp","padRadius","cornerRadius","rc0","rc1","pi$2","oc","ax","ay","bx","by","kc","acos","lc","lineTo","closePath","Linear","_context","curveLinear","defined0","curve","defined","lineStart","lineEnd","x$$","y$$","area$1","x0z","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","descending$1","identity$1","pie","arcs","pa","Radial","_curve","curveRadial","radial","radialLine","angle","radialLine$1","curveRadialLinear","radialArea","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","circle","bezierCurveTo","Basis","BasisClosed","BasisOpen","basisOpen","Bundle","beta","_basis","_beta","point$1","_k","_x2","_y2","Cardinal","tension","CardinalClosed","CardinalOpen","point$2","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","alpha","_alpha","CatmullRomClosed","CatmullRomOpen","LinearClosed","linearClosed","slope3","h0","h1","s0","s1","slope2","point$3","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","natural","Step","_t","stepBefore","stepAfter","none","series","none$1","stackValue","oz","kz","sz","sij","ki","si","slice$2","silhouette","wiggle","s2","sij0","sij1","s3","sk","skj0","skj1","ascending$1","sums","sum$1","descending$2","insideOut","tops","bottoms","colorRgb","colorHsl","colorHcl","basis$2","basisClosed$1","constant$2","linear$1","exponential$1","array$1","identity$2","cubehelix$$","Dispatch","parseTypenames","typenames","set$1","noop$1","objectConverter","columns","customConverter","inferColumns","rows","columnSet","dsv","parseRows","EOF","eol","EOL","delimiterCode","formatValue","formatRows","formatRow","reFormat","respond","hasResponse","post","fixCallback","defaultMimeType","dsv$1","responseOf","clockNow","setFrame","clearNow","clock","clockSkew","Timer","_time","_next","restart","timerFlush","frame","taskHead","wake","clockLast","nap","poke$1","pokeDelay","taskTail","sleep","clearInterval","setInterval","timeout$1","elapsed","interval$1","total","t0$1","t1$1","exponent$1","identity$3","formatLocale$1","defaultLocale$1","locale$1","slice$3","range$$","point$4","constant$3","interpolate$$","map$2","linear$2","identity$4","quantize$1","threshold$1","date$1","number$2","durationSecond$1","durationMinute$1","durationHour$1","durationDay$1","durationWeek$1","space","creatorInherit","xhtml","creatorFixed","fullname","creator","Local","nextId","filterContextListener","listener","contextListener","event1","event0","__data__","parseTypenames$1","onRemove","typename","__on","onAdd","filterEvents","selection_on","sourceEvent","point$5","ownerSVGElement","createSVGPoint","matrixTransform","getScreenCTM","inverse","mouse","none$2","selection_select","_groups","subgroups","subnode","subgroup","Selection","_parents","selectorAll","selection_selectAll","selection_filter","matcher$1","sparse","update","selection_enter","_enter","EnterNode","datum","_parent","constant$4","bindIndex","exit","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","keyPrefix","selection_data","enterGroup","updateGroup","exitGroup","_exit","selection_exit","selection_merge","groups0","groups1","m0","merges","group0","group1","selection_order","selection_sort","compareNode","ascending$2","sortgroups","sortgroup","selection_call","selection_nodes","selection_node","selection_size","selection_empty","selection_each","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","selection_attr","getAttributeNS","styleRemove","removeProperty","styleConstant","priority","styleFunction","selection_style","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise$1","selection_raise","lower","selection_lower","selection_append","constantNull","selection_insert","selection_remove","selection_datum","window$$","initEvent","dispatchConstant","dispatchFunction","selection_dispatch","timing","schedules","__transition","emptyOn","emptyTween","ease","CREATED","set$2","STARTING","get$1","SCHEDULED","STARTED","ENDED","ENDING","interrupt","selection_interrupt","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","interpolate$1","attrRemove$1","attrRemoveNS$1","attrConstant$1","value1","value00","interpolate0","value0","attrConstantNS$1","attrFunction$1","value10","attrFunctionNS$1","transition_attr","interpolateTransform$2","attrTween","attrTweenNS","_value","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","transition_filter","Transition","_name","transition_merge","start$1","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","Selection$1","styleRemove$1","styleRemoveEnd","styleConstant$1","styleFunction$1","transition_style","interpolateTransform$1","styleTween","transition_styleTween","textConstant$1","textFunction$1","transition_text","transition_transition","id0","id1","newId","defaultTiming","selection_transition","root$1","identity$5","scale0","scale1","center","entering","__axis","axis","orient","tickValues","tickArguments","spacing","tickSizeInner","tickPadding","range0","range1","tickExit","tickEnter","epsilon$2","tickSizeOuter","slice$4","tickSize","axisTop","axisRight","axisBottom","axisLeft","defaultSeparation","meanX","meanXReduce","maxY","maxYReduce","leafLeft","leafRight","cluster","previousNode","eachAfter","separation","nodeSize","node_each","node_eachBefore","node_eachAfter","node_sum","node_sort","eachBefore","node_path","ancestor","leastCommonAncestor","aNodes","ancestors","bNodes","node_ancestors","node_descendants","node_leaves","leaves","node_links","links","hierarchy","childs","valued","defaultChildren","computeHeight","node_copy","copyData","Node$2","shuffle$1","enclose","circles","encloseN","encloses","dr","l2","l0","l1","enclose1","enclose2","enclose3","r2","x21","y21","r21","r3","a2","c2","a3","c3","ab","place","db","dc","intersects","distance2","Node$1","packEnclose","sj","aa","ba","oa","pack","optional","constantZero","constant$5","defaultRadius","radiusLeaf","packChildren","translateChild","roundNode","treemapDice","positionNode","defaultId","defaultParentId","parentId","stratify","nodeId","nodeKey","nodeByKey","keyPrefix$1","ambiguous","preroot","defaultSeparation$1","nextLeft","nextRight","moveSubtree","wm","wp","executeShifts","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","tx","kx","ky","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","treemapSlice","squarifyRatio","ratio","sumValue","minValue","maxValue","newRatio","minRatio","dice","index$1","treemap","paddingStack","paddingLeft","paddingTop","paddingRight","paddingBottom","tile","squarify","valueOffset","valueTarget","valueLeft","valueRight","yk","xk","sliceDice","center$1","force","sx","sy","initialize","constant$6","jiggle","x$1","vx","y$1","vy","collide","quad","rj","ri","yi","strength","ri2","visitAfter","prepare","radii","index$2","defaultStrength","distances","strengths","bias","nodeById","initializeStrength","initializeDistance","distance","x$2","y$2","simulation","alphaMin","stepper","alphaTarget","alphaDecay","forces","velocityDecay","fy","initializeNodes","initialRadius","initialAngle","initializeForce","manyBody","accumulate","theta2","distanceMax2","distanceMin2","distanceMin","distanceMax","theta","x$3","y$3","nopropagation","noevent","dragDisable","__noselect","MozUserSelect","dragEnable","noclick","constant$7","DragEvent","subject","defaultFilter","defaultContainer","defaultSubject","drag","mousedowned","touchstarted","touchmoved","touchended","touchending","gesture","beforestart","mousemoved","mouseupped","mousemoving","gestures","sublisteners","constant$8","x$4","y$4","RedBlackTree","RedBlackNode","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","createEdge","edge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","clipEdges","epsilon$3","createCell","site","cellHalfedgeAngle","cell","va","vb","cellHalfedgeStart","cellHalfedgeEnd","sortCellHalfedges","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","v00","v01","v11","v10","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","epsilon2$1","ha","hc","circlePool","firstCircle","detachCircle","Beach","createBeach","beach","beachPool","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","voronoi","polygons","triangles","constant$9","ZoomEvent","Transform","__zoom","identity$6","nopropagation$1","noevent$1","defaultFilter$1","defaultExtent","SVGElement","defaultTransform","wheeled","dblclicked","k0","k1","constrain","invertX","invertY","Gesture","wheelidled","wheel","deltaY","deltaMode","wheelDelay","moved","touch0","touch1","touchstarting","touchDelay","dp","dl","scaleBy","scaleTo","translateBy","scaleExtent","translateExtent","constant$10","BrushEvent","nopropagation$2","noevent$2","type$1","defaultFilter$2","defaultExtent$1","local$1","__brush","empty$1","brushSelection","dim","brushX","brush$1","brushY","brush","XY","cursors","handles","redraw","started","handleSize","emitter","Emitter","point1","shifting","lockX","lockY","moving","point0","MODE_SPACE","MODE_DRAG","signX","e0","e1","signY","n0","n1","MODE_HANDLE","MODE_CENTER","flipX","flipY","ended","keydowned","keyupped","signsX","signsY","selection1","selection0","starting","compareValue","chord","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","max$1","tau$3","di","dj","subindex","sortChords","constant$11","defaultSource","defaultTarget","defaultRadius$1","defaultStartAngle","defaultEndAngle","ribbon","slice$5","sr","sa0","halfPi$2","sa1","sx0","sy0","ta0","ta1","quadraticCurveTo","adder","Adder","add$1","bv","av","pi$4","asin$1","halfPi$3","haversin","sin$1","noop$2","streamGeometry","geometry","streamGeometryType","streamLine","coordinates","closed","coordinate","streamPolygon","polygonStart","polygonEnd","geoStream","streamObjectType","areaRingStart","areaStream","areaPointFirst","areaRingEnd","areaPoint","lambda00","phi00","phi","radians","lambda0","cosPhi0","cos$1","quarterPi","sinPhi0","dLambda","sdLambda","adLambda","cosPhi","sinPhi","areaRingSum","area$2","areaSum","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","sqrt$1","boundsPoint","range$1","lambda0$1","lambda1","phi0","phi1","linePoint","equatorial","inflection","phii","lambda2","lambdai","degrees$1","antimeridian","boundsLineStart","boundsStream","boundsLineEnd","boundsRingPoint","deltaSum","lambda00$1","phi00$1","boundsRingStart","boundsRingEnd","epsilon$4","rangeCompare","rangeContains","bounds","feature","deltaMax","centroidPoint","centroidPointCartesian","W0","X0","Y0","Z0","centroidLineStart","centroidStream","centroidLinePointFirst","z0","centroidLinePoint","W1","X1","Y1","Z1","centroidLineEnd","centroidRingStart","centroidRingPointFirst","centroidRingEnd","centroidRingPoint","lambda00$2","phi00$2","cz","X2","Y2","Z2","centroid$1","epsilon2$2","constant$12","rotationIdentity","tau$4","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","circleStream","direction","cosRadius","sinRadius","circleRadius","circle$1","ring","clipBuffer","lines","rejoin","clipLine","pointEqual","Intersection","clipPolygon","segments","compareIntersection","startInside","clip","segment","link$1","isSubject","clipExtent","corner","comparePoint","activeStream","polygonInside","winding","bufferStream","cleanInside","clipStream","v_","x_","y_","x__","y__","v__","clipMin","clipMax","extent$1","cacheStream","lengthLineStart","lengthStream","lengthPointFirst","lengthLineEnd","lambda0$2","sinPhi0$1","cosPhi0$1","lengthPoint","cosDelta","sinDelta","lengthSum","length$2","object$1","graticuleX","graticuleY","graticule","DX","DY","outline","extentMajor","extentMinor","stepMajor","stepMinor","interpolate$2","sy1","kx0","ky0","kx1","ky1","identity$7","areaRingStart$1","areaStream$1","areaPointFirst$1","areaPoint$1","x0$1","y0$1","areaRingSum$1","areaRingEnd$1","boundsPoint$1","x0$2","y0$2","centroidPoint$1","X0$1","Y0$1","Z0$1","centroidLineStart$1","centroidStream$1","centroidPointFirstLine","centroidPointLine","x0$3","y0$3","X1$1","Y1$1","Z1$1","centroidLineEnd$1","centroidRingStart$1","centroidPointFirstRing","centroidRingEnd$1","centroidPointRing","x00$1","y00$1","X2$1","Y2$1","Z2$1","PathContext","pointRadius","pointLineStart","pointLine","lineEndPolygon","PathString","pointCircle","circle$2","index$3","contextStream","projectionStream","projection","boundsStream$1","polygonContains","sum$2","sinPhi1","cosPhi1","absDelta","phiArc","pointVisible","sink","pointRing","ringSink","ringStart","ringEnd","ringSegments","ringBuffer","polygonStarted","validSegment","rotatedStart","sphere","clipAntimeridianLine","sign0","sign1","clipAntimeridianIntersect","sinLambda0Lambda1","clipAntimeridianInterpolate","clipCircle","cr","c0","point2","smallRadius","notHemisphere","two","pb","n2","n2n2","n1n2","determinant","c1","n1xn2","uu","polar","meridian","q1","transform$1","transform$2","Transform$1","fit","project","fitSize","fitExtent","resample","delta2","resample$1","resampleNone","resampleLineTo","phi2","dx2","dy2","dz","cosMinDistance","resampleStream","ringPoint","b00","c00","projectionMutator","projectAt","projectRotate","projectTransform","recenter","preclip","clipAntimeridian","postclip","projectResample","transformRadians","clipAngle","conicProjection","parallels","conicEqualAreaRaw","r0y","conicEqualArea","albers","multiplex","streams","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualArea","azimuthalEqualAreaRaw","azimuthalEquidistant","azimuthalEquidistantRaw","mercatorRaw","log$1","mercator","mercatorProjection","clipAuto","tany","conicConformalRaw","pow$1","sign$1","conicConformal","equirectangularRaw","equirectangular","conicEquidistantRaw","gy","nx","conicEquidistant","gnomonicRaw","gnomonic","orthographicRaw","orthographic","stereographicRaw","stereographic","transverseMercatorRaw","transverseMercator","polyIn","custom","polyOut","polyInOut","overshoot","backIn","backOut","backInOut","tau","amplitude","period","elasticIn","elasticOut","elasticInOut","pi$1","tau$1","epsilon","tauEpsilon","arcTo","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","treeProto","slice$1","await","awaitAll","_line","_point","cross$1","tan30","tan30_2","diamond","ka","kr","star","square","sqrt3","triangle","wye","_x3","_x4","_y3","_y4","bundle","cardinal","_x5","_y5","cardinalClosed","cardinalOpen","x23","y23","catmullRom","catmullRomClosed","catmullRomOpen","_t0","px","py","csv","csvParse","csvParseRows","csvFormat","csvFormatRows","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatRows","createContextualFragment","responseXML","csv$1","tsv$1","performance","array$2","cubehelix$3","xlink","xmlns","vendorMatches","element$1","classed","selection_prototype","descendants","resquarify","_squarify","grandpa","uncle","applyX","applyY","rescaleX","rescaleY","xy","nw","ne","se","sw","pi$3","Feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","areaRing","areaSum$1","cxcy","randomUniform","randomLogNormal","randomBates","randomExponential","easeLinear","easeQuad","easeQuadIn","easeQuadOut","easeQuadInOut","easeCubic","easeCubicIn","easeCubicOut","easePoly","easePolyIn","easePolyOut","easePolyInOut","easeSin","easeSinIn","easeSinOut","easeSinInOut","easeExp","easeExpIn","easeExpOut","easeExpInOut","easeCircle","easeCircleIn","easeCircleOut","easeCircleInOut","easeBounce","easeBounceIn","easeBounceOut","easeBounceInOut","easeBack","easeBackIn","easeBackOut","easeBackInOut","easeElastic","easeElasticIn","easeElasticOut","easeElasticInOut","polygonArea","polygonCentroid","polygonHull","polygonLength","symbolCircle","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolTriangle","symbolWye","curveBasisClosed","curveBasisOpen","curveBasis","curveBundle","curveCardinalClosed","curveCardinalOpen","curveCardinal","curveCatmullRomClosed","curveCatmullRomOpen","curveCatmullRom","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","stackOffsetExpand","stackOffsetNone","stackOffsetSilhouette","stackOffsetWiggle","stackOrderAscending","stackOrderDescending","stackOrderInsideOut","stackOrderNone","stackOrderReverse","dsvFormat","packSiblings","treemapBinary","treemapSliceDice","treemapSquarify","treemapResquarify","forceCenter","forceCollide","forceLink","forceManyBody","forceSimulation","forceX","forceY","zoomIdentity","zoomTransform","geoAlbers","geoAlbersUsa","geoArea","geoAzimuthalEqualArea","geoAzimuthalEqualAreaRaw","geoAzimuthalEquidistant","geoAzimuthalEquidistantRaw","geoBounds","geoCentroid","geoCircle","geoClipExtent","geoConicConformal","geoConicConformalRaw","geoConicEqualArea","geoConicEqualAreaRaw","geoConicEquidistant","geoConicEquidistantRaw","geoDistance","geoEquirectangular","geoEquirectangularRaw","geoGnomonic","geoGnomonicRaw","geoGraticule","geoInterpolate","geoLength","geoMercator","geoMercatorRaw","geoOrthographic","geoOrthographicRaw","geoPath","geoProjection","geoProjectionMutator","geoRotation","geoStereographic","geoStereographicRaw","geoTransform","geoTransverseMercator","geoTransverseMercatorRaw","preservePositionOriginalValues","accept","restoreFacetPreservePositionValue","filterByContainer","filterBy","DROPDOWN_MIN_WIDTH","DROPDOWN_WIDTH_RATIO","handleNoResults","isFacetSearchScrolledIntoView","positionSearchResults","DEBOUNCE_SCROLL_WAIT","facetSearchElement","facetTop","facetBottom","dropdownTop","dropdownBottom","FacetValuesList_1","BreadcrumbValueElement_1","BreadcrumbValuesList_1","OmniboxValueElement_1","OmniboxValuesList_1","FacetValuesOrder_1","facetClassId","currentPage","canFetchMore","showingWaitAnimation","listenToQueryStateChange","availableSorts","omniboxZIndex","omniboxIndex","checkForComputedFieldAndSort","checkForValueCaptionType","checkForCustomSort","initFacetQueryController","initQueryEvents","initComponentStateEvents","initOmniboxEvents","initBreadCrumbEvents","initSearchAlertEvents","updateNumberOfValues","resize","initBottomAndTopSpacer","buildFacetContent","facetSettings","enableSettingsFacetState","loadOnce","loadSavedState","selectValue","facetValuesList","facetValueHasChanged","selectMultipleValues","deselectValue","unselect","deselectMultipleValues","excludeValue","exclude","excludeMultipleValues","unexcludeValue","unExclude","unexcludeMultipleValues","toggleSelectValue","toggleSelect","toggleExcludeValue","toggleExclude","getDisplayedValues","displayed","getAllCurrentlyDisplayed","getExcludedValues","rebuildValueElements","updateQueryStateModel","switchToAnd","switchToOr","updateSort","triggerNewQuery","unfadeInactiveValuesInMainList","fadeInactiveValuesInMainList","showWaitingAnimation","headerElement","hideWaitingAnimation","processFacetSearchAllResultsSelected","valuesForAnalytics","ensureFacetValueIsInList","valuesThatStays","pinFacetPosition","pinnedViewportPosition","showMore","nbAvailableValues","triggerMoreQuery","showLess","lessElement","moreElement","sortValuesDependingOnStatus","collapse","collapseFacet","expandFacet","updateVisibilityBasedOnDependsOn","groupByResult","lastGroupByResult","processNewGroupByResults","BreadcrumbValueList","BreadcrumbValueElement","excludedValues","selectedValues","buildAsString","lineThrough","initFacetValuesList","FacetValuesList","initFacetSearch","isAnyValueCurrentlyDisplayed","includedAttributeId","excludedAttributeId","operatorAttributeId","lookupValueAttributeId","componentStateId","includeInOmnibox","handlePopulateOmnibox","includeInBreadcrumb","handleClearBreadcrumb","handleOmniboxWithStaticValue","eventArg","completeQueryExpression","displayedValue","numberOfValuesInOmnibox","gotAMatch","OmniboxValuesList","OmniboxValueElement","newFacetValues","updateValues","isMultiValueField","triggerUpdateDeltaQuery","updateDeltaWithFilteredFacetValues","ensurePinnedFacetHasntMoved","updateExcludedQueryStateModel","updateIncludedQueryStateModel","updateOperatorQueryStateModel","updateLookupValueQueryStateModel","rebuild","shouldRenderMoreLess","updateMoreLess","shouldRenderFacetSearch","updateSearchInNewDesign","moreValuesAvailable","renderer","searchButton_1","withNo","excludeIcon","listItem","stylishCheckbox","lessElementIsShown","getMinimumNumberOfValuesToDisplay","footerElement","handleClickMore","handleClickLess","enableFacetSearch","bottomSpace","paddingContainer","topSpace","unpinFacetPosition","pinnedTopSpace","pinnedBottomSpace","included","valueToSet_1","handleQueryStateChangedOperator","handleQueryStateChangedIncluded","includedChanged","toUnSelect","handleQueryStateChangedExcluded","excludedChanged","toUnExclude","handleLookupvalueChanged","lookupFieldChanged","lookupvalue","queryStateAttributes","lookupValueChanged","handleOmniboxWithSearchInFacet","searchParameters","facetSearchDelay","updateCountsFromNewValues","importActiveValuesFromOtherList","buildHeader","buildMore","buildLess","buildFooter","headerIcon","enableCollapse","settingsKlass","enableSettings","sortKlass","built","facetSort","shouldFacetUnpin","unpinnedViewportPosition","isFacetPinned","elementToScroll_1","scrollContainer","currentViewportPosition_1","offset_1","scrollToOffset_1","Window","heightBottom","attempts","more","moreAction","less","lessAction","groupByValue","createFromGroupByValue","lastSelectedValueIndex_1","FacetValuesOrder","reorderValues","dependsOn","doesParentFacetHasSelectedValue","depend","showIcon","enableTogglingOperator","numberOfValuesInBreadcrumb","computedFieldFormat","computedFieldCaption","updateCountsFromNewValue","occurrences","cloneWithZeroOccurrences","cloneWithDelta","getFormattedCount","getFormattedComputedField","createFromValue","createFromFieldValue","computedFieldResults","at","otherValue","myValue","newValues","unfilteredValue","filteredValue","mergeWithUnfilteredFacetValues","unfiltered","excludeLastIndex","nbExclude","excludes","facetSearchValuesListKlass","showingFacetSearchWaitAnimation","moreValuesToFetch","searchBarIsAnimating","lastSearchWasEmpty","shouldPositionSearchResults","onDocumentClick","handleClickElsewhere","buildSearchMobile","buildBaseSearch","searchBar","self_1","cancelAnyPendingSearchOperation","hideSearchResultsElement","triggerNewFacetSearch","showFacetSearchWaitingAnimation","facetSearchPromise","processNewFacetSearchResults","hideFacetSearchWaitingAnimation","handleFacetSearchFocus","magnifier","clearIcon","middle","handleFacetSearchKeyUp","handleFacetSearchClear","detectSearchBarAnimation","toOpen","showOrHideClearElement","startNewSearchTimeout","buildParamsForNormalSearch","handleKeyboardNavigation","buildParamsForExcludingCurrentlyDisplayedValues","keyboardNavigationEnterPressed","keyboardNavigationDeletePressed","moveCurrentResultDown","moveCurrentResultUp","highlightCurrentQueryWithinSearchResults","buildParamsForFetchingMore","performSelectActionOnCurrentSearchResult","selectAllValuesMatchingSearch","performExcludeActionOnCurrentSearchResult","facetSearchTimeout","valueInInput","facetSearchParameters","rebuildSearchResults","showSearchResultsElement","makeFirstSearchResultTheCurrentOne","selectAllMobile","setupFacetSearchResultsEvents","handleFacetSearchResultsScroll","makeCurrentResult","touchDragging","mouseDragging","elementHeight","bottomPosition","captionElement","getSelectables","selectable","allSelectables","highlightAndShowCurrentResultWithKeyboard","offsetTop","valueElement","toggleExcludeWithUA","animationName","ValueElement_1","keepDisplayedValueNextTime","bindEvent","displayNextTime","pinFacet","ValueElement","onExclude","eventBindings","omniboxObject","isOmnibox","handleEventForCheckboxChange","handleEventForExcludedValueElement","handleEventForValueElement","setCssClassOnListValueElement","unexclude","getAnalyticsFacetMeta","handleSelectValue","handleExcludeClick","omniboxCloseEvent","SPACEBAR","excludeAction","selectAction","buildExcludeIcon","buildValueComputedField","labelDiv","buildValueCheckbox","buildValueStylishCheckbox","buildValueIcon","valueCount","buildValueCount","buildValueCaption","addFocusAndBlurEventListeners","getValueIcon","buildValueIconFromSprite","valueIcon","countElement","activeSort","reorderValuesWithCustomOrder","reorderValuesWithCustomCaption","customSortsLowercase","valueIndexPair","customSortDirection","customSortDirectionChange","enabledSortsIgnoreRenderBecauseOfPairs","filterDuplicateForRendering","settingsButton","settingsIcon","settingsPopup","enabledSorts","sortSection","buildSortSection","enabledSortsAllowDirection","directionSection","buildDirectionSection","saveStateSection","buildSaveStateSection","clearStateSection","buildClearStateSection","hideSection","buildHideSection","showSection","buildShowSection","appendCommon","appendIfNotUndefined","handleMouseEventOnButton","facetStateLocalStorage","currentStateIncluded","includedStateAttribute","currentStateExcluded","excludedStateAttribute","currentStateOperator","operatorStateAttribute","loadedFromSettings","saveState","getPopupAlignment","sortItems","relatedSort","selectItem","unselectItem","sortSectionIcon","buildIcon","sortSectionItems","buildItems","sortTitle","buildSortSectionItems","enabledSort","buildItem","description","handleClickSortButton","closePopupAndUpdateSort","facetSortDescription","directionToggle","directionAscendingSection","buildAscendingOrDescendingSection","iconAscending","iconDescending","directionItemsAscending","buildAscendingOrDescending","handleDirectionClick","directionDescendingSection","directionItemsDescending","getItems","directionItems","getCurrentDirectionItem","saveStateItems","saveStateItem","handleSaveStateClick","clearStateItems","clearStateItem","handleClearStateClick","hideItems","hideItem","showItems","showItem","insideIcon","handleClickSettingsButtons","activateDirectionSection","disableDirectionSection","unselectSection","closeTimeout","mouseLeave","mouseEnter","alignmentHorizontal","alignmentVertical","sortToActivate","newSortToEnable","removeEnabledSortsBasedOnFacetType","facetRange","alphaascending","alphadescending","computedfieldascending","computedfielddescending","chisquare","nosort","facetValueElementKlass","valueList","currentlyDisplayed","getAllFacetValue","allValues","getValuesToBuildWith","docFragment","facetValueShouldBeRemoved","valueListElement","buildNewDesign","buildOldDesign","rebuildOperatorToggle","collapseElement","expandElement","valueToSet","titleSection","iconElement","buildTitle","waitElement","buildWaitAnimation","settingsSection","buildEraser","operatorElement","buildOperatorToggle","buildCollapse","buildExpand","newElement","cssClassForIcon","handleOperatorClick","operatorNow","operatorBefore","eraser","cmp","getBreadcrumbTooltip","clicked","tooltipParts","breadcrumbValueElementKlass","setExpandedAndCollapsed","buildExpanded","collapsed","buildCollapsed","elementBreadcrumb","numberOfSelected","numberOfExcluded","sep","multi","multiIcon","multiExcluded","multiExcludedIcon","valueElements","toolTips","separatorsClicked","valuesToBuildWith","valueAlreadyInFacet","omniboxValueElementKlass","buildOmniboxForOneRow","buildFinalOmniboxElement","selectCallback","logAnalyticsEvent","excludeCallback","omniboxValueElement","omniboxRowContent","highlightOmniboxMatch","omniboxRow","buildOmniboxHeader","orignalStr","strippedFacetValues","promises","mainInterface","jQueryIsDefined","coveo","returnValueForThisElement","jQueryDefinedOnWindow","jQueryDefinedOnCoveoObject","TemplateHelpers_1","TemplateHelpers","registerFieldHelper","fieldHelpers","registerTemplateHelperInUnderscore","helpers","getHelper","getHelpers","resolveQueryResult","resultCurrentlyBeingRendered","resolveTermsToHighlight","currentQueryResult","resolvePhrasesToHighlight","termsToHighlightAreDefined","exportAllHelpersGlobally","scope","listOfAddresses","createIcon","templatesToLoad","defaultTmpl","atLeastOneWasLoaded","toLoad","byteMeasure","possibleInternalQuickview","qv","preprocessIconInfo","small","shouldDisplayLabel","withLabel","labelValue","DefaultQuickviewTemplate_1","bindedHandleEscapeEvent","contentTemplate","DefaultQuickviewTemplate","iconForQuickview","captionForQuickview","bindClick","openerObject","prepareOpenQuickviewObject","createModalBox","bindQuickviewEvents","animateAndOpen","hasHtmlVersion","alwaysShow","closeQuickview","loadingAnimation","bindIFrameEscape","bindEscape","quickviewDocument","durationMs","computedModalBoxContent","setQuickviewSize","prepareQuickviewContent","enableLoadingAnimation","contentWindow","NONE","loadingAnimationSelector","loadingAnimationTemplate","HIGHLIGHT_PREFIX","termsToHighlightWereModified","iframe","buildIFrame","author","beforeLoad","dataToSendOnOpenQuickView","checkIfTermsToHighlightWereModified","handleTermsToHighlight","maximumDocumentSize","renderHTMLDocument","triggerQuickviewLoaded","renderErrorReport","computeHighlights","isNewQuickviewDocument","writeToIFrame","wrapPreElementsInIframe","errorStatus","errorString","toWrite","write","afterLoad","eventArgs","keywordsState","highlightsCount","idParts","getHighlightIdParts","idIndexPart","idOccurencePart","idTermPart","getHighlightInnerText","termsCount","occurence","embeddedWordParts","getHightlightEmbeddedWordIdParts","embeddedWord","minHeight","resolvedWords","resolveOriginalTermFromHighlight","backgroundColor","currentIndex","buildWordButton","embedded","originalTerm","expansion","wordState","wordHtml","quickviewName","navigate","quickviewUpArrow","quickviewUpArrowIcon","quickviewDownArrow","quickviewDownArrowIcon","borderColor","getSaturatedColor","backward","toIndex","scroll","getScrollingElement","pdf","scrollIntoView","iFrame","iFrameWrapper","iframeWindow","hsv","ResponsiveDefaultResultTemplate_1","elementClassId","reachedTheEndOfResults","successiveScrollCount","resultTemplate","waitAnimationContainer","infiniteScrollContainer","showOrHideElementsDependingOnState","handleChangeLayout","enableInfiniteScroll","handlePageChanged","handleScrollOfResultList","setupTemplatesVersusLayouts","layouts","loadTemplatesFromCache","pageTemplateNames","templateName","getAutoSelectedFieldsToInclude","getMinimalFieldsToInclude","layoutClassToAdd","ResponsiveDefaultResultTemplate","renderResults","resultsElement","triggerNewResultDisplayed","triggerNewResultsDisplayed","buildResults","buildResult","autoCreateComponentsInsideResult","displayMoreResults","isCurrentlyFetchingMoreResults","hasPotentiallyMoreResultsToDisplay","enableInfiniteScrollWaitingAnimation","showWaitingAnimationForInfiniteScrolling","fetchingMoreResults","hideWaitingAnimationForInfiniteScrolling","MAX_AMOUNT_OF_SUCESSIVE_REQUESTS","getDisplayedResults","getDisplayedResultsElements","resultComponentBindings","cancelFetchingMoreResultsIfNeeded","mobileScrollContainer","scrollBackToTop","isScrollingOfResultListAlmostAtTheBottom","infiniteScrollPageSize","autoSelectFieldsToInclude","otherResultListsElements","resultListElement","otherFields","otherResultListElement","otherResultListInstance","isScrollAtBottomForWindowElement","isScrollAtBottomForHtmlElement","windowHeight","bodyHeight","hasQuery","hasResults","showIfQuery","showIfNoQuery","showIfResults","showIfNoResults","waitAnimation","spinner","spinnerContainer","currentMode","resultList","lastResults","gbr","aggregate","globalComputedFieldResults","HTMLInputElement","Query","Term","enableSearchAsYouType","autoFocus","addParameters","searchAsYouTypeTimeout","searchAsYouTypeDelay","enableQuerySyntax","addSearchButton","anchor","searchButton","enableOmnibox","searchbox","QueryStateModel_2","FieldAddon_1","QueryExtensionAddon_1","RevealQuerySuggestAddon_1","OldOmniboxAddon_1","MINIMUM_EXECUTABLE_CONFIDENCE","movedOnce","skipRevealAutoSuggest","enableFieldAddon","FieldAddon","fieldAlias","listOfFields","enableQueryExtensionAddon","QueryExtensionAddon","Any","enableRevealQuerySuggestAddon","RevealQuerySuggestAddon","OldOmniboxAddon","omniboxTimeout","handleBeforeRedirect","isRevealAutoSuggestion","setupMagicBox","getInput","modifyEventTo","getOmniboxAnalyticsEventCause","placeholder","handleRevealAutoSuggestionWithKeyboard","handleRevealAutoSuggestionsWithMouse","buildCustomDataForPartialQueries","handleTabPress","handleSuggestions","modifyCustomDataOnPending","clearSearchAsYouType","pendingEvt","newCustomData_1","cleanCustomData","toClean","rejectLength","reducedToRejectLengthOrLess","totalSoFar","suggestionsEventArgs","omnibox","preprocessResultForQueryArgs","notQuotedValues","fieldNames","handleTabPressForRevealSuggestions","handleTabPressForOldOmniboxAddon","firstSelected","firstSelectable","analyticsEvent","shouldExecuteQuery","textSuggestion","pendingEvent","forceExecuteQuery","suggestionShouldTriggerQuery","suggestions_1","executableConfidence","enableSimpleFieldAddon","getSuggestion","hashString","hashToString","hashValueToSuggestion","simpleFieldNames","fieldName","currentField","fieldQuery","INDEX","includeInQuery","withAt","fieldNameLC","matchFields","patternType","attributeNames","used","queryExtension","queryExtensionArgumentResults","getExtensions","extensionName","matchExtensions","extension","argumentNames","argumentName","suggestiontHtml","notMatched","corrected","isPartialMatch","firstFail","payload","enableWordCompletion","completions","completion","buildPopulateOmniboxEventArgs","rowsToSuggestions","getCurrentQueryExpression","cursorPos","getRegexToSearch","strValue","getQueryExpressionBreakDown","queryWords","searchValue","clearCurrentExpression","insertAt","toInsert","replaceCurrentExpression","currentQueryExpression","allQueryExpressions","cursorPosition","handleAfterInitialization","getBreadcrumbs","lastBreadcrumbs","clearBreadcrumbs","drawBreadcrumb","breadcrumbItems","bcrumb","clearText","clearAction","startEnd","valueA","valueB","startEndA","startEndB","ignoreNextQuerySuccess","needToReset","handleQueryStateModelChanged","setPage","analyticCause","getMaxNumberOfPagesForCurrentResultsPerPage","getFirstResultNumber","previousPage","nextPage","maximumNumberOfResultsFromIndex","getNumberOfResultsPerPage","triggeredByPager","attrValue","totalCountFiltered","pagerBoundary","computePagerBoundary","_loop_1","listItemValue","this_1","handleClickPage","enableNavigationButton","lastResultPage","renderNavigationButton","lastValidPage","possibleValidPage","getQueryEventArgs","lastNumberOfResultsPerPage","resultPerPage","lastPageNumber","halfLength","numberOfPages","firstPageNumber","endPageNumber","buttonLink","buttonImg","handleClickPrevious","handleClickNext","fromFirstResultsToPageNumber","maxNumberOfPages","currentResultsPerPage","getInitialChoice","initComponent","setResultsPerPage","choicesDisplayed","initialChoice","numResultsList","ResponsiveResultLayout_1","defaultLayout","currentActiveLayouts","resultLayoutSection","populate","ResponsiveResultLayout","isLayoutDisplayedByButton","getModelValue","setModelValue","setLayout","resultsLayoutChangeTo","getCurrentLayout","disableLayouts","disableLayout","remainingValidLayouts","firstPossibleValidLayout","enableLayout","enableLayouts","hideButton","showButton","updateSelectorAppearance","btn","shouldShowSelector","modelLayout","newLayout","populateArgs","validLayouts","addButton","activateAction","activeLayout","mobileLayouts","tabletLayouts","desktopLayouts","resultLayout","enableAndDisableLayout","needMediumMode","needToDisable","needToEnable","excerptHighlights","os","logOpenDocument","quickviewShouldBeOpened","titleTemplate","newTitle","parseStringTemplate","titleHighlights","bindEventToOpen","openLink","logAnalytics","getResultUri","openLinkInNewWindow","openLinkInOutlook","hasOutlookField","openLinkAsConfigured","toExecuteOnOpen","bindOnClickIfNotUndefined","bindOpenQuickviewIfNotUndefined","setHrefIfNotAlready","openLinkThatIsNotAnAnchor","elementIsAnAnchor","alwaysOpenInNewWindow","openInOutlook","hrefTemplate","setField","isUriThatMustBeOpenedInQuickview","readFromObject","newKey","clickable","buildThumbnailImage","resizeContainingFieldTable","setEmptyThumbnailClass","closestFieldTableElement","fieldTable","updateToggleHeight","noThumbnailClass","ValueRow","isTogglable","toggleContainer","buildToggle","isExpanded","minimize","toggleCaption","expandedTitle","toggleIcon","toggleButtonInsideTable","minimizedTitle","updateToggleContainerHeight","allowMinimization","toggleButton","minimizedByDefault","toggleAction","toggleContainerHeight","getValueContainer","showOnlyWithHelper","fieldValueClassId","simpleOptions","helperOptions","toFilter","toKeep_1","optionKey","loadedValueFromComponent","splitValues","appendValuesToDom","textCaption","prependTextCaptionToDom","renderOneValue","toRender","getHelperOptions","fullDateStr","getFullDate","htmlValue","bindEventOnValue","inlineOptions","eval","fullDateOptions","displaySeparator","renderTextCaption","facetAttributeName","atLeastOneFacetIsEnabled","selected_1","alt","presision","parentsXml","renderParentsXml","renderUri","seperators","seperator","buildSeperator","parent_1","buildHtmlToken","ellipsis_1","buildEllipsis","ellipsisSeperator","contentWidth","tokensWidth","seperatorWidth","ellipsisWidth","availableWidth","hidden_1","i_1","stringAndHoles","printableUri","printableUriHighlights","bindLogOpenDocument","ellipsis","modifiedName","srcElement","hideNext","correctedTerm","handlePrepareQueryBuilder","handleProcessNewQueryResults","doQueryWithCorrectedTerm","queryCorrections","enableAutoCorrection","originalQuery","correctedQuery","correctedSentence","buildCorrectedSentence","noResultsFor","automaticCorrect","searchTerm","correction","tagStart","tagEnd","currentOffset","wordCorrections","wordCorrection","optionsElement","buildPrevious","buildReset","buildRetry","back","retry","setErrorTitle","errorTitle","h3","h4","closePopup","showDetailedError","moreInfo_1","buildErrorInfo","textArea","infoLabel","menuData","onOpen","maximumExpandedResults","handlepreprocessResults","foldWithParent","rootNode","NEGATIVE_INFINITY","resultNode","findUniqueId","POSITIVE_INFINITY","rootResult","resultNodeToQueryResult","attachments","attachment","defaultGetResult","topResult","defaultGetMoreResults","resultNodes","_folded","addLoadMoreHandler","enableExpand","moreResults","expandExpression","rearrange","putInQueryBuilder","handlePreprocessMoreResults","getResults","getMoreResults","validSorts","sortIsField","sortNeedsDirection","validDirections","getValueFromResult","equals","sortsNeedingDirection","setStateEmpty","hiddenDescriptionRemoved","getDescription","hiddenQuery","maximumDescriptionLength","HierarchicalFacetValuesList_1","HierarchicalFacetSearchValuesList_1","HierarchicalFacetSearch_1","HierarchicalBreadcrumbValuesList_1","OmniboxHierarchicalValuesList_1","HierarchicalFacetValueElement_1","shouldReshuffleFacetValuesClientSide","firstPlacement","correctLevels","numberOfValuesToShow","originalNumberOfValuesToShow","selectChildren","ensureValueHierarchyExists","valueHierarchy","getValueFromHierarchy","selectChilds","flagParentForSelection","deselectChildren","hasChilds","activeChilds","valueToCompare","getFacetValueFromHierarchy","hasChildSelected","deselectChilds","deselectParent","unflagParentForSelection","excludeChildren","excludeChilds","unexludeChildren","unexcludeChilds","childInHierarchy","getSelf","valFromHierarchy","getElementFromFacetValueList","getValueHierarchy","showChilds","keepOpened","hideChilds","allChildShouldBeSelected","HierarchicalFacetSearch","HierarchicalFacetSearchValuesList","HierarchicalBreadcrumbValuesList","existingValue","fromList","getFromFacetValueList","OmniboxHierarchicalValuesList","processHierarchy","setValueListContent","buildParentChildRelationship","checkForOrphans","checkForNewUnselectedChild","HierarchicalFacetValuesList","HierarchicalFacetValueElement","topLevelHierarchy","lessIsShown","atLeastOneDoesNotExists","numberOfValuesLeft","toHide","hideFacetValue","toShow","showFacetValue","placeChildsUnderTheirParent","hierarchyElement","toIterateOver","toIterateOverSorted","sortFacetValues","childFromHierarchy","addCssClassToParentAndChilds","openAndCloseChilds","marginByLevel","levelStart","hierarchyFacetValues","createHierarchy","flatHierarchy","getParent","getLevel","setInHierarchy","deleteValueHierarchy","getLookupOrValue","isCorrectMinimumLevel","isCorrectMaximumLevel","levelEnd","possibleChild","possibleParent","hierarchyThatAlreadyExists","hierarchyThatAlreadyExistsAtParent","setValueHierarchy","originalPosition","fromHierarchy","lastIndexOfDelimiting","delimitingCharacter","indexOfParent","selectParent","parentInHierarchy","otherSelectedChilds","notAlreadySelected","sortArray","reversed_1","firstInTopLevel","secondInTopLevel","secondValue","compared","localeCompare","firstFromHierarchy","secondFromHierarchy","HierarchicalFacetSearchValueElement_1","HierarchicalFacetSearchValueElement","_handleSelectValue","_handleExcludeClick","getFacetValues","createFacetValuesFromHierarchy","childHierarchy","HierarchicalBreadcrumbValueElement_1","HierarchicalBreadcrumbValueElement","joined","OmniboxHierarchicalValueElement_1","OmniboxHierarchicalValueElement","Cell_1","DefaultMatrixResultPreviewTemplate_1","groupByIndex","rowId","columnId","selectedRowValue","selectedColumnValue","numberOfRows","numberOfColumns","previewTemplate","DefaultMatrixResultPreviewTemplate","previewSortField","columnFieldValues","columnLabels","buildMatrix","rowField","columnField","initQueryState","selectCell","rowNumber","columnNumber","rowValue","columnValue","getRowValue","getColumnValue","isRowFacetPresent","isColumnFacetPresent","getSelectedColumnValue","getSelectedRowValue","getCellElement","getHTML","getCellValue","drawMatrix","headerRow","drawRow","numberOfRowsToDraw","enableColumnTotals","totalRow","cellFontSize","fontSize","buildBody","addHeaderRow","titleHtml","areFacetsPresent","addMainGroubByRequest","addColumnsGroupByRequests","parseResults","addTotals","formatCells","getComputedFields","maximumNumberOfRows","maximumNumberOfValuesInGroupBy","totalQuery","getCellResult","cellResult","isAColumnSelected","isColumnSelected","enableRowTotals","addRowTotals","addColumnTotals","addColumn","rowTotal","computeRowTotal","addRow","columnTotal","computeColumnTotal","cellValue","columnHeader","addCellToRow","Cell","isCellSelected","selectedColumnValues","isARowSelected","selectedRowValues","isRowSelected","mainResults","columnResult","enableHoverPreview","handleHoverIn","handleHoverOut","isHoverWorkingOnRow","isHoverWorkingOnColumn","previewTimeout","displayResultsPreview","previewDelay","removePreview","createPreviewQuery","addPreview","previewMinWidth","previewMaxWidth","isDataAvailable","instantiatedResults","instantiateTemplate","updatePreview","rowFieldExpression","columnFieldExpression","previewSortCriteria","fieldSliced","fieldExists","previewActive","setHTML","previewContainer","preview","thumbnailDiv","embed","openYoutubeIframe","openResultLink","resultLinkComponent","extractVideoId","DefaultResultAttachmentTemplate_1","attachmentLevel","renderAttachments","subResultTemplate","attachmentHasSubAttachment","maximumAttachmentLevel","childAttachmentContainer","DefaultResultAttachmentTemplate","DefaultFoldingTemplate_1","showingMoreResults","buildElements","displayThoseResults","updateElementVisibility","bindOverlayEvents","showMoreResults","cancelAnyPendingShowMore","moreResultsPromise","showLessResults","scrollToResultElement","normalCaption","expandedCaption","oneResultCaption","footer","footerIconShowMore","footerIconShowLess","showMoreLink","moreCaption","showLessLink","lessCaption","subResultsLength","showIfNormal","showIfExpanded","resultElem","renderChildResult","childResult","oneChild","DefaultFoldingTemplate","parseColors","colorsOption","colorsRegex","badgeColors_1","colorRegex","colorValue","getColor","colorKey","background","RatingValues","rating","renderComponent","starNumber","renderStar","isChecked","starElement","basePath","buildCloseButton","onClose","PreferencesPanelItem_1","preferencePanel","preferencePanelLocalStorage","mergeLocalPreferencesWithStaticPreferences","bindPreferencePanelEvent","bindBreadcrumbEvent","bindQueryEvent","fromPreferencesToCheckboxInput","buildCheckboxesInput","showAdvancedFilters","buildAdvancedFilters","fromCheckboxInputToPreferences","toSave","preferences","exitWithoutSave","getActiveFilters","actives","valuesContainer","buildBreadcrumb","advancedFilters","buildAdvancedFilterInput","buildAdvancedFilterFormValidate","advancedFiltersBuilder","advancedFilterFormValidate","openAdvancedFilterSectionOrSaveFilters","onlineHelp","advancedFiltersTextInputCaption","PreferencesPanelTextAreaInput","otherAttribute","advancedFiltersTextInputExpression","advancedFiltersTabSelect","PreferencePanelMultiSelectInput","getAllTabs","formSubmit","saveFormButton","closeFormButton","saveAndCloseContainer","inputCaption","filtersTabSelect","filtersExpression","validateAndSaveAdvancedFilter","tabsElement","getPreferencesBoxInputToBuild","preferenceContainer","toBuild","preferencePanelCheckboxInput","PreferencesPanelCheckboxInput","choiceContainer","buildEditAdvancedFilter","buildDeleteAdvancedFilter","fromFilterToAnalyticsEvent","deleteElement","filterElement","getFilterElementByCaption","insertInto","confirmDelete","editElement","confirm","deleteFilterPreference","oldCaption","oldTab","oldExpression","populateEditSection","toPopulate","getActiveTab","getInactiveFilters","getDormantFilters","selecteds","getSelecteds","filterIsInActiveTab","fromResultsFilterOptionToResultsPreferenceInterface","staticPreferences","localPreferences","localPreferencesWithoutRemoved","preference","isCustom","existsInStatic","staticPreference","localToMerge","PreferencesPanelBoxInput","boxInputToBuild","nameOfInput","sectionInput","inputIcon","sectionTab","sectionExpression","toSelect","toUnselect","checkeds","PreferencesPanelRadioInput","radioElementToBuild","checkboxElementToBuild","icons","PreferencesPanelTextInput","textElementToBuild","inputElement","textInput","optEl","textContainer","formatQueryDuration","indexDuration","proxyDuration","durationInMillis","QuerySummaryEvents_1","onlyDisplaySearchTips","highlightFirst","highlightLast","highlightTotal","exception","displayInfoOnNoResults","lastKnownGoodState","noResultsForString","queryEscaped","cancelLastAction","QuerySummaryEvents","searchTipsInfo","searchTips","checkSpelling","fewerKeywords","fewerFilter","enableSearchTips","menu","buildMenu","getPopupPositioning","squares","settingsPopulateMenuArgs","menuItem","menuItemDom","menuDelay","dialogBoxContent","buildContent","getLinkToThisQuery","linkToThisQuery","setLinkToThisQuery","getCompleteQuery","completeQuery","setCompleteQuery","outputIfNotNull","boxes","buildTextBoxWithLabel","returnDiv","SortCriteria_ts_1","isToggle","updateAppearance","currentCriteria","indexOfCurrentCriteria","getCurrentCriteria","criteriaFromModel","oldCriteria","notifications","showElement","triggers","executeTriggers","notification","redirectedTo","executed","single","triggersOfType","oneOrAllTriggers","MAX_VALUE","conditionFunction","outerHTMLParent","onTabPress","buildOmniboxElement","buildElementHeader","buildRowElements","headerTitle","resultsToBuildWith","rowTemplate","rowElement","onRowSelection","suggestionStructure","headerTemplate","suggestionForOmnibox","onRowTab","selectSuggestion","currentlyDisplayedSuggestions","currentlySuggested","numberOfSuggestions","buildListFieldValueRequest","redirectCount","handleBuildingCallOptions","authenticateWithProvider","missingAuthError","useIFrame","authenticateWithIFrame","redirectToAuthenticationProvider","getAuthenticationProviderUriForRedirect","getAuthenticationProviderUriForIFrame","showIFrame","createPopupForVisibleIFrame","createPopupForWaitMessage","createHandler","popup","tags","tagZone","buildTagIcon","autoCompleteZone","buildTextBox","buildAddIcon","buildClearIcon","buildExistingTags","buildTagValue","tagTextBox","tagIcon","focusOnTextBox","textBox","tagValue","buildShortenedTagWithTitle","deleteIcon","doRemoveTag","shortenedTag","clickableValue","bindFacetEventOnValue","autoCompletePopup","autoCompleteClass","manageAutocompleteAutoHide","manageUpDownEnter","populateSuggestions","doAddTag","facetModel","clearPopup","showPopup","searchText","searchOptions","suggestBoxSize","buildRegEx","buildSelectableValue","autoCompleteTimer","buildTermToExclude","selectableArray","newIndex","computeNextIndex","nextIndex","doAddTagWithValue","doAdd","doAddSingleTagValue","AUTO_COMPLETE_CLASS","preferencesPanel","adjustPreferencesToComponentConfig","updateComponentOptionsModel","enableOpenInOutlook","enableOpenInNewWindow","executeOnChange","toExec","fromPreferenceChangeEventToUsageAnalyticsLog","needToSave","getContextKeys","getContextValue","contextKey","CURRENT_URL","setupOptions","handleQueryOverride","lastOmniboxRequest","content_1","handleTabChange","tabSectionToOpen","tabSection_1","glassElement","glass","selectedTabId","found_1","columnResultsArray","imagesInCurrentRow","resultIndex","lastRowHeight","heightThreshold","handleProcessNewResultsDisplayed","bindWindowResizeEvent","getResultsElement","getResultsElementImages","getResultsContainerDiv","retrieveLayoutMethod","onImageProxy","addTransitionAllToElement","layoutType","columnLayoutTypeStr","setupColumns","rowLayoutTypeStr","setupRows","images","onImageLoad","isEqualNode","getHorizontalMargin","elementDom","getVerticalMargin","containerWidth","colWidth","columnWidth","positionColumns","adjustNumberOfResults","minTopOffset","leftOffset","setResultsContainerHeight","topOffset","rowHeight","getCurrentRowHeight","setCurrentRowImagesDimensions","divider","imageDimensions","getImageDimensionsFromResult","imageIndex","oldWidth","oldHeight","widthMargin","heightMargin","setCoveoUnderscore","AdvancedSearchInputFactory_1","inputFactory","AdvancedSearchInputFactory","externalSections","buildComponent","inputSections","includeKeywords","getKeywordsSection","includeDate","getDateSection","includeDocument","getDocumentSection","sections","buildExternalSection","buildInternalSection","sectionName","keywordsInputs","createAllKeywordsInput","createExactKeywordsInput","createAnyKeywordsInput","createNoneKeywordsInput","dateInputs","createAnytimeDateInput","createInTheLastDateInput","createBetweenDateInput","documentInputs","createSimpleFieldInput","createSizeInput","createAdvancedFieldInput","sectionHTML","buildSectionTitle","sectionInputs","buildDefaultInput","isPrebuiltInput","parameters","updateQuery","AllKeywordsInput_1","ExactKeywordsInput_1","AnyKeywordsInput_1","NoneKeywordsInput_1","AnytimeDateInput_1","InTheLastDateInput_1","BetweenDateInput_1","SimpleFieldInput_1","AdvancedFieldInput_1","SizeInput_1","AllKeywordsInput","ExactKeywordsInput","AnyKeywordsInput","NoneKeywordsInput","AnytimeDateInput","InTheLastDateInput","BetweenDateInput","SimpleFieldInput","AdvancedFieldInput","SizeInput","KeywordsInput_1","KeywordsInput","inputName","onChange","getElement","lastQueryText","triggerChange","generatedValue","splitValue","DateInput_1","getRadio","DateInput","deactivateAllInputs","activateSelectedInput","getLabel","radioOption","radioInput","labelInput","setId","currentDate","getIntValue","listOfValues","getDisplayValue","selectElement","selectOption","selectOptions","buildOptions","getSpinnerInput","getFloatValue","numericSpinner","numberInput","addOn","up","down","firstDatePicker","secondDatePicker","buildAnd","firstDate","secondDate","and","Pikaday","wasReset","picker","moment","hasMoment","hasEventListeners","sto","addEvent","detachEvent","fireEvent","createEventObject","cn","isWeekend","isLeapYear","getDaysInMonth","setToStartOfDay","compareDates","overwrite","hasProp","adjustCalendar","reposition","defaultDate","setDefaultDate","minDate","maxDate","yearRange","showWeekNumber","minYear","maxYear","minMonth","maxMonth","startRange","endRange","yearSuffix","showMonthAfterYear","numberOfMonths","mainCalendar","i18n","previousMonth","nextMonth","weekdays","weekdaysShort","theme","onDraw","renderDayName","abbr","renderDay","isToday","isInRange","isStartRange","isEndRange","renderWeek","onejan","weekNum","renderRow","renderBody","renderHead","renderTitle","refYear","monthHtml","yearHtml","_o","isMinYear","isMaxYear","renderTable","_onMouseDown","_v","prevMonth","_c","_onChange","gotoMonth","gotoYear","_onInputChange","firedBy","toDate","_onInputFocus","_onInputClick","_onInputBlur","pEl","_b","_onClick","defDate","gotoDate","disableWeekends","disableDayFn","nom","setMinDate","setMaxDate","_d","toDateString","getMoment","setMoment","preventOnSelect","isMoment","newCalendar","firstVisibleDate","lastVisibleDate","visibleDate","adjustCalendars","gotoToday","setStartRange","setEndRange","_m","adjustPosition","viewportWidth","viewportHeight","clientRect","offsetLeft","dayConfig","isVisible","hookCallback","setHookCallback","isObjectEmpty","hasOwnProp","createUTC","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","copyConfig","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","updateInProgress","updateOffset","absFloor","toInt","argumentForCoercion","coercedNumber","compareArrays","dontConvert","lengthDiff","suppressDeprecationWarnings","firstTime","deprecationHandler","deprecateSimple","deprecations","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","mom","_calendar","longDateFormat","_longDateFormat","formatUpper","invalidDate","_invalidDate","_ordinal","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","addUnitAlias","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priorities","getPrioritizedUnits","unitsObj","zeroFill","targetLength","forceSign","absNumber","zerosToFill","addFormatToken","padded","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","replaceLongDateFormatTokens","localFormattingTokens","addRegexToken","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","daysInYear","getIsLeapYear","makeGetSet","keepTime","daysInMonth","stringGet","stringSet","prioritized","mod","modMonth","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","localeMonthsParse","_monthsParseExact","dayOfMonth","monthsParse","getSetMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","createDate","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","weekdaysParse","parseIsoWeekday","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","normalizeLocale","chooseLocale","loadLocale","globalLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","baseConfig","parentLocale","localeFamilies","updateLocale","tmpLocale","listLocales","checkOverflow","MONTH","DATE","YEAR","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","currentDateArray","nowValue","_useUTC","configFromArray","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","GG","createLocal","curWeek","gg","configFromISO","allowTime","tzFormat","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","defaultLocaleMonthsShort","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","defaultLocaleWeekdaysShort","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","obsOffsets","hm","configFromRFC2822","parsedArray","configFromString","aspNetJsonRegex","createFromInputFallback","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","configFromObject","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","ordering","unitHasDecimal","isValid$1","createInvalid$1","createDuration","quarters","quarter","weeks","_milliseconds","_days","_bubble","isDuration","absRound","utcOffset","offsetFromString","chunk","chunkOffset","cloneWithOffset","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isUtcOffset","isUtc","diffRes","aspNetRegex","isoRegex","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","dur","isAdding","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","keepOffset","zone","datetime","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","preParsePostFormat","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","clone$1","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","limit","withSuffix","toISOString$1","abs$1","asSeconds","totalSign","ymSign","daysSign","hmsSign","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","LL","LLL","LLLL","defaultInvalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","parseTwoDigitYear","getSetYear","defaultLocaleMonths","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","prototypeMin","prototypeMax","invalid","isoWeekYear","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","isoWeeks","isoWeeksInYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","webpackContext","req","webpackContextResolve","./af","./af.js","./ar","./ar-dz","./ar-dz.js","./ar-kw","./ar-kw.js","./ar-ly","./ar-ly.js","./ar-ma","./ar-ma.js","./ar-sa","./ar-sa.js","./ar-tn","./ar-tn.js","./ar.js","./az","./az.js","./be","./be.js","./bg","./bg.js","./bm","./bm.js","./bn","./bn.js","./bo","./bo.js","./br","./br.js","./bs","./bs.js","./ca","./ca.js","./cs","./cs.js","./cv","./cv.js","./cy","./cy.js","./da","./da.js","./de","./de-at","./de-at.js","./de-ch","./de-ch.js","./de.js","./dv","./dv.js","./el","./el.js","./en-au","./en-au.js","./en-ca","./en-ca.js","./en-gb","./en-gb.js","./en-ie","./en-ie.js","./en-il","./en-il.js","./en-nz","./en-nz.js","./eo","./eo.js","./es","./es-do","./es-do.js","./es-us","./es-us.js","./es.js","./et","./et.js","./eu","./eu.js","./fa","./fa.js","./fi","./fi.js","./fo","./fo.js","./fr","./fr-ca","./fr-ca.js","./fr-ch","./fr-ch.js","./fr.js","./fy","./fy.js","./gd","./gd.js","./gl","./gl.js","./gom-latn","./gom-latn.js","./gu","./gu.js","./he","./he.js","./hi","./hi.js","./hr","./hr.js","./hu","./hu.js","./hy-am","./hy-am.js","./id","./id.js","./is","./is.js","./it","./it.js","./ja","./ja.js","./jv","./jv.js","./ka","./ka.js","./kk","./kk.js","./km","./km.js","./kn","./kn.js","./ko","./ko.js","./ky","./ky.js","./lb","./lb.js","./lo","./lo.js","./lt","./lt.js","./lv","./lv.js","./me","./me.js","./mi","./mi.js","./mk","./mk.js","./ml","./ml.js","./mn","./mn.js","./mr","./mr.js","./ms","./ms-my","./ms-my.js","./ms.js","./mt","./mt.js","./my","./my.js","./nb","./nb.js","./ne","./ne.js","./nl","./nl-be","./nl-be.js","./nl.js","./nn","./nn.js","./pa-in","./pa-in.js","./pl","./pl.js","./pt","./pt-br","./pt-br.js","./pt.js","./ro","./ro.js","./ru","./ru.js","./sd","./sd.js","./se","./se.js","./si","./si.js","./sk","./sk.js","./sl","./sl.js","./sq","./sq.js","./sr","./sr-cyrl","./sr-cyrl.js","./sr.js","./ss","./ss.js","./sv","./sv.js","./sw","./sw.js","./ta","./ta.js","./te","./te.js","./tet","./tet.js","./tg","./tg.js","./th","./th.js","./tl-ph","./tl-ph.js","./tlh","./tlh.js","./tr","./tr.js","./tzl","./tzl.js","./tzm","./tzm-latn","./tzm-latn.js","./tzm.js","./ug-cn","./ug-cn.js","./uk","./uk.js","./ur","./ur.js","./uz","./uz-latn","./uz-latn.js","./uz.js","./vi","./vi.js","./x-pseudo","./x-pseudo.js","./yo","./yo.js","./zh-cn","./zh-cn.js","./zh-hk","./zh-hk.js","./zh-tw","./zh-tw.js","af","symbolMap","1","2","3","4","5","6","7","8","9","numberMap","١","٢","٣","٤","٥","٦","٧","٨","٩","٠","pluralForm","plurals","pluralize","ar","weekdaysParseExact","arDz","arKw","arLy","arMa","arSa","arTn","suffixes","70","80","20","50","100","10","30","60","90","az","plural","forms","relativeTimeWithPlural","be","standalone","bg","lastDigit","last2Digits","১","২","৩","৪","৫","৬","৭","৮","৯","০","bn","༡","༢","༣","༤","༥","༦","༧","༨","༩","༠","bo","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","br","monthsParseExact","ll","lll","llll","cs","shortMonthsParse","longMonthsParse","cv","affix","lookup","processRelativeTime","de","deAt","deCh","dv","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","enAu","enCa","enGb","enIe","enIl","enNz","eo","monthsShortDot","es","monthsStrictRegex","monthsShortStrictRegex","esDo","esUs","et","eu","۱","۲","۳","۴","۵","۶","۷","۸","۹","۰","fa","verbalNumber","numbersFuture","numbersPast","fi","fo","fr","frCa","frCh","monthsShortWithDots","monthsShortWithoutDots","gd","gl","gomLatn","૧","૨","૩","૪","૫","૬","૭","૮","૯","૦","gu","he","१","२","३","४","५","६","७","८","९","०","hr","weekEndings","hu","hyAm","it","ja","jv","40","kk","១","២","៣","៤","៥","៦","៧","៨","៩","០","km","೧","೨","೩","೪","೫","೬","೭","೮","೯","೦","kn","ko","isUpper","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","firstDigit","lb","translateSeconds","translateSingular","relativeTimeWithSingular","relativeSeconds","lv","translator","correctGrammaticalCase","wordKey","lastWeekDays","mi","mk","ml","mn","relativeTimeMr","mr","msMy","mt","၁","၂","၃","၄","၅","၆","၇","၈","၉","၀","my","nl","nlBe","nn","੧","੨","੩","੪","੫","੬","੭","੮","੯","੦","paIn","monthsNominative","monthsSubjective","pl","pt","ptBr","ro","ru","sd","sl","sq","srCyrl","sv","௧","௨","௩","௪","௫","௬","௭","௮","௯","௦","ta","te","tet","12","13","tlPh","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","numbersNouns","tlh","tzl","tzm","tzmLatn","ugCn","weekdaysCaseReplace","nominative","accusative","genitive","nounCase","processHoursFunction","uk","ur","uz","uzLatn","vi","xPseudo","yo","zhCn","zhHk","zhTw","DocumentInput_1","dropDown","fieldInput","buildFieldSelect","DocumentInput","documentInput","inputValue","modeSelect","sizeInput","sizeInputSection","modes","sizeSelect","sizes","getSizeInBytes","Subscription_1","toggleFollow","handleSubscriptionDeleted","handleSubscriptionCreated","updateIsFollowed","setFollowed","setNotFollowed","buildFollowRequest","subscriptions","typeConfig","SUBSCRIPTION_TYPE","followDocument","typeCofig","modifiedDateField","watchedFields","documentLanguage","documentSource","contentIDValue","contentIDKey","followQuery","enableMessage","closeDelay","messageCloseDelay","enableManagePanel","openPanel","enableFollowQuery","buildFollowQueryRequest","findQueryBoxDom","triggerSearchAlertsFail","titleInfo","addSearchAlert","modal","handleSearchAlertsFail","frequencies","frequency","noSearchAlerts","frequencyInput","updateAndSyncSearchAlert","updatedSearchAlert","components_1","getFollowQueryMessage","getCssClass","htmlFormatted","populateMessageArguments","getAdditionalTextFormatted","formatMessageArgumentsText","automaticallyBuiltMessage","additionalMessage","showMessage","startCloseDelay","stopCloseDelay","fontStyle","textAlign","marginBottom","marginRight","defaultResult","likeNames","likeIds","thumbIcon","fullListElement","renderLikesList","nbLikesToRender","tempElement","renderLikeLink","othersCount","clickableLink","likeName","likeId","buildURI","openInPrimaryTab","openInSubTab","objectURI","objectId","newObjectId","bindClickEventToElement","linkElement","useFromInstead","renderLink","enablePostedOn","onUser","onFeed","topics","topic","overlayColor","overlayGradient","imageSource","imageUrl","imageField","backgroundSize","configureSpecialBackdropActions","thumbnailYouTube_1","CardOverlayEvents_1","parentCard","createOverlay","createButton","closeOverlay","toggleOverlay","openOverlay","CardOverlayEvents","openCardOverlay","closeCardOverlay","overlayHeader","overlayBody","overlayFooter","removedTabIndexElements","appendArrow","hasAttribute","openOnMouseOver","arrowContainer"],"mappings":"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ACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,KACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IAAA,IACAC,IA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OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,QAAA,IACAC,WAAA,IACAC,OAAA,IACAC,UAAA,IACAC,QAAA,IACAC,WAAA,IACAC,QAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,WAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,aAAA,IAQAx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","file":"CoveoJsSearch.WithDependencies.min.js","sourcesContent":["/*!\n * jQuery JavaScript Library v3.4.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-04-10T19:48Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\tif ( documentElement.attachShadow ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( el, \"click\" ) === undefined ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( el, \"click\" ) === undefined ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tjQuery.event.add( el, type, returnTrue );\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\tjQuery.extend( saved.shift(), jQuery.Event.prototype ),\n\t\t\t\t\tsaved,\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n\n//\n// ,adPPYba,  ,adPPYba,  8b       d8  ,adPPYba,  ,adPPYba,\n// a8\"     \"\" a8\"     \"8a `8b     d8' a8P_____88 a8\"     \"8a\n// 8b         8b       d8  `8b   d8'  8PP\"\"\"\"\"\"\" 8b       d8\n// \"8a,   ,aa \"8a,   ,a8\"   `8b,d8'   \"8b,   ,aa \"8a,   ,a8\"\n// `\"Ybbd8\"'  `\"YbbdP\"'      \"8\"      `\"Ybbd8\"'  `\"YbbdP\"'\n//\n//\n// This file is there for legacy reason only. (So that we do not 404 on every page that requests this file)\n// If you are reading this, feel free to remove it from your page/integration.\n\n//# sourceMappingURL=CoveoJsSearch.Dependencies.js.map\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Coveo__temporary\"] = factory();\n\telse\n\t\troot[\"Coveo__temporary\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Coveo__temporary\"] = factory();\n\telse\n\t\troot[\"Coveo__temporary\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/js/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tfunction __export(m) {\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n\t}\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar promise = window['Promise'];\n\tif (!(promise instanceof Function)) {\n\t    __webpack_require__(2).polyfill();\n\t}\n\t__export(__webpack_require__(7));\n\t__export(__webpack_require__(32));\n\t__export(__webpack_require__(38));\n\t__export(__webpack_require__(41));\n\t__export(__webpack_require__(57));\n\t__export(__webpack_require__(75));\n\t__export(__webpack_require__(102));\n\t__export(__webpack_require__(106));\n\t__export(__webpack_require__(176));\n\t// UI\n\tvar CoreHelpers_1 = __webpack_require__(178);\n\texports.CoreHelpers = CoreHelpers_1.CoreHelpers;\n\tvar SearchInterface_1 = __webpack_require__(110);\n\texports.SearchInterface = SearchInterface_1.SearchInterface;\n\texports.StandaloneSearchInterface = SearchInterface_1.StandaloneSearchInterface;\n\tvar Aggregate_1 = __webpack_require__(186);\n\texports.Aggregate = Aggregate_1.Aggregate;\n\tvar Analytics_1 = __webpack_require__(128);\n\texports.Analytics = Analytics_1.Analytics;\n\tvar PendingSearchEvent_1 = __webpack_require__(130);\n\texports.PendingSearchEvent = PendingSearchEvent_1.PendingSearchEvent;\n\tvar PendingSearchAsYouTypeSearchEvent_1 = __webpack_require__(132);\n\texports.PendingSearchAsYouTypeSearchEvent = PendingSearchAsYouTypeSearchEvent_1.PendingSearchAsYouTypeSearchEvent;\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\texports.analyticsActionCauseList = AnalyticsActionListMeta_1.analyticsActionCauseList;\n\tvar NoopAnalyticsClient_1 = __webpack_require__(121);\n\texports.NoopAnalyticsClient = NoopAnalyticsClient_1.NoopAnalyticsClient;\n\tvar LiveAnalyticsClient_1 = __webpack_require__(129);\n\texports.LiveAnalyticsClient = LiveAnalyticsClient_1.LiveAnalyticsClient;\n\tvar RecommendationAnalyticsClient_1 = __webpack_require__(174);\n\texports.RecommendationAnalyticsClient = RecommendationAnalyticsClient_1.RecommendationAnalyticsClient;\n\tvar MultiAnalyticsClient_1 = __webpack_require__(133);\n\texports.MultiAnalyticsClient = MultiAnalyticsClient_1.MultiAnalyticsClient;\n\tvar Querybox_1 = __webpack_require__(187);\n\texports.Querybox = Querybox_1.Querybox;\n\tvar SearchButton_1 = __webpack_require__(189);\n\texports.SearchButton = SearchButton_1.SearchButton;\n\tvar Searchbox_1 = __webpack_require__(190);\n\texports.Searchbox = Searchbox_1.Searchbox;\n\tvar Breadcrumb_1 = __webpack_require__(196);\n\texports.Breadcrumb = Breadcrumb_1.Breadcrumb;\n\tvar Facet_1 = __webpack_require__(158);\n\texports.Facet = Facet_1.Facet;\n\tvar FacetHeader_1 = __webpack_require__(168);\n\texports.FacetHeader = FacetHeader_1.FacetHeader;\n\tvar FacetSearchValuesList_1 = __webpack_require__(171);\n\texports.FacetSearchValuesList = FacetSearchValuesList_1.FacetSearchValuesList;\n\tvar FacetSettings_1 = __webpack_require__(165);\n\texports.FacetSettings = FacetSettings_1.FacetSettings;\n\tvar FacetSort_1 = __webpack_require__(166);\n\texports.FacetSort = FacetSort_1.FacetSort;\n\tvar FacetUtils_1 = __webpack_require__(95);\n\texports.FacetUtils = FacetUtils_1.FacetUtils;\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\texports.FacetValueElement = FacetValueElement_1.FacetValueElement;\n\tvar FacetValues_1 = __webpack_require__(159);\n\texports.FacetValue = FacetValues_1.FacetValue;\n\texports.FacetValues = FacetValues_1.FacetValues;\n\tvar ValueElementRenderer_1 = __webpack_require__(163);\n\texports.ValueElementRenderer = ValueElementRenderer_1.ValueElementRenderer;\n\tvar FacetSearch_1 = __webpack_require__(160);\n\texports.FacetSearch = FacetSearch_1.FacetSearch;\n\tvar FacetSearchParameters_1 = __webpack_require__(94);\n\texports.FacetSearchParameters = FacetSearchParameters_1.FacetSearchParameters;\n\tvar Slider_1 = __webpack_require__(147);\n\texports.Slider = Slider_1.Slider;\n\tvar FacetSlider_1 = __webpack_require__(146);\n\texports.FacetSlider = FacetSlider_1.FacetSlider;\n\tvar FacetRange_1 = __webpack_require__(197);\n\texports.FacetRange = FacetRange_1.FacetRange;\n\tvar Pager_1 = __webpack_require__(198);\n\texports.Pager = Pager_1.Pager;\n\tvar ResultsPerPage_1 = __webpack_require__(199);\n\texports.ResultsPerPage = ResultsPerPage_1.ResultsPerPage;\n\tvar ResultList_1 = __webpack_require__(183);\n\texports.ResultList = ResultList_1.ResultList;\n\tvar ResultLayout_1 = __webpack_require__(200);\n\texports.ResultLayout = ResultLayout_1.ResultLayout;\n\tvar DefaultRecommendationTemplate_1 = __webpack_require__(184);\n\texports.DefaultRecommendationTemplate = DefaultRecommendationTemplate_1.DefaultRecommendationTemplate;\n\tvar Excerpt_1 = __webpack_require__(202);\n\texports.Excerpt = Excerpt_1.Excerpt;\n\tvar ResultLink_1 = __webpack_require__(203);\n\texports.ResultLink = ResultLink_1.ResultLink;\n\tvar Icon_1 = __webpack_require__(179);\n\texports.Icon = Icon_1.Icon;\n\tvar Thumbnail_1 = __webpack_require__(204);\n\texports.Thumbnail = Thumbnail_1.Thumbnail;\n\tvar PrintableUri_1 = __webpack_require__(207);\n\texports.PrintableUri = PrintableUri_1.PrintableUri;\n\tvar Quickview_1 = __webpack_require__(180);\n\texports.Quickview = Quickview_1.Quickview;\n\tvar DidYouMean_1 = __webpack_require__(208);\n\texports.DidYouMean = DidYouMean_1.DidYouMean;\n\tvar ErrorReport_1 = __webpack_require__(209);\n\texports.ErrorReport = ErrorReport_1.ErrorReport;\n\tvar ExportToExcel_1 = __webpack_require__(210);\n\texports.ExportToExcel = ExportToExcel_1.ExportToExcel;\n\tvar Folding_1 = __webpack_require__(211);\n\texports.Folding = Folding_1.Folding;\n\tvar HiddenQuery_1 = __webpack_require__(213);\n\texports.HiddenQuery = HiddenQuery_1.HiddenQuery;\n\tvar HierarchicalFacet_1 = __webpack_require__(214);\n\texports.HierarchicalFacet = HierarchicalFacet_1.HierarchicalFacet;\n\tvar Matrix_1 = __webpack_require__(224);\n\texports.Matrix = Matrix_1.Matrix;\n\tvar QuickviewDocument_1 = __webpack_require__(182);\n\texports.QuickviewDocument = QuickviewDocument_1.QuickviewDocument;\n\tvar YouTubeThumbnail_1 = __webpack_require__(227);\n\texports.YouTubeThumbnail = YouTubeThumbnail_1.YouTubeThumbnail;\n\tvar ResultAttachments_1 = __webpack_require__(228);\n\texports.ResultAttachments = ResultAttachments_1.ResultAttachments;\n\tvar ResultFolding_1 = __webpack_require__(230);\n\texports.ResultFolding = ResultFolding_1.ResultFolding;\n\tvar FieldTable_1 = __webpack_require__(205);\n\texports.FieldTable = FieldTable_1.FieldTable;\n\tvar FieldValue_1 = __webpack_require__(206);\n\texports.FieldValue = FieldValue_1.FieldValue;\n\tvar Badge_1 = __webpack_require__(232);\n\texports.Badge = Badge_1.Badge;\n\tvar ResultRating_1 = __webpack_require__(233);\n\texports.ResultRating = ResultRating_1.ResultRating;\n\tvar PreferencesPanel_1 = __webpack_require__(234);\n\texports.PreferencesPanel = PreferencesPanel_1.PreferencesPanel;\n\tvar ResultsFiltersPreferences_1 = __webpack_require__(235);\n\texports.ResultsFiltersPreferences = ResultsFiltersPreferences_1.ResultsFiltersPreferences;\n\tvar Tab_1 = __webpack_require__(138);\n\texports.Tab = Tab_1.Tab;\n\tvar Omnibox_1 = __webpack_require__(191);\n\texports.Omnibox = Omnibox_1.Omnibox;\n\tvar QueryDuration_1 = __webpack_require__(237);\n\texports.QueryDuration = QueryDuration_1.QueryDuration;\n\tvar QuerySummary_1 = __webpack_require__(238);\n\texports.QuerySummary = QuerySummary_1.QuerySummary;\n\tvar Debug_1 = __webpack_require__(122);\n\texports.Debug = Debug_1.Debug;\n\tvar Settings_1 = __webpack_require__(240);\n\texports.Settings = Settings_1.Settings;\n\tvar ShareQuery_1 = __webpack_require__(241);\n\texports.ShareQuery = ShareQuery_1.ShareQuery;\n\tvar Sort_1 = __webpack_require__(242);\n\texports.Sort = Sort_1.Sort;\n\tvar SortCriteria_1 = __webpack_require__(212);\n\texports.SortCriteria = SortCriteria_1.SortCriteria;\n\tvar Triggers_1 = __webpack_require__(243);\n\texports.Triggers = Triggers_1.Triggers;\n\tvar Recommendation_1 = __webpack_require__(134);\n\texports.Recommendation = Recommendation_1.Recommendation;\n\tvar RecommendationQuery_1 = __webpack_require__(244);\n\texports.RecommendationQuery = RecommendationQuery_1.RecommendationQuery;\n\tvar TemplateLoader_1 = __webpack_require__(245);\n\texports.TemplateLoader = TemplateLoader_1.TemplateLoader;\n\tvar Template_1 = __webpack_require__(113);\n\texports.Template = Template_1.Template;\n\tvar SuggestionForOmnibox_1 = __webpack_require__(246);\n\texports.SuggestionForOmnibox = SuggestionForOmnibox_1.SuggestionForOmnibox;\n\tvar AnalyticsSuggestions_1 = __webpack_require__(247);\n\texports.AnalyticsSuggestions = AnalyticsSuggestions_1.AnalyticsSuggestions;\n\tvar FieldSuggestions_1 = __webpack_require__(248);\n\texports.FieldSuggestions = FieldSuggestions_1.FieldSuggestions;\n\tvar AuthenticationProvider_1 = __webpack_require__(249);\n\texports.AuthenticationProvider = AuthenticationProvider_1.AuthenticationProvider;\n\tvar ResultTagging_1 = __webpack_require__(250);\n\texports.ResultTagging = ResultTagging_1.ResultTagging;\n\tvar ResultsPreferences_1 = __webpack_require__(251);\n\texports.ResultsPreferences = ResultsPreferences_1.ResultsPreferences;\n\tvar PipelineContext_1 = __webpack_require__(252);\n\texports.PipelineContext = PipelineContext_1.PipelineContext;\n\texports.context = PipelineContext_1.context;\n\tvar OmniboxResultList_1 = __webpack_require__(253);\n\texports.OmniboxResultList = OmniboxResultList_1.OmniboxResultList;\n\tvar CurrentTab_1 = __webpack_require__(254);\n\texports.CurrentTab = CurrentTab_1.CurrentTab;\n\tvar QueryboxQueryParameters_1 = __webpack_require__(188);\n\texports.QueryboxQueryParameters = QueryboxQueryParameters_1.QueryboxQueryParameters;\n\tvar ImageResultList_1 = __webpack_require__(255);\n\texports.ImageResultList = ImageResultList_1.ImageResultList;\n\tvar CoveoJQuery_1 = __webpack_require__(175);\n\texports.$ = CoveoJQuery_1.jQueryInstance;\n\tvar CoveoUnderscore_1 = __webpack_require__(256);\n\texports._ = CoveoUnderscore_1.underscoreInstance;\n\tvar AdvancedSearch_1 = __webpack_require__(257);\n\texports.AdvancedSearch = AdvancedSearch_1.AdvancedSearch;\n\tvar NumericSpinner_1 = __webpack_require__(270);\n\texports.NumericSpinner = NumericSpinner_1.NumericSpinner;\n\tvar DatePicker_1 = __webpack_require__(272);\n\texports.DatePicker = DatePicker_1.DatePicker;\n\tvar Dropdown_1 = __webpack_require__(269);\n\texports.Dropdown = Dropdown_1.Dropdown;\n\tvar TextInput_1 = __webpack_require__(261);\n\texports.TextInput = TextInput_1.TextInput;\n\tvar RadioButton_1 = __webpack_require__(267);\n\texports.RadioButton = RadioButton_1.RadioButton;\n\tvar FollowItem_1 = __webpack_require__(403);\n\texports.FollowItem = FollowItem_1.FollowItem;\n\tvar SearchAlerts_1 = __webpack_require__(405);\n\texports.SearchAlerts = SearchAlerts_1.SearchAlerts;\n\tvar SearchAlertsMessage_1 = __webpack_require__(406);\n\texports.SearchAlertsMessage = SearchAlertsMessage_1.SearchAlertsMessage;\n\tvar Text_1 = __webpack_require__(407);\n\texports.Text = Text_1.Text;\n\tvar FoldingForThread_1 = __webpack_require__(408);\n\texports.FoldingForThread = FoldingForThread_1.FoldingForThread;\n\tvar ChatterLikedBy_1 = __webpack_require__(409);\n\texports.ChatterLikedBy = ChatterLikedBy_1.ChatterLikedBy;\n\tvar ChatterPostAttachment_1 = __webpack_require__(411);\n\texports.ChatterPostAttachment = ChatterPostAttachment_1.ChatterPostAttachment;\n\tvar ChatterPostedBy_1 = __webpack_require__(412);\n\texports.ChatterPostedBy = ChatterPostedBy_1.ChatterPostedBy;\n\tvar ChatterTopic_1 = __webpack_require__(413);\n\texports.ChatterTopic = ChatterTopic_1.ChatterTopic;\n\tvar ChatterUtils_1 = __webpack_require__(410);\n\texports.ChatterUtils = ChatterUtils_1.ChatterUtils;\n\tvar Logo_1 = __webpack_require__(414);\n\texports.Logo = Logo_1.Logo;\n\tvar Backdrop_1 = __webpack_require__(415);\n\texports.Backdrop = Backdrop_1.Backdrop;\n\tvar CardOverlay_1 = __webpack_require__(416);\n\texports.CardOverlay = CardOverlay_1.CardOverlay;\n\tvar CardActionBar_1 = __webpack_require__(418);\n\texports.CardActionBar = CardActionBar_1.CardActionBar;\n\tvar HashUtils_1 = __webpack_require__(67);\n\texports.HashUtils = HashUtils_1.HashUtils;\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\texports.DeviceUtils = DeviceUtils_1.DeviceUtils;\n\tvar ColorUtils_1 = __webpack_require__(58);\n\texports.ColorUtils = ColorUtils_1.ColorUtils;\n\tvar CookieUtils_1 = __webpack_require__(40);\n\texports.Cookie = CookieUtils_1.Cookie;\n\tvar CurrencyUtils_1 = __webpack_require__(59);\n\texports.CurrencyUtils = CurrencyUtils_1.CurrencyUtils;\n\tvar DateUtils_1 = __webpack_require__(60);\n\texports.DateUtils = DateUtils_1.DateUtils;\n\tvar SwapVar_1 = __webpack_require__(419);\n\tSwapVar_1.swapVar(this);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar require;var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(process, global, module) {/*!\n\t * @overview es6-promise - a tiny implementation of Promises/A+.\n\t * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n\t * @license   Licensed under MIT license\n\t *            See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n\t * @version   3.1.2\n\t */\n\t\n\t(function() {\n\t    \"use strict\";\n\t    function lib$es6$promise$utils$$objectOrFunction(x) {\n\t      return typeof x === 'function' || (typeof x === 'object' && x !== null);\n\t    }\n\t\n\t    function lib$es6$promise$utils$$isFunction(x) {\n\t      return typeof x === 'function';\n\t    }\n\t\n\t    function lib$es6$promise$utils$$isMaybeThenable(x) {\n\t      return typeof x === 'object' && x !== null;\n\t    }\n\t\n\t    var lib$es6$promise$utils$$_isArray;\n\t    if (!Array.isArray) {\n\t      lib$es6$promise$utils$$_isArray = function (x) {\n\t        return Object.prototype.toString.call(x) === '[object Array]';\n\t      };\n\t    } else {\n\t      lib$es6$promise$utils$$_isArray = Array.isArray;\n\t    }\n\t\n\t    var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n\t    var lib$es6$promise$asap$$len = 0;\n\t    var lib$es6$promise$asap$$vertxNext;\n\t    var lib$es6$promise$asap$$customSchedulerFn;\n\t\n\t    var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n\t      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n\t      lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n\t      lib$es6$promise$asap$$len += 2;\n\t      if (lib$es6$promise$asap$$len === 2) {\n\t        // If len is 2, that means that we need to schedule an async flush.\n\t        // If additional callbacks are queued before the queue is flushed, they\n\t        // will be processed by this flush that we are scheduling.\n\t        if (lib$es6$promise$asap$$customSchedulerFn) {\n\t          lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n\t        } else {\n\t          lib$es6$promise$asap$$scheduleFlush();\n\t        }\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n\t      lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n\t    }\n\t\n\t    function lib$es6$promise$asap$$setAsap(asapFn) {\n\t      lib$es6$promise$asap$$asap = asapFn;\n\t    }\n\t\n\t    var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n\t    var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n\t    var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n\t    var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\t\n\t    // test for web worker but not in IE10\n\t    var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n\t      typeof importScripts !== 'undefined' &&\n\t      typeof MessageChannel !== 'undefined';\n\t\n\t    // node\n\t    function lib$es6$promise$asap$$useNextTick() {\n\t      // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n\t      // see https://github.com/cujojs/when/issues/410 for details\n\t      return function() {\n\t        process.nextTick(lib$es6$promise$asap$$flush);\n\t      };\n\t    }\n\t\n\t    // vertx\n\t    function lib$es6$promise$asap$$useVertxTimer() {\n\t      return function() {\n\t        lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n\t      };\n\t    }\n\t\n\t    function lib$es6$promise$asap$$useMutationObserver() {\n\t      var iterations = 0;\n\t      var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n\t      var node = document.createTextNode('');\n\t      observer.observe(node, { characterData: true });\n\t\n\t      return function() {\n\t        node.data = (iterations = ++iterations % 2);\n\t      };\n\t    }\n\t\n\t    // web worker\n\t    function lib$es6$promise$asap$$useMessageChannel() {\n\t      var channel = new MessageChannel();\n\t      channel.port1.onmessage = lib$es6$promise$asap$$flush;\n\t      return function () {\n\t        channel.port2.postMessage(0);\n\t      };\n\t    }\n\t\n\t    function lib$es6$promise$asap$$useSetTimeout() {\n\t      return function() {\n\t        setTimeout(lib$es6$promise$asap$$flush, 1);\n\t      };\n\t    }\n\t\n\t    var lib$es6$promise$asap$$queue = new Array(1000);\n\t    function lib$es6$promise$asap$$flush() {\n\t      for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n\t        var callback = lib$es6$promise$asap$$queue[i];\n\t        var arg = lib$es6$promise$asap$$queue[i+1];\n\t\n\t        callback(arg);\n\t\n\t        lib$es6$promise$asap$$queue[i] = undefined;\n\t        lib$es6$promise$asap$$queue[i+1] = undefined;\n\t      }\n\t\n\t      lib$es6$promise$asap$$len = 0;\n\t    }\n\t\n\t    function lib$es6$promise$asap$$attemptVertx() {\n\t      try {\n\t        var r = require;\n\t        var vertx = __webpack_require__(5);\n\t        lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n\t        return lib$es6$promise$asap$$useVertxTimer();\n\t      } catch(e) {\n\t        return lib$es6$promise$asap$$useSetTimeout();\n\t      }\n\t    }\n\t\n\t    var lib$es6$promise$asap$$scheduleFlush;\n\t    // Decide what async method to use to triggering processing of queued callbacks:\n\t    if (lib$es6$promise$asap$$isNode) {\n\t      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n\t    } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n\t      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n\t    } else if (lib$es6$promise$asap$$isWorker) {\n\t      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n\t    } else if (lib$es6$promise$asap$$browserWindow === undefined && \"function\" === 'function') {\n\t      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n\t    } else {\n\t      lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n\t    }\n\t    function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n\t      var parent = this;\n\t      var state = parent._state;\n\t\n\t      if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n\t        return this;\n\t      }\n\t\n\t      var child = new this.constructor(lib$es6$promise$$internal$$noop);\n\t      var result = parent._result;\n\t\n\t      if (state) {\n\t        var callback = arguments[state - 1];\n\t        lib$es6$promise$asap$$asap(function(){\n\t          lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n\t        });\n\t      } else {\n\t        lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n\t      }\n\t\n\t      return child;\n\t    }\n\t    var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n\t    function lib$es6$promise$promise$resolve$$resolve(object) {\n\t      /*jshint validthis:true */\n\t      var Constructor = this;\n\t\n\t      if (object && typeof object === 'object' && object.constructor === Constructor) {\n\t        return object;\n\t      }\n\t\n\t      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\t      lib$es6$promise$$internal$$resolve(promise, object);\n\t      return promise;\n\t    }\n\t    var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\t\n\t    function lib$es6$promise$$internal$$noop() {}\n\t\n\t    var lib$es6$promise$$internal$$PENDING   = void 0;\n\t    var lib$es6$promise$$internal$$FULFILLED = 1;\n\t    var lib$es6$promise$$internal$$REJECTED  = 2;\n\t\n\t    var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\t\n\t    function lib$es6$promise$$internal$$selfFulfillment() {\n\t      return new TypeError(\"You cannot resolve a promise with itself\");\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$cannotReturnOwn() {\n\t      return new TypeError('A promises callback cannot return that same promise.');\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$getThen(promise) {\n\t      try {\n\t        return promise.then;\n\t      } catch(error) {\n\t        lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n\t        return lib$es6$promise$$internal$$GET_THEN_ERROR;\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n\t      try {\n\t        then.call(value, fulfillmentHandler, rejectionHandler);\n\t      } catch(e) {\n\t        return e;\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n\t       lib$es6$promise$asap$$asap(function(promise) {\n\t        var sealed = false;\n\t        var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n\t          if (sealed) { return; }\n\t          sealed = true;\n\t          if (thenable !== value) {\n\t            lib$es6$promise$$internal$$resolve(promise, value);\n\t          } else {\n\t            lib$es6$promise$$internal$$fulfill(promise, value);\n\t          }\n\t        }, function(reason) {\n\t          if (sealed) { return; }\n\t          sealed = true;\n\t\n\t          lib$es6$promise$$internal$$reject(promise, reason);\n\t        }, 'Settle: ' + (promise._label || ' unknown promise'));\n\t\n\t        if (!sealed && error) {\n\t          sealed = true;\n\t          lib$es6$promise$$internal$$reject(promise, error);\n\t        }\n\t      }, promise);\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n\t      if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n\t        lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n\t      } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n\t        lib$es6$promise$$internal$$reject(promise, thenable._result);\n\t      } else {\n\t        lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n\t          lib$es6$promise$$internal$$resolve(promise, value);\n\t        }, function(reason) {\n\t          lib$es6$promise$$internal$$reject(promise, reason);\n\t        });\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n\t      if (maybeThenable.constructor === promise.constructor &&\n\t          then === lib$es6$promise$then$$default &&\n\t          constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n\t        lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n\t      } else {\n\t        if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n\t          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n\t        } else if (then === undefined) {\n\t          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n\t        } else if (lib$es6$promise$utils$$isFunction(then)) {\n\t          lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n\t        } else {\n\t          lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n\t        }\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$resolve(promise, value) {\n\t      if (promise === value) {\n\t        lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n\t      } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n\t        lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n\t      } else {\n\t        lib$es6$promise$$internal$$fulfill(promise, value);\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$publishRejection(promise) {\n\t      if (promise._onerror) {\n\t        promise._onerror(promise._result);\n\t      }\n\t\n\t      lib$es6$promise$$internal$$publish(promise);\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$fulfill(promise, value) {\n\t      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\t\n\t      promise._result = value;\n\t      promise._state = lib$es6$promise$$internal$$FULFILLED;\n\t\n\t      if (promise._subscribers.length !== 0) {\n\t        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$reject(promise, reason) {\n\t      if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\t      promise._state = lib$es6$promise$$internal$$REJECTED;\n\t      promise._result = reason;\n\t\n\t      lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n\t      var subscribers = parent._subscribers;\n\t      var length = subscribers.length;\n\t\n\t      parent._onerror = null;\n\t\n\t      subscribers[length] = child;\n\t      subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n\t      subscribers[length + lib$es6$promise$$internal$$REJECTED]  = onRejection;\n\t\n\t      if (length === 0 && parent._state) {\n\t        lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$publish(promise) {\n\t      var subscribers = promise._subscribers;\n\t      var settled = promise._state;\n\t\n\t      if (subscribers.length === 0) { return; }\n\t\n\t      var child, callback, detail = promise._result;\n\t\n\t      for (var i = 0; i < subscribers.length; i += 3) {\n\t        child = subscribers[i];\n\t        callback = subscribers[i + settled];\n\t\n\t        if (child) {\n\t          lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n\t        } else {\n\t          callback(detail);\n\t        }\n\t      }\n\t\n\t      promise._subscribers.length = 0;\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$ErrorObject() {\n\t      this.error = null;\n\t    }\n\t\n\t    var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\t\n\t    function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n\t      try {\n\t        return callback(detail);\n\t      } catch(e) {\n\t        lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n\t        return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n\t      var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n\t          value, error, succeeded, failed;\n\t\n\t      if (hasCallback) {\n\t        value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\t\n\t        if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n\t          failed = true;\n\t          error = value.error;\n\t          value = null;\n\t        } else {\n\t          succeeded = true;\n\t        }\n\t\n\t        if (promise === value) {\n\t          lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n\t          return;\n\t        }\n\t\n\t      } else {\n\t        value = detail;\n\t        succeeded = true;\n\t      }\n\t\n\t      if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n\t        // noop\n\t      } else if (hasCallback && succeeded) {\n\t        lib$es6$promise$$internal$$resolve(promise, value);\n\t      } else if (failed) {\n\t        lib$es6$promise$$internal$$reject(promise, error);\n\t      } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n\t        lib$es6$promise$$internal$$fulfill(promise, value);\n\t      } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n\t        lib$es6$promise$$internal$$reject(promise, value);\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n\t      try {\n\t        resolver(function resolvePromise(value){\n\t          lib$es6$promise$$internal$$resolve(promise, value);\n\t        }, function rejectPromise(reason) {\n\t          lib$es6$promise$$internal$$reject(promise, reason);\n\t        });\n\t      } catch(e) {\n\t        lib$es6$promise$$internal$$reject(promise, e);\n\t      }\n\t    }\n\t\n\t    function lib$es6$promise$promise$all$$all(entries) {\n\t      return new lib$es6$promise$enumerator$$default(this, entries).promise;\n\t    }\n\t    var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n\t    function lib$es6$promise$promise$race$$race(entries) {\n\t      /*jshint validthis:true */\n\t      var Constructor = this;\n\t\n\t      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\t\n\t      if (!lib$es6$promise$utils$$isArray(entries)) {\n\t        lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n\t        return promise;\n\t      }\n\t\n\t      var length = entries.length;\n\t\n\t      function onFulfillment(value) {\n\t        lib$es6$promise$$internal$$resolve(promise, value);\n\t      }\n\t\n\t      function onRejection(reason) {\n\t        lib$es6$promise$$internal$$reject(promise, reason);\n\t      }\n\t\n\t      for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n\t        lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n\t      }\n\t\n\t      return promise;\n\t    }\n\t    var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n\t    function lib$es6$promise$promise$reject$$reject(reason) {\n\t      /*jshint validthis:true */\n\t      var Constructor = this;\n\t      var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\t      lib$es6$promise$$internal$$reject(promise, reason);\n\t      return promise;\n\t    }\n\t    var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\t\n\t    var lib$es6$promise$promise$$counter = 0;\n\t\n\t    function lib$es6$promise$promise$$needsResolver() {\n\t      throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n\t    }\n\t\n\t    function lib$es6$promise$promise$$needsNew() {\n\t      throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n\t    }\n\t\n\t    var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n\t    /**\n\t      Promise objects represent the eventual result of an asynchronous operation. The\n\t      primary way of interacting with a promise is through its `then` method, which\n\t      registers callbacks to receive either a promise's eventual value or the reason\n\t      why the promise cannot be fulfilled.\n\t\n\t      Terminology\n\t      -----------\n\t\n\t      - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n\t      - `thenable` is an object or function that defines a `then` method.\n\t      - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n\t      - `exception` is a value that is thrown using the throw statement.\n\t      - `reason` is a value that indicates why a promise was rejected.\n\t      - `settled` the final resting state of a promise, fulfilled or rejected.\n\t\n\t      A promise can be in one of three states: pending, fulfilled, or rejected.\n\t\n\t      Promises that are fulfilled have a fulfillment value and are in the fulfilled\n\t      state.  Promises that are rejected have a rejection reason and are in the\n\t      rejected state.  A fulfillment value is never a thenable.\n\t\n\t      Promises can also be said to *resolve* a value.  If this value is also a\n\t      promise, then the original promise's settled state will match the value's\n\t      settled state.  So a promise that *resolves* a promise that rejects will\n\t      itself reject, and a promise that *resolves* a promise that fulfills will\n\t      itself fulfill.\n\t\n\t\n\t      Basic Usage:\n\t      ------------\n\t\n\t      ```js\n\t      var promise = new Promise(function(resolve, reject) {\n\t        // on success\n\t        resolve(value);\n\t\n\t        // on failure\n\t        reject(reason);\n\t      });\n\t\n\t      promise.then(function(value) {\n\t        // on fulfillment\n\t      }, function(reason) {\n\t        // on rejection\n\t      });\n\t      ```\n\t\n\t      Advanced Usage:\n\t      ---------------\n\t\n\t      Promises shine when abstracting away asynchronous interactions such as\n\t      `XMLHttpRequest`s.\n\t\n\t      ```js\n\t      function getJSON(url) {\n\t        return new Promise(function(resolve, reject){\n\t          var xhr = new XMLHttpRequest();\n\t\n\t          xhr.open('GET', url);\n\t          xhr.onreadystatechange = handler;\n\t          xhr.responseType = 'json';\n\t          xhr.setRequestHeader('Accept', 'application/json');\n\t          xhr.send();\n\t\n\t          function handler() {\n\t            if (this.readyState === this.DONE) {\n\t              if (this.status === 200) {\n\t                resolve(this.response);\n\t              } else {\n\t                reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n\t              }\n\t            }\n\t          };\n\t        });\n\t      }\n\t\n\t      getJSON('/posts.json').then(function(json) {\n\t        // on fulfillment\n\t      }, function(reason) {\n\t        // on rejection\n\t      });\n\t      ```\n\t\n\t      Unlike callbacks, promises are great composable primitives.\n\t\n\t      ```js\n\t      Promise.all([\n\t        getJSON('/posts'),\n\t        getJSON('/comments')\n\t      ]).then(function(values){\n\t        values[0] // => postsJSON\n\t        values[1] // => commentsJSON\n\t\n\t        return values;\n\t      });\n\t      ```\n\t\n\t      @class Promise\n\t      @param {function} resolver\n\t      Useful for tooling.\n\t      @constructor\n\t    */\n\t    function lib$es6$promise$promise$$Promise(resolver) {\n\t      this._id = lib$es6$promise$promise$$counter++;\n\t      this._state = undefined;\n\t      this._result = undefined;\n\t      this._subscribers = [];\n\t\n\t      if (lib$es6$promise$$internal$$noop !== resolver) {\n\t        typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n\t        this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n\t      }\n\t    }\n\t\n\t    lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n\t    lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n\t    lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n\t    lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n\t    lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n\t    lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n\t    lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\t\n\t    lib$es6$promise$promise$$Promise.prototype = {\n\t      constructor: lib$es6$promise$promise$$Promise,\n\t\n\t    /**\n\t      The primary way of interacting with a promise is through its `then` method,\n\t      which registers callbacks to receive either a promise's eventual value or the\n\t      reason why the promise cannot be fulfilled.\n\t\n\t      ```js\n\t      findUser().then(function(user){\n\t        // user is available\n\t      }, function(reason){\n\t        // user is unavailable, and you are given the reason why\n\t      });\n\t      ```\n\t\n\t      Chaining\n\t      --------\n\t\n\t      The return value of `then` is itself a promise.  This second, 'downstream'\n\t      promise is resolved with the return value of the first promise's fulfillment\n\t      or rejection handler, or rejected if the handler throws an exception.\n\t\n\t      ```js\n\t      findUser().then(function (user) {\n\t        return user.name;\n\t      }, function (reason) {\n\t        return 'default name';\n\t      }).then(function (userName) {\n\t        // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n\t        // will be `'default name'`\n\t      });\n\t\n\t      findUser().then(function (user) {\n\t        throw new Error('Found user, but still unhappy');\n\t      }, function (reason) {\n\t        throw new Error('`findUser` rejected and we're unhappy');\n\t      }).then(function (value) {\n\t        // never reached\n\t      }, function (reason) {\n\t        // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n\t        // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n\t      });\n\t      ```\n\t      If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\t\n\t      ```js\n\t      findUser().then(function (user) {\n\t        throw new PedagogicalException('Upstream error');\n\t      }).then(function (value) {\n\t        // never reached\n\t      }).then(function (value) {\n\t        // never reached\n\t      }, function (reason) {\n\t        // The `PedgagocialException` is propagated all the way down to here\n\t      });\n\t      ```\n\t\n\t      Assimilation\n\t      ------------\n\t\n\t      Sometimes the value you want to propagate to a downstream promise can only be\n\t      retrieved asynchronously. This can be achieved by returning a promise in the\n\t      fulfillment or rejection handler. The downstream promise will then be pending\n\t      until the returned promise is settled. This is called *assimilation*.\n\t\n\t      ```js\n\t      findUser().then(function (user) {\n\t        return findCommentsByAuthor(user);\n\t      }).then(function (comments) {\n\t        // The user's comments are now available\n\t      });\n\t      ```\n\t\n\t      If the assimliated promise rejects, then the downstream promise will also reject.\n\t\n\t      ```js\n\t      findUser().then(function (user) {\n\t        return findCommentsByAuthor(user);\n\t      }).then(function (comments) {\n\t        // If `findCommentsByAuthor` fulfills, we'll have the value here\n\t      }, function (reason) {\n\t        // If `findCommentsByAuthor` rejects, we'll have the reason here\n\t      });\n\t      ```\n\t\n\t      Simple Example\n\t      --------------\n\t\n\t      Synchronous Example\n\t\n\t      ```javascript\n\t      var result;\n\t\n\t      try {\n\t        result = findResult();\n\t        // success\n\t      } catch(reason) {\n\t        // failure\n\t      }\n\t      ```\n\t\n\t      Errback Example\n\t\n\t      ```js\n\t      findResult(function(result, err){\n\t        if (err) {\n\t          // failure\n\t        } else {\n\t          // success\n\t        }\n\t      });\n\t      ```\n\t\n\t      Promise Example;\n\t\n\t      ```javascript\n\t      findResult().then(function(result){\n\t        // success\n\t      }, function(reason){\n\t        // failure\n\t      });\n\t      ```\n\t\n\t      Advanced Example\n\t      --------------\n\t\n\t      Synchronous Example\n\t\n\t      ```javascript\n\t      var author, books;\n\t\n\t      try {\n\t        author = findAuthor();\n\t        books  = findBooksByAuthor(author);\n\t        // success\n\t      } catch(reason) {\n\t        // failure\n\t      }\n\t      ```\n\t\n\t      Errback Example\n\t\n\t      ```js\n\t\n\t      function foundBooks(books) {\n\t\n\t      }\n\t\n\t      function failure(reason) {\n\t\n\t      }\n\t\n\t      findAuthor(function(author, err){\n\t        if (err) {\n\t          failure(err);\n\t          // failure\n\t        } else {\n\t          try {\n\t            findBoooksByAuthor(author, function(books, err) {\n\t              if (err) {\n\t                failure(err);\n\t              } else {\n\t                try {\n\t                  foundBooks(books);\n\t                } catch(reason) {\n\t                  failure(reason);\n\t                }\n\t              }\n\t            });\n\t          } catch(error) {\n\t            failure(err);\n\t          }\n\t          // success\n\t        }\n\t      });\n\t      ```\n\t\n\t      Promise Example;\n\t\n\t      ```javascript\n\t      findAuthor().\n\t        then(findBooksByAuthor).\n\t        then(function(books){\n\t          // found books\n\t      }).catch(function(reason){\n\t        // something went wrong\n\t      });\n\t      ```\n\t\n\t      @method then\n\t      @param {Function} onFulfilled\n\t      @param {Function} onRejected\n\t      Useful for tooling.\n\t      @return {Promise}\n\t    */\n\t      then: lib$es6$promise$then$$default,\n\t\n\t    /**\n\t      `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n\t      as the catch block of a try/catch statement.\n\t\n\t      ```js\n\t      function findAuthor(){\n\t        throw new Error('couldn't find that author');\n\t      }\n\t\n\t      // synchronous\n\t      try {\n\t        findAuthor();\n\t      } catch(reason) {\n\t        // something went wrong\n\t      }\n\t\n\t      // async with promises\n\t      findAuthor().catch(function(reason){\n\t        // something went wrong\n\t      });\n\t      ```\n\t\n\t      @method catch\n\t      @param {Function} onRejection\n\t      Useful for tooling.\n\t      @return {Promise}\n\t    */\n\t      'catch': function(onRejection) {\n\t        return this.then(null, onRejection);\n\t      }\n\t    };\n\t    var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\t    function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n\t      this._instanceConstructor = Constructor;\n\t      this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\t\n\t      if (Array.isArray(input)) {\n\t        this._input     = input;\n\t        this.length     = input.length;\n\t        this._remaining = input.length;\n\t\n\t        this._result = new Array(this.length);\n\t\n\t        if (this.length === 0) {\n\t          lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n\t        } else {\n\t          this.length = this.length || 0;\n\t          this._enumerate();\n\t          if (this._remaining === 0) {\n\t            lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n\t          }\n\t        }\n\t      } else {\n\t        lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n\t      }\n\t    }\n\t\n\t    lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n\t      return new Error('Array Methods must be provided an Array');\n\t    };\n\t\n\t    lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n\t      var length  = this.length;\n\t      var input   = this._input;\n\t\n\t      for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n\t        this._eachEntry(input[i], i);\n\t      }\n\t    };\n\t\n\t    lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n\t      var c = this._instanceConstructor;\n\t      var resolve = c.resolve;\n\t\n\t      if (resolve === lib$es6$promise$promise$resolve$$default) {\n\t        var then = lib$es6$promise$$internal$$getThen(entry);\n\t\n\t        if (then === lib$es6$promise$then$$default &&\n\t            entry._state !== lib$es6$promise$$internal$$PENDING) {\n\t          this._settledAt(entry._state, i, entry._result);\n\t        } else if (typeof then !== 'function') {\n\t          this._remaining--;\n\t          this._result[i] = entry;\n\t        } else if (c === lib$es6$promise$promise$$default) {\n\t          var promise = new c(lib$es6$promise$$internal$$noop);\n\t          lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n\t          this._willSettleAt(promise, i);\n\t        } else {\n\t          this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n\t        }\n\t      } else {\n\t        this._willSettleAt(resolve(entry), i);\n\t      }\n\t    };\n\t\n\t    lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n\t      var promise = this.promise;\n\t\n\t      if (promise._state === lib$es6$promise$$internal$$PENDING) {\n\t        this._remaining--;\n\t\n\t        if (state === lib$es6$promise$$internal$$REJECTED) {\n\t          lib$es6$promise$$internal$$reject(promise, value);\n\t        } else {\n\t          this._result[i] = value;\n\t        }\n\t      }\n\t\n\t      if (this._remaining === 0) {\n\t        lib$es6$promise$$internal$$fulfill(promise, this._result);\n\t      }\n\t    };\n\t\n\t    lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n\t      var enumerator = this;\n\t\n\t      lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n\t        enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n\t      }, function(reason) {\n\t        enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n\t      });\n\t    };\n\t    function lib$es6$promise$polyfill$$polyfill() {\n\t      var local;\n\t\n\t      if (typeof global !== 'undefined') {\n\t          local = global;\n\t      } else if (typeof self !== 'undefined') {\n\t          local = self;\n\t      } else {\n\t          try {\n\t              local = Function('return this')();\n\t          } catch (e) {\n\t              throw new Error('polyfill failed because global object is unavailable in this environment');\n\t          }\n\t      }\n\t\n\t      var P = local.Promise;\n\t\n\t      if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n\t        return;\n\t      }\n\t\n\t      local.Promise = lib$es6$promise$promise$$default;\n\t    }\n\t    var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\t\n\t    var lib$es6$promise$umd$$ES6Promise = {\n\t      'Promise': lib$es6$promise$promise$$default,\n\t      'polyfill': lib$es6$promise$polyfill$$default\n\t    };\n\t\n\t    /* global define:true module:true window: true */\n\t    if (\"function\" === 'function' && __webpack_require__(6)['amd']) {\n\t      !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return lib$es6$promise$umd$$ES6Promise; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t    } else if (typeof module !== 'undefined' && module['exports']) {\n\t      module['exports'] = lib$es6$promise$umd$$ES6Promise;\n\t    } else if (typeof this !== 'undefined') {\n\t      this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n\t    }\n\t\n\t    lib$es6$promise$polyfill$$default();\n\t}).call(this);\n\t\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), (function() { return this; }()), __webpack_require__(4)(module)))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things.  But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals.  It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t    throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t    throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t    try {\n\t        if (typeof setTimeout === 'function') {\n\t            cachedSetTimeout = setTimeout;\n\t        } else {\n\t            cachedSetTimeout = defaultSetTimout;\n\t        }\n\t    } catch (e) {\n\t        cachedSetTimeout = defaultSetTimout;\n\t    }\n\t    try {\n\t        if (typeof clearTimeout === 'function') {\n\t            cachedClearTimeout = clearTimeout;\n\t        } else {\n\t            cachedClearTimeout = defaultClearTimeout;\n\t        }\n\t    } catch (e) {\n\t        cachedClearTimeout = defaultClearTimeout;\n\t    }\n\t} ())\n\tfunction runTimeout(fun) {\n\t    if (cachedSetTimeout === setTimeout) {\n\t        //normal enviroments in sane situations\n\t        return setTimeout(fun, 0);\n\t    }\n\t    // if setTimeout wasn't available but was latter defined\n\t    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t        cachedSetTimeout = setTimeout;\n\t        return setTimeout(fun, 0);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedSetTimeout(fun, 0);\n\t    } catch(e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t            return cachedSetTimeout.call(null, fun, 0);\n\t        } catch(e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t            return cachedSetTimeout.call(this, fun, 0);\n\t        }\n\t    }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t    if (cachedClearTimeout === clearTimeout) {\n\t        //normal enviroments in sane situations\n\t        return clearTimeout(marker);\n\t    }\n\t    // if clearTimeout wasn't available but was latter defined\n\t    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t        cachedClearTimeout = clearTimeout;\n\t        return clearTimeout(marker);\n\t    }\n\t    try {\n\t        // when when somebody has screwed with setTimeout but no I.E. maddness\n\t        return cachedClearTimeout(marker);\n\t    } catch (e){\n\t        try {\n\t            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n\t            return cachedClearTimeout.call(null, marker);\n\t        } catch (e){\n\t            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t            return cachedClearTimeout.call(this, marker);\n\t        }\n\t    }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t    if (!draining || !currentQueue) {\n\t        return;\n\t    }\n\t    draining = false;\n\t    if (currentQueue.length) {\n\t        queue = currentQueue.concat(queue);\n\t    } else {\n\t        queueIndex = -1;\n\t    }\n\t    if (queue.length) {\n\t        drainQueue();\n\t    }\n\t}\n\t\n\tfunction drainQueue() {\n\t    if (draining) {\n\t        return;\n\t    }\n\t    var timeout = runTimeout(cleanUpNextTick);\n\t    draining = true;\n\t\n\t    var len = queue.length;\n\t    while(len) {\n\t        currentQueue = queue;\n\t        queue = [];\n\t        while (++queueIndex < len) {\n\t            if (currentQueue) {\n\t                currentQueue[queueIndex].run();\n\t            }\n\t        }\n\t        queueIndex = -1;\n\t        len = queue.length;\n\t    }\n\t    currentQueue = null;\n\t    draining = false;\n\t    runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t    var args = new Array(arguments.length - 1);\n\t    if (arguments.length > 1) {\n\t        for (var i = 1; i < arguments.length; i++) {\n\t            args[i - 1] = arguments[i];\n\t        }\n\t    }\n\t    queue.push(new Item(fun, args));\n\t    if (queue.length === 1 && !draining) {\n\t        runTimeout(drainQueue);\n\t    }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t    this.fun = fun;\n\t    this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t    this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t    throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t    throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t/* (ignored) */\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tfunction __export(m) {\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n\t}\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar PromisesShim_1 = __webpack_require__(8);\n\tPromisesShim_1.shim();\n\tvar CustomEventPolyfill_1 = __webpack_require__(9);\n\tCustomEventPolyfill_1.customEventPolyfill();\n\t// MISC\n\tvar Version_1 = __webpack_require__(10);\n\texports.version = Version_1.version;\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\texports.SearchEndpoint = SearchEndpoint_1.SearchEndpoint;\n\t__export(__webpack_require__(25));\n\t// Default language needs to be set after external module, since this is where l10n will be imported\n\tvar DefaultLanguage_1 = __webpack_require__(29);\n\tDefaultLanguage_1.defaultLanguage();\n\tvar DefaultLanguage_2 = __webpack_require__(29);\n\texports.setLanguageAfterPageLoaded = DefaultLanguage_2.setLanguageAfterPageLoaded;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/* istanbul ignore next */\n\tfunction shim() {\n\t    var doShim = function (promiseInstance) {\n\t        if (typeof promiseInstance.prototype['finally'] != 'function') {\n\t            promiseInstance.prototype['finally'] = function finallyPolyfill(callback) {\n\t                var constructor = this.constructor;\n\t                return this.then(function (value) {\n\t                    return constructor.resolve(callback()).then(function () {\n\t                        return value;\n\t                    });\n\t                }, function (reason) {\n\t                    return constructor.resolve(callback()).then(function () {\n\t                        throw reason;\n\t                    });\n\t                });\n\t            };\n\t        }\n\t        var rethrowError = function (self) {\n\t            self.then(null, function (err) {\n\t                setTimeout(function () {\n\t                    throw err;\n\t                }, 0);\n\t            });\n\t        };\n\t        if (typeof promiseInstance.prototype['done'] !== 'function') {\n\t            promiseInstance.prototype['done'] = function (onFulfilled, onRejected) {\n\t                var self = arguments.length ? this.then.apply(this, arguments) : this;\n\t                rethrowError(self);\n\t                return this;\n\t            };\n\t        }\n\t        if (typeof promiseInstance.prototype['fail'] !== 'function') {\n\t            promiseInstance.prototype['fail'] = function (onFulfilled, onRejected) {\n\t                var self = arguments.length ? this.catch.apply(this, arguments) : this;\n\t                rethrowError(self);\n\t                return this;\n\t            };\n\t        }\n\t    };\n\t    var globalPromise = window['Promise'];\n\t    var localPromise = Promise;\n\t    if (globalPromise) {\n\t        doShim(globalPromise);\n\t    }\n\t    if (localPromise) {\n\t        doShim(localPromise);\n\t    }\n\t}\n\texports.shim = shim;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// CustomEvent polyfill from MDN\n\t// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill\n\tfunction customEventPolyfill() {\n\t    // window.CustomEvent is missing from the definitions\n\t    if (typeof window.CustomEvent === 'function') {\n\t        return;\n\t    }\n\t    var CustomEvent = function (event, params) {\n\t        params = params || { bubbles: false, cancelable: false, detail: undefined };\n\t        var customEvent = document.createEvent('CustomEvent');\n\t        customEvent.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n\t        return customEvent;\n\t    };\n\t    // window.Event is specific to IE\n\t    CustomEvent.prototype = window.Event.prototype;\n\t    window.CustomEvent = CustomEvent;\n\t}\n\texports.customEventPolyfill = customEventPolyfill;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.version = {\n\t    'lib': '1.2537.57',\n\t    'product': '1.2537.57',\n\t    'supportedApiVersion': 2\n\t};\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\n\t};\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar EndpointCaller_1 = __webpack_require__(12);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Version_1 = __webpack_require__(10);\n\tvar AjaxError_1 = __webpack_require__(21);\n\tvar MissingAuthenticationError_1 = __webpack_require__(22);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar QueryError_1 = __webpack_require__(24);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar PromisesShim_1 = __webpack_require__(8);\n\tvar _ = __webpack_require__(16);\n\tPromisesShim_1.shim();\n\tvar DefaultSearchEndpointOptions = (function () {\n\t    function DefaultSearchEndpointOptions() {\n\t        this.version = 'v2';\n\t        this.queryStringArguments = {};\n\t        this.anonymous = false;\n\t        this.isGuestUser = false;\n\t    }\n\t    return DefaultSearchEndpointOptions;\n\t}());\n\texports.DefaultSearchEndpointOptions = DefaultSearchEndpointOptions;\n\t/**\n\t * A search endpoint allows to execute various actions against the Coveo Search API and index.<br/>\n\t * For example, you can search, list field values, get the quickview content for a document, etc.<br/>\n\t * Any actions that you execute using this class will not trigger a full query cycle for the Coveo components.<br/>\n\t * This is because this class will not trigger any query events directly.<br/>\n\t * If you wish to execute a query that all components will react to (and trigger the corresponding query events), use the {@link QueryController}\n\t */\n\tvar SearchEndpoint = (function () {\n\t    /**\n\t     * Create a new SearchEndpoint.<br/>\n\t     * Will use a set of sane default options, and merge them with the options parameter.<br/>\n\t     * Will create an {@link EndpointCaller} and use it to communicate with the endpoint internally\n\t     * @param options\n\t     */\n\t    function SearchEndpoint(options) {\n\t        var _this = this;\n\t        this.options = options;\n\t        Assert_1.Assert.exists(options);\n\t        Assert_1.Assert.exists(options.restUri);\n\t        // For backward compatibility, we set anonymous to true when an access token\n\t        // is specified on a page loaded through the filesystem. This causes withCredentials\n\t        // to NOT be set, allowing those pages to work with non Windows/Basic/Cookie\n\t        // authentication. If anonymous is explicitly set to false, we'll use withCredentials.\n\t        var defaultOptions = new DefaultSearchEndpointOptions();\n\t        defaultOptions.anonymous = window.location.href.indexOf('file://') == 0 && Utils_1.Utils.isNonEmptyString(options.accessToken);\n\t        this.options = _.extend({}, defaultOptions, options);\n\t        // Forward any debug=1 query argument to the REST API to ease debugging\n\t        if (SearchEndpoint.isDebugArgumentPresent()) {\n\t            this.options.queryStringArguments['debug'] = 1;\n\t        }\n\t        this.onUnload = function () {\n\t            _this.handleUnload();\n\t        };\n\t        window.addEventListener('beforeunload', this.onUnload);\n\t        this.logger = new Logger_1.Logger(this);\n\t        this.createEndpointCaller();\n\t    }\n\t    /**\n\t     * Configure an endpoint that will point to a Coveo Cloud index, which contains a set of public sources with no security on them.<br/>\n\t     * Used for demo purposes and ease of setup.\n\t     * @param otherOptions A set of additional options to use when configuring this endpoint\n\t     */\n\t    SearchEndpoint.configureSampleEndpoint = function (otherOptions) {\n\t        if (SearchEndpoint.isUseLocalArgumentPresent()) {\n\t            // This is a handy flag to quickly test a local search API and alerts\n\t            SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n\t                restUri: 'http://localhost:8100/rest/search',\n\t                searchAlertsUri: 'http://localhost:8088/rest/search/alerts/'\n\t            }, otherOptions));\n\t        }\n\t        else {\n\t            // This OAuth token points to the organization used for samples.\n\t            // It contains a set of harmless content sources.\n\t            SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n\t                restUri: 'https://cloudplatform.coveo.com/rest/search',\n\t                accessToken: '52d806a2-0f64-4390-a3f2-e0f41a4a73ec'\n\t            }, otherOptions));\n\t        }\n\t    };\n\t    /**\n\t     * Configure an endpoint that will point to a Coveo Cloud index V2, which contains a set of public sources with no security on them.<br/>\n\t     * Used for demo purposes and ease of setup.\n\t     * @param otherOptions A set of additional options to use when configuring this endpoint\n\t     */\n\t    SearchEndpoint.configureSampleEndpointV2 = function (optionsOPtions) {\n\t        SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n\t            restUri: 'https://platform.cloud.coveo.com/rest/search',\n\t            accessToken: 'xx564559b1-0045-48e1-953c-3addd1ee4457',\n\t            queryStringArguments: {\n\t                organizationID: 'searchuisamples',\n\t                viewAllContent: 1\n\t            }\n\t        }));\n\t    };\n\t    /**\n\t     * Configure an endpoint to a Coveo Cloud index.\n\t     * @param organization The organization id of your Coveo cloud index\n\t     * @param token The token to use to execute query. If null, you will most probably need to login when querying.\n\t     * @param uri The uri of your cloud Search API. By default, will point to the production environment\n\t     * @param otherOptions A set of additional options to use when configuring this endpoint\n\t     */\n\t    SearchEndpoint.configureCloudEndpoint = function (organization, token, uri, otherOptions) {\n\t        if (uri === void 0) { uri = 'https://cloudplatform.coveo.com/rest/search'; }\n\t        var options = {\n\t            restUri: uri,\n\t            accessToken: token,\n\t            queryStringArguments: { organizationId: organization }\n\t        };\n\t        var merged = SearchEndpoint.mergeConfigOptions(options, otherOptions);\n\t        SearchEndpoint.endpoints['default'] = new SearchEndpoint(SearchEndpoint.removeUndefinedConfigOption(merged));\n\t    };\n\t    /**\n\t     * Configure an endpoint to a Coveo Cloud index, in the V2 platform.\n\t     * @param organization The organization id of your Coveo cloud index\n\t     * @param token The token to use to execute query. If null, you will most probably need to login when querying.\n\t     * @param uri The uri of your cloud Search API. By default, will point to the production environment\n\t     * @param otherOptions A set of additional options to use when configuring this endpoint\n\t     */\n\t    SearchEndpoint.configureCloudV2Endpoint = function (organization, token, uri, otherOptions) {\n\t        if (uri === void 0) { uri = 'https://platform.cloud.coveo.com/rest/search'; }\n\t        return SearchEndpoint.configureCloudEndpoint(organization, token, uri, otherOptions);\n\t    };\n\t    /**\n\t     * Configure an endpoint to a Coveo on premise index.\n\t     * @param uri The uri of your Coveo Search API endpoint. eg : http://myserver:8080/rest/search\n\t     * @param token The token to use to execute query. If null, you will most probably need to login when querying (unless the search api is configured using advanced auth options, like windows auth or claims)\n\t     * @param otherOptions A set of additional options to use when configuring this endpoint\n\t     */\n\t    SearchEndpoint.configureOnPremiseEndpoint = function (uri, token, otherOptions) {\n\t        var merged = SearchEndpoint.mergeConfigOptions({\n\t            restUri: uri,\n\t            accessToken: token\n\t        }, otherOptions);\n\t        SearchEndpoint.endpoints['default'] = new SearchEndpoint(SearchEndpoint.removeUndefinedConfigOption(merged));\n\t    };\n\t    SearchEndpoint.removeUndefinedConfigOption = function (config) {\n\t        _.each(_.keys(config), function (key) {\n\t            if (config[key] == undefined) {\n\t                delete config[key];\n\t            }\n\t        });\n\t        return config;\n\t    };\n\t    SearchEndpoint.mergeConfigOptions = function (first, second) {\n\t        first = SearchEndpoint.removeUndefinedConfigOption(first);\n\t        second = SearchEndpoint.removeUndefinedConfigOption(second);\n\t        return _.extend({}, first, second);\n\t    };\n\t    SearchEndpoint.prototype.reset = function () {\n\t        this.createEndpointCaller();\n\t    };\n\t    /**\n\t     * Set a function which will allow external code to modify all endpoint call parameters before they are sent by the browser.\n\t     *\n\t     * Used in very specific scenario where the network infrastructure require special request headers to be added or removed, for example.\n\t     * @param requestModifier\n\t     */\n\t    SearchEndpoint.prototype.setRequestModifier = function (requestModifier) {\n\t        this.caller.options.requestModifier = requestModifier;\n\t    };\n\t    /**\n\t     * Return the base uri of the endpoint to perform search\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getBaseUri = function () {\n\t        return this.buildBaseUri('');\n\t    };\n\t    /**\n\t     * Return the base uri of the endpoint for search alert\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getBaseAlertsUri = function () {\n\t        return this.buildSearchAlertsUri('');\n\t    };\n\t    /**\n\t     * Get the uri that can be used to authenticate against the given provider\n\t     * @param provider The provider name\n\t     * @param returnUri The uri at which to return after the authentication is completed\n\t     * @param message The message for authentication\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getAuthenticationProviderUri = function (provider, returnUri, message, callOptions, callParams) {\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        callParams.url += provider + '?';\n\t        if (Utils_1.Utils.isNonEmptyString(returnUri)) {\n\t            callParams.url += 'redirectUri=' + encodeURIComponent(returnUri) + '&';\n\t        }\n\t        else if (Utils_1.Utils.isNonEmptyString(message)) {\n\t            callParams.url += 'message=' + encodeURIComponent(message) + '&';\n\t        }\n\t        callParams.url += callParams.queryString.join('&');\n\t        return callParams.url;\n\t    };\n\t    /**\n\t     * is the search endpoint using jsonp internally to communicate with Search API\n\t     * @returns {boolean}\n\t     */\n\t    SearchEndpoint.prototype.isJsonp = function () {\n\t        return this.caller.useJsonp;\n\t    };\n\t    /**\n\t     * Perform a search on the index and returns a Promise of {@link IQueryResults}.<br/>\n\t     * Will modify the query results slightly, by adding additional information on each results (an id, the state object, etc.)\n\t     * @param query The query to execute. Typically, the query object is built using a {@link QueryBuilder}\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<IQueryResults>}\n\t     */\n\t    SearchEndpoint.prototype.search = function (query, callOptions, callParams) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(query);\n\t        callParams.requestData = query;\n\t        this.logger.info('Performing REST query', query);\n\t        return this.performOneCall(callParams, callOptions).then(function (results) {\n\t            _this.logger.info('REST query successful', results, query);\n\t            // Version check\n\t            // If the SearchAPI doesn't give us any apiVersion info, we assume version 1 (before apiVersion was implemented)\n\t            if (results.apiVersion == null) {\n\t                results.apiVersion = 1;\n\t            }\n\t            if (results.apiVersion < Version_1.version.supportedApiVersion) {\n\t                _this.logger.error('Please update your REST Search API');\n\t            }\n\t            // If the server specified no search ID generated one using the client-side\n\t            // GUID generator. We prefer server generated guids to allow tracking a query\n\t            // all the way from the analytics to the logs.\n\t            if (Utils_1.Utils.isNullOrEmptyString(results.searchUid)) {\n\t                results.searchUid = QueryUtils_1.QueryUtils.createGuid();\n\t            }\n\t            QueryUtils_1.QueryUtils.setIndexAndUidOnQueryResults(query, results, results.searchUid, results.pipeline, results.splitTestRun);\n\t            QueryUtils_1.QueryUtils.setTermsToHighlightOnQueryResults(query, results);\n\t            return results;\n\t        });\n\t    };\n\t    /**\n\t     * Get a link/uri to download a set of results, for a given query, to an xlsx format.<br/>\n\t     * Note : This does not download automatically the documents, merely provide an url at which to download them.\n\t     * @param query The query for which to get the xlsx documents\n\t     * @param numberOfResults The number of results that should be downloaded\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getExportToExcelLink = function (query, numberOfResults, callOptions, callParams) {\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        queryString = this.buildCompleteQueryString(null, query);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        if (numberOfResults != null) {\n\t            callParams.queryString.push('numberOfResults=' + numberOfResults);\n\t        }\n\t        callParams.queryString.push('format=xlsx');\n\t        return callParams.url + '?' + callParams.queryString.join('&');\n\t    };\n\t    /**\n\t     * Get the raw datastream for a given document. This is typically used to get a thumbnail for a document.<br/>\n\t     * Return an array buffer : <br/>\n\t     * eg : let rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));<br/>\n\t     * img.setAttribute('src', 'data:image/png;base64,' + btoa(rawBinary));\n\t     * @param documentUniqueId Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param dataStreamType Normally : '$Thumbnail'\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<TResult>|Promise<U>}\n\t     */\n\t    SearchEndpoint.prototype.getRawDataStream = function (documentUniqueId, dataStreamType, callOptions, callParams) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(documentUniqueId);\n\t        var queryString = this.buildViewAsHtmlQueryString(documentUniqueId, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        this.logger.info('Performing REST query for datastream ' + dataStreamType + ' on document uniqueID' + documentUniqueId);\n\t        callParams.queryString.push('dataStream=' + dataStreamType);\n\t        return this.performOneCall(callParams).then(function (results) {\n\t            _this.logger.info('REST query successful', results, documentUniqueId);\n\t            return results;\n\t        });\n\t    };\n\t    /**\n\t     * Return an url that will allow to see the datastream for a given document. This is typically used to get a thumbnail for a document.<br/>\n\t     * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param dataStreamType Normally : '$Thumbnail'\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getViewAsDatastreamUri = function (documentUniqueID, dataStreamType, callOptions, callParams) {\n\t        callOptions = _.extend({}, callOptions);\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        queryString = this.buildCompleteQueryString(callOptions.query, callOptions.queryObject);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        return callParams.url + '?' + callParams.queryString.join('&') + '&dataStream=' + encodeURIComponent(dataStreamType);\n\t    };\n\t    /**\n\t     * Return a single document, using it's uniqueId\n\t     * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<IQueryResult>}\n\t     */\n\t    SearchEndpoint.prototype.getDocument = function (documentUniqueID, callOptions, callParams) {\n\t        var queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Return the content for a single document, as text.<br/>\n\t     * Think : quickview\n\t     * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<string>}\n\t     */\n\t    SearchEndpoint.prototype.getDocumentText = function (documentUniqueID, callOptions, callParams) {\n\t        var queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        return this.performOneCall(callParams)\n\t            .then(function (data) {\n\t            return data.content;\n\t        });\n\t    };\n\t    /**\n\t     * Return the content for a single document, as an HTMLDocument.<br/>\n\t     * Think : quickview\n\t     * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<HTMLDocument>}\n\t     */\n\t    SearchEndpoint.prototype.getDocumentHtml = function (documentUniqueID, callOptions, callParams) {\n\t        callOptions = _.extend({}, callOptions);\n\t        var queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        callParams.requestData = callOptions.queryObject || { q: callOptions.query };\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Return an url that will allow to see a single document content, as HTML.<br/>\n\t     * Think : quickview\n\t     * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {string}\n\t     */\n\t    SearchEndpoint.prototype.getViewAsHtmlUri = function (documentUniqueID, callOptions, callParams) {\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n\t        callParams.queryString = callParams.queryString.concat(queryString);\n\t        callParams.queryString = _.uniq(callParams.queryString);\n\t        return callParams.url + '?' + callParams.queryString.join('&');\n\t    };\n\t    SearchEndpoint.prototype.batchFieldValues = function (request, callOptions, callParams) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(request);\n\t        return this.performOneCall(callParams)\n\t            .then(function (data) {\n\t            _this.logger.info('REST list field values successful', data.values, request);\n\t            return data.values;\n\t        });\n\t    };\n\t    /**\n\t     * List the possible values for a given request\n\t     * @param request The request for which to list the possible field values\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<TResult>|Promise<U>}\n\t     */\n\t    SearchEndpoint.prototype.listFieldValues = function (request, callOptions, callParams) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(request);\n\t        callParams.requestData = request;\n\t        this.logger.info('Listing field values', request);\n\t        return this.performOneCall(callParams)\n\t            .then(function (data) {\n\t            _this.logger.info('REST list field values successful', data.values, request);\n\t            return data.values;\n\t        });\n\t    };\n\t    /**\n\t     * List all fields for the index, and return an array of their description\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<TResult>|Promise<U>}\n\t     */\n\t    SearchEndpoint.prototype.listFields = function (callOptions, callParams) {\n\t        this.logger.info('Listing fields');\n\t        return this.performOneCall(callParams).then(function (data) {\n\t            return data.fields;\n\t        });\n\t    };\n\t    /**\n\t     * List all available query extensions for the search endpoint\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<IExtension[]>}\n\t     */\n\t    SearchEndpoint.prototype.extensions = function (callOptions, callParams) {\n\t        this.logger.info('Listing extensions');\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Allow to rate a single document in the index (granted that collaborative rating is enabled on your index)\n\t     * @param ratingRequest Document id and rating\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<boolean>|Promise<T>}\n\t     */\n\t    SearchEndpoint.prototype.rateDocument = function (ratingRequest, callOptions, callParams) {\n\t        this.logger.info('Rating a document', ratingRequest);\n\t        callParams.requestData = ratingRequest;\n\t        return this.performOneCall(callParams).then(function () {\n\t            return true;\n\t        });\n\t    };\n\t    /**\n\t     * Allow to tag a single document\n\t     * @param taggingRequest Document id and tag action to perform\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<boolean>|Promise<T>}\n\t     */\n\t    SearchEndpoint.prototype.tagDocument = function (taggingRequest, callOptions, callParams) {\n\t        this.logger.info('Tagging a document', taggingRequest);\n\t        callParams.requestData = taggingRequest;\n\t        return this.performOneCall(callParams).then(function () {\n\t            return true;\n\t        });\n\t    };\n\t    /**\n\t     * Returns a list of Coveo Machine Learning query suggestions, based on the given request\n\t     * @param request query and number of suggestions to return\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<IRevealQuerySuggestResponse>}\n\t     */\n\t    SearchEndpoint.prototype.getRevealQuerySuggest = function (request, callOptions, callParams) {\n\t        this.logger.info('Get Reveal Query Suggest', request);\n\t        callParams.requestData = request;\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Allow to follow a document or a query on the search alerts service\n\t     * @param request\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<ISubscription>}\n\t     */\n\t    SearchEndpoint.prototype.follow = function (request, callOptions, callParams) {\n\t        callParams.requestData = request;\n\t        this.logger.info('Following a document or a query', request);\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Return a Promise of array of current subscriptions\n\t     * @param page The page of the subsctiptions\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {any}\n\t     */\n\t    SearchEndpoint.prototype.listSubscriptions = function (page, callOptions, callParams) {\n\t        var _this = this;\n\t        if (this.options.isGuestUser) {\n\t            return new Promise(function (resolve, reject) {\n\t                reject();\n\t            });\n\t        }\n\t        if (this.currentListSubscriptions == null) {\n\t            callParams.queryString.push('page=' + (page || 0));\n\t            this.currentListSubscriptions = this.performOneCall(callParams);\n\t            this.currentListSubscriptions.then(function (data) {\n\t                _this.currentListSubscriptions = null;\n\t                return data;\n\t            }).catch(function (e) {\n\t                // Trap 503 error, as the listSubscription call is called on every page initialization\n\t                // to check for current subscriptions. By default, the search alert service is not enabled for most organization\n\t                // Don't want to pollute the console with un-needed noise and confusion\n\t                if (e.status != 503) {\n\t                    throw e;\n\t                }\n\t            });\n\t        }\n\t        return this.currentListSubscriptions;\n\t    };\n\t    /**\n\t     * Update a subscription with new parameters\n\t     * @param subscription The subscription to update with new parameters\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<ISubscription>}\n\t     */\n\t    SearchEndpoint.prototype.updateSubscription = function (subscription, callOptions, callParams) {\n\t        callParams.requestData = subscription;\n\t        this.logger.info('Updating a subscription', subscription);\n\t        callParams.url += subscription.id;\n\t        return this.performOneCall(callParams);\n\t    };\n\t    /**\n\t     * Delete a subscription\n\t     * @param subscription The subscription to delete\n\t     * @param callOptions Additional set of options to use for this call.\n\t     * @param callParams Options injected by the applied decorators.\n\t     * @returns {Promise<ISubscription>}\n\t     */\n\t    SearchEndpoint.prototype.deleteSubscription = function (subscription, callOptions, callParams) {\n\t        callParams.url += subscription.id;\n\t        return this.performOneCall(callParams);\n\t    };\n\t    SearchEndpoint.prototype.logError = function (sentryLog, callOptions, callParams) {\n\t        callParams.requestData = sentryLog;\n\t        return this.performOneCall(callParams, callOptions)\n\t            .then(function () {\n\t            return true;\n\t        })\n\t            .catch(function () {\n\t            return false;\n\t        });\n\t    };\n\t    SearchEndpoint.prototype.nuke = function () {\n\t        window.removeEventListener('beforeunload', this.onUnload);\n\t    };\n\t    SearchEndpoint.prototype.createEndpointCaller = function () {\n\t        this.caller = new EndpointCaller_1.EndpointCaller(this.options);\n\t    };\n\t    SearchEndpoint.isDebugArgumentPresent = function () {\n\t        return /[?&]debug=1([&]|$)/.test(window.location.search);\n\t    };\n\t    SearchEndpoint.isUseLocalArgumentPresent = function () {\n\t        return /[?&]useLocal=1([&]|$)/.test(window.location.search);\n\t    };\n\t    SearchEndpoint.prototype.handleUnload = function () {\n\t        this.isRedirecting = true;\n\t    };\n\t    SearchEndpoint.prototype.buildBaseUri = function (path) {\n\t        Assert_1.Assert.isString(path);\n\t        var uri = this.options.restUri;\n\t        uri = this.removeTrailingSlash(uri);\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.version)) {\n\t            uri += '/' + this.options.version;\n\t        }\n\t        uri += path;\n\t        return uri;\n\t    };\n\t    SearchEndpoint.prototype.buildSearchAlertsUri = function (path) {\n\t        Assert_1.Assert.isString(path);\n\t        var uri = this.options.searchAlertsUri || this.options.restUri + '/alerts';\n\t        if (uri == null) {\n\t            return null;\n\t        }\n\t        uri = this.removeTrailingSlash(uri);\n\t        uri += path;\n\t        return uri;\n\t    };\n\t    // see https://github.com/palantir/tslint/issues/1421\n\t    // tslint:disable-next-line:no-unused-variable\n\t    SearchEndpoint.prototype.buildAccessToken = function (tokenKey) {\n\t        var queryString = [];\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.accessToken)) {\n\t            queryString.push(tokenKey + '=' + encodeURIComponent(this.options.accessToken));\n\t        }\n\t        return queryString;\n\t    };\n\t    SearchEndpoint.prototype.buildBaseQueryString = function (callOptions) {\n\t        callOptions = _.extend({}, callOptions);\n\t        var queryString = [];\n\t        for (var name_1 in this.options.queryStringArguments) {\n\t            queryString.push(name_1 + '=' + encodeURIComponent(this.options.queryStringArguments[name_1]));\n\t        }\n\t        if (callOptions && _.isArray(callOptions.authentication) && callOptions.authentication.length != 0) {\n\t            queryString.push('authentication=' + callOptions.authentication.join(','));\n\t        }\n\t        return queryString;\n\t    };\n\t    SearchEndpoint.prototype.buildCompleteQueryString = function (query, queryObject) {\n\t        // In an ideal parallel reality, the entire query used in the 'search' call is used here.\n\t        // In this reality however, we must support GET calls (ex: GET /html) for CORS/JSONP/IE reasons.\n\t        // Therefore, we cherry-pick parts of the query to include in a 'query string' instead of a body payload.\n\t        var queryString = [];\n\t        if (queryObject) {\n\t            _.each(['q', 'aq', 'cq', 'dq', 'searchHub', 'tab', 'language', 'pipeline', 'lowercaseOperators'], function (key) {\n\t                if (queryObject[key]) {\n\t                    queryString.push(key + '=' + encodeURIComponent(queryObject[key]));\n\t                }\n\t            });\n\t            _.each(queryObject.context, function (value, key) {\n\t                queryString.push('context[' + key + ']=' + encodeURIComponent(value));\n\t            });\n\t            if (queryObject.fieldsToInclude) {\n\t                queryString.push(\"fieldsToInclude=[\" + _.map(queryObject.fieldsToInclude, function (field) { return '\"' + encodeURIComponent(field.replace('@', '')) + '\"'; }).join(',') + \"]\");\n\t            }\n\t        }\n\t        else if (query) {\n\t            queryString.push('q=' + encodeURIComponent(query));\n\t        }\n\t        return queryString;\n\t    };\n\t    SearchEndpoint.prototype.buildViewAsHtmlQueryString = function (uniqueId, callOptions) {\n\t        callOptions = _.extend({}, callOptions);\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        queryString.push('uniqueId=' + encodeURIComponent(uniqueId));\n\t        if (callOptions.query || callOptions.queryObject) {\n\t            queryString.push('enableNavigation=true');\n\t        }\n\t        if (callOptions.requestedOutputSize) {\n\t            queryString.push('requestedOutputSize=' + encodeURIComponent(callOptions.requestedOutputSize.toString()));\n\t        }\n\t        if (callOptions.contentType) {\n\t            queryString.push('contentType=' + encodeURIComponent(callOptions.contentType));\n\t        }\n\t        return queryString;\n\t    };\n\t    SearchEndpoint.prototype.performOneCall = function (params, callOptions, autoRenewToken) {\n\t        var _this = this;\n\t        if (autoRenewToken === void 0) { autoRenewToken = true; }\n\t        var queryString = this.buildBaseQueryString(callOptions);\n\t        params.queryString = params.queryString.concat(queryString);\n\t        params.queryString = _.uniq(params.queryString);\n\t        return this.caller.call(params)\n\t            .then(function (response) {\n\t            if (response.data && response.data.clientDuration) {\n\t                response.data.clientDuration = response.duration;\n\t            }\n\t            return response.data;\n\t        }).catch(function (error) {\n\t            if (autoRenewToken && _this.canRenewAccessToken() && _this.isAccessTokenExpiredStatus(error.statusCode)) {\n\t                _this.renewAccessToken().then(function () {\n\t                    return _this.performOneCall(params, callOptions, autoRenewToken);\n\t                })\n\t                    .catch(function () {\n\t                    return Promise.reject(_this.handleErrorResponse(error));\n\t                });\n\t            }\n\t            else if (error.statusCode == 0 && _this.isRedirecting) {\n\t                // The page is getting redirected\n\t                // Set timeout on return with empty string, since it does not really matter\n\t                _.defer(function () {\n\t                    return '';\n\t                });\n\t            }\n\t            else {\n\t                return Promise.reject(_this.handleErrorResponse(error));\n\t            }\n\t        });\n\t    };\n\t    SearchEndpoint.prototype.handleErrorResponse = function (errorResponse) {\n\t        if (this.isMissingAuthenticationProviderStatus(errorResponse.statusCode)) {\n\t            return new MissingAuthenticationError_1.MissingAuthenticationError(errorResponse.data['provider']);\n\t        }\n\t        else if (errorResponse.data && errorResponse.data.message && errorResponse.data.type) {\n\t            return new QueryError_1.QueryError(errorResponse);\n\t        }\n\t        else if (errorResponse.data && errorResponse.data.message) {\n\t            return new AjaxError_1.AjaxError(\"Request Error : \" + errorResponse.data.message, errorResponse.statusCode);\n\t        }\n\t        else {\n\t            return new AjaxError_1.AjaxError('Request Error', errorResponse.statusCode);\n\t        }\n\t    };\n\t    SearchEndpoint.prototype.canRenewAccessToken = function () {\n\t        return Utils_1.Utils.isNonEmptyString(this.options.accessToken) && _.isFunction(this.options.renewAccessToken);\n\t    };\n\t    SearchEndpoint.prototype.renewAccessToken = function () {\n\t        var _this = this;\n\t        this.logger.info('Renewing expired access token');\n\t        return this.options.renewAccessToken().then(function (token) {\n\t            Assert_1.Assert.isNonEmptyString(token);\n\t            _this.options.accessToken = token;\n\t            _this.createEndpointCaller();\n\t            return token;\n\t        }).catch(function (e) {\n\t            _this.logger.error('Failed to renew access token', e);\n\t            return e;\n\t        });\n\t    };\n\t    SearchEndpoint.prototype.removeTrailingSlash = function (uri) {\n\t        if (this.hasTrailingSlash(uri)) {\n\t            uri = uri.substr(0, uri.length - 1);\n\t        }\n\t        return uri;\n\t    };\n\t    SearchEndpoint.prototype.hasTrailingSlash = function (uri) {\n\t        return uri.charAt(uri.length - 1) == '/';\n\t    };\n\t    SearchEndpoint.prototype.isMissingAuthenticationProviderStatus = function (status) {\n\t        return status == 402;\n\t    };\n\t    SearchEndpoint.prototype.isAccessTokenExpiredStatus = function (status) {\n\t        return status == 419;\n\t    };\n\t    return SearchEndpoint;\n\t}());\n\t/**\n\t * A map of all the initialized endpoint.<br/>\n\t * eg : Coveo.SearchEndpoint.endpoints['default'] will return the default endpoint that was created at initialization\n\t * @type {{}}\n\t */\n\tSearchEndpoint.endpoints = {};\n\t__decorate([\n\t    path('/login/'),\n\t    accessTokenInUrl()\n\t], SearchEndpoint.prototype, \"getAuthenticationProviderUri\", null);\n\t__decorate([\n\t    path('/'),\n\t    method('POST'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"search\", null);\n\t__decorate([\n\t    path('/'),\n\t    accessTokenInUrl()\n\t], SearchEndpoint.prototype, \"getExportToExcelLink\", null);\n\t__decorate([\n\t    path('/datastream'),\n\t    accessTokenInUrl(),\n\t    method('GET'),\n\t    responseType('arraybuffer')\n\t], SearchEndpoint.prototype, \"getRawDataStream\", null);\n\t__decorate([\n\t    path('/datastream'),\n\t    accessTokenInUrl()\n\t], SearchEndpoint.prototype, \"getViewAsDatastreamUri\", null);\n\t__decorate([\n\t    path('/document'),\n\t    method('GET'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"getDocument\", null);\n\t__decorate([\n\t    path('/text'),\n\t    method('GET'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"getDocumentText\", null);\n\t__decorate([\n\t    path('/html'),\n\t    method('POST'),\n\t    responseType('document')\n\t], SearchEndpoint.prototype, \"getDocumentHtml\", null);\n\t__decorate([\n\t    path('/html'),\n\t    accessTokenInUrl()\n\t], SearchEndpoint.prototype, \"getViewAsHtmlUri\", null);\n\t__decorate([\n\t    path('/values'),\n\t    method('POST'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"batchFieldValues\", null);\n\t__decorate([\n\t    path('/values'),\n\t    method('POST'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"listFieldValues\", null);\n\t__decorate([\n\t    path('/fields'),\n\t    method('GET'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"listFields\", null);\n\t__decorate([\n\t    path('/extensions'),\n\t    method('GET'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"extensions\", null);\n\t__decorate([\n\t    path('/rating'),\n\t    method('POST'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"rateDocument\", null);\n\t__decorate([\n\t    path('/tag'),\n\t    method('POST'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"tagDocument\", null);\n\t__decorate([\n\t    path('/querySuggest'),\n\t    method('GET'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"getRevealQuerySuggest\", null);\n\t__decorate([\n\t    alertsPath('/subscriptions'),\n\t    accessTokenInUrl('accessToken'),\n\t    method('POST'),\n\t    requestDataType('application/json'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"follow\", null);\n\t__decorate([\n\t    alertsPath('/subscriptions'),\n\t    accessTokenInUrl('accessToken'),\n\t    method('GET'),\n\t    requestDataType('application/json'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"listSubscriptions\", null);\n\t__decorate([\n\t    alertsPath('/subscriptions/'),\n\t    accessTokenInUrl('accessToken'),\n\t    method('PUT'),\n\t    requestDataType('application/json'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"updateSubscription\", null);\n\t__decorate([\n\t    alertsPath('/subscriptions/'),\n\t    accessTokenInUrl('accessToken'),\n\t    method('DELETE'),\n\t    requestDataType('application/json'),\n\t    responseType('text')\n\t], SearchEndpoint.prototype, \"deleteSubscription\", null);\n\t__decorate([\n\t    path('/log'),\n\t    method('POST')\n\t], SearchEndpoint.prototype, \"logError\", null);\n\texports.SearchEndpoint = SearchEndpoint;\n\t// It's taken for granted that methods using decorators have :\n\t// IEndpointCallOptions as their second to last parameter\n\t// IEndpointCallParameters as their last parameter\n\t// The default parameters for each member of the injected {@link IEndpointCallParameters} are the following:\n\t// url: '',\n\t// queryString: [],\n\t// requestData: {},\n\t// requestDataType: undefined,\n\t// method: '',\n\t// responseType: '',\n\t// errorsAsSuccess: false\n\tfunction path(path) {\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            var uri = this.buildBaseUri(path);\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].url = uri;\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: uri,\n\t                    queryString: [],\n\t                    requestData: {},\n\t                    method: '',\n\t                    responseType: '',\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\tfunction alertsPath(path) {\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            var uri = this.buildSearchAlertsUri(path);\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].url = uri;\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: uri,\n\t                    queryString: [],\n\t                    requestData: {},\n\t                    method: '',\n\t                    responseType: '',\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\tfunction requestDataType(type) {\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].requestDataType = type;\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: '',\n\t                    queryString: [],\n\t                    requestData: {},\n\t                    requestDataType: type,\n\t                    method: '',\n\t                    responseType: '',\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\tfunction method(met) {\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].method = met;\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: '',\n\t                    queryString: [],\n\t                    requestData: {},\n\t                    method: met,\n\t                    responseType: '',\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\tfunction responseType(resp) {\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].responseType = resp;\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: '',\n\t                    queryString: [],\n\t                    requestData: {},\n\t                    method: '',\n\t                    responseType: resp,\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\tfunction accessTokenInUrl(tokenKey) {\n\t    if (tokenKey === void 0) { tokenKey = 'access_token'; }\n\t    return function (target, key, descriptor) {\n\t        var originalMethod = descriptor.value;\n\t        var nbParams = target[key].prototype.constructor.length;\n\t        descriptor.value = function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            var queryString = this.buildAccessToken(tokenKey);\n\t            if (args[nbParams - 1]) {\n\t                args[nbParams - 1].queryString = args[nbParams - 1].queryString.concat(queryString);\n\t            }\n\t            else {\n\t                var params = {\n\t                    url: '',\n\t                    queryString: queryString,\n\t                    requestData: {},\n\t                    method: '',\n\t                    responseType: '',\n\t                    errorsAsSuccess: false\n\t                };\n\t                args[nbParams - 1] = params;\n\t            }\n\t            var result = originalMethod.apply(this, args);\n\t            return result;\n\t        };\n\t        return descriptor;\n\t    };\n\t}\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar TimeSpanUtils_1 = __webpack_require__(17);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar JQueryutils_1 = __webpack_require__(20);\n\tvar _ = __webpack_require__(16);\n\t// In ie8, XMLHttpRequest has no status property, so let's use this enum instead\n\tvar XMLHttpRequestStatus;\n\t(function (XMLHttpRequestStatus) {\n\t    XMLHttpRequestStatus[XMLHttpRequestStatus[\"OPENED\"] = XMLHttpRequest.OPENED || 1] = \"OPENED\";\n\t    XMLHttpRequestStatus[XMLHttpRequestStatus[\"HEADERS_RECEIVED\"] = XMLHttpRequest.HEADERS_RECEIVED || 2] = \"HEADERS_RECEIVED\";\n\t    XMLHttpRequestStatus[XMLHttpRequestStatus[\"DONE\"] = XMLHttpRequest.DONE || 4] = \"DONE\";\n\t})(XMLHttpRequestStatus || (XMLHttpRequestStatus = {}));\n\t/**\n\t * This class is in charge of calling an endpoint (eg: a {@link SearchEndpoint}).\n\t *\n\t * This means it's only uses to execute an XMLHttpRequest (for example), massage the response and check if there are errors.\n\t *\n\t * Will execute the call and return a Promise.\n\t *\n\t * Call using one of those options :\n\t *\n\t * * XMLHttpRequest for recent browser that support CORS, or if the endpoint is on the same origin.\n\t * * XDomainRequest for older IE browser that do not support CORS.\n\t * * Jsonp if all else fails, or is explicitly enabled.\n\t */\n\tvar EndpointCaller = (function () {\n\t    /**\n\t     * Create a new EndpointCaller.\n\t     * @param options Specify the authentication that will be used for this endpoint. Not needed if the endpoint is public and has no authentication\n\t     */\n\t    function EndpointCaller(options) {\n\t        if (options === void 0) { options = {}; }\n\t        this.options = options;\n\t        /**\n\t         * Set this property to true to enable Jsonp call to the endpoint.<br/>\n\t         * Be aware that jsonp is \"easier\" to setup endpoint wise, but has a lot of drawback and limitation for the client code.<br/>\n\t         * Default to false.\n\t         * @type {boolean}\n\t         */\n\t        this.useJsonp = false;\n\t        this.logger = new Logger_1.Logger(this);\n\t    }\n\t    /**\n\t     * Generic call to the endpoint using the provided {@link IEndpointCallParameters}.<br/>\n\t     * Internally, will decide which method to use to call the endpoint :<br/>\n\t     * -- XMLHttpRequest for recent browser that support CORS, or if the endpoint is on the same origin.<br/>\n\t     * -- XDomainRequest for older IE browser that do not support CORS.<br/>\n\t     * -- Jsonp if all else fails, or is explicitly enabled.\n\t     * @param params The parameters to use for the call\n\t     * @returns {any} A promise of the given type\n\t     */\n\t    EndpointCaller.prototype.call = function (params) {\n\t        var requestInfo = {\n\t            url: params.url,\n\t            queryString: params.errorsAsSuccess ? params.queryString.concat(['errorsAsSuccess=1']) : params.queryString,\n\t            requestData: params.requestData,\n\t            requestDataType: params.requestDataType || 'application/x-www-form-urlencoded; charset=\"UTF-8\"',\n\t            begun: new Date(),\n\t            method: params.method\n\t        };\n\t        requestInfo.headers = this.buildRequestHeaders(requestInfo);\n\t        if (_.isFunction(this.options.requestModifier)) {\n\t            requestInfo = this.options.requestModifier(requestInfo);\n\t        }\n\t        this.logger.trace('Performing REST request', requestInfo);\n\t        var urlObject = this.parseURL(requestInfo.url);\n\t        // In IE8, hostname and port return \"\" when we are on the same domain.\n\t        var isLocalHost = (window.location.hostname === urlObject.hostname) || (urlObject.hostname === '');\n\t        var currentPort = (window.location.port != '' ? window.location.port : (window.location.protocol == 'https:' ? '443' : '80'));\n\t        var isSamePort = currentPort == urlObject.port;\n\t        var isCrossOrigin = !(isLocalHost && isSamePort);\n\t        if (!this.useJsonp) {\n\t            if (this.isCORSSupported() || !isCrossOrigin) {\n\t                return this.callUsingXMLHttpRequest(requestInfo, params.responseType);\n\t            }\n\t            else if (this.isXDomainRequestSupported()) {\n\t                return this.callUsingXDomainRequest(requestInfo);\n\t            }\n\t            else {\n\t                return this.callUsingAjaxJsonP(requestInfo);\n\t            }\n\t        }\n\t        else {\n\t            return this.callUsingAjaxJsonP(requestInfo);\n\t        }\n\t    };\n\t    /**\n\t     * Call the endpoint using XMLHttpRequest. Used internally by {@link EndpointCaller.call}.<br/>\n\t     * Will try internally to handle error if it can.<br/>\n\t     * Promise will otherwise fail with the error type.\n\t     * @param requestInfo The info about the request\n\t     * @param responseType The responseType. Default to text. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType\n\t     * @returns {Promise<T>|Promise}\n\t     */\n\t    EndpointCaller.prototype.callUsingXMLHttpRequest = function (requestInfo, responseType) {\n\t        var _this = this;\n\t        if (responseType === void 0) { responseType = 'text'; }\n\t        return new Promise(function (resolve, reject) {\n\t            var xmlHttpRequest = _this.getXmlHttpRequest();\n\t            // Beware, most stuff must be set on the event that says the request is OPENED.\n\t            // Otherwise it'll bork on some browsers. Gotta love standards.\n\t            // This sent variable allowed to remove the second call of onreadystatechange with the state OPENED in IE11\n\t            var sent = false;\n\t            xmlHttpRequest.onreadystatechange = function (ev) {\n\t                if (xmlHttpRequest.readyState == XMLHttpRequestStatus.OPENED && !sent) {\n\t                    sent = true;\n\t                    xmlHttpRequest.withCredentials = true;\n\t                    _.each(requestInfo.headers, function (headerValue, headerKey) {\n\t                        xmlHttpRequest.setRequestHeader(headerKey, headerValue);\n\t                    });\n\t                    if (requestInfo.method == 'GET') {\n\t                        xmlHttpRequest.send();\n\t                    }\n\t                    else if (requestInfo.requestDataType.indexOf('application/json') === 0) {\n\t                        xmlHttpRequest.send(JSON.stringify(requestInfo.requestData));\n\t                    }\n\t                    else {\n\t                        xmlHttpRequest.send(_this.convertJsonToFormBody(requestInfo.requestData));\n\t                    }\n\t                    // The \"responseType\" varies if the request is a success or not.\n\t                    // Therefore we postpone setting \"responseType\" until we know if the\n\t                    // request is a success or not. Doing so, we avoid this potential\n\t                    // error in Chrome:\n\t                    //\n\t                    //   Uncaught InvalidStateError: Failed to read the 'responseText'\n\t                    //   property from 'XMLHttpRequest': The value is only accessible if\n\t                    //   the object's 'responseType' is '' or 'text' (was 'document').\n\t                    //\n\t                }\n\t                else if (xmlHttpRequest.readyState == XMLHttpRequestStatus.HEADERS_RECEIVED) {\n\t                    var status = xmlHttpRequest.status;\n\t                    if (_this.isSuccessHttpStatus(status)) {\n\t                        xmlHttpRequest.responseType = responseType;\n\t                    }\n\t                    else {\n\t                        xmlHttpRequest.responseType = 'text';\n\t                    }\n\t                }\n\t                else if (xmlHttpRequest.readyState == XMLHttpRequestStatus.DONE) {\n\t                    var status = xmlHttpRequest.status;\n\t                    var data;\n\t                    switch (responseType) {\n\t                        case 'json':\n\t                            data = xmlHttpRequest.response;\n\t                            // Work around a bug in IE11 where responseType jsonis not supported : the response comes back as a plain string\n\t                            // Force the json parse manually\n\t                            if (responseType == 'json' && DeviceUtils_1.DeviceUtils.getDeviceName() == 'IE') {\n\t                                try {\n\t                                    data = JSON.parse(data);\n\t                                }\n\t                                catch (e) {\n\t                                    // Do nothing, it probably means the data was JSON already\n\t                                }\n\t                            }\n\t                            break;\n\t                        case 'text':\n\t                            data = _this.tryParseResponseText(xmlHttpRequest.responseText, xmlHttpRequest.getResponseHeader('Content-Type'));\n\t                            break;\n\t                        default:\n\t                            data = xmlHttpRequest.response;\n\t                            break;\n\t                    }\n\t                    if (data == undefined) {\n\t                        data = _this.tryParseResponseText(xmlHttpRequest.responseText, xmlHttpRequest.getResponseHeader('Content-Type'));\n\t                    }\n\t                    if (_this.isSuccessHttpStatus(status)) {\n\t                        _this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject);\n\t                    }\n\t                    else {\n\t                        _this.handleError(requestInfo, xmlHttpRequest.status, data, reject);\n\t                    }\n\t                }\n\t            };\n\t            var queryString = requestInfo.queryString;\n\t            if (requestInfo.method == 'GET') {\n\t                queryString = queryString.concat(_this.convertJsonToQueryString(requestInfo.requestData));\n\t            }\n\t            xmlHttpRequest.open(requestInfo.method, _this.combineUrlAndQueryString(requestInfo.url, queryString));\n\t        });\n\t    };\n\t    /**\n\t     * Call the endpoint using XDomainRequest https://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx<br/>\n\t     * Used for IE8/9\n\t     * @param requestInfo The info about the request\n\t     * @returns {Promise<T>|Promise}\n\t     */\n\t    EndpointCaller.prototype.callUsingXDomainRequest = function (requestInfo) {\n\t        var _this = this;\n\t        return new Promise(function (resolve, reject) {\n\t            var queryString = requestInfo.queryString.concat([]);\n\t            // XDomainRequest don't support including stuff in the header, so we must\n\t            // put the access token in the query string if we have one.\n\t            if (_this.options.accessToken) {\n\t                queryString.push('access_token=' + encodeURIComponent(_this.options.accessToken));\n\t            }\n\t            var xDomainRequest = new XDomainRequest();\n\t            if (requestInfo.method == 'GET') {\n\t                queryString = queryString.concat(_this.convertJsonToQueryString(requestInfo.requestData));\n\t            }\n\t            xDomainRequest.open(requestInfo.method, _this.combineUrlAndQueryString(requestInfo.url, queryString));\n\t            xDomainRequest.onload = function () {\n\t                var data = _this.tryParseResponseText(xDomainRequest.responseText, xDomainRequest.contentType);\n\t                _this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject);\n\t            };\n\t            xDomainRequest.onerror = function () {\n\t                var data = _this.tryParseResponseText(xDomainRequest.responseText, xDomainRequest.contentType);\n\t                _this.handleError(requestInfo, 0, data, reject);\n\t            };\n\t            // We must set those functions otherwise it will sometime fail in IE\n\t            xDomainRequest.ontimeout = function () { return _this.logger.error('Request timeout', xDomainRequest, requestInfo.requestData); };\n\t            xDomainRequest.onprogress = function () { return _this.logger.trace('Request progress', xDomainRequest, requestInfo.requestData); };\n\t            // We must open the request in a separate thread, for obscure reasons\n\t            _.defer(function () {\n\t                if (requestInfo.method == 'GET') {\n\t                    xDomainRequest.send();\n\t                }\n\t                else {\n\t                    xDomainRequest.send(_this.convertJsonToFormBody(requestInfo.requestData));\n\t                }\n\t            });\n\t        });\n\t    };\n\t    /**\n\t     * Call the endpoint using Jsonp https://en.wikipedia.org/wiki/JSONP<br/>\n\t     * Should be used for dev only, or for very special setup as using jsonp has a lot of drawbacks.\n\t     * @param requestInfo The info about the request\n\t     * @returns {Promise<T>|Promise}\n\t     */\n\t    EndpointCaller.prototype.callUsingAjaxJsonP = function (requestInfo) {\n\t        var _this = this;\n\t        var jQuery = JQueryutils_1.JQueryUtils.getJQuery();\n\t        Assert_1.Assert.check(jQuery, 'Using jsonp without having included jQuery is not supported.');\n\t        return new Promise(function (resolve, reject) {\n\t            var queryString = requestInfo.queryString.concat(_this.convertJsonToQueryString(requestInfo.requestData));\n\t            // JSONP don't support including stuff in the header, so we must\n\t            // put the access token in the query string if we have one.\n\t            if (_this.options.accessToken) {\n\t                queryString.push('access_token=' + encodeURIComponent(_this.options.accessToken));\n\t            }\n\t            queryString.push('callback=?');\n\t            jQuery.ajax({\n\t                url: _this.combineUrlAndQueryString(requestInfo.url, queryString),\n\t                dataType: 'jsonp',\n\t                success: function (data) { return _this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject); },\n\t                timeout: EndpointCaller.JSONP_ERROR_TIMEOUT,\n\t                error: function () { return _this.handleError(requestInfo, 0, undefined, reject); }\n\t            });\n\t        });\n\t    };\n\t    EndpointCaller.prototype.parseURL = function (url) {\n\t        var urlObject = document.createElement('a');\n\t        urlObject.href = url;\n\t        return urlObject;\n\t    };\n\t    EndpointCaller.prototype.getXmlHttpRequest = function () {\n\t        var newXmlHttpRequest = this.options.xmlHttpRequest || XMLHttpRequest;\n\t        return new newXmlHttpRequest();\n\t    };\n\t    EndpointCaller.prototype.convertJsonToQueryString = function (json) {\n\t        Assert_1.Assert.exists(json);\n\t        var result = [];\n\t        _.each(json, function (value, key) {\n\t            if (value != null) {\n\t                if (_.isObject(value)) {\n\t                    result.push(key + '=' + encodeURIComponent(JSON.stringify(value)));\n\t                }\n\t                else {\n\t                    result.push(key + '=' + encodeURIComponent(value.toString()));\n\t                }\n\t            }\n\t        });\n\t        return result;\n\t    };\n\t    EndpointCaller.prototype.convertJsonToFormBody = function (json) {\n\t        return this.convertJsonToQueryString(json).join('&');\n\t    };\n\t    EndpointCaller.prototype.handleSuccessfulResponseThatMightBeAnError = function (requestInfo, data, success, error) {\n\t        if (this.isErrorResponseBody(data)) {\n\t            this.handleError(requestInfo, data.statusCode, data, error);\n\t        }\n\t        else {\n\t            this.handleSuccess(requestInfo, data, success);\n\t        }\n\t    };\n\t    EndpointCaller.prototype.handleSuccess = function (requestInfo, data, success) {\n\t        var querySuccess = {\n\t            duration: TimeSpanUtils_1.TimeSpan.fromDates(requestInfo.begun, new Date()).getMilliseconds(),\n\t            data: data\n\t        };\n\t        this.logger.trace('REST request successful', data, requestInfo);\n\t        success(querySuccess);\n\t    };\n\t    EndpointCaller.prototype.handleError = function (requestInfo, status, data, error) {\n\t        var queryError = {\n\t            statusCode: status,\n\t            data: data\n\t        };\n\t        this.logger.error('REST request failed', status, data, requestInfo);\n\t        error(queryError);\n\t    };\n\t    EndpointCaller.prototype.combineUrlAndQueryString = function (url, queryString) {\n\t        var questionMark = '?';\n\t        if (url.match(/\\?$/)) {\n\t            questionMark = '';\n\t        }\n\t        return url + (queryString.length > 0 ? questionMark + queryString.join('&') : '');\n\t    };\n\t    EndpointCaller.prototype.isXDomainRequestSupported = function () {\n\t        return 'XDomainRequest' in window;\n\t    };\n\t    EndpointCaller.prototype.isCORSSupported = function () {\n\t        return 'withCredentials' in this.getXmlHttpRequest();\n\t    };\n\t    EndpointCaller.prototype.isSuccessHttpStatus = function (status) {\n\t        return status >= 200 && status < 300 || status === 304;\n\t    };\n\t    EndpointCaller.prototype.tryParseResponseText = function (json, contentType) {\n\t        if (contentType != null && contentType.indexOf('application/json') != -1) {\n\t            if (Utils_1.Utils.isNonEmptyString(json)) {\n\t                try {\n\t                    return JSON.parse(json);\n\t                }\n\t                catch (ex) {\n\t                    return undefined;\n\t                }\n\t            }\n\t            else {\n\t                return undefined;\n\t            }\n\t        }\n\t        else {\n\t            return json;\n\t        }\n\t    };\n\t    EndpointCaller.prototype.isErrorResponseBody = function (data) {\n\t        if (data && data.statusCode) {\n\t            return !this.isSuccessHttpStatus(data.statusCode);\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    EndpointCaller.prototype.buildRequestHeaders = function (requestInfo) {\n\t        var headers = {};\n\t        if (this.options.accessToken) {\n\t            headers['Authorization'] = \"Bearer \" + this.options.accessToken;\n\t        }\n\t        else if (this.options.username && this.options.password) {\n\t            headers['Authorization'] = \"Basic \" + btoa(this.options.username + ':' + this.options.password);\n\t        }\n\t        if (requestInfo.method == 'GET') {\n\t            return headers;\n\t        }\n\t        if (requestInfo.requestDataType.indexOf('application/json') === 0) {\n\t            headers['Content-Type'] = 'application/json; charset=\"UTF-8\"';\n\t        }\n\t        else {\n\t            headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=\"UTF-8\"';\n\t        }\n\t        return headers;\n\t    };\n\t    return EndpointCaller;\n\t}());\n\tEndpointCaller.JSONP_ERROR_TIMEOUT = 10000;\n\texports.EndpointCaller = EndpointCaller;\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Ensure that we're not going to get console is undefined error in IE8-9\n\tif (!window['console']) {\n\t    console = {\n\t        log: function () {\n\t        },\n\t        debug: function () {\n\t        },\n\t        info: function () {\n\t        },\n\t        warn: function () {\n\t        },\n\t        error: function () {\n\t        },\n\t        assert: function () {\n\t        },\n\t        clear: function () {\n\t        },\n\t        count: function () {\n\t        },\n\t        dir: function () {\n\t        },\n\t        dirxml: function () {\n\t        },\n\t        group: function () {\n\t        },\n\t        groupCollapsed: function () {\n\t        },\n\t        groupEnd: function () {\n\t        },\n\t        msIsIndependentlyComposed: function (element) {\n\t        },\n\t        profile: function () {\n\t        },\n\t        profileEnd: function () {\n\t        },\n\t        select: function () {\n\t        },\n\t        time: function () {\n\t        },\n\t        timeEnd: function () {\n\t        },\n\t        trace: function () {\n\t        }\n\t    };\n\t}\n\tvar Logger = (function () {\n\t    function Logger(owner) {\n\t        this.owner = owner;\n\t    }\n\t    Logger.prototype.trace = function () {\n\t        var stuff = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            stuff[_i] = arguments[_i];\n\t        }\n\t        if (Logger.level <= Logger.TRACE) {\n\t            this.log('TRACE', stuff);\n\t        }\n\t    };\n\t    Logger.prototype.debug = function () {\n\t        var stuff = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            stuff[_i] = arguments[_i];\n\t        }\n\t        if (Logger.level <= Logger.DEBUG) {\n\t            this.log('DEBUG', stuff);\n\t        }\n\t    };\n\t    Logger.prototype.info = function () {\n\t        var stuff = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            stuff[_i] = arguments[_i];\n\t        }\n\t        if (Logger.level <= Logger.INFO) {\n\t            this.log('INFO', stuff);\n\t        }\n\t    };\n\t    Logger.prototype.warn = function () {\n\t        var stuff = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            stuff[_i] = arguments[_i];\n\t        }\n\t        if (Logger.level <= Logger.WARN) {\n\t            this.log('WARN', stuff);\n\t        }\n\t    };\n\t    Logger.prototype.error = function () {\n\t        var stuff = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            stuff[_i] = arguments[_i];\n\t        }\n\t        if (Logger.level <= Logger.ERROR) {\n\t            this.log('ERROR', stuff);\n\t        }\n\t    };\n\t    Logger.prototype.log = function (level, stuff) {\n\t        if (window['console'] && console.log) {\n\t            console.log([level, this.owner].concat(stuff));\n\t            if (Logger.executionTime) {\n\t                console.timeEnd('Execution time');\n\t                console.time('Execution time');\n\t            }\n\t        }\n\t    };\n\t    Logger.enable = function () {\n\t        Logger.level = Logger.TRACE;\n\t    };\n\t    Logger.disable = function () {\n\t        Logger.level = Logger.NOTHING;\n\t    };\n\t    return Logger;\n\t}());\n\tLogger.TRACE = 1;\n\tLogger.DEBUG = 2;\n\tLogger.INFO = 3;\n\tLogger.WARN = 4;\n\tLogger.ERROR = 5;\n\tLogger.NOTHING = 6;\n\tLogger.level = Logger.INFO;\n\tLogger.executionTime = false;\n\texports.Logger = Logger;\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar Assert = (function () {\n\t    function Assert() {\n\t    }\n\t    Assert.fail = function (message) {\n\t        Assert.failureHandler(message);\n\t    };\n\t    Assert.check = function (condition, message) {\n\t        if (!condition) {\n\t            Assert.fail(message);\n\t        }\n\t    };\n\t    Assert.isUndefined = function (obj) {\n\t        Assert.check(Utils_1.Utils.isUndefined(obj), 'Value should be undefined.');\n\t    };\n\t    Assert.isNotUndefined = function (obj) {\n\t        Assert.check(!Utils_1.Utils.isUndefined(obj), 'Value should not be undefined.');\n\t    };\n\t    Assert.isNull = function (obj) {\n\t        Assert.check(Utils_1.Utils.isNull(obj), 'Value should be null.');\n\t    };\n\t    Assert.isNotNull = function (obj) {\n\t        Assert.check(!Utils_1.Utils.isNull(obj), 'Value should not be null.');\n\t    };\n\t    Assert.exists = function (obj) {\n\t        Assert.check(!Utils_1.Utils.isNullOrUndefined(obj), 'Value should not be null or undefined');\n\t    };\n\t    Assert.doesNotExists = function (obj) {\n\t        Assert.check(Utils_1.Utils.isNullOrUndefined(obj), 'Value should be null or undefined');\n\t    };\n\t    Assert.isString = function (obj) {\n\t        Assert.check(_.isString(obj), 'Value should be a string.');\n\t    };\n\t    Assert.stringStartsWith = function (str, start) {\n\t        Assert.isNonEmptyString(str);\n\t        Assert.isNonEmptyString(start);\n\t        Assert.check(str.indexOf(start) == 0, 'Value should start with ' + start);\n\t    };\n\t    Assert.isNonEmptyString = function (str) {\n\t        Assert.check(Utils_1.Utils.isNonEmptyString(str), 'Value should be a non-empty string.');\n\t    };\n\t    Assert.isNumber = function (obj) {\n\t        Assert.check(_.isNumber(obj), 'Value should be a number.');\n\t    };\n\t    Assert.isLargerThan = function (expected, actual) {\n\t        Assert.check(actual > expected, 'Value ' + actual + ' should be larger than ' + expected);\n\t    };\n\t    Assert.isLargerOrEqualsThan = function (expected, actual) {\n\t        Assert.check(actual >= expected, 'Value ' + actual + ' should be larger or equal than ' + expected);\n\t    };\n\t    Assert.isSmallerThan = function (expected, actual) {\n\t        Assert.check(actual < expected, 'Value ' + actual + ' should be smaller than ' + expected);\n\t    };\n\t    Assert.isSmallerOrEqualsThan = function (expected, actual) {\n\t        Assert.check(actual <= expected, 'Value ' + actual + ' should be smaller or equal than ' + expected);\n\t    };\n\t    return Assert;\n\t}());\n\tAssert.logger = new Logger_1.Logger('Assert');\n\tAssert.failureHandler = function (message) {\n\t    Assert.logger.error('Assertion Failed!', message);\n\t    if (window['console'] && console.trace) {\n\t        console.trace();\n\t    }\n\t    if (Utils_1.Utils.isNonEmptyString(message)) {\n\t        throw new PreconditionFailedException(message);\n\t    }\n\t    else {\n\t        throw new PreconditionFailedException('Assertion Failed!');\n\t    }\n\t};\n\texports.Assert = Assert;\n\tvar PreconditionFailedException = (function (_super) {\n\t    __extends(PreconditionFailedException, _super);\n\t    function PreconditionFailedException(message) {\n\t        var _this = _super.call(this, message) || this;\n\t        _this.message = message;\n\t        return _this;\n\t    }\n\t    PreconditionFailedException.prototype.toString = function () {\n\t        return this.message;\n\t    };\n\t    return PreconditionFailedException;\n\t}(Error));\n\texports.PreconditionFailedException = PreconditionFailedException;\n\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar isCoveoFieldRegex = /^@[a-zA-Z0-9_\\.]+$/;\n\tvar Utils = (function () {\n\t    function Utils() {\n\t    }\n\t    Utils.isUndefined = function (obj) {\n\t        return typeof obj == 'undefined';\n\t    };\n\t    Utils.isNull = function (obj) {\n\t        return obj === null;\n\t    };\n\t    Utils.isNullOrUndefined = function (obj) {\n\t        return Utils.isUndefined(obj) || Utils.isNull(obj);\n\t    };\n\t    Utils.exists = function (obj) {\n\t        return !Utils.isNullOrUndefined(obj);\n\t    };\n\t    Utils.toNotNullString = function (str) {\n\t        return _.isString(str) ? str : '';\n\t    };\n\t    Utils.anyTypeToString = function (value) {\n\t        return value ? value.toString() : '';\n\t    };\n\t    Utils.isNullOrEmptyString = function (str) {\n\t        return Utils.isNullOrUndefined(str) || !Utils.isNonEmptyString(str);\n\t    };\n\t    Utils.isNonEmptyString = function (str) {\n\t        return _.isString(str) && str !== '';\n\t    };\n\t    Utils.isEmptyString = function (str) {\n\t        return !Utils.isNonEmptyString(str);\n\t    };\n\t    Utils.stringStartsWith = function (str, startWith) {\n\t        return str.slice(0, startWith.length) == startWith;\n\t    };\n\t    Utils.isNonEmptyArray = function (obj) {\n\t        return _.isArray(obj) && obj.length > 0;\n\t    };\n\t    Utils.isEmptyArray = function (obj) {\n\t        return !Utils.isNonEmptyArray(obj);\n\t    };\n\t    Utils.isHtmlElement = function (obj) {\n\t        if (window['HTMLElement'] != undefined) {\n\t            return obj instanceof HTMLElement;\n\t        }\n\t        else {\n\t            return obj && obj.nodeType && obj.nodeType == 1;\n\t        }\n\t    };\n\t    Utils.parseIntIfNotUndefined = function (str) {\n\t        if (Utils.isNonEmptyString(str)) {\n\t            return parseInt(str, 10);\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    Utils.parseFloatIfNotUndefined = function (str) {\n\t        if (Utils.isNonEmptyString(str)) {\n\t            return parseFloat(str);\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    Utils.round = function (num, decimals) {\n\t        return Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);\n\t    };\n\t    Utils.parseBooleanIfNotUndefined = function (str) {\n\t        if (Utils.isNonEmptyString(str)) {\n\t            switch (str.toLowerCase()) {\n\t                case 'true':\n\t                case '1':\n\t                case 'yes':\n\t                    return true;\n\t                case 'false':\n\t                case '0':\n\t                case 'no':\n\t                    return false;\n\t                default:\n\t                    return undefined;\n\t            }\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    Utils.trim = function (value) {\n\t        if (value == null) {\n\t            return null;\n\t        }\n\t        return value.replace(/^\\s+|\\s+$/g, '');\n\t    };\n\t    Utils.encodeHTMLEntities = function (rawStr) {\n\t        var ret = [];\n\t        for (var i = rawStr.length - 1; i >= 0; i--) {\n\t            if (/^[a-z0-9]/i.test(rawStr[i])) {\n\t                ret.unshift(rawStr[i]);\n\t            }\n\t            else {\n\t                ret.unshift(['&#', rawStr.charCodeAt(i), ';'].join(''));\n\t            }\n\t        }\n\t        return ret.join('');\n\t    };\n\t    Utils.decodeHTMLEntities = function (rawString) {\n\t        return rawString.replace(/&#(\\d+);/g, function (match, dec) {\n\t            return String.fromCharCode(dec);\n\t        });\n\t    };\n\t    Utils.arrayEqual = function (array1, array2, sameOrder) {\n\t        if (sameOrder === void 0) { sameOrder = true; }\n\t        if (sameOrder) {\n\t            return _.isEqual(array1, array2);\n\t        }\n\t        else {\n\t            var arrays_1 = [array1, array2];\n\t            return _.all(arrays_1, function (array) {\n\t                return array.length == arrays_1[0].length && _.difference(array, arrays_1[0]).length == 0;\n\t            });\n\t        }\n\t    };\n\t    Utils.objectEqual = function (obj1, obj2) {\n\t        return _.isEqual(obj1, obj2);\n\t    };\n\t    Utils.isCoveoField = function (field) {\n\t        return isCoveoFieldRegex.test(field);\n\t    };\n\t    Utils.escapeRegexCharacter = function (str) {\n\t        var ret = str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n\t        return ret;\n\t    };\n\t    Utils.getCaseInsensitiveProperty = function (object, name) {\n\t        // First try using a fast case-sensitive lookup\n\t        var value = object[name];\n\t        // Then try a fast case-sensitive lookup with lowercase name\n\t        if (value == null) {\n\t            var lowerCaseName_1 = name.toLowerCase();\n\t            value = object[lowerCaseName_1];\n\t            // Then try a slow scanning of all the properties\n\t            if (value == null) {\n\t                var matchingKey = _.find(_.keys(object), function (key) { return key.toLowerCase() == lowerCaseName_1; });\n\t                if (matchingKey != null) {\n\t                    value = object[matchingKey];\n\t                }\n\t            }\n\t        }\n\t        return value;\n\t    };\n\t    Utils.getFieldValue = function (result, name) {\n\t        // Be as forgiving as possible about the field name, since we expect\n\t        // user provided values.\n\t        if (name == null) {\n\t            return undefined;\n\t        }\n\t        name = Utils.trim(name);\n\t        if (name[0] == '@') {\n\t            name = name.substr(1);\n\t        }\n\t        if (name == '') {\n\t            return undefined;\n\t        }\n\t        // At this point the name should be well formed\n\t        if (!Utils.isCoveoField('@' + name)) {\n\t            throw \"Not a valid field : \" + name;\n\t        }\n\t        // Handle namespace field values of the form sf.Foo.Bar\n\t        var parts = name.split('.').reverse();\n\t        var obj = result.raw;\n\t        while (parts.length > 1) {\n\t            obj = Utils.getCaseInsensitiveProperty(obj, parts.pop());\n\t            if (Utils.isUndefined(obj)) {\n\t                return undefined;\n\t            }\n\t        }\n\t        var value = Utils.getCaseInsensitiveProperty(obj, parts[0]);\n\t        // If still nothing, look at the root of the result\n\t        if (value == null) {\n\t            value = Utils.getCaseInsensitiveProperty(result, name);\n\t        }\n\t        return value;\n\t    };\n\t    Utils.throttle = function (func, wait, options, context, args) {\n\t        if (options === void 0) { options = {}; }\n\t        var result;\n\t        var timeout = null;\n\t        var previous = 0;\n\t        var later = function () {\n\t            previous = options.leading === false ? 0 : new Date().getTime();\n\t            timeout = null;\n\t            result = func.apply(context, args);\n\t        };\n\t        return function () {\n\t            var now = new Date().getTime();\n\t            if (!previous && options.leading === false) {\n\t                previous = now;\n\t            }\n\t            var remaining = wait - (now - previous);\n\t            context = this;\n\t            args = arguments;\n\t            if (remaining <= 0) {\n\t                clearTimeout(timeout);\n\t                timeout = null;\n\t                previous = now;\n\t                result = func.apply(context, args);\n\t            }\n\t            else if (!timeout && options.trailing !== false) {\n\t                timeout = setTimeout(later, remaining);\n\t            }\n\t            return result;\n\t        };\n\t    };\n\t    Utils.extendDeep = function (target, src) {\n\t        if (!target) {\n\t            target = {};\n\t        }\n\t        var isArray = _.isArray(src);\n\t        var toReturn = isArray && [] || {};\n\t        if (isArray) {\n\t            target = target || [];\n\t            toReturn = toReturn['concat'](target);\n\t            _.each(src, function (e, i, obj) {\n\t                if (typeof target[i] === 'undefined') {\n\t                    toReturn[i] = e;\n\t                }\n\t                else if (typeof e === 'object') {\n\t                    toReturn[i] = Utils.extendDeep(target[i], e);\n\t                }\n\t                else {\n\t                    if (target.indexOf(e) === -1) {\n\t                        toReturn['push'](e);\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        else {\n\t            if (target && typeof target === 'object') {\n\t                _.each(_.keys(target), function (key) {\n\t                    toReturn[key] = target[key];\n\t                });\n\t            }\n\t            _.each(_.keys(src), function (key) {\n\t                if (typeof src[key] !== 'object' || !src[key]) {\n\t                    toReturn[key] = src[key];\n\t                }\n\t                else {\n\t                    if (!target[key]) {\n\t                        toReturn[key] = src[key];\n\t                    }\n\t                    else {\n\t                        toReturn[key] = Utils.extendDeep(target[key], src[key]);\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        return toReturn;\n\t    };\n\t    Utils.getQueryStringValue = function (key, queryString) {\n\t        if (queryString === void 0) { queryString = window.location.search; }\n\t        return queryString.replace(new RegExp('^(?:.*[&\\\\?]' + key.replace(/[\\.\\+\\*]/g, '\\\\$&') + '(?:\\\\=([^&]*))?)?.*$', 'i'), '$1');\n\t    };\n\t    Utils.isValidUrl = function (str) {\n\t        var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/;\n\t        return regexp.test(str);\n\t    };\n\t    Utils.debounce = function (func, wait) {\n\t        var timeout;\n\t        var stackTraceTimeout;\n\t        return function () {\n\t            var _this = this;\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            if (timeout == null) {\n\t                timeout = setTimeout(function () {\n\t                    timeout = null;\n\t                }, wait);\n\t                stackTraceTimeout = setTimeout(function () {\n\t                    func.apply(_this, args);\n\t                    stackTraceTimeout = null;\n\t                });\n\t            }\n\t            else if (stackTraceTimeout == null) {\n\t                clearTimeout(timeout);\n\t                timeout = setTimeout(function () {\n\t                    func.apply(_this, args);\n\t                    timeout = null;\n\t                }, wait);\n\t            }\n\t        };\n\t    };\n\t    Utils.readCookie = function (name) {\n\t        var nameEQ = name + '=';\n\t        var ca = document.cookie.split(';');\n\t        for (var i = 0; i < ca.length; i++) {\n\t            var c = ca[i];\n\t            while (c.charAt(0) == ' ') {\n\t                c = c.substring(1, c.length);\n\t            }\n\t            if (c.indexOf(nameEQ) == 0) {\n\t                return c.substring(nameEQ.length, c.length);\n\t            }\n\t        }\n\t        return null;\n\t    };\n\t    Utils.toDashCase = function (camelCased) {\n\t        return camelCased.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '-' + g[1].toLowerCase(); });\n\t    };\n\t    // Based on http://stackoverflow.com/a/8412989\n\t    Utils.parseXml = function (xml) {\n\t        if (typeof DOMParser != 'undefined') {\n\t            return (new DOMParser()).parseFromString(xml, 'text/xml');\n\t        }\n\t        else if (typeof ActiveXObject != 'undefined' && new ActiveXObject('Microsoft.XMLDOM')) {\n\t            var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n\t            xmlDoc.async = 'false';\n\t            xmlDoc.loadXML(xml);\n\t            return xmlDoc;\n\t        }\n\t        else {\n\t            throw new Error('No XML parser found');\n\t        }\n\t    };\n\t    Utils.copyObject = function (target, src) {\n\t        var _this = this;\n\t        _.each(_.keys(src), function (key) {\n\t            if (typeof src[key] !== 'object' || !src[key]) {\n\t                target[key] = src[key];\n\t            }\n\t            else if (!target[key]) {\n\t                target[key] = src[key];\n\t            }\n\t            else {\n\t                _this.copyObject(target[key], src[key]);\n\t            }\n\t        });\n\t    };\n\t    Utils.copyObjectAttributes = function (target, src, attributes) {\n\t        var _this = this;\n\t        _.each(_.keys(src), function (key) {\n\t            if (_.contains(attributes, key)) {\n\t                if (typeof src[key] !== 'object' || !src[key]) {\n\t                    target[key] = src[key];\n\t                }\n\t                else if (!target[key]) {\n\t                    target[key] = src[key];\n\t                }\n\t                else {\n\t                    _this.copyObject(target[key], src[key]);\n\t                }\n\t            }\n\t        });\n\t    };\n\t    return Utils;\n\t}());\n\texports.Utils = Utils;\n\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//     Underscore.js 1.8.3\n\t//     http://underscorejs.org\n\t//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t//     Underscore may be freely distributed under the MIT license.\n\t\n\t(function() {\n\t\n\t  // Baseline setup\n\t  // --------------\n\t\n\t  // Establish the root object, `window` in the browser, or `exports` on the server.\n\t  var root = this;\n\t\n\t  // Save the previous value of the `_` variable.\n\t  var previousUnderscore = root._;\n\t\n\t  // Save bytes in the minified (but not gzipped) version:\n\t  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\t\n\t  // Create quick reference variables for speed access to core prototypes.\n\t  var\n\t    push             = ArrayProto.push,\n\t    slice            = ArrayProto.slice,\n\t    toString         = ObjProto.toString,\n\t    hasOwnProperty   = ObjProto.hasOwnProperty;\n\t\n\t  // All **ECMAScript 5** native function implementations that we hope to use\n\t  // are declared here.\n\t  var\n\t    nativeIsArray      = Array.isArray,\n\t    nativeKeys         = Object.keys,\n\t    nativeBind         = FuncProto.bind,\n\t    nativeCreate       = Object.create;\n\t\n\t  // Naked function reference for surrogate-prototype-swapping.\n\t  var Ctor = function(){};\n\t\n\t  // Create a safe reference to the Underscore object for use below.\n\t  var _ = function(obj) {\n\t    if (obj instanceof _) return obj;\n\t    if (!(this instanceof _)) return new _(obj);\n\t    this._wrapped = obj;\n\t  };\n\t\n\t  // Export the Underscore object for **Node.js**, with\n\t  // backwards-compatibility for the old `require()` API. If we're in\n\t  // the browser, add `_` as a global object.\n\t  if (true) {\n\t    if (typeof module !== 'undefined' && module.exports) {\n\t      exports = module.exports = _;\n\t    }\n\t    exports._ = _;\n\t  } else {\n\t    root._ = _;\n\t  }\n\t\n\t  // Current version.\n\t  _.VERSION = '1.8.3';\n\t\n\t  // Internal function that returns an efficient (for current engines) version\n\t  // of the passed-in callback, to be repeatedly applied in other Underscore\n\t  // functions.\n\t  var optimizeCb = function(func, context, argCount) {\n\t    if (context === void 0) return func;\n\t    switch (argCount == null ? 3 : argCount) {\n\t      case 1: return function(value) {\n\t        return func.call(context, value);\n\t      };\n\t      case 2: return function(value, other) {\n\t        return func.call(context, value, other);\n\t      };\n\t      case 3: return function(value, index, collection) {\n\t        return func.call(context, value, index, collection);\n\t      };\n\t      case 4: return function(accumulator, value, index, collection) {\n\t        return func.call(context, accumulator, value, index, collection);\n\t      };\n\t    }\n\t    return function() {\n\t      return func.apply(context, arguments);\n\t    };\n\t  };\n\t\n\t  // A mostly-internal function to generate callbacks that can be applied\n\t  // to each element in a collection, returning the desired result — either\n\t  // identity, an arbitrary callback, a property matcher, or a property accessor.\n\t  var cb = function(value, context, argCount) {\n\t    if (value == null) return _.identity;\n\t    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n\t    if (_.isObject(value)) return _.matcher(value);\n\t    return _.property(value);\n\t  };\n\t  _.iteratee = function(value, context) {\n\t    return cb(value, context, Infinity);\n\t  };\n\t\n\t  // An internal function for creating assigner functions.\n\t  var createAssigner = function(keysFunc, undefinedOnly) {\n\t    return function(obj) {\n\t      var length = arguments.length;\n\t      if (length < 2 || obj == null) return obj;\n\t      for (var index = 1; index < length; index++) {\n\t        var source = arguments[index],\n\t            keys = keysFunc(source),\n\t            l = keys.length;\n\t        for (var i = 0; i < l; i++) {\n\t          var key = keys[i];\n\t          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n\t        }\n\t      }\n\t      return obj;\n\t    };\n\t  };\n\t\n\t  // An internal function for creating a new object that inherits from another.\n\t  var baseCreate = function(prototype) {\n\t    if (!_.isObject(prototype)) return {};\n\t    if (nativeCreate) return nativeCreate(prototype);\n\t    Ctor.prototype = prototype;\n\t    var result = new Ctor;\n\t    Ctor.prototype = null;\n\t    return result;\n\t  };\n\t\n\t  var property = function(key) {\n\t    return function(obj) {\n\t      return obj == null ? void 0 : obj[key];\n\t    };\n\t  };\n\t\n\t  // Helper for collection methods to determine whether a collection\n\t  // should be iterated as an array or as an object\n\t  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n\t  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n\t  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\t  var getLength = property('length');\n\t  var isArrayLike = function(collection) {\n\t    var length = getLength(collection);\n\t    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n\t  };\n\t\n\t  // Collection Functions\n\t  // --------------------\n\t\n\t  // The cornerstone, an `each` implementation, aka `forEach`.\n\t  // Handles raw objects in addition to array-likes. Treats all\n\t  // sparse array-likes as if they were dense.\n\t  _.each = _.forEach = function(obj, iteratee, context) {\n\t    iteratee = optimizeCb(iteratee, context);\n\t    var i, length;\n\t    if (isArrayLike(obj)) {\n\t      for (i = 0, length = obj.length; i < length; i++) {\n\t        iteratee(obj[i], i, obj);\n\t      }\n\t    } else {\n\t      var keys = _.keys(obj);\n\t      for (i = 0, length = keys.length; i < length; i++) {\n\t        iteratee(obj[keys[i]], keys[i], obj);\n\t      }\n\t    }\n\t    return obj;\n\t  };\n\t\n\t  // Return the results of applying the iteratee to each element.\n\t  _.map = _.collect = function(obj, iteratee, context) {\n\t    iteratee = cb(iteratee, context);\n\t    var keys = !isArrayLike(obj) && _.keys(obj),\n\t        length = (keys || obj).length,\n\t        results = Array(length);\n\t    for (var index = 0; index < length; index++) {\n\t      var currentKey = keys ? keys[index] : index;\n\t      results[index] = iteratee(obj[currentKey], currentKey, obj);\n\t    }\n\t    return results;\n\t  };\n\t\n\t  // Create a reducing function iterating left or right.\n\t  function createReduce(dir) {\n\t    // Optimized iterator function as using arguments.length\n\t    // in the main function will deoptimize the, see #1991.\n\t    function iterator(obj, iteratee, memo, keys, index, length) {\n\t      for (; index >= 0 && index < length; index += dir) {\n\t        var currentKey = keys ? keys[index] : index;\n\t        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n\t      }\n\t      return memo;\n\t    }\n\t\n\t    return function(obj, iteratee, memo, context) {\n\t      iteratee = optimizeCb(iteratee, context, 4);\n\t      var keys = !isArrayLike(obj) && _.keys(obj),\n\t          length = (keys || obj).length,\n\t          index = dir > 0 ? 0 : length - 1;\n\t      // Determine the initial value if none is provided.\n\t      if (arguments.length < 3) {\n\t        memo = obj[keys ? keys[index] : index];\n\t        index += dir;\n\t      }\n\t      return iterator(obj, iteratee, memo, keys, index, length);\n\t    };\n\t  }\n\t\n\t  // **Reduce** builds up a single result from a list of values, aka `inject`,\n\t  // or `foldl`.\n\t  _.reduce = _.foldl = _.inject = createReduce(1);\n\t\n\t  // The right-associative version of reduce, also known as `foldr`.\n\t  _.reduceRight = _.foldr = createReduce(-1);\n\t\n\t  // Return the first value which passes a truth test. Aliased as `detect`.\n\t  _.find = _.detect = function(obj, predicate, context) {\n\t    var key;\n\t    if (isArrayLike(obj)) {\n\t      key = _.findIndex(obj, predicate, context);\n\t    } else {\n\t      key = _.findKey(obj, predicate, context);\n\t    }\n\t    if (key !== void 0 && key !== -1) return obj[key];\n\t  };\n\t\n\t  // Return all the elements that pass a truth test.\n\t  // Aliased as `select`.\n\t  _.filter = _.select = function(obj, predicate, context) {\n\t    var results = [];\n\t    predicate = cb(predicate, context);\n\t    _.each(obj, function(value, index, list) {\n\t      if (predicate(value, index, list)) results.push(value);\n\t    });\n\t    return results;\n\t  };\n\t\n\t  // Return all the elements for which a truth test fails.\n\t  _.reject = function(obj, predicate, context) {\n\t    return _.filter(obj, _.negate(cb(predicate)), context);\n\t  };\n\t\n\t  // Determine whether all of the elements match a truth test.\n\t  // Aliased as `all`.\n\t  _.every = _.all = function(obj, predicate, context) {\n\t    predicate = cb(predicate, context);\n\t    var keys = !isArrayLike(obj) && _.keys(obj),\n\t        length = (keys || obj).length;\n\t    for (var index = 0; index < length; index++) {\n\t      var currentKey = keys ? keys[index] : index;\n\t      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n\t    }\n\t    return true;\n\t  };\n\t\n\t  // Determine if at least one element in the object matches a truth test.\n\t  // Aliased as `any`.\n\t  _.some = _.any = function(obj, predicate, context) {\n\t    predicate = cb(predicate, context);\n\t    var keys = !isArrayLike(obj) && _.keys(obj),\n\t        length = (keys || obj).length;\n\t    for (var index = 0; index < length; index++) {\n\t      var currentKey = keys ? keys[index] : index;\n\t      if (predicate(obj[currentKey], currentKey, obj)) return true;\n\t    }\n\t    return false;\n\t  };\n\t\n\t  // Determine if the array or object contains a given item (using `===`).\n\t  // Aliased as `includes` and `include`.\n\t  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n\t    if (!isArrayLike(obj)) obj = _.values(obj);\n\t    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n\t    return _.indexOf(obj, item, fromIndex) >= 0;\n\t  };\n\t\n\t  // Invoke a method (with arguments) on every item in a collection.\n\t  _.invoke = function(obj, method) {\n\t    var args = slice.call(arguments, 2);\n\t    var isFunc = _.isFunction(method);\n\t    return _.map(obj, function(value) {\n\t      var func = isFunc ? method : value[method];\n\t      return func == null ? func : func.apply(value, args);\n\t    });\n\t  };\n\t\n\t  // Convenience version of a common use case of `map`: fetching a property.\n\t  _.pluck = function(obj, key) {\n\t    return _.map(obj, _.property(key));\n\t  };\n\t\n\t  // Convenience version of a common use case of `filter`: selecting only objects\n\t  // containing specific `key:value` pairs.\n\t  _.where = function(obj, attrs) {\n\t    return _.filter(obj, _.matcher(attrs));\n\t  };\n\t\n\t  // Convenience version of a common use case of `find`: getting the first object\n\t  // containing specific `key:value` pairs.\n\t  _.findWhere = function(obj, attrs) {\n\t    return _.find(obj, _.matcher(attrs));\n\t  };\n\t\n\t  // Return the maximum element (or element-based computation).\n\t  _.max = function(obj, iteratee, context) {\n\t    var result = -Infinity, lastComputed = -Infinity,\n\t        value, computed;\n\t    if (iteratee == null && obj != null) {\n\t      obj = isArrayLike(obj) ? obj : _.values(obj);\n\t      for (var i = 0, length = obj.length; i < length; i++) {\n\t        value = obj[i];\n\t        if (value > result) {\n\t          result = value;\n\t        }\n\t      }\n\t    } else {\n\t      iteratee = cb(iteratee, context);\n\t      _.each(obj, function(value, index, list) {\n\t        computed = iteratee(value, index, list);\n\t        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n\t          result = value;\n\t          lastComputed = computed;\n\t        }\n\t      });\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Return the minimum element (or element-based computation).\n\t  _.min = function(obj, iteratee, context) {\n\t    var result = Infinity, lastComputed = Infinity,\n\t        value, computed;\n\t    if (iteratee == null && obj != null) {\n\t      obj = isArrayLike(obj) ? obj : _.values(obj);\n\t      for (var i = 0, length = obj.length; i < length; i++) {\n\t        value = obj[i];\n\t        if (value < result) {\n\t          result = value;\n\t        }\n\t      }\n\t    } else {\n\t      iteratee = cb(iteratee, context);\n\t      _.each(obj, function(value, index, list) {\n\t        computed = iteratee(value, index, list);\n\t        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n\t          result = value;\n\t          lastComputed = computed;\n\t        }\n\t      });\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Shuffle a collection, using the modern version of the\n\t  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n\t  _.shuffle = function(obj) {\n\t    var set = isArrayLike(obj) ? obj : _.values(obj);\n\t    var length = set.length;\n\t    var shuffled = Array(length);\n\t    for (var index = 0, rand; index < length; index++) {\n\t      rand = _.random(0, index);\n\t      if (rand !== index) shuffled[index] = shuffled[rand];\n\t      shuffled[rand] = set[index];\n\t    }\n\t    return shuffled;\n\t  };\n\t\n\t  // Sample **n** random values from a collection.\n\t  // If **n** is not specified, returns a single random element.\n\t  // The internal `guard` argument allows it to work with `map`.\n\t  _.sample = function(obj, n, guard) {\n\t    if (n == null || guard) {\n\t      if (!isArrayLike(obj)) obj = _.values(obj);\n\t      return obj[_.random(obj.length - 1)];\n\t    }\n\t    return _.shuffle(obj).slice(0, Math.max(0, n));\n\t  };\n\t\n\t  // Sort the object's values by a criterion produced by an iteratee.\n\t  _.sortBy = function(obj, iteratee, context) {\n\t    iteratee = cb(iteratee, context);\n\t    return _.pluck(_.map(obj, function(value, index, list) {\n\t      return {\n\t        value: value,\n\t        index: index,\n\t        criteria: iteratee(value, index, list)\n\t      };\n\t    }).sort(function(left, right) {\n\t      var a = left.criteria;\n\t      var b = right.criteria;\n\t      if (a !== b) {\n\t        if (a > b || a === void 0) return 1;\n\t        if (a < b || b === void 0) return -1;\n\t      }\n\t      return left.index - right.index;\n\t    }), 'value');\n\t  };\n\t\n\t  // An internal function used for aggregate \"group by\" operations.\n\t  var group = function(behavior) {\n\t    return function(obj, iteratee, context) {\n\t      var result = {};\n\t      iteratee = cb(iteratee, context);\n\t      _.each(obj, function(value, index) {\n\t        var key = iteratee(value, index, obj);\n\t        behavior(result, value, key);\n\t      });\n\t      return result;\n\t    };\n\t  };\n\t\n\t  // Groups the object's values by a criterion. Pass either a string attribute\n\t  // to group by, or a function that returns the criterion.\n\t  _.groupBy = group(function(result, value, key) {\n\t    if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n\t  });\n\t\n\t  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n\t  // when you know that your index values will be unique.\n\t  _.indexBy = group(function(result, value, key) {\n\t    result[key] = value;\n\t  });\n\t\n\t  // Counts instances of an object that group by a certain criterion. Pass\n\t  // either a string attribute to count by, or a function that returns the\n\t  // criterion.\n\t  _.countBy = group(function(result, value, key) {\n\t    if (_.has(result, key)) result[key]++; else result[key] = 1;\n\t  });\n\t\n\t  // Safely create a real, live array from anything iterable.\n\t  _.toArray = function(obj) {\n\t    if (!obj) return [];\n\t    if (_.isArray(obj)) return slice.call(obj);\n\t    if (isArrayLike(obj)) return _.map(obj, _.identity);\n\t    return _.values(obj);\n\t  };\n\t\n\t  // Return the number of elements in an object.\n\t  _.size = function(obj) {\n\t    if (obj == null) return 0;\n\t    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n\t  };\n\t\n\t  // Split a collection into two arrays: one whose elements all satisfy the given\n\t  // predicate, and one whose elements all do not satisfy the predicate.\n\t  _.partition = function(obj, predicate, context) {\n\t    predicate = cb(predicate, context);\n\t    var pass = [], fail = [];\n\t    _.each(obj, function(value, key, obj) {\n\t      (predicate(value, key, obj) ? pass : fail).push(value);\n\t    });\n\t    return [pass, fail];\n\t  };\n\t\n\t  // Array Functions\n\t  // ---------------\n\t\n\t  // Get the first element of an array. Passing **n** will return the first N\n\t  // values in the array. Aliased as `head` and `take`. The **guard** check\n\t  // allows it to work with `_.map`.\n\t  _.first = _.head = _.take = function(array, n, guard) {\n\t    if (array == null) return void 0;\n\t    if (n == null || guard) return array[0];\n\t    return _.initial(array, array.length - n);\n\t  };\n\t\n\t  // Returns everything but the last entry of the array. Especially useful on\n\t  // the arguments object. Passing **n** will return all the values in\n\t  // the array, excluding the last N.\n\t  _.initial = function(array, n, guard) {\n\t    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n\t  };\n\t\n\t  // Get the last element of an array. Passing **n** will return the last N\n\t  // values in the array.\n\t  _.last = function(array, n, guard) {\n\t    if (array == null) return void 0;\n\t    if (n == null || guard) return array[array.length - 1];\n\t    return _.rest(array, Math.max(0, array.length - n));\n\t  };\n\t\n\t  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n\t  // Especially useful on the arguments object. Passing an **n** will return\n\t  // the rest N values in the array.\n\t  _.rest = _.tail = _.drop = function(array, n, guard) {\n\t    return slice.call(array, n == null || guard ? 1 : n);\n\t  };\n\t\n\t  // Trim out all falsy values from an array.\n\t  _.compact = function(array) {\n\t    return _.filter(array, _.identity);\n\t  };\n\t\n\t  // Internal implementation of a recursive `flatten` function.\n\t  var flatten = function(input, shallow, strict, startIndex) {\n\t    var output = [], idx = 0;\n\t    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n\t      var value = input[i];\n\t      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n\t        //flatten current level of array or arguments object\n\t        if (!shallow) value = flatten(value, shallow, strict);\n\t        var j = 0, len = value.length;\n\t        output.length += len;\n\t        while (j < len) {\n\t          output[idx++] = value[j++];\n\t        }\n\t      } else if (!strict) {\n\t        output[idx++] = value;\n\t      }\n\t    }\n\t    return output;\n\t  };\n\t\n\t  // Flatten out an array, either recursively (by default), or just one level.\n\t  _.flatten = function(array, shallow) {\n\t    return flatten(array, shallow, false);\n\t  };\n\t\n\t  // Return a version of the array that does not contain the specified value(s).\n\t  _.without = function(array) {\n\t    return _.difference(array, slice.call(arguments, 1));\n\t  };\n\t\n\t  // Produce a duplicate-free version of the array. If the array has already\n\t  // been sorted, you have the option of using a faster algorithm.\n\t  // Aliased as `unique`.\n\t  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n\t    if (!_.isBoolean(isSorted)) {\n\t      context = iteratee;\n\t      iteratee = isSorted;\n\t      isSorted = false;\n\t    }\n\t    if (iteratee != null) iteratee = cb(iteratee, context);\n\t    var result = [];\n\t    var seen = [];\n\t    for (var i = 0, length = getLength(array); i < length; i++) {\n\t      var value = array[i],\n\t          computed = iteratee ? iteratee(value, i, array) : value;\n\t      if (isSorted) {\n\t        if (!i || seen !== computed) result.push(value);\n\t        seen = computed;\n\t      } else if (iteratee) {\n\t        if (!_.contains(seen, computed)) {\n\t          seen.push(computed);\n\t          result.push(value);\n\t        }\n\t      } else if (!_.contains(result, value)) {\n\t        result.push(value);\n\t      }\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Produce an array that contains the union: each distinct element from all of\n\t  // the passed-in arrays.\n\t  _.union = function() {\n\t    return _.uniq(flatten(arguments, true, true));\n\t  };\n\t\n\t  // Produce an array that contains every item shared between all the\n\t  // passed-in arrays.\n\t  _.intersection = function(array) {\n\t    var result = [];\n\t    var argsLength = arguments.length;\n\t    for (var i = 0, length = getLength(array); i < length; i++) {\n\t      var item = array[i];\n\t      if (_.contains(result, item)) continue;\n\t      for (var j = 1; j < argsLength; j++) {\n\t        if (!_.contains(arguments[j], item)) break;\n\t      }\n\t      if (j === argsLength) result.push(item);\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Take the difference between one array and a number of other arrays.\n\t  // Only the elements present in just the first array will remain.\n\t  _.difference = function(array) {\n\t    var rest = flatten(arguments, true, true, 1);\n\t    return _.filter(array, function(value){\n\t      return !_.contains(rest, value);\n\t    });\n\t  };\n\t\n\t  // Zip together multiple lists into a single array -- elements that share\n\t  // an index go together.\n\t  _.zip = function() {\n\t    return _.unzip(arguments);\n\t  };\n\t\n\t  // Complement of _.zip. Unzip accepts an array of arrays and groups\n\t  // each array's elements on shared indices\n\t  _.unzip = function(array) {\n\t    var length = array && _.max(array, getLength).length || 0;\n\t    var result = Array(length);\n\t\n\t    for (var index = 0; index < length; index++) {\n\t      result[index] = _.pluck(array, index);\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Converts lists into objects. Pass either a single array of `[key, value]`\n\t  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n\t  // the corresponding values.\n\t  _.object = function(list, values) {\n\t    var result = {};\n\t    for (var i = 0, length = getLength(list); i < length; i++) {\n\t      if (values) {\n\t        result[list[i]] = values[i];\n\t      } else {\n\t        result[list[i][0]] = list[i][1];\n\t      }\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Generator function to create the findIndex and findLastIndex functions\n\t  function createPredicateIndexFinder(dir) {\n\t    return function(array, predicate, context) {\n\t      predicate = cb(predicate, context);\n\t      var length = getLength(array);\n\t      var index = dir > 0 ? 0 : length - 1;\n\t      for (; index >= 0 && index < length; index += dir) {\n\t        if (predicate(array[index], index, array)) return index;\n\t      }\n\t      return -1;\n\t    };\n\t  }\n\t\n\t  // Returns the first index on an array-like that passes a predicate test\n\t  _.findIndex = createPredicateIndexFinder(1);\n\t  _.findLastIndex = createPredicateIndexFinder(-1);\n\t\n\t  // Use a comparator function to figure out the smallest index at which\n\t  // an object should be inserted so as to maintain order. Uses binary search.\n\t  _.sortedIndex = function(array, obj, iteratee, context) {\n\t    iteratee = cb(iteratee, context, 1);\n\t    var value = iteratee(obj);\n\t    var low = 0, high = getLength(array);\n\t    while (low < high) {\n\t      var mid = Math.floor((low + high) / 2);\n\t      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n\t    }\n\t    return low;\n\t  };\n\t\n\t  // Generator function to create the indexOf and lastIndexOf functions\n\t  function createIndexFinder(dir, predicateFind, sortedIndex) {\n\t    return function(array, item, idx) {\n\t      var i = 0, length = getLength(array);\n\t      if (typeof idx == 'number') {\n\t        if (dir > 0) {\n\t            i = idx >= 0 ? idx : Math.max(idx + length, i);\n\t        } else {\n\t            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n\t        }\n\t      } else if (sortedIndex && idx && length) {\n\t        idx = sortedIndex(array, item);\n\t        return array[idx] === item ? idx : -1;\n\t      }\n\t      if (item !== item) {\n\t        idx = predicateFind(slice.call(array, i, length), _.isNaN);\n\t        return idx >= 0 ? idx + i : -1;\n\t      }\n\t      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n\t        if (array[idx] === item) return idx;\n\t      }\n\t      return -1;\n\t    };\n\t  }\n\t\n\t  // Return the position of the first occurrence of an item in an array,\n\t  // or -1 if the item is not included in the array.\n\t  // If the array is large and already in sort order, pass `true`\n\t  // for **isSorted** to use binary search.\n\t  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n\t  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\t\n\t  // Generate an integer Array containing an arithmetic progression. A port of\n\t  // the native Python `range()` function. See\n\t  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n\t  _.range = function(start, stop, step) {\n\t    if (stop == null) {\n\t      stop = start || 0;\n\t      start = 0;\n\t    }\n\t    step = step || 1;\n\t\n\t    var length = Math.max(Math.ceil((stop - start) / step), 0);\n\t    var range = Array(length);\n\t\n\t    for (var idx = 0; idx < length; idx++, start += step) {\n\t      range[idx] = start;\n\t    }\n\t\n\t    return range;\n\t  };\n\t\n\t  // Function (ahem) Functions\n\t  // ------------------\n\t\n\t  // Determines whether to execute a function as a constructor\n\t  // or a normal function with the provided arguments\n\t  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n\t    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n\t    var self = baseCreate(sourceFunc.prototype);\n\t    var result = sourceFunc.apply(self, args);\n\t    if (_.isObject(result)) return result;\n\t    return self;\n\t  };\n\t\n\t  // Create a function bound to a given object (assigning `this`, and arguments,\n\t  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n\t  // available.\n\t  _.bind = function(func, context) {\n\t    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n\t    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n\t    var args = slice.call(arguments, 2);\n\t    var bound = function() {\n\t      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n\t    };\n\t    return bound;\n\t  };\n\t\n\t  // Partially apply a function by creating a version that has had some of its\n\t  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n\t  // as a placeholder, allowing any combination of arguments to be pre-filled.\n\t  _.partial = function(func) {\n\t    var boundArgs = slice.call(arguments, 1);\n\t    var bound = function() {\n\t      var position = 0, length = boundArgs.length;\n\t      var args = Array(length);\n\t      for (var i = 0; i < length; i++) {\n\t        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n\t      }\n\t      while (position < arguments.length) args.push(arguments[position++]);\n\t      return executeBound(func, bound, this, this, args);\n\t    };\n\t    return bound;\n\t  };\n\t\n\t  // Bind a number of an object's methods to that object. Remaining arguments\n\t  // are the method names to be bound. Useful for ensuring that all callbacks\n\t  // defined on an object belong to it.\n\t  _.bindAll = function(obj) {\n\t    var i, length = arguments.length, key;\n\t    if (length <= 1) throw new Error('bindAll must be passed function names');\n\t    for (i = 1; i < length; i++) {\n\t      key = arguments[i];\n\t      obj[key] = _.bind(obj[key], obj);\n\t    }\n\t    return obj;\n\t  };\n\t\n\t  // Memoize an expensive function by storing its results.\n\t  _.memoize = function(func, hasher) {\n\t    var memoize = function(key) {\n\t      var cache = memoize.cache;\n\t      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n\t      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n\t      return cache[address];\n\t    };\n\t    memoize.cache = {};\n\t    return memoize;\n\t  };\n\t\n\t  // Delays a function for the given number of milliseconds, and then calls\n\t  // it with the arguments supplied.\n\t  _.delay = function(func, wait) {\n\t    var args = slice.call(arguments, 2);\n\t    return setTimeout(function(){\n\t      return func.apply(null, args);\n\t    }, wait);\n\t  };\n\t\n\t  // Defers a function, scheduling it to run after the current call stack has\n\t  // cleared.\n\t  _.defer = _.partial(_.delay, _, 1);\n\t\n\t  // Returns a function, that, when invoked, will only be triggered at most once\n\t  // during a given window of time. Normally, the throttled function will run\n\t  // as much as it can, without ever going more than once per `wait` duration;\n\t  // but if you'd like to disable the execution on the leading edge, pass\n\t  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n\t  _.throttle = function(func, wait, options) {\n\t    var context, args, result;\n\t    var timeout = null;\n\t    var previous = 0;\n\t    if (!options) options = {};\n\t    var later = function() {\n\t      previous = options.leading === false ? 0 : _.now();\n\t      timeout = null;\n\t      result = func.apply(context, args);\n\t      if (!timeout) context = args = null;\n\t    };\n\t    return function() {\n\t      var now = _.now();\n\t      if (!previous && options.leading === false) previous = now;\n\t      var remaining = wait - (now - previous);\n\t      context = this;\n\t      args = arguments;\n\t      if (remaining <= 0 || remaining > wait) {\n\t        if (timeout) {\n\t          clearTimeout(timeout);\n\t          timeout = null;\n\t        }\n\t        previous = now;\n\t        result = func.apply(context, args);\n\t        if (!timeout) context = args = null;\n\t      } else if (!timeout && options.trailing !== false) {\n\t        timeout = setTimeout(later, remaining);\n\t      }\n\t      return result;\n\t    };\n\t  };\n\t\n\t  // Returns a function, that, as long as it continues to be invoked, will not\n\t  // be triggered. The function will be called after it stops being called for\n\t  // N milliseconds. If `immediate` is passed, trigger the function on the\n\t  // leading edge, instead of the trailing.\n\t  _.debounce = function(func, wait, immediate) {\n\t    var timeout, args, context, timestamp, result;\n\t\n\t    var later = function() {\n\t      var last = _.now() - timestamp;\n\t\n\t      if (last < wait && last >= 0) {\n\t        timeout = setTimeout(later, wait - last);\n\t      } else {\n\t        timeout = null;\n\t        if (!immediate) {\n\t          result = func.apply(context, args);\n\t          if (!timeout) context = args = null;\n\t        }\n\t      }\n\t    };\n\t\n\t    return function() {\n\t      context = this;\n\t      args = arguments;\n\t      timestamp = _.now();\n\t      var callNow = immediate && !timeout;\n\t      if (!timeout) timeout = setTimeout(later, wait);\n\t      if (callNow) {\n\t        result = func.apply(context, args);\n\t        context = args = null;\n\t      }\n\t\n\t      return result;\n\t    };\n\t  };\n\t\n\t  // Returns the first function passed as an argument to the second,\n\t  // allowing you to adjust arguments, run code before and after, and\n\t  // conditionally execute the original function.\n\t  _.wrap = function(func, wrapper) {\n\t    return _.partial(wrapper, func);\n\t  };\n\t\n\t  // Returns a negated version of the passed-in predicate.\n\t  _.negate = function(predicate) {\n\t    return function() {\n\t      return !predicate.apply(this, arguments);\n\t    };\n\t  };\n\t\n\t  // Returns a function that is the composition of a list of functions, each\n\t  // consuming the return value of the function that follows.\n\t  _.compose = function() {\n\t    var args = arguments;\n\t    var start = args.length - 1;\n\t    return function() {\n\t      var i = start;\n\t      var result = args[start].apply(this, arguments);\n\t      while (i--) result = args[i].call(this, result);\n\t      return result;\n\t    };\n\t  };\n\t\n\t  // Returns a function that will only be executed on and after the Nth call.\n\t  _.after = function(times, func) {\n\t    return function() {\n\t      if (--times < 1) {\n\t        return func.apply(this, arguments);\n\t      }\n\t    };\n\t  };\n\t\n\t  // Returns a function that will only be executed up to (but not including) the Nth call.\n\t  _.before = function(times, func) {\n\t    var memo;\n\t    return function() {\n\t      if (--times > 0) {\n\t        memo = func.apply(this, arguments);\n\t      }\n\t      if (times <= 1) func = null;\n\t      return memo;\n\t    };\n\t  };\n\t\n\t  // Returns a function that will be executed at most one time, no matter how\n\t  // often you call it. Useful for lazy initialization.\n\t  _.once = _.partial(_.before, 2);\n\t\n\t  // Object Functions\n\t  // ----------------\n\t\n\t  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n\t  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n\t  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n\t                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\t\n\t  function collectNonEnumProps(obj, keys) {\n\t    var nonEnumIdx = nonEnumerableProps.length;\n\t    var constructor = obj.constructor;\n\t    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\t\n\t    // Constructor is a special case.\n\t    var prop = 'constructor';\n\t    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\t\n\t    while (nonEnumIdx--) {\n\t      prop = nonEnumerableProps[nonEnumIdx];\n\t      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n\t        keys.push(prop);\n\t      }\n\t    }\n\t  }\n\t\n\t  // Retrieve the names of an object's own properties.\n\t  // Delegates to **ECMAScript 5**'s native `Object.keys`\n\t  _.keys = function(obj) {\n\t    if (!_.isObject(obj)) return [];\n\t    if (nativeKeys) return nativeKeys(obj);\n\t    var keys = [];\n\t    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n\t    // Ahem, IE < 9.\n\t    if (hasEnumBug) collectNonEnumProps(obj, keys);\n\t    return keys;\n\t  };\n\t\n\t  // Retrieve all the property names of an object.\n\t  _.allKeys = function(obj) {\n\t    if (!_.isObject(obj)) return [];\n\t    var keys = [];\n\t    for (var key in obj) keys.push(key);\n\t    // Ahem, IE < 9.\n\t    if (hasEnumBug) collectNonEnumProps(obj, keys);\n\t    return keys;\n\t  };\n\t\n\t  // Retrieve the values of an object's properties.\n\t  _.values = function(obj) {\n\t    var keys = _.keys(obj);\n\t    var length = keys.length;\n\t    var values = Array(length);\n\t    for (var i = 0; i < length; i++) {\n\t      values[i] = obj[keys[i]];\n\t    }\n\t    return values;\n\t  };\n\t\n\t  // Returns the results of applying the iteratee to each element of the object\n\t  // In contrast to _.map it returns an object\n\t  _.mapObject = function(obj, iteratee, context) {\n\t    iteratee = cb(iteratee, context);\n\t    var keys =  _.keys(obj),\n\t          length = keys.length,\n\t          results = {},\n\t          currentKey;\n\t      for (var index = 0; index < length; index++) {\n\t        currentKey = keys[index];\n\t        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n\t      }\n\t      return results;\n\t  };\n\t\n\t  // Convert an object into a list of `[key, value]` pairs.\n\t  _.pairs = function(obj) {\n\t    var keys = _.keys(obj);\n\t    var length = keys.length;\n\t    var pairs = Array(length);\n\t    for (var i = 0; i < length; i++) {\n\t      pairs[i] = [keys[i], obj[keys[i]]];\n\t    }\n\t    return pairs;\n\t  };\n\t\n\t  // Invert the keys and values of an object. The values must be serializable.\n\t  _.invert = function(obj) {\n\t    var result = {};\n\t    var keys = _.keys(obj);\n\t    for (var i = 0, length = keys.length; i < length; i++) {\n\t      result[obj[keys[i]]] = keys[i];\n\t    }\n\t    return result;\n\t  };\n\t\n\t  // Return a sorted list of the function names available on the object.\n\t  // Aliased as `methods`\n\t  _.functions = _.methods = function(obj) {\n\t    var names = [];\n\t    for (var key in obj) {\n\t      if (_.isFunction(obj[key])) names.push(key);\n\t    }\n\t    return names.sort();\n\t  };\n\t\n\t  // Extend a given object with all the properties in passed-in object(s).\n\t  _.extend = createAssigner(_.allKeys);\n\t\n\t  // Assigns a given object with all the own properties in the passed-in object(s)\n\t  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n\t  _.extendOwn = _.assign = createAssigner(_.keys);\n\t\n\t  // Returns the first key on an object that passes a predicate test\n\t  _.findKey = function(obj, predicate, context) {\n\t    predicate = cb(predicate, context);\n\t    var keys = _.keys(obj), key;\n\t    for (var i = 0, length = keys.length; i < length; i++) {\n\t      key = keys[i];\n\t      if (predicate(obj[key], key, obj)) return key;\n\t    }\n\t  };\n\t\n\t  // Return a copy of the object only containing the whitelisted properties.\n\t  _.pick = function(object, oiteratee, context) {\n\t    var result = {}, obj = object, iteratee, keys;\n\t    if (obj == null) return result;\n\t    if (_.isFunction(oiteratee)) {\n\t      keys = _.allKeys(obj);\n\t      iteratee = optimizeCb(oiteratee, context);\n\t    } else {\n\t      keys = flatten(arguments, false, false, 1);\n\t      iteratee = function(value, key, obj) { return key in obj; };\n\t      obj = Object(obj);\n\t    }\n\t    for (var i = 0, length = keys.length; i < length; i++) {\n\t      var key = keys[i];\n\t      var value = obj[key];\n\t      if (iteratee(value, key, obj)) result[key] = value;\n\t    }\n\t    return result;\n\t  };\n\t\n\t   // Return a copy of the object without the blacklisted properties.\n\t  _.omit = function(obj, iteratee, context) {\n\t    if (_.isFunction(iteratee)) {\n\t      iteratee = _.negate(iteratee);\n\t    } else {\n\t      var keys = _.map(flatten(arguments, false, false, 1), String);\n\t      iteratee = function(value, key) {\n\t        return !_.contains(keys, key);\n\t      };\n\t    }\n\t    return _.pick(obj, iteratee, context);\n\t  };\n\t\n\t  // Fill in a given object with default properties.\n\t  _.defaults = createAssigner(_.allKeys, true);\n\t\n\t  // Creates an object that inherits from the given prototype object.\n\t  // If additional properties are provided then they will be added to the\n\t  // created object.\n\t  _.create = function(prototype, props) {\n\t    var result = baseCreate(prototype);\n\t    if (props) _.extendOwn(result, props);\n\t    return result;\n\t  };\n\t\n\t  // Create a (shallow-cloned) duplicate of an object.\n\t  _.clone = function(obj) {\n\t    if (!_.isObject(obj)) return obj;\n\t    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n\t  };\n\t\n\t  // Invokes interceptor with the obj, and then returns obj.\n\t  // The primary purpose of this method is to \"tap into\" a method chain, in\n\t  // order to perform operations on intermediate results within the chain.\n\t  _.tap = function(obj, interceptor) {\n\t    interceptor(obj);\n\t    return obj;\n\t  };\n\t\n\t  // Returns whether an object has a given set of `key:value` pairs.\n\t  _.isMatch = function(object, attrs) {\n\t    var keys = _.keys(attrs), length = keys.length;\n\t    if (object == null) return !length;\n\t    var obj = Object(object);\n\t    for (var i = 0; i < length; i++) {\n\t      var key = keys[i];\n\t      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n\t    }\n\t    return true;\n\t  };\n\t\n\t\n\t  // Internal recursive comparison function for `isEqual`.\n\t  var eq = function(a, b, aStack, bStack) {\n\t    // Identical objects are equal. `0 === -0`, but they aren't identical.\n\t    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n\t    if (a === b) return a !== 0 || 1 / a === 1 / b;\n\t    // A strict comparison is necessary because `null == undefined`.\n\t    if (a == null || b == null) return a === b;\n\t    // Unwrap any wrapped objects.\n\t    if (a instanceof _) a = a._wrapped;\n\t    if (b instanceof _) b = b._wrapped;\n\t    // Compare `[[Class]]` names.\n\t    var className = toString.call(a);\n\t    if (className !== toString.call(b)) return false;\n\t    switch (className) {\n\t      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n\t      case '[object RegExp]':\n\t      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n\t      case '[object String]':\n\t        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n\t        // equivalent to `new String(\"5\")`.\n\t        return '' + a === '' + b;\n\t      case '[object Number]':\n\t        // `NaN`s are equivalent, but non-reflexive.\n\t        // Object(NaN) is equivalent to NaN\n\t        if (+a !== +a) return +b !== +b;\n\t        // An `egal` comparison is performed for other numeric values.\n\t        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n\t      case '[object Date]':\n\t      case '[object Boolean]':\n\t        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n\t        // millisecond representations. Note that invalid dates with millisecond representations\n\t        // of `NaN` are not equivalent.\n\t        return +a === +b;\n\t    }\n\t\n\t    var areArrays = className === '[object Array]';\n\t    if (!areArrays) {\n\t      if (typeof a != 'object' || typeof b != 'object') return false;\n\t\n\t      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n\t      // from different frames are.\n\t      var aCtor = a.constructor, bCtor = b.constructor;\n\t      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n\t                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n\t                          && ('constructor' in a && 'constructor' in b)) {\n\t        return false;\n\t      }\n\t    }\n\t    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n\t    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\t\n\t    // Initializing stack of traversed objects.\n\t    // It's done here since we only need them for objects and arrays comparison.\n\t    aStack = aStack || [];\n\t    bStack = bStack || [];\n\t    var length = aStack.length;\n\t    while (length--) {\n\t      // Linear search. Performance is inversely proportional to the number of\n\t      // unique nested structures.\n\t      if (aStack[length] === a) return bStack[length] === b;\n\t    }\n\t\n\t    // Add the first object to the stack of traversed objects.\n\t    aStack.push(a);\n\t    bStack.push(b);\n\t\n\t    // Recursively compare objects and arrays.\n\t    if (areArrays) {\n\t      // Compare array lengths to determine if a deep comparison is necessary.\n\t      length = a.length;\n\t      if (length !== b.length) return false;\n\t      // Deep compare the contents, ignoring non-numeric properties.\n\t      while (length--) {\n\t        if (!eq(a[length], b[length], aStack, bStack)) return false;\n\t      }\n\t    } else {\n\t      // Deep compare objects.\n\t      var keys = _.keys(a), key;\n\t      length = keys.length;\n\t      // Ensure that both objects contain the same number of properties before comparing deep equality.\n\t      if (_.keys(b).length !== length) return false;\n\t      while (length--) {\n\t        // Deep compare each member\n\t        key = keys[length];\n\t        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n\t      }\n\t    }\n\t    // Remove the first object from the stack of traversed objects.\n\t    aStack.pop();\n\t    bStack.pop();\n\t    return true;\n\t  };\n\t\n\t  // Perform a deep comparison to check if two objects are equal.\n\t  _.isEqual = function(a, b) {\n\t    return eq(a, b);\n\t  };\n\t\n\t  // Is a given array, string, or object empty?\n\t  // An \"empty\" object has no enumerable own-properties.\n\t  _.isEmpty = function(obj) {\n\t    if (obj == null) return true;\n\t    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n\t    return _.keys(obj).length === 0;\n\t  };\n\t\n\t  // Is a given value a DOM element?\n\t  _.isElement = function(obj) {\n\t    return !!(obj && obj.nodeType === 1);\n\t  };\n\t\n\t  // Is a given value an array?\n\t  // Delegates to ECMA5's native Array.isArray\n\t  _.isArray = nativeIsArray || function(obj) {\n\t    return toString.call(obj) === '[object Array]';\n\t  };\n\t\n\t  // Is a given variable an object?\n\t  _.isObject = function(obj) {\n\t    var type = typeof obj;\n\t    return type === 'function' || type === 'object' && !!obj;\n\t  };\n\t\n\t  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n\t  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n\t    _['is' + name] = function(obj) {\n\t      return toString.call(obj) === '[object ' + name + ']';\n\t    };\n\t  });\n\t\n\t  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n\t  // there isn't any inspectable \"Arguments\" type.\n\t  if (!_.isArguments(arguments)) {\n\t    _.isArguments = function(obj) {\n\t      return _.has(obj, 'callee');\n\t    };\n\t  }\n\t\n\t  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n\t  // IE 11 (#1621), and in Safari 8 (#1929).\n\t  if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n\t    _.isFunction = function(obj) {\n\t      return typeof obj == 'function' || false;\n\t    };\n\t  }\n\t\n\t  // Is a given object a finite number?\n\t  _.isFinite = function(obj) {\n\t    return isFinite(obj) && !isNaN(parseFloat(obj));\n\t  };\n\t\n\t  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n\t  _.isNaN = function(obj) {\n\t    return _.isNumber(obj) && obj !== +obj;\n\t  };\n\t\n\t  // Is a given value a boolean?\n\t  _.isBoolean = function(obj) {\n\t    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n\t  };\n\t\n\t  // Is a given value equal to null?\n\t  _.isNull = function(obj) {\n\t    return obj === null;\n\t  };\n\t\n\t  // Is a given variable undefined?\n\t  _.isUndefined = function(obj) {\n\t    return obj === void 0;\n\t  };\n\t\n\t  // Shortcut function for checking if an object has a given property directly\n\t  // on itself (in other words, not on a prototype).\n\t  _.has = function(obj, key) {\n\t    return obj != null && hasOwnProperty.call(obj, key);\n\t  };\n\t\n\t  // Utility Functions\n\t  // -----------------\n\t\n\t  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n\t  // previous owner. Returns a reference to the Underscore object.\n\t  _.noConflict = function() {\n\t    root._ = previousUnderscore;\n\t    return this;\n\t  };\n\t\n\t  // Keep the identity function around for default iteratees.\n\t  _.identity = function(value) {\n\t    return value;\n\t  };\n\t\n\t  // Predicate-generating functions. Often useful outside of Underscore.\n\t  _.constant = function(value) {\n\t    return function() {\n\t      return value;\n\t    };\n\t  };\n\t\n\t  _.noop = function(){};\n\t\n\t  _.property = property;\n\t\n\t  // Generates a function for a given object that returns a given property.\n\t  _.propertyOf = function(obj) {\n\t    return obj == null ? function(){} : function(key) {\n\t      return obj[key];\n\t    };\n\t  };\n\t\n\t  // Returns a predicate for checking whether an object has a given set of\n\t  // `key:value` pairs.\n\t  _.matcher = _.matches = function(attrs) {\n\t    attrs = _.extendOwn({}, attrs);\n\t    return function(obj) {\n\t      return _.isMatch(obj, attrs);\n\t    };\n\t  };\n\t\n\t  // Run a function **n** times.\n\t  _.times = function(n, iteratee, context) {\n\t    var accum = Array(Math.max(0, n));\n\t    iteratee = optimizeCb(iteratee, context, 1);\n\t    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n\t    return accum;\n\t  };\n\t\n\t  // Return a random integer between min and max (inclusive).\n\t  _.random = function(min, max) {\n\t    if (max == null) {\n\t      max = min;\n\t      min = 0;\n\t    }\n\t    return min + Math.floor(Math.random() * (max - min + 1));\n\t  };\n\t\n\t  // A (possibly faster) way to get the current timestamp as an integer.\n\t  _.now = Date.now || function() {\n\t    return new Date().getTime();\n\t  };\n\t\n\t   // List of HTML entities for escaping.\n\t  var escapeMap = {\n\t    '&': '&amp;',\n\t    '<': '&lt;',\n\t    '>': '&gt;',\n\t    '\"': '&quot;',\n\t    \"'\": '&#x27;',\n\t    '`': '&#x60;'\n\t  };\n\t  var unescapeMap = _.invert(escapeMap);\n\t\n\t  // Functions for escaping and unescaping strings to/from HTML interpolation.\n\t  var createEscaper = function(map) {\n\t    var escaper = function(match) {\n\t      return map[match];\n\t    };\n\t    // Regexes for identifying a key that needs to be escaped\n\t    var source = '(?:' + _.keys(map).join('|') + ')';\n\t    var testRegexp = RegExp(source);\n\t    var replaceRegexp = RegExp(source, 'g');\n\t    return function(string) {\n\t      string = string == null ? '' : '' + string;\n\t      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n\t    };\n\t  };\n\t  _.escape = createEscaper(escapeMap);\n\t  _.unescape = createEscaper(unescapeMap);\n\t\n\t  // If the value of the named `property` is a function then invoke it with the\n\t  // `object` as context; otherwise, return it.\n\t  _.result = function(object, property, fallback) {\n\t    var value = object == null ? void 0 : object[property];\n\t    if (value === void 0) {\n\t      value = fallback;\n\t    }\n\t    return _.isFunction(value) ? value.call(object) : value;\n\t  };\n\t\n\t  // Generate a unique integer id (unique within the entire client session).\n\t  // Useful for temporary DOM ids.\n\t  var idCounter = 0;\n\t  _.uniqueId = function(prefix) {\n\t    var id = ++idCounter + '';\n\t    return prefix ? prefix + id : id;\n\t  };\n\t\n\t  // By default, Underscore uses ERB-style template delimiters, change the\n\t  // following template settings to use alternative delimiters.\n\t  _.templateSettings = {\n\t    evaluate    : /<%([\\s\\S]+?)%>/g,\n\t    interpolate : /<%=([\\s\\S]+?)%>/g,\n\t    escape      : /<%-([\\s\\S]+?)%>/g\n\t  };\n\t\n\t  // When customizing `templateSettings`, if you don't want to define an\n\t  // interpolation, evaluation or escaping regex, we need one that is\n\t  // guaranteed not to match.\n\t  var noMatch = /(.)^/;\n\t\n\t  // Certain characters need to be escaped so that they can be put into a\n\t  // string literal.\n\t  var escapes = {\n\t    \"'\":      \"'\",\n\t    '\\\\':     '\\\\',\n\t    '\\r':     'r',\n\t    '\\n':     'n',\n\t    '\\u2028': 'u2028',\n\t    '\\u2029': 'u2029'\n\t  };\n\t\n\t  var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\t\n\t  var escapeChar = function(match) {\n\t    return '\\\\' + escapes[match];\n\t  };\n\t\n\t  // JavaScript micro-templating, similar to John Resig's implementation.\n\t  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n\t  // and correctly escapes quotes within interpolated code.\n\t  // NB: `oldSettings` only exists for backwards compatibility.\n\t  _.template = function(text, settings, oldSettings) {\n\t    if (!settings && oldSettings) settings = oldSettings;\n\t    settings = _.defaults({}, settings, _.templateSettings);\n\t\n\t    // Combine delimiters into one regular expression via alternation.\n\t    var matcher = RegExp([\n\t      (settings.escape || noMatch).source,\n\t      (settings.interpolate || noMatch).source,\n\t      (settings.evaluate || noMatch).source\n\t    ].join('|') + '|$', 'g');\n\t\n\t    // Compile the template source, escaping string literals appropriately.\n\t    var index = 0;\n\t    var source = \"__p+='\";\n\t    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n\t      source += text.slice(index, offset).replace(escaper, escapeChar);\n\t      index = offset + match.length;\n\t\n\t      if (escape) {\n\t        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n\t      } else if (interpolate) {\n\t        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n\t      } else if (evaluate) {\n\t        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n\t      }\n\t\n\t      // Adobe VMs need the match returned to produce the correct offest.\n\t      return match;\n\t    });\n\t    source += \"';\\n\";\n\t\n\t    // If a variable is not specified, place data values in local scope.\n\t    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\t\n\t    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n\t      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n\t      source + 'return __p;\\n';\n\t\n\t    try {\n\t      var render = new Function(settings.variable || 'obj', '_', source);\n\t    } catch (e) {\n\t      e.source = source;\n\t      throw e;\n\t    }\n\t\n\t    var template = function(data) {\n\t      return render.call(this, data, _);\n\t    };\n\t\n\t    // Provide the compiled source as a convenience for precompilation.\n\t    var argument = settings.variable || 'obj';\n\t    template.source = 'function(' + argument + '){\\n' + source + '}';\n\t\n\t    return template;\n\t  };\n\t\n\t  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n\t  _.chain = function(obj) {\n\t    var instance = _(obj);\n\t    instance._chain = true;\n\t    return instance;\n\t  };\n\t\n\t  // OOP\n\t  // ---------------\n\t  // If Underscore is called as a function, it returns a wrapped object that\n\t  // can be used OO-style. This wrapper holds altered versions of all the\n\t  // underscore functions. Wrapped objects may be chained.\n\t\n\t  // Helper function to continue chaining intermediate results.\n\t  var result = function(instance, obj) {\n\t    return instance._chain ? _(obj).chain() : obj;\n\t  };\n\t\n\t  // Add your own custom functions to the Underscore object.\n\t  _.mixin = function(obj) {\n\t    _.each(_.functions(obj), function(name) {\n\t      var func = _[name] = obj[name];\n\t      _.prototype[name] = function() {\n\t        var args = [this._wrapped];\n\t        push.apply(args, arguments);\n\t        return result(this, func.apply(_, args));\n\t      };\n\t    });\n\t  };\n\t\n\t  // Add all of the Underscore functions to the wrapper object.\n\t  _.mixin(_);\n\t\n\t  // Add all mutator Array functions to the wrapper.\n\t  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n\t    var method = ArrayProto[name];\n\t    _.prototype[name] = function() {\n\t      var obj = this._wrapped;\n\t      method.apply(obj, arguments);\n\t      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n\t      return result(this, obj);\n\t    };\n\t  });\n\t\n\t  // Add all accessor Array functions to the wrapper.\n\t  _.each(['concat', 'join', 'slice'], function(name) {\n\t    var method = ArrayProto[name];\n\t    _.prototype[name] = function() {\n\t      return result(this, method.apply(this._wrapped, arguments));\n\t    };\n\t  });\n\t\n\t  // Extracts the result from a wrapped and chained object.\n\t  _.prototype.value = function() {\n\t    return this._wrapped;\n\t  };\n\t\n\t  // Provide unwrapping proxy for some methods used in engine operations\n\t  // such as arithmetic and JSON stringification.\n\t  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\t\n\t  _.prototype.toString = function() {\n\t    return '' + this._wrapped;\n\t  };\n\t\n\t  // AMD registration happens at the end for compatibility with AMD loaders\n\t  // that may not enforce next-turn semantics on modules. Even though general\n\t  // practice for AMD registration is to be anonymous, underscore registers\n\t  // as a named module because, like jQuery, it is a base library that is\n\t  // popular enough to be bundled in a third party lib, but not be part of\n\t  // an AMD load request. Those cases could generate an error when an\n\t  // anonymous define() is called outside of a loader request.\n\t  if (true) {\n\t    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t      return _;\n\t    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t  }\n\t}.call(this));\n\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar TimeSpan = (function () {\n\t    function TimeSpan(time, isMilliseconds) {\n\t        if (isMilliseconds === void 0) { isMilliseconds = true; }\n\t        if (isMilliseconds) {\n\t            this.milliseconds = time;\n\t        }\n\t        else {\n\t            this.milliseconds = time * 1000;\n\t        }\n\t    }\n\t    TimeSpan.prototype.getMilliseconds = function () {\n\t        return this.milliseconds;\n\t    };\n\t    TimeSpan.prototype.getSeconds = function () {\n\t        return this.getMilliseconds() / 1000;\n\t    };\n\t    TimeSpan.prototype.getMinutes = function () {\n\t        return this.getSeconds() / 60;\n\t    };\n\t    TimeSpan.prototype.getHours = function () {\n\t        return this.getMinutes() / 60;\n\t    };\n\t    TimeSpan.prototype.getDays = function () {\n\t        return this.getHours() / 24;\n\t    };\n\t    TimeSpan.prototype.getWeeks = function () {\n\t        return this.getDays() / 7;\n\t    };\n\t    TimeSpan.prototype.getHHMMSS = function () {\n\t        var hours = Math.floor(this.getHours());\n\t        var minutes = Math.floor(this.getMinutes()) % 60;\n\t        var seconds = Math.floor(this.getSeconds()) % 60;\n\t        var hoursString, minutesString, secondsString;\n\t        if (hours == 0) {\n\t            hoursString = '';\n\t        }\n\t        else {\n\t            hoursString = hours < 10 ? '0' + hours.toString() : hours.toString();\n\t        }\n\t        minutesString = minutes < 10 ? '0' + minutes.toString() : minutes.toString();\n\t        secondsString = seconds < 10 ? '0' + seconds.toString() : seconds.toString();\n\t        var hhmmss = (hoursString != '' ? hoursString + ':' : '') + minutesString + ':' + secondsString;\n\t        return hhmmss;\n\t    };\n\t    TimeSpan.fromDates = function (from, to) {\n\t        Assert_1.Assert.exists(from);\n\t        Assert_1.Assert.exists(to);\n\t        return new TimeSpan(to.valueOf() - from.valueOf());\n\t    };\n\t    return TimeSpan;\n\t}());\n\texports.TimeSpan = TimeSpan;\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Not sure about this : In year 2033 who's to say that this list won't be 50 pages long !\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\tvar DeviceUtils = (function () {\n\t    function DeviceUtils() {\n\t    }\n\t    DeviceUtils.getDeviceName = function () {\n\t        var userAgent = navigator.userAgent;\n\t        if (userAgent.match(/Android/i)) {\n\t            return 'Android';\n\t        }\n\t        if (userAgent.match(/BlackBerry/i)) {\n\t            return 'BlackBerry';\n\t        }\n\t        if (userAgent.match(/iPhone/i)) {\n\t            return 'iPhone';\n\t        }\n\t        if (userAgent.match(/iPad/i)) {\n\t            return 'iPad';\n\t        }\n\t        if (userAgent.match(/iPod/i)) {\n\t            return 'iPod';\n\t        }\n\t        if (userAgent.match(/Opera Mini/i)) {\n\t            return 'Opera Mini';\n\t        }\n\t        if (userAgent.match(/IEMobile/i)) {\n\t            return 'IE Mobile';\n\t        }\n\t        if (userAgent.match(/Chrome/i)) {\n\t            return 'Chrome';\n\t        }\n\t        if (userAgent.match(/MSIE/i) || userAgent.match(/Trident/i)) {\n\t            return 'IE';\n\t        }\n\t        if (userAgent.match(/Opera/i)) {\n\t            return 'Opera';\n\t        }\n\t        if (userAgent.match(/Firefox/i)) {\n\t            return 'Firefox';\n\t        }\n\t        if (userAgent.match(/Safari/i)) {\n\t            return 'Safari';\n\t        }\n\t        return 'Others';\n\t    };\n\t    DeviceUtils.isAndroid = function () {\n\t        return DeviceUtils.getDeviceName() == 'Android';\n\t    };\n\t    DeviceUtils.isIos = function () {\n\t        var deviceName = DeviceUtils.getDeviceName();\n\t        return deviceName == 'iPhone' || deviceName == 'iPad' || deviceName == 'iPod';\n\t    };\n\t    DeviceUtils.isIE8or9 = function () {\n\t        var myNav = navigator.userAgent.toLowerCase();\n\t        if (myNav.indexOf('msie') == -1) {\n\t            return false;\n\t        }\n\t        return parseInt(myNav.split('msie')[1]) < 10;\n\t    };\n\t    DeviceUtils.isMobileDevice = function () {\n\t        return mobile;\n\t    };\n\t    /**\n\t     * @deprecated\n\t     *\n\t     * Use ResponsiveComponents.isSmallScreenWidth() instead\n\t     */\n\t    DeviceUtils.isSmallScreenWidth = function () {\n\t        return new ResponsiveComponents_1.ResponsiveComponents().isSmallScreenWidth();\n\t    };\n\t    return DeviceUtils;\n\t}());\n\texports.DeviceUtils = DeviceUtils;\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\texports.MEDIUM_SCREEN_WIDTH = 800;\n\texports.SMALL_SCREEN_WIDTH = 480;\n\t/**\n\t * This class serves as a way to get and set the different screen size breakpoints for the interface.\n\t *\n\t * By settings those, you can impact, amongst other, the {@link Facet}, {@link Tab} or {@link ResultList} behaviour.\n\t *\n\t * For example, the {@link Facet} components of your interface will switch to a dropdown menu when the screen size reaches 800px or less.\n\t *\n\t * You could modify this value using this calls\n\t *\n\t * Normally, you would interact with this class using the instance bound to {@link SearchInterface.responsiveComponents}\n\t */\n\tvar ResponsiveComponents = (function () {\n\t    function ResponsiveComponents(windoh) {\n\t        if (windoh === void 0) { windoh = window; }\n\t        this.windoh = windoh;\n\t    }\n\t    /**\n\t     * Set the breakpoint for small screen size.\n\t     * @param width\n\t     */\n\t    ResponsiveComponents.prototype.setSmallScreenWidth = function (width) {\n\t        Assert_1.Assert.check(width < this.getMediumScreenWidth(), \"Cannot set small screen width (\" + width + \") larger or equal to the current medium screen width (\" + this.getMediumScreenWidth() + \")\");\n\t        this.smallScreenWidth = width;\n\t    };\n\t    /**\n\t     * Set the breakpoint for medium screen size\n\t     * @param width\n\t     */\n\t    ResponsiveComponents.prototype.setMediumScreenWidth = function (width) {\n\t        Assert_1.Assert.check(width > this.getSmallScreenWidth(), \"Cannot set medium screen width (\" + width + \") smaller or equal to the current small screen width (\" + this.getSmallScreenWidth() + \")\");\n\t        this.mediumScreenWidth = width;\n\t    };\n\t    /**\n\t     * Get the current breakpoint for small screen size.\n\t     *\n\t     * If it was not explicitly set by {@link ResponsiveComponents.setSmallScreenWidth}, the default value is `480`.\n\t     * @returns {number}\n\t     */\n\t    ResponsiveComponents.prototype.getSmallScreenWidth = function () {\n\t        if (this.smallScreenWidth == null) {\n\t            return exports.SMALL_SCREEN_WIDTH;\n\t        }\n\t        return this.smallScreenWidth;\n\t    };\n\t    /**\n\t     * Get the current breakpoint for medium screen size.\n\t     *\n\t     * If it was not explicitly set by {@link ResponsiveComponents.setMediumScreenWidth}, the default value is `800`.\n\t     * @returns {number}\n\t     */\n\t    ResponsiveComponents.prototype.getMediumScreenWidth = function () {\n\t        if (this.mediumScreenWidth == null) {\n\t            return exports.MEDIUM_SCREEN_WIDTH;\n\t        }\n\t        return this.mediumScreenWidth;\n\t    };\n\t    /**\n\t     * Return true if the current screen size is smaller than the current breakpoint set for small screen width.\n\t     * @returns {boolean}\n\t     */\n\t    ResponsiveComponents.prototype.isSmallScreenWidth = function () {\n\t        if (this.windoh['clientWidth'] != null) {\n\t            return this.windoh['clientWidth'] <= this.getSmallScreenWidth();\n\t        }\n\t        else {\n\t            return document.body.clientWidth <= this.getSmallScreenWidth();\n\t        }\n\t    };\n\t    /**\n\t     * Return true if the current screen size is smaller than the current breakpoint set for medium screen width.\n\t     * @returns {boolean}\n\t     */\n\t    ResponsiveComponents.prototype.isMediumScreenWidth = function () {\n\t        if (this.isSmallScreenWidth()) {\n\t            return false;\n\t        }\n\t        if (this.windoh['clientWidth'] != null) {\n\t            return this.windoh['clientWidth'] <= this.getMediumScreenWidth();\n\t        }\n\t        return document.body.clientWidth <= this.getMediumScreenWidth();\n\t    };\n\t    /**\n\t     * Return true if the current screen size is larger than the current breakpoint set for medium and small.\n\t     * @returns {boolean}\n\t     */\n\t    ResponsiveComponents.prototype.isLargeScreenWidth = function () {\n\t        return !this.isSmallScreenWidth() && !this.isMediumScreenWidth();\n\t    };\n\t    return ResponsiveComponents;\n\t}());\n\texports.ResponsiveComponents = ResponsiveComponents;\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar JQueryUtils = (function () {\n\t    function JQueryUtils() {\n\t    }\n\t    JQueryUtils.getJQuery = function () {\n\t        if (window && window['Coveo'] && window['Coveo']['$']) {\n\t            return window['Coveo']['$'];\n\t        }\n\t        return false;\n\t    };\n\t    JQueryUtils.isInstanceOfJQuery = function (obj) {\n\t        var jq = this.getJQuery();\n\t        if (jq) {\n\t            return obj instanceof jq;\n\t        }\n\t        return false;\n\t    };\n\t    JQueryUtils.isInstanceOfJqueryEvent = function (obj) {\n\t        var jq = this.getJQuery();\n\t        if (jq) {\n\t            return obj instanceof jq.Event;\n\t        }\n\t        return false;\n\t    };\n\t    return JQueryUtils;\n\t}());\n\texports.JQueryUtils = JQueryUtils;\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar AjaxError = (function () {\n\t    function AjaxError(message, status) {\n\t        this.message = message;\n\t        this.status = status;\n\t        Assert_1.Assert.exists(message);\n\t        Assert_1.Assert.exists(status);\n\t        this.name = this.type = 'Ajax Error (status: ' + status + ')';\n\t    }\n\t    return AjaxError;\n\t}());\n\texports.AjaxError = AjaxError;\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar MissingAuthenticationError = (function () {\n\t    function MissingAuthenticationError(provider) {\n\t        this.provider = provider;\n\t        this.isMissingAuthentication = true;\n\t        this.name = this.type = this.message = \"Missing Authentication (provider: \" + provider + \")\";\n\t    }\n\t    return MissingAuthenticationError;\n\t}());\n\texports.MissingAuthenticationError = MissingAuthenticationError;\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar QueryUtils = (function () {\n\t    function QueryUtils() {\n\t    }\n\t    QueryUtils.createGuid = function () {\n\t        var guid;\n\t        var success = false;\n\t        if ((typeof (crypto) != 'undefined' && typeof (crypto.getRandomValues) != 'undefined')) {\n\t            try {\n\t                guid = QueryUtils.generateWithCrypto();\n\t                success = true;\n\t            }\n\t            catch (e) {\n\t                success = false;\n\t            }\n\t        }\n\t        if (!success) {\n\t            guid = QueryUtils.generateWithRandom();\n\t        }\n\t        return guid;\n\t    };\n\t    // This method is a fallback as it's generate a lot of collisions in Chrome.\n\t    QueryUtils.generateWithRandom = function () {\n\t        // http://stackoverflow.com/a/2117523\n\t        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n\t            return v.toString(16);\n\t        });\n\t    };\n\t    QueryUtils.generateWithCrypto = function () {\n\t        var buf = new Uint16Array(8);\n\t        crypto.getRandomValues(buf);\n\t        var S4 = function (num) {\n\t            var ret = num.toString(16);\n\t            while (ret.length < 4) {\n\t                ret = '0' + ret;\n\t            }\n\t            return ret;\n\t        };\n\t        return (S4(buf[0]) + S4(buf[1]) + '-' + S4(buf[2]) + '-' + S4(buf[3]) + '-' + S4(buf[4]) + '-' + S4(buf[5]) + S4(buf[6]) + S4(buf[7]));\n\t    };\n\t    QueryUtils.setStateObjectOnQueryResults = function (state, results) {\n\t        QueryUtils.setPropertyOnResults(results, 'state', state);\n\t    };\n\t    QueryUtils.setStateObjectOnQueryResult = function (state, result) {\n\t        QueryUtils.setPropertyOnResult(result, 'state', state);\n\t    };\n\t    QueryUtils.setSearchInterfaceObjectOnQueryResult = function (searchInterface, result) {\n\t        QueryUtils.setPropertyOnResult(result, 'searchInterface', searchInterface);\n\t    };\n\t    QueryUtils.setIndexAndUidOnQueryResults = function (query, results, queryUid, pipeline, splitTestRun) {\n\t        Assert_1.Assert.exists(query);\n\t        Assert_1.Assert.exists(results);\n\t        var index = query.firstResult;\n\t        QueryUtils.setPropertyOnResults(results, 'queryUid', queryUid);\n\t        QueryUtils.setPropertyOnResults(results, 'pipeline', pipeline);\n\t        QueryUtils.setPropertyOnResults(results, 'splitTestRun', splitTestRun);\n\t        QueryUtils.setPropertyOnResults(results, 'index', index, function () { return ++index; });\n\t    };\n\t    QueryUtils.setTermsToHighlightOnQueryResults = function (query, results) {\n\t        QueryUtils.setPropertyOnResults(results, 'termsToHighlight', results.termsToHighlight);\n\t        QueryUtils.setPropertyOnResults(results, 'phrasesToHighlight', results.phrasesToHighlight);\n\t    };\n\t    QueryUtils.splitFlags = function (flags, delimiter) {\n\t        if (delimiter === void 0) { delimiter = ';'; }\n\t        Assert_1.Assert.exists(flags);\n\t        return flags.split(delimiter);\n\t    };\n\t    QueryUtils.isAttachment = function (result) {\n\t        return _.contains(QueryUtils.splitFlags(result.flags), 'IsAttachment');\n\t    };\n\t    QueryUtils.containsAttachment = function (result) {\n\t        return _.contains(QueryUtils.splitFlags(result.flags), 'ContainsAttachment');\n\t    };\n\t    QueryUtils.hasHTMLVersion = function (result) {\n\t        return _.contains(QueryUtils.splitFlags(result.flags), 'HasHtmlVersion');\n\t    };\n\t    QueryUtils.hasThumbnail = function (result) {\n\t        return _.contains(QueryUtils.splitFlags(result.flags), 'HasThumbnail');\n\t    };\n\t    QueryUtils.hasExcerpt = function (result) {\n\t        return result.excerpt != undefined && result.excerpt != '';\n\t    };\n\t    QueryUtils.getAuthor = function (result) {\n\t        return result.raw['author'];\n\t    };\n\t    QueryUtils.getUriHash = function (result) {\n\t        return result.raw['urihash'];\n\t    };\n\t    QueryUtils.getObjectType = function (result) {\n\t        return result.raw['objecttype'];\n\t    };\n\t    QueryUtils.getCollection = function (result) {\n\t        return result.raw['collection'];\n\t    };\n\t    QueryUtils.getSource = function (result) {\n\t        return result.raw['source'];\n\t    };\n\t    QueryUtils.getLanguage = function (result) {\n\t        return result.raw['language'];\n\t    };\n\t    QueryUtils.getPermanentId = function (result) {\n\t        var fieldValue;\n\t        var fieldUsed;\n\t        var permanentId = Utils_1.Utils.getFieldValue(result, 'permanentid');\n\t        if (permanentId) {\n\t            fieldUsed = 'permanentid';\n\t            fieldValue = permanentId;\n\t        }\n\t        else {\n\t            fieldUsed = 'urihash';\n\t            fieldValue = Utils_1.Utils.getFieldValue(result, 'urihash');\n\t        }\n\t        return {\n\t            fieldValue: fieldValue,\n\t            fieldUsed: fieldUsed\n\t        };\n\t    };\n\t    QueryUtils.quoteAndEscapeIfNeeded = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return QueryUtils.isAtomicString(str) || (QueryUtils.isRangeString(str) || QueryUtils.isRangeWithoutOuterBoundsString(str)) ? str : QueryUtils.quoteAndEscape(str);\n\t    };\n\t    QueryUtils.quoteAndEscape = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return \"\\\"\" + QueryUtils.escapeString(str) + \"\\\"\";\n\t    };\n\t    QueryUtils.escapeString = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return str.replace(/\"/g, ' ');\n\t    };\n\t    QueryUtils.isAtomicString = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return /^\\d+(\\.\\d+)?$|^[\\d\\w]+$/.test(str);\n\t    };\n\t    QueryUtils.isRangeString = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return /^\\d+(\\.\\d+)?\\.\\.\\d+(\\.\\d+)?$|^\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}\\.\\.\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}$/.test(str);\n\t    };\n\t    QueryUtils.isRangeWithoutOuterBoundsString = function (str) {\n\t        Assert_1.Assert.isString(str);\n\t        return /^\\d+(\\.\\d+)?$|^\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}$/.test(str);\n\t    };\n\t    QueryUtils.buildFieldExpression = function (field, operator, values) {\n\t        Assert_1.Assert.isNonEmptyString(field);\n\t        Assert_1.Assert.stringStartsWith(field, '@');\n\t        Assert_1.Assert.isNonEmptyString(operator);\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, values.length);\n\t        if (values.length == 1) {\n\t            return field + operator + QueryUtils.quoteAndEscapeIfNeeded(values[0]);\n\t        }\n\t        else {\n\t            return field + operator + '(' + _.map(values, function (str) { return QueryUtils.quoteAndEscapeIfNeeded(str); }).join(',') + ')';\n\t        }\n\t    };\n\t    QueryUtils.buildFieldNotEqualExpression = function (field, values) {\n\t        Assert_1.Assert.isNonEmptyString(field);\n\t        Assert_1.Assert.stringStartsWith(field, '@');\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, values.length);\n\t        var filter;\n\t        if (values.length == 1) {\n\t            filter = field + '==' + QueryUtils.quoteAndEscapeIfNeeded(values[0]);\n\t        }\n\t        else {\n\t            filter = field + '==' + '(' + _.map(values, function (str) { return QueryUtils.quoteAndEscapeIfNeeded(str); }).join(',') + ')';\n\t        }\n\t        return '(NOT ' + filter + ')';\n\t    };\n\t    QueryUtils.mergeQueryString = function (url, queryString) {\n\t        var queryStringPosition = url.indexOf('?');\n\t        if (queryStringPosition != -1) {\n\t            url += '&' + queryString;\n\t        }\n\t        else {\n\t            url += '?' + queryString;\n\t        }\n\t        return url;\n\t    };\n\t    QueryUtils.mergePath = function (url, path) {\n\t        var urlSplit = url.split('?');\n\t        return urlSplit[0] + path + '?' + (urlSplit[1] || '');\n\t    };\n\t    QueryUtils.setPropertyOnResults = function (results, property, value, afterOneLoop) {\n\t        _.each(results.results, function (result) {\n\t            QueryUtils.setPropertyOnResult(result, property, value);\n\t            value = afterOneLoop ? afterOneLoop() : value;\n\t        });\n\t    };\n\t    QueryUtils.setPropertyOnResult = function (result, property, value) {\n\t        result[property] = value;\n\t        _.each(result.childResults, function (child) {\n\t            child[property] = value;\n\t        });\n\t        if (!Utils_1.Utils.isNullOrUndefined(result.parentResult)) {\n\t            result.parentResult[property] = value;\n\t        }\n\t    };\n\t    // http://stackoverflow.com/a/11582513\n\t    QueryUtils.getUrlParameter = function (name) {\n\t        return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [, ''])[1].replace(/\\+/g, '%20')) || null;\n\t    };\n\t    QueryUtils.isStratusAgnosticField = function (fieldToVerify, fieldToMatch) {\n\t        var checkForSystem = /^(@?)(sys)?(.*)/i;\n\t        var matchFieldToVerify = checkForSystem.exec(fieldToVerify);\n\t        var matchFieldToMatch = checkForSystem.exec(fieldToMatch);\n\t        if (matchFieldToVerify && matchFieldToMatch) {\n\t            return (matchFieldToVerify[1] + matchFieldToVerify[3]).toLowerCase() == (matchFieldToMatch[1] + matchFieldToMatch[3]).toLowerCase();\n\t        }\n\t        return false;\n\t    };\n\t    return QueryUtils;\n\t}());\n\texports.QueryUtils = QueryUtils;\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryError = (function () {\n\t    function QueryError(errorResponse) {\n\t        this.status = errorResponse.statusCode;\n\t        this.message = errorResponse.data.message;\n\t        this.name = this.type = errorResponse.data.type;\n\t        this.queryExecutionReport = errorResponse.data.executionReport;\n\t        Assert_1.Assert.isNumber(this.status);\n\t        Assert_1.Assert.isNonEmptyString(this.message);\n\t        Assert_1.Assert.isNonEmptyString(this.type);\n\t    }\n\t    return QueryError;\n\t}());\n\texports.QueryError = QueryError;\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.ModalBox = __webpack_require__(26);\n\texports.MagicBox = __webpack_require__(27);\n\texports.LocaleString = __webpack_require__(28);\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n\tvar Coveo;!function(e){var o;!function(e){function o(e,o){void 0===o&&(o={});var n=o.body||document.body;n.className?n.className.indexOf(\"coveo-modalBox-opened\")==-1&&(n.className+=\" coveo-modalBox-opened\"):n.className=\"coveo-modalBox-opened\";var c=document.createElement(\"div\");c.className=\"coveo-modalBox\",n.appendChild(c),o.fullscreen===!0&&(c.className+=\" coveo-fullscreen\");var d=document.createElement(\"div\");d.className=\"coveo-overlay\",c.appendChild(d);var s=document.createElement(\"div\");if(s.className=\"coveo-wrapper\",c.appendChild(s),null!=o.title){var r=document.createElement(\"div\");r.className=\"coveo-title\",s.appendChild(r),r.innerHTML=o.title,o.titleClose===!0&&r.addEventListener(\"click\",function(){return v()})}e.className+=\" coveo-body\",s.appendChild(e);var i,v=function(e,t){void 0===e&&(e=0),void 0===t&&(t=!1);var d=null==o.validation||o.validation(e);if(d!==!1||t){c.parentElement&&c.parentElement.removeChild(c);var s=l.indexOf(v);return s>=0&&l.splice(s,1),null==n.querySelector(\".coveo-modalBox\")&&a(n,\"coveo-modalBox-opened\"),!0}return!1},u=function(e,o){var n=document.createElement(\"div\");n.className=\"coveo-button\",n.textContent=e,n.addEventListener(\"click\",function(){return v(o)}),i.appendChild(n)};return null!=o.buttons&&(i=document.createElement(\"div\"),i.className=\"coveo-buttons\",s.appendChild(i),o.buttons&t.OK&&u(\"Ok\",t.OK),o.buttons&t.APPLY&&u(\"Apply\",t.APPLY),o.buttons&t.YES&&u(\"Yes\",t.YES),o.buttons&t.NO&&u(\"No\",t.NO),o.buttons&t.CANCEL&&u(\"Cancel\",t.CANCEL)),l.push(v),o.overlayClose===!0&&d.addEventListener(\"click\",function(e){return v()}),null!=o.className&&(c.className+=\" \"+o.className),{modalBox:c,overlay:d,wrapper:s,buttons:i,content:e,close:v}}function n(e){void 0===e&&(e=!1);for(var o=0;l.length>o;){var n=l[o](0,e);n||o++}}function a(e,o){e.className=e.className.replace(new RegExp(\"(^|\\\\s)\"+o+\"(\\\\s|\\\\b)\",\"g\"),\"$1\")}!function(e){e[e.OK=1]=\"OK\",e[e.APPLY=2]=\"APPLY\",e[e.YES=4]=\"YES\",e[e.NO=8]=\"NO\",e[e.CANCEL=16]=\"CANCEL\"}(e.BUTTON||(e.BUTTON={}));var t=e.BUTTON,l=[];e.open=o,e.close=n}(o=e.ModalBox||(e.ModalBox={}))}(Coveo||(Coveo={}));\n\t\n\t/*** EXPORTS FROM exports-loader ***/\n\tmodule.exports = Coveo.ModalBox;\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tvar Coveo,__extends=this&&this.__extends||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);function s(){this.constructor=t}t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)};!function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){var s=this;this.expression=e,this.input=n,_.isString(t)?this.value=t:_.isArray(t)&&(this.subResults=t,_.forEach(this.subResults,function(t){t.parent=s}))}return t.prototype.isSuccess=function(){return null!=this.value||null!=this.subResults&&_.all(this.subResults,function(t){return t.isSuccess()})},t.prototype.path=function(t){var e=null!=this.parent&&this.parent!=t?this.parent.path(t):[];return e.push(this),e},t.prototype.findParent=function(t){for(var e=this,n=_.isString(t)?function(e){return t==e.expression.id}:t;null!=e&&!n(e);)e=e.parent;return e},t.prototype.find=function(t){var e=_.isString(t)?function(e){return t==e.expression.id}:t;if(e(this))return this;if(this.subResults)for(var n=0;n<this.subResults.length;n++){var s=this.subResults[n].find(e);if(s)return s}return null},t.prototype.findAll=function(t){var e=[],n=_.isString(t)?function(e){return t==e.expression.id}:t;return n(this)&&e.push(this),this.subResults&&(e=_.reduce(this.subResults,function(t,e){return t.concat(e.findAll(n))},e)),e},t.prototype.resultAt=function(t,e){if(t<0||t>this.getLength())return[];if(null!=e){if(_.isString(e)){if(e==this.expression.id)return[this]}else if(e(this))return[this]}else if(null!=(null==this.value&&null==this.subResults?this.input:this.value))return[this];if(null!=this.subResults){for(var n=[],s=0;s<this.subResults.length;s++){var i=this.subResults[s];if(n=n.concat(i.resultAt(t,e)),(t-=i.getLength())<0)break}return n}return[]},t.prototype.getExpect=function(){return null==this.value&&null==this.subResults?[this]:null!=this.subResults?_.reduce(this.subResults,function(t,e){return t.concat(e.getExpect())},[]):[]},t.prototype.getBestExpect=function(){var t=this.getExpect(),e=(n=_.groupBy(t,function(t){return t.input}))[_.last(_.keys(n).sort(function(t,e){return e.length-t.length}))],n=_.groupBy(e,function(t){return t.expression.id});return _.map(n,function(t){return _.chain(t).map(function(t){return{path:t.path().length,result:t}}).sortBy(\"path\").pluck(\"result\").first().value()})},t.prototype.getHumanReadableExpect=function(){var t=this.getBestExpect(),e=t.length>0?_.last(t).input:\"\";return\"Expected \"+_.map(t,function(t){return t.getHumanReadable()}).join(\" or \")+\" but \"+(e.length>0?JSON.stringify(e[0]):\"end of input\")+\" found.\"},t.prototype.before=function(){if(null==this.parent)return\"\";var t=_.indexOf(this.parent.subResults,this);return this.parent.before()+_.chain(this.parent.subResults).first(t).map(function(t){return t.toString()}).join(\"\").value()},t.prototype.after=function(){if(null==this.parent)return\"\";var t=_.indexOf(this.parent.subResults,this);return _.chain(this.parent.subResults).last(this.parent.subResults.length-t-1).map(function(t){return t.toString()}).join(\"\").value()+this.parent.after()},t.prototype.getLength=function(){return null!=this.value?this.value.length:null!=this.subResults?_.reduce(this.subResults,function(t,e){return t+e.getLength()},0):this.input.length},t.prototype.toHtmlElement=function(){var t=document.createElement(\"span\"),e=null!=this.expression?this.expression.id:null;return null!=e&&t.setAttribute(\"data-id\",e),t.setAttribute(\"data-success\",this.isSuccess().toString()),null!=this.value?(t.appendChild(document.createTextNode(this.value)),t.setAttribute(\"data-value\",this.value)):null!=this.subResults?_.each(this.subResults,function(e){t.appendChild(e.toHtmlElement())}):(t.appendChild(document.createTextNode(this.input)),t.setAttribute(\"data-input\",this.input),t.className=\"magic-box-error\"+(this.input.length>0?\"\":\" magic-box-error-empty\")),t.result=this,t},t.prototype.clean=function(e){if(null!=e||!this.isSuccess()){e=e||_.last(this.getBestExpect()).path(this);var n=_.first(e);if(null!=n){var s=_.indexOf(this.subResults,n),i=-1==s?[]:_.map(_.first(this.subResults,s),function(t){return t.clean()});return i.push(n.clean(_.rest(e))),new t(i,this.expression,this.input)}return new t(null,this.expression,this.input)}return null!=this.value?new t(this.value,this.expression,this.input):null!=this.subResults?new t(_.map(this.subResults,function(t){return t.clean()}),this.expression,this.input):void 0},t.prototype.clone=function(){return null!=this.value?new t(this.value,this.expression,this.input):null!=this.subResults?new t(_.map(this.subResults,function(t){return t.clone()}),this.expression,this.input):new t(null,this.expression,this.input)},t.prototype.toString=function(){return null!=this.value?this.value:null!=this.subResults?_.map(this.subResults,function(t){return t.toString()}).join(\"\"):this.input},t.prototype.getHumanReadable=function(){return this.expression instanceof e.ExpressionConstant?JSON.stringify(this.expression.value):this.expression.id},t}(),e.Result=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(n){t.call(this,[n],e.ExpressionEndOfInput,n.input);var s=new e.Result(null,e.ExpressionEndOfInput,n.input.substr(n.getLength()));s.parent=this,this.subResults.push(s)}return __extends(n,t),n}(e.Result),e.EndOfInputResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(e,n,s,i){var o=this;t.call(this,null!=e?[e]:null,n,s),this.result=e,this.expression=n,this.input=s,this.failAttempt=i,_.forEach(this.failAttempt,function(t){t.parent=o})}return __extends(n,t),n.prototype.getExpect=function(){var t=this,e=[];return null!=this.result&&(e=this.result.getExpect()),(e=_.reduce(this.failAttempt,function(t,e){return t.concat(e.getExpect())},e)).length>0&&_.all(e,function(e){return e.input==t.input})?[this]:e},n.prototype.clean=function(t){if(null!=t||!this.isSuccess()){t=_.rest(t||_.last(this.getBestExpect()).path(this));var n=_.first(t);return null==n?new e.Result(null,this.expression,this.input):new e.Result([n.clean(_.rest(t))],this.expression,this.input)}return new e.Result(_.map(this.result.subResults,function(t){return t.clean()}),this.expression,this.input)},n}(e.Result),e.OptionResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(e,n,s,i){t.call(this,e,n,s),this.results=e,this.expression=n,this.input=s,_.last(e)!=i&&(this.failAttempt=i,null!=this.failAttempt&&(this.failAttempt.parent=this))}return __extends(n,t),n.prototype.getExpect=function(){var e=t.prototype.getExpect.call(this);return null!=this.failAttempt?e.concat(this.failAttempt.getExpect()):e},n.prototype.clean=function(n){if(null!=this.failAttempt&&(null!=n||!this.isSuccess())){n=n||_.last(this.getBestExpect()).path(this);var s=_.first(n);if(null!=s&&s==this.failAttempt){var i=_.last(this.subResults),o=_.map(null!=i&&i.isSuccess()?this.subResults:_.initial(this.subResults),function(t){return t.clean()});return o.push(s.clean(_.rest(n))),new e.Result(o,this.expression,this.input)}}return t.prototype.clean.call(this,n)},n}(e.Result),e.RefResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){this.value=t,this.id=e}return t.prototype.parse=function(t,n){var s=0==t.indexOf(this.value),i=new e.Result(s?this.value:null,this,t);return s&&n&&t.length>this.value.length?new e.EndOfInputResult(i):i},t.prototype.toString=function(){return this.value},t}(),e.ExpressionConstant=n}(Coveo||(Coveo={})),function(t){(t.MagicBox||(t.MagicBox={})).ExpressionEndOfInput={id:\"end of input\",parse:null}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){this.func=t,this.id=e,this.grammar=n}return t.prototype.parse=function(t,e){return this.func(t,e,this)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionFunction=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){if(this.parts=t,this.id=e,0==t.length)throw JSON.stringify(e)+\" should have at least 1 parts\"}return t.prototype.parse=function(t,n){for(var s,i=[],o=t,r=0;r<this.parts.length;r++){if(s=this.parts[r].parse(o,n&&r==this.parts.length-1),i.push(s),!s.isSuccess())break;o=o.substr(s.getLength())}return new e.Result(i,this,t)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionList=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){this.parts=t,this.id=e}return t.prototype.parse=function(t,n){for(var s=[],i=0;i<this.parts.length;i++){var o=this.parts[i].parse(t,n);if(o.isSuccess())return new e.OptionResult(o,this,t,s);s.push(o)}return new e.OptionResult(null,this,t,s)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionOptions=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n,s){this.ref=t,this.occurrence=e,this.id=n,this.grammar=s}return t.prototype.parse=function(t,e){var n=this.grammar.getExpression(this.ref);if(null==n)throw\"Expression not found:\"+this.ref;return\"?\"==this.occurrence||null==this.occurrence?this.parseOnce(t,e,n):this.parseMany(t,e,n)},t.prototype.parseOnce=function(t,n,s){var i=s.parse(t,n),o=i.isSuccess();return o||\"?\"!=this.occurrence?new e.RefResult([i],this,t,o?null:i):n?0==t.length?new e.RefResult([],this,t,i):_.all(i.getBestExpect(),function(t){return t.expression==e.ExpressionEndOfInput})?new e.RefResult([new e.Result(null,e.ExpressionEndOfInput,t)],this,t,i):i:new e.RefResult([],this,t,null)},t.prototype.parseMany=function(t,n,s){var i,o,r=[],u=t;do{(o=(i=s.parse(u,!1)).isSuccess())&&(r.push(i),u=u.substr(i.getLength()))}while(o&&i.input!=u);var a=_.isNumber(this.occurrence)?this.occurrence:\"+\"==this.occurrence?1:0;if(r.length<a)r.push(i);else if(n)if(r.length>0){var l=_.last(r);(i=s.parse(l.input,!0)).isSuccess()?r[r.length-1]=i:(r.push(new e.Result(null,e.ExpressionEndOfInput,l.input.substr(l.getLength()))),i=s.parse(l.input.substr(l.getLength()),!0))}else if(0!=t.length){var p=new e.Result(null,e.ExpressionEndOfInput,t);return new e.RefResult([p],this,t,i)}return new e.RefResult(r,this,t,i)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionRef=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){this.value=t,this.id=e}return t.prototype.parse=function(t,n){var s=t.match(this.value);null!=s&&0!=s.index&&(s=null);var i=new e.Result(null!=s?s[0]:null,this,t);return i.isSuccess()&&n&&t.length>i.value.length?new e.EndOfInputResult(i):i},t.prototype.toString=function(){return this.id},t}(),e.ExpressionRegExp=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n){void 0===n&&(n={}),this.expressions={},this.start=new e.ExpressionRef(t,null,\"start\",this),this.addExpressions(n)}return t.prototype.addExpressions=function(t){var e=this;_.each(t,function(t,n){e.addExpression(n,t)})},t.prototype.addExpression=function(e,n){if(e in this.expressions)throw\"Grammar already contain the id:\"+e;this.expressions[e]=t.buildExpression(n,e,this)},t.prototype.getExpression=function(t){return this.expressions[t]},t.prototype.parse=function(t){return this.start.parse(t,!0)},t.buildExpression=function(t,n,s){if(\"undefined\"==typeof t)throw\"Invalid Expression: \"+t;if(_.isString(t))return this.buildStringExpression(t,n,s);if(_.isArray(t))return new e.ExpressionOptions(_.map(t,function(t,i){return new e.ExpressionRef(t,null,n+\"_\"+i,s)}),n);if(_.isRegExp(t))return new e.ExpressionRegExp(t,n,s);if(_.isFunction(t))return new e.ExpressionFunction(t,n,s);throw\"Invalid Expression: \"+t},t.buildStringExpression=function(n,s,i){var o=t.stringMatch(n,t.spliter),r=_.map(o,function(t,n){if(t[1]){var o=t[1],r=t[3]?Number(t[3]):t[2]||null;return new e.ExpressionRef(o,r,s+\"_\"+n,i)}return new e.ExpressionConstant(t[4],s+\"_\"+n)});if(1==r.length){var u=r[0];return u.id=s,u}return new e.ExpressionList(r,s)},t.stringMatch=function(t,e){for(var n,s=[],i=new RegExp(e.source,\"g\");null!==(n=i.exec(t));)s.push(n);return s},t.spliter=/\\[(\\w+)(\\*|\\+|\\?|\\{([1-9][0-9]*)\\})?\\]|(.[^\\[]*)/,t}(),e.Grammar=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n,s){this.element=t,this.onchange=n,this.magicBox=s,this.hasFocus=!1,this.justPressedTab=!1,this.underlay=document.createElement(\"div\"),this.underlay.className=\"magic-box-underlay\",this.highlightContainer=document.createElement(\"span\"),this.highlightContainer.className=\"magic-box-highlight-container\",this.underlay.appendChild(this.highlightContainer),this.ghostTextContainer=document.createElement(\"span\"),this.ghostTextContainer.className=\"magic-box-ghost-text\",this.underlay.appendChild(this.ghostTextContainer),this.input=e.$$(t).find(\"input\"),this.input?t.insertBefore(this.underlay,this.input):(this.input=document.createElement(\"input\"),t.appendChild(this.underlay),t.appendChild(this.input)),this.input.spellcheck=!1,this.input.setAttribute(\"form\",\"coveo-dummy-form\"),this.input.setAttribute(\"autocomplete\",\"off\"),this.setupHandler()}return t.prototype.updateInput=function(){this.input.value!=this.result.input&&(this.input.value=this.result.input,this.hasFocus&&this.setCursor(this.getValue().length))},t.prototype.updateHighlight=function(){e.$$(this.highlightContainer).empty(),this.highlightContainer.appendChild(this.result.toHtmlElement())},t.prototype.updateWordCompletion=function(){e.$$(this.ghostTextContainer).empty(),null!=this.wordCompletion&&this.ghostTextContainer.appendChild(document.createTextNode(this.wordCompletion.substr(this.result.input.length)))},t.prototype.updateScroll=function(t){var n=this;void 0===t&&(t=!0);var s=function(){n.underlay.clientWidth<n.underlay.scrollWidth&&(n.underlay.style.visibility=\"hidden\",n.underlay.scrollLeft=n.input.scrollLeft,n.underlay.scrollTop=n.input.scrollTop,n.underlay.style.visibility=\"visible\"),n.updateScrollDefer=null,n.hasFocus&&n.updateScroll()};t?null==this.updateScrollDefer&&(this.updateScrollDefer=e.requestAnimationFrame(s)):s()},t.prototype.setResult=function(t,e){this.result=t,this.updateInput(),this.updateHighlight(),_.isUndefined(e)&&null!=this.wordCompletion&&0==this.wordCompletion.indexOf(this.result.input)?this.updateWordCompletion():this.setWordCompletion(e),this.updateScroll()},t.prototype.setWordCompletion=function(t){null!=t&&0!=t.toLowerCase().indexOf(this.result.input.toLowerCase())&&(t=null),this.wordCompletion=t,this.updateWordCompletion(),this.updateScroll()},t.prototype.setCursor=function(t){if(this.input.focus(),this.input.createTextRange){var e=this.input.createTextRange();e.move(\"character\",t),e.select()}else null!=this.input.selectionStart&&(this.input.focus(),this.input.setSelectionRange(t,t))},t.prototype.getCursor=function(){return this.input.selectionStart},t.prototype.setupHandler=function(){var t=this;this.input.onblur=function(){t.hasFocus=!1,setTimeout(function(){t.hasFocus||t.onblur&&t.onblur()},300),t.updateScroll()},this.input.onfocus=function(){t.hasFocus||(t.hasFocus=!0,t.updateScroll(),t.onfocus&&t.onfocus())},this.input.onkeydown=function(e){t.keydown(e)},this.input.onkeyup=function(e){t.keyup(e)},this.input.onclick=function(){t.onchangecursor()},this.input.oncut=function(){setTimeout(function(){t.onInputChange()})},this.input.onpaste=function(){setTimeout(function(){t.onInputChange()})}},t.prototype.focus=function(){var t=this;this.hasFocus=!0,setTimeout(function(){t.input.focus(),t.setCursor(t.getValue().length)})},t.prototype.blur=function(){this.hasFocus&&this.input.blur()},t.prototype.keydown=function(t){var n=this;switch(t.keyCode||t.which){case 9:!this.justPressedTab&&this.magicBox.hasSuggestions()&&t.preventDefault(),this.justPressedTab=!0;break;default:t.stopPropagation(),this.justPressedTab=!1,null==this.onkeydown||this.onkeydown(t.keyCode||t.which)?e.requestAnimationFrame(function(){n.onInputChange()}):t.preventDefault()}},t.prototype.keyup=function(t){switch(t.keyCode||t.which){case 9:this.tabPress();break;case 37:case 39:this.onchangecursor();break;default:null==this.onkeydown||this.onkeyup(t.keyCode||t.which)?this.onInputChange():t.preventDefault()}},t.prototype.tabPress=function(){null!=this.wordCompletion&&(this.input.value=this.wordCompletion),this.ontabpress&&this.ontabpress(),this.magicBox.showSuggestion()},t.prototype.onInputChange=function(){this.result.input!=this.input.value&&this.onchange(this.input.value,!1)},t.prototype.getValue=function(){return this.input.value},t.prototype.getWordCompletion=function(){return this.wordCompletion},t}(),e.InputManager=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n){var s=this;this.element=t,this.count=1,this.options=_.defaults(n,{selectableClass:\"magic-box-suggestion\",selectedClass:\"magic-box-selected\"}),void 0==this.options.timeout&&(this.options.timeout=500),this.hasSuggestions=!1,e.$$(this.element).on(\"mouseover\",function(t){s.handleMouseOver(t)}),e.$$(this.element).on(\"mouseout\",function(t){s.handleMouseOut(t)})}return t.prototype.handleMouseOver=function(t){var n=e.$$(t.target),s=n.parents(this.options.selectableClass);n.hasClass(this.options.selectableClass)?this.addSelectedClass(n.el):s.length>0&&this.element.contains(s[0])&&this.addSelectedClass(s[0])},t.prototype.handleMouseOut=function(t){var n=e.$$(t.target),s=n.parents(this.options.selectableClass);if(t.relatedTarget){var i=e.$$(t.relatedTarget).parents(this.options.selectableClass);n.hasClass(this.options.selectedClass)&&!e.$$(t.relatedTarget).hasClass(this.options.selectableClass)?n.removeClass(this.options.selectedClass):0==i.length&&s.length>0&&e.$$(s[0]).removeClass(this.options.selectedClass)}else n.hasClass(this.options.selectedClass)?n.removeClass(this.options.selectedClass):s.length>0&&e.$$(s[0]).removeClass(this.options.selectedClass)},t.prototype.moveDown=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0),n=this.element.getElementsByClassName(this.options.selectableClass),s=-1;if(null!=t){e.$$(t).removeClass(this.options.selectedClass);for(var i=0;i<n.length;i++)if(t==n.item(i)){s=i;break}s=-1==s?0:s+1}else s=0;return null!=(t=n.item(s))&&e.$$(t).addClass(this.options.selectedClass),this.returnMoved(t)},t.prototype.moveUp=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0),n=this.element.getElementsByClassName(this.options.selectableClass),s=-1;if(null!=t){e.$$(t).removeClass(this.options.selectedClass);for(var i=0;i<n.length;i++)if(t==n.item(i)){s=i;break}s=-1==s?n.length-1:s-1}else s=n.length-1;return null!=(t=n.item(s))&&e.$$(t).addClass(this.options.selectedClass),this.returnMoved(t)},t.prototype.select=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0);return null!=t&&e.$$(t).trigger(\"keyboardSelect\"),t},t.prototype.mergeSuggestions=function(t,e){var n,s=this,i=[],o=!0;t=_.compact(t);var r=this.pendingSuggestion=new Promise(function(e,u){_.each(t,function(t){var e=!1;setTimeout(function(){e=!0,o=!1},s.options.timeout),t.then(function(t){!e&&t&&(i=i.concat(t))})});var a=function(){o&&(n&&clearTimeout(n),0==i.length?e([]):r==s.pendingSuggestion||null==s.pendingSuggestion?e(i.sort(function(t,e){return e.index-t.index})):u(\"new request queued\")),o=!1};0==t.length&&a(),void 0==t&&a(),n=setTimeout(function(){a()},s.options.timeout),Promise.all(t).then(function(){return a()})});r.then(function(t){return e&&e(t),s.updateSuggestions(t),t}).catch(function(){return null})},t.prototype.updateSuggestions=function(t){var n=this;e.$$(this.element).empty(),this.element.className=\"magic-box-suggestions\",_.each(t,function(t){var s=t.dom;if(s){e.$$(s).removeClass(n.options.selectedClass);var i=e.$$(s).find(\".\"+n.options.selectableClass);e.$$(i).removeClass(n.options.selectedClass)}else{if((s=document.createElement(\"div\")).className=\"magic-box-suggestion\",null!=t.html)s.innerHTML=t.html;else if(null!=t.text)s.appendChild(document.createTextNode(t.text));else if(null!=t.separator){s.className=\"magic-box-suggestion-seperator\";var o=document.createElement(\"div\");o.className=\"magic-box-suggestion-seperator-label\",o.appendChild(document.createTextNode(t.separator)),s.appendChild(o)}e.$$(s).on(\"click\",function(){t.onSelect()}),e.$$(s).on(\"keyboardSelect\",function(){t.onSelect()}),e.$$(s).addClass(n.options.selectableClass)}s.suggestion=t,n.element.appendChild(s)}),t.length>0?(e.$$(this.element).addClass(\"magic-box-hasSuggestion\"),this.hasSuggestions=!0):(e.$$(this.element).removeClass(\"magic-box-hasSuggestion\"),this.hasSuggestions=!1)},t.prototype.returnMoved=function(t){if(null!=t){if(t.suggestion)return t.suggestion;if(t[\"no-text-suggestion\"])return null;if(t instanceof HTMLElement)return{text:e.$$(t).text()}}return null},t.prototype.addSelectedClass=function(t){for(var n=this.element.getElementsByClassName(this.options.selectedClass),s=0;s<n.length;s++){var i=n.item(s);e.$$(i).removeClass(this.options.selectedClass)}e.$$(t).addClass(this.options.selectedClass)},t}(),e.SuggestionsManager=n}(Coveo||(Coveo={})),function(t){var e;(function(t){var n=function(t,e){return'<span class=\"'+t+'\">'+_.escape(e)+\"</span>\"};t.highlightText=function(t,e,s,i,o){if(void 0===s&&(s=!1),void 0===i&&(i=\"magic-box-hightlight\"),void 0===o&&(o=\"\"),0==e.length)return t;var r=e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\"),u=new RegExp(\"(\"+r+\")|(.*?(?=\"+r+\")|.+)\",s?\"gi\":\"g\");return t.replace(u,function(t,e,s){return n(null!=e?i:o,t)})};var s=function(){function t(t){this.el=t}return t.prototype.text=function(t){if(!t)return this.el.innerText||this.el.textContent;void 0!=this.el.innerText?this.el.innerText=t:void 0!=this.el.textContent&&(this.el.textContent=t)},t.prototype.nodeListToArray=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t.item(e);return n},t.prototype.empty=function(){for(;this.el.firstChild;)this.el.removeChild(this.el.firstChild)},t.prototype.show=function(){this.el.style.display=\"visible\"},t.prototype.hide=function(){this.el.style.display=\"none\"},t.prototype.toggle=function(t){void 0===t?\"visible\"==this.el.style.display?this.hide():this.show():t?this.show():this.hide()},t.prototype.find=function(t){return this.el.querySelector(t)},t.prototype.is=function(t){return this.el.tagName.toLowerCase()==t.toLowerCase()||!(\".\"!=t[0]||!this.hasClass(t.substr(1)))||\"#\"==t[0]&&this.el.getAttribute(\"id\")==t.substr(1)},t.prototype.closest=function(t){for(var n=this.el,s=!1;!s&&(e.$$(n).hasClass(t)&&(s=!0),\"body\"!=n.tagName.toLowerCase())&&null!=n.parentElement;)s||(n=n.parentElement);if(s)return n},t.prototype.parent=function(t){if(void 0!=this.el.parentElement)return this.traverseAncestorForClass(this.el.parentElement,t)},t.prototype.parents=function(e){for(var n=[],s=this.parent(e);s;)n.push(s),s=new t(s).parent(e);return n},t.prototype.findAll=function(t){return this.nodeListToArray(this.el.querySelectorAll(t))},t.prototype.findClass=function(t){return\"getElementsByClassName\"in this.el?this.nodeListToArray(this.el.getElementsByClassName(t)):this.nodeListToArray(this.el.querySelectorAll(\".\"+t))},t.prototype.findId=function(t){return document.getElementById(t)},t.prototype.addClass=function(t){this.hasClass(t)||(this.el.className?this.el.className+=\" \"+t:this.el.className=t)},t.prototype.removeClass=function(t){this.el.className=this.el.className.replace(new RegExp(\"(^|\\\\s)\"+t+\"(\\\\s|\\\\b)\",\"g\"),\"$1\")},t.prototype.toggleClass=function(t,e){e?this.addClass(t):this.removeClass(t)},t.prototype.getClass=function(){return this.el.className.match(t.CLASS_NAME_REGEX)||[]},t.prototype.hasClass=function(t){return _.contains(this.getClass(),t)},t.prototype.detach=function(){this.el.parentElement&&this.el.parentElement.removeChild(this.el)},t.prototype.on=function(e,n){var s=this;if(_.isArray(e))_.each(e,function(t){s.on(t,n)});else{var i=this.getJQuery();if(i)i(this.el).on(e,n);else if(this.el.addEventListener){var o=function(t){n(t,t.detail)};t.handlers.push({eventHandle:n,fn:o}),this.el.addEventListener(e,o,!1)}else this.el.on&&this.el.on(\"on\"+e,n)}},t.prototype.one=function(t,e){var n=this;if(_.isArray(t))_.each(t,function(t){n.one(t,e)});else{var s=function(i){return n.off(t,s),e(i)};this.on(t,s)}},t.prototype.off=function(e,n){var s=this;if(_.isArray(e))_.each(e,function(t){s.off(t,n)});else{var i=this.getJQuery();if(i)i(this.el).off(e,n);else if(this.el.removeEventListener){var o=0,r=_.find(t.handlers,function(t,e){if(t.eventHandle==n)return o=e,!0});r&&(this.el.removeEventListener(e,r.fn,!1),t.handlers.splice(o,1))}else this.el.off&&this.el.off(\"on\"+e,n)}},t.prototype.trigger=function(t,e){var n=this.getJQuery();if(n)n(this.el).trigger(t,e);else if(void 0!==CustomEvent){var s=new CustomEvent(t,{detail:e,bubbles:!0});this.el.dispatchEvent(s)}},t.prototype.isEmpty=function(){return t.ONLY_WHITE_SPACE_REGEX.test(this.el.innerHTML)},t.prototype.isDescendant=function(t){for(var e=this.el.parentNode;null!=e;){if(e==t)return!0;e=e.parentNode}return!1},t.prototype.traverseAncestorForClass=function(t,n){void 0===t&&(t=this.el),0==n.indexOf(\".\")&&(n=n.substr(1));for(var s=!1;!s&&(e.$$(t).hasClass(n)&&(s=!0),\"body\"!=t.tagName.toLowerCase())&&null!=t.parentElement;)s||(t=t.parentElement);if(s)return t},t.prototype.getJQuery=function(){return void 0!=window.jQuery&&window.jQuery},t.CLASS_NAME_REGEX=/-?[_a-zA-Z]+[_a-zA-Z0-9-]*/g,t.ONLY_WHITE_SPACE_REGEX=/^\\s*$/,t.handlers=[],t}();t.Dom=s})((e=t.MagicBox||(t.MagicBox={})).Utils||(e.Utils={}))}(Coveo||(Coveo={})),function(t){var e;(e=t.MagicBox||(t.MagicBox={})).$$=function(t){return window.Coveo&&window.Coveo.$$?window.Coveo.$$(t):new e.Utils.Dom(t)}}(Coveo||(Coveo={})),function(t){var e;(function(t){function n(t,e,n,s){_.each(s.expressions,function(e){_.contains(t,e)||t.push(e)}),_.each(s.basicExpressions,function(t){_.contains(e,t)||e.push(t)}),_.each(s.grammars,function(t,e){if(e in n){if(!_.isArray(n[e])||!_.isArray(t))throw _.each(t,function(t){n[e].push(t)}),\"Can not merge \"+e+\"(\"+new String(t)+\" => \"+new String(n[e])+\")\";_.each(t,function(t){n[e].push(t)})}else n[e]=t})}function s(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];for(var s=[],i=[],o={Start:[\"Expressions\",\"Empty\"],Expressions:\"[OptionalSpaces][Expression][ExpressionsList*][OptionalSpaces]\",ExpressionsList:\"[Spaces][Expression]\",Expression:s,BasicExpression:i,OptionalSpaces:/ */,Spaces:/ +/,Empty:/(?!.)/},r=0;r<t.length;r++)n(s,i,o,t[r]),_.each(t[r].include,function(e){_.contains(t,e)||t.push(e)});return s.push(\"BasicExpression\"),{start:\"Start\",expressions:o}}t.Expressions=s,t.ExpressionsGrammar=function(){for(var t=[],n=0;n<arguments.length;n++)t[n-0]=arguments[n];var i=s.apply(this,t);return new e.Grammar(i.start,i.expressions)}})((e=t.MagicBox||(t.MagicBox={})).Grammars||(e.Grammars={}))}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).notWordStart=\" ()[],$@'\\\"\",n.notInWord=\" ()[],:\",n.Basic={basicExpressions:[\"Word\",\"DoubleQuoted\"],grammars:{DoubleQuoted:'\"[NotDoubleQuote]\"',NotDoubleQuote:/[^\"]*/,SingleQuoted:\"'[NotSingleQuote]'\",NotSingleQuote:/[^']*/,Number:/-?(0|[1-9]\\d*)(\\.\\d+)?/,Word:function(t,s,i){var o=new RegExp(\"[^\"+n.notWordStart.replace(/(.)/g,\"\\\\$1\")+\"][^\"+n.notInWord.replace(/(.)/g,\"\\\\$1\")+\"]*\"),r=t.match(o);null!=r&&0!=r.index&&(r=null);var u=new e.Result(null!=r?r[0]:null,i,t);return u.isSuccess()&&s&&t.length>u.value.length?new e.EndOfInputResult(u):u}}}}(Coveo||(Coveo={})),function(t){var e;((e=t.MagicBox||(t.MagicBox={})).Grammars||(e.Grammars={})).SubExpression={basicExpressions:[\"SubExpression\"],grammars:{SubExpression:\"([Expressions])\"}}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Date={grammars:{Date:\"[DateYear]/[DateMonth]/[DateDay]\",DateYear:/([0-9]{4})/,DateMonth:/(1[0-2]|0?[1-9])/,DateDay:/([1-2][0-9]|3[0-1]|0?[1-9])/,DateRange:\"[Date][Spaces?]..[Spaces?][Date]\",DateRelative:[\"DateRelativeNegative\",\"DateRelativeTerm\"],DateRelativeTerm:/now|today|yesterday/,DateRelativeNegative:\"[DateRelativeTerm][DateRelativeNegativeRef]\",DateRelativeNegativeRef:/([\\-\\+][0-9]+(s|m|h|d|mo|y))/},include:[n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Field={basicExpressions:[\"FieldSimpleQuery\",\"FieldQuery\",\"Field\"],grammars:{FieldQuery:\"[Field][OptionalSpaces][FieldQueryOperation]\",FieldQueryOperation:[\"FieldQueryValue\",\"FieldQueryNumeric\"],FieldQueryValue:\"[FieldOperator][OptionalSpaces][FieldValue]\",FieldQueryNumeric:\"[FieldOperatorNumeric][OptionalSpaces][FieldValueNumeric]\",FieldSimpleQuery:\"[FieldName]:[OptionalSpaces][FieldValue]\",Field:\"@[FieldName]\",FieldName:/[a-zA-Z][a-zA-Z0-9\\.\\_]*/,FieldOperator:/==|=|<>/,FieldOperatorNumeric:/<=|>=|<|>/,FieldValue:[\"DateRange\",\"NumberRange\",\"DateRelative\",\"Date\",\"Number\",\"FieldValueList\",\"FieldValueString\"],FieldValueNumeric:[\"DateRelative\",\"Date\",\"Number\"],FieldValueString:[\"DoubleQuoted\",\"FieldValueNotQuoted\"],FieldValueList:\"([FieldValueString][FieldValueStringList*])\",FieldValueStringList:\"[FieldValueSeparator][FieldValueString]\",FieldValueSeparator:/ *, */,FieldValueNotQuoted:/[^ \\(\\),]+/,NumberRange:\"[Number][Spaces?]..[Spaces?][Number]\"},include:[n.Date,n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).QueryExtension={basicExpressions:[\"QueryExtension\"],grammars:{QueryExtension:\"$[QueryExtensionName]([QueryExtensionArguments])\",QueryExtensionName:/\\w+/,QueryExtensionArguments:\"[QueryExtensionArgumentList*][QueryExtensionArgument]\",QueryExtensionArgumentList:\"[QueryExtensionArgument][Spaces?],[Spaces?]\",QueryExtensionArgument:\"[QueryExtensionArgumentName]:[Spaces?][QueryExtensionArgumentValue]\",QueryExtensionArgumentName:/\\w+/,QueryExtensionArgumentValue:[\"SingleQuoted\",\"Expressions\"]},include:[n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).NestedQuery={basicExpressions:[\"NestedQuery\"],grammars:{NestedQuery:\"[[NestedField][OptionalSpaces][Expressions]]\",NestedField:\"[[Field]]\",FieldValue:[\"NestedQuery\"]},include:[n.Field]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Complete={include:[n.NestedQuery,n.QueryExtension,n.SubExpression,n.Field,n.Basic]}}(Coveo||(Coveo={})),function(t){!function(t){var e=function(){function e(e,n,s){var i=this;void 0===s&&(s={}),this.element=e,this.grammar=n,this.options=s,this.lastSuggestions=[],_.isUndefined(this.options.inline)&&(this.options.inline=!1),t.$$(e).addClass(\"magic-box\"),this.options.inline&&t.$$(e).addClass(\"magic-box-inline\"),this.result=this.grammar.parse(\"\"),this.displayedResult=this.result.clean(),this.clearDom=document.createElement(\"div\"),this.clearDom.className=\"magic-box-clear\";var o=document.createElement(\"div\");o.className=\"magic-box-icon\",this.clearDom.appendChild(o);var r=t.$$(e).find(\".magic-box-input\");r?e.insertBefore(this.clearDom,r):((r=document.createElement(\"div\")).className=\"magic-box-input\",e.appendChild(this.clearDom),e.appendChild(r)),this.inputManager=new t.InputManager(r,function(t,e){e?(i.setText(t),i.onselect&&i.onselect(i.getFirstSuggestionText())):(i.setText(t),i.showSuggestion(),i.onchange&&i.onchange())},this),this.inputManager.ontabpress=function(){i.ontabpress&&i.ontabpress()};var u=this.inputManager.getValue();u&&(this.displayedResult.input=u),this.inputManager.setResult(this.displayedResult);var a=document.createElement(\"div\");a.className=\"magic-box-suggestions\",this.element.appendChild(a),this.suggestionsManager=new t.SuggestionsManager(a,{selectableClass:this.options.selectableSuggestionClass,selectedClass:this.options.selectedSuggestionClass,timeout:this.options.suggestionTimeout}),this.setupHandler()}return e.prototype.getResult=function(){return this.result},e.prototype.getDisplayedResult=function(){return this.displayedResult},e.prototype.setText=function(e){t.$$(this.element).toggleClass(\"magic-box-notEmpty\",e.length>0),this.result=this.grammar.parse(e),this.displayedResult=this.result.clean(),this.inputManager.setResult(this.displayedResult)},e.prototype.setCursor=function(t){this.inputManager.setCursor(t)},e.prototype.getCursor=function(){return this.inputManager.getCursor()},e.prototype.resultAtCursor=function(t){return this.displayedResult.resultAt(this.getCursor(),t)},e.prototype.setupHandler=function(){var e=this;this.inputManager.onblur=function(){t.$$(e.element).removeClass(\"magic-box-hasFocus\"),e.onblur&&e.onblur(),e.options.inline||e.clearSuggestion()},this.inputManager.onfocus=function(){t.$$(e.element).addClass(\"magic-box-hasFocus\"),e.showSuggestion(),e.onfocus&&e.onfocus()},this.inputManager.onkeydown=function(t){return 38!=t&&40!=t&&(13==t?(null==e.suggestionsManager.select()&&e.onsubmit&&e.onsubmit(),!1):(27==t&&(e.clearSuggestion(),e.blur()),!0))},this.inputManager.onchangecursor=function(){e.showSuggestion()},this.inputManager.onkeyup=function(t){if(38==t)e.onmove&&e.onmove(),e.focusOnSuggestion(e.suggestionsManager.moveUp()),e.onchange&&e.onchange();else{if(40!=t)return!0;e.onmove&&e.onmove(),e.focusOnSuggestion(e.suggestionsManager.moveDown()),e.onchange&&e.onchange()}return!1},this.clearDom.onclick=function(){e.clear()}},e.prototype.showSuggestion=function(){var t=this;this.suggestionsManager.mergeSuggestions(null!=this.getSuggestions?this.getSuggestions():[],function(e){t.updateSuggestion(e)})},e.prototype.updateSuggestion=function(t){var e=this;this.lastSuggestions=t;var n=this.getFirstSuggestionText();this.inputManager.setWordCompletion(n&&n.text),this.onsuggestions&&this.onsuggestions(t),_.each(t,function(t){null==t.onSelect&&null!=t.text&&(t.onSelect=function(){e.setText(t.text),e.onselect&&e.onselect(t)})})},e.prototype.focus=function(){t.$$(this.element).addClass(\"magic-box-hasFocus\"),this.inputManager.focus()},e.prototype.blur=function(){this.inputManager.blur()},e.prototype.clearSuggestion=function(){var t=this;this.suggestionsManager.mergeSuggestions([],function(e){t.updateSuggestion(e)}),this.inputManager.setWordCompletion(null)},e.prototype.focusOnSuggestion=function(t){null==t||null==t.text?(t=this.getFirstSuggestionText(),this.inputManager.setResult(this.displayedResult,t&&t.text)):this.inputManager.setResult(this.grammar.parse(t.text).clean(),t.text)},e.prototype.getFirstSuggestionText=function(){return _.find(this.lastSuggestions,function(t){return null!=t.text})},e.prototype.getText=function(){return this.inputManager.getValue()},e.prototype.getWordCompletion=function(){return this.inputManager.getWordCompletion()},e.prototype.clear=function(){this.setText(\"\"),this.showSuggestion(),this.focus(),this.onclear&&this.onclear()},e.prototype.hasSuggestions=function(){return this.suggestionsManager.hasSuggestions},e}();t.Instance=e,t.create=function(t,n,s){return new e(t,n,s)},t.requestAnimationFrame=function(t){return\"requestAnimationFrame\"in window?window.requestAnimationFrame(t):setTimeout(t)}}(t.MagicBox||(t.MagicBox={}))}(Coveo||(Coveo={}));\n\t\n\t/*** EXPORTS FROM exports-loader ***/\n\tmodule.exports = Coveo.MagicBox;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t!function(){\"use strict\";var t,e,n=\"undefined\",r=\"string\",i=self.navigator,o=String,a=Object.prototype.hasOwnProperty,l={},u={},s=!1,f=!0,c=/^\\s*application\\/(?:vnd\\.oftn\\.|x-)?l10n\\+json\\s*(?:$|;)/i,p=\"locale\",g=\"defaultLocale\",h=\"toLocaleString\",y=\"toLowerCase\",v=Array.prototype.indexOf||function(t){for(var e=this.length,n=0;e>n;n++)if(n in this&&this[n]===t)return n;return-1},d=function(e){var n=new t;return n.open(\"GET\",e,s),n.send(null),200!==n.status?(setTimeout(function(){var t=new Error(\"Unable to load localization data: \"+e);throw t.name=\"Localization Error\",t},0),{}):JSON.parse(n.responseText)},m=o[h]=function(t){if(arguments.length>0&&\"number\"!=typeof t)if(typeof t===r)m(d(t));else if(t===s)u={};else{var e,n,i;for(e in t)if(a.call(t,e)){if(n=t[e],e=e[y](),e in u&&n!==s||(u[e]={}),n===s)continue;if(typeof n===r){if(0!==o[p][y]().indexOf(e)){e in l||(l[e]=[]),l[e].push(n);continue}n=d(n)}for(i in n)a.call(n,i)&&(u[e][i]=n[i])}}return Function.prototype[h].apply(o,arguments)},w=function(t){for(var e,n=l[t],r=0,i=n.length;i>r;r++)e={},e[t]=d(n[r]),m(e);delete l[t]},b=o.prototype[h]=function(){var t,n=e,r=o[n?g:p],i=r[y]().split(\"-\"),a=i.length,c=this.valueOf();e=s;do if(t=i.slice(0,a).join(\"-\"),t in l&&w(t),t in u&&c in u[t])return u[t][c];while(a-->1);return!n&&o[g]?(e=f,b.call(c)):c};if(typeof XMLHttpRequest===n&&typeof ActiveXObject!==n){var L=ActiveXObject;t=function(){try{return new L(\"Msxml2.XMLHTTP.6.0\")}catch(t){}try{return new L(\"Msxml2.XMLHTTP.3.0\")}catch(e){}try{return new L(\"Msxml2.XMLHTTP\")}catch(n){}throw new Error(\"XMLHttpRequest not supported by this browser.\")}}else t=XMLHttpRequest;if(o[g]=o[g]||\"\",o[p]=i&&(i.language||i.userLanguage)||\"\",typeof document!==n)for(var T,M=document.getElementsByTagName(\"link\"),O=M.length;O--;){var X=M[O],x=(X.getAttribute(\"rel\")||\"\")[y]().split(/\\s+/);c.test(X.type)&&(-1!==v.call(x,\"localizations\")?m(X.getAttribute(\"href\")):-1!==v.call(x,\"localization\")&&(T={},T[(X.getAttribute(\"hreflang\")||\"\")[y]()]=X.getAttribute(\"href\"),m(T)))}}();\n\t\n\t/*** EXPORTS FROM exports-loader ***/\n\tmodule.exports = window.String.toLocaleString;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Globalize = __webpack_require__(30);\n\tvar merge = function (obj1, obj2) {\n\t    var obj3 = {};\n\t    for (var attrname in obj1) {\n\t        obj3[attrname] = obj1[attrname];\n\t    }\n\t    for (var attrname in obj2) {\n\t        obj3[attrname] = obj2[attrname];\n\t    }\n\t    return obj3;\n\t};\n\tvar dict = {\n\t    \"Unknown\": \"Unknown\",\n\t    \"And\": \"AND\",\n\t    \"Authenticating\": \"Authenticating {0}...\",\n\t    \"Clear\": \"Clear {0}\",\n\t    \"CompleteQuery\": \"Complete Query\",\n\t    \"Exclude\": \"Exclude {0}\",\n\t    \"EnterTag\": \"Add Tag\",\n\t    \"Next\": \"Next\",\n\t    \"Last\": \"Last\",\n\t    \"Link\": \"Link\",\n\t    \"Or\": \"OR\",\n\t    \"Previous\": \"Previous\",\n\t    \"QueryDidntMatchAnyDocuments\": \"Your query did not match any documents.\",\n\t    \"QueryException\": \"Your query has an error: {0}.\",\n\t    \"Me\": \"Me\",\n\t    \"Remove\": \"Remove\",\n\t    \"Search\": \"Search\",\n\t    \"SearchFor\": \"Search for {0}\",\n\t    \"ShareQuery\": \"Share Query\",\n\t    \"Preferences\": \"Preferences\",\n\t    \"LinkOpeningSettings\": \"Link Opening Settings\",\n\t    \"Reauthenticate\": \"Reauthenticate {0}\",\n\t    \"ResultsFilteringExpression\": \"Results Filtering Expressions\",\n\t    \"FiltersInYourPreferences\": \"Filters in your preferences\",\n\t    \"Create\": \"Create\",\n\t    \"SearchIn\": \"Search in {0}\",\n\t    \"Seconds\": \"in {0} second<pl>s</pl>\",\n\t    \"ShowingResultsOf\": \"Result<pl>s</pl> {0}<pl>-{1}</pl> of {2}\",\n\t    \"SwitchTo\": \"Switch to {0}\",\n\t    \"Unexclude\": \"Unexclude {0}\",\n\t    \"ClearAllFilters\": \"Clear All Filters\",\n\t    \"SkipLogin\": \"Skip login\",\n\t    \"LoginInProgress\": \"Login in progress, please wait ...\",\n\t    \"Login\": \"Log In\",\n\t    \"GetStarted\": \"Get Started\",\n\t    \"More\": \"More\",\n\t    \"NMore\": \"{0} more...\",\n\t    \"Less\": \"Fewer\",\n\t    \"Settings\": \"Settings\",\n\t    \"Score\": \"Score\",\n\t    \"ScoreDescription\": \"The score is computed from the number of occurrences as well as from the position in the result set.\",\n\t    \"Occurrences\": \"Occurrences\",\n\t    \"OccurrencesDescription\": \"Sort by number of occurrences, with values having the highest number appearing first.\",\n\t    \"Label\": \"Label\",\n\t    \"Of\": \"of\",\n\t    \"LabelDescription\": \"Sort alphabetically on the field values.\",\n\t    \"Value\": \"Value\",\n\t    \"ValueDescription\": \"Sort on the values of the first computed field\",\n\t    \"AlphaAscending\": \"Value Ascending\",\n\t    \"AlphaDescending\": \"Value Descending\",\n\t    \"ChiSquare\": \"Chi Square\",\n\t    \"Nosort\": \"No Sort\",\n\t    \"NosortDescription\": \"Do not sort the values. The values will be returned in a random order.\",\n\t    \"RelativeFrequency\": \"Relative Frequency\",\n\t    \"RelativeFrequencyDescription\": \"Sort based on the relative frequency of values. Less common values will appear higher.\",\n\t    \"DateDistribution\": \"Date distribution\",\n\t    \"Custom\": \"Custom\",\n\t    \"CustomDescription\": \"Sort based on a custom order\",\n\t    \"ComputedField\": \"Computed Field\",\n\t    \"Ascending\": \"Ascending\",\n\t    \"Descending\": \"Descending\",\n\t    \"noResultFor\": \"No results for {0}\",\n\t    \"autoCorrectedQueryTo\": \"Query was automatically corrected to {0}\",\n\t    \"didYouMean\": \"Did you mean: {0}\",\n\t    \"SuggestedResults\": \"Suggested Results\",\n\t    \"SuggestedQueries\": \"Suggested Queries\",\n\t    \"MostRelevantItems\": \"Most relevant items:\",\n\t    \"AllItems\": \"All items:\",\n\t    \"ShowLess\": \"Show less\",\n\t    \"ShowMore\": \"Show more\",\n\t    \"HideFacet\": \"Hide Facet\",\n\t    \"ShowFacet\": \"Show Facet\",\n\t    \"AndOthers\": \"and {0} other<pl>s</pl>\",\n\t    \"Others\": \"{0} other<pl>s</pl>\",\n\t    \"MostRelevantPosts\": \"Most Relevant Posts:\",\n\t    \"CompleteThread\": \"Complete Thread:\",\n\t    \"ShowCompleteThread\": \"Show Complete Thread\",\n\t    \"ShowOnlyTopMatchingPosts\": \"Show Only Top Matching Posts\",\n\t    \"MostRelevantReplies\": \"Most Relevant Replies:\",\n\t    \"AllConversation\": \"All Conversation:\",\n\t    \"ShowAllConversation\": \"Show All Conversation\",\n\t    \"ShowAllReplies\": \"Show All Replies\",\n\t    \"ShowOnlyMostRelevantReplies\": \"Show Only Most Relevant Replies\",\n\t    \"Close\": \"Close\",\n\t    \"Open\": \"Open\",\n\t    \"OpenInOutlookWhenPossible\": \"Open in Outlook (when possible)\",\n\t    \"AlwaysOpenInNewWindow\": \"Always open results in new window\",\n\t    \"Quickview\": \"Quick View\",\n\t    \"NoQuickview\": \"The Quick View for this document is unavailable\",\n\t    \"ErrorReport\": \"Error Report\",\n\t    \"OopsError\": \"Something went wrong.\",\n\t    \"ProblemPersists\": \"If the problem persists contact the administrator.\",\n\t    \"GoBack\": \"Go Back\",\n\t    \"Reset\": \"Reset\",\n\t    \"Retry\": \"Retry\",\n\t    \"MoreInfo\": \"More Information\",\n\t    \"Username\": \"Username\",\n\t    \"Password\": \"Password\",\n\t    \"PostedBy\": \"Posted by\",\n\t    \"CannotConnect\": \"Cannot connect to the server address.\",\n\t    \"BadUserPass\": \"Password does not match with username.\",\n\t    \"PleaseEnterYourCredentials\": \"Please enter your credentials for {0}.\",\n\t    \"PleaseEnterYourSearchPage\": \"Please enter your search page URL\",\n\t    \"Collapse\": \"Collapse\",\n\t    \"Collapsable\": \"Collapsible\",\n\t    \"Expand\": \"Expand\",\n\t    \"Today\": \"Today\",\n\t    \"Yesterday\": \"Yesterday\",\n\t    \"Tomorrow\": \"Tomorrow\",\n\t    \"Duration\": \"Duration: {0}\",\n\t    \"IndexDuration\": \"Index Duration: {0}\",\n\t    \"ProxyDuration\": \"Proxy Duration: {0}\",\n\t    \"ClientDuration\": \"Client Duration: {0}\",\n\t    \"Unavailable\": \"Unavailable\",\n\t    \"Reply\": \"Reply\",\n\t    \"ReplyAll\": \"Reply All\",\n\t    \"Forward\": \"Forward\",\n\t    \"From\": \"From\",\n\t    \"Caption\": \"Caption\",\n\t    \"Expression\": \"Expression\",\n\t    \"Tab\": \"Tab\",\n\t    \"Tabs\": \"Tabs\",\n\t    \"EnterExpressionName\": \"Enter expression name\",\n\t    \"EnterExpressionToFilterWith\": \"Enter expression to filter results with\",\n\t    \"SelectTab\": \"Select Tab\",\n\t    \"SelectAll\": \"Select All\",\n\t    \"PageUrl\": \"Search page URL\",\n\t    \"ErrorSavingToDevice\": \"Error while saving the information to your device\",\n\t    \"ErrorReadingFromDevice\": \"Error while reading the information from your device\",\n\t    \"AppIntro\": \"Speak with a product specialist who can answer your questions about Coveo and help you decide which Coveo solution is right for you. Or, try a live demo !\",\n\t    \"TryDemo\": \"Try the demo\",\n\t    \"ContactUs\": \"Contact us\",\n\t    \"NewToCoveo\": \"New to Coveo?\",\n\t    \"LetUsHelpGetStarted\": \"Let us help you get started\",\n\t    \"LikesThis\": \"{0} like<sn>s</sn> this.\",\n\t    \"CannotConnectSearchPage\": \"Cannot connect to your search page\",\n\t    \"AreYouSureDeleteFilter\": \"Are you sure you want to delete the filter {0} with the expression {1}\",\n\t    \"OnlineHelp\": \"Online Help\",\n\t    \"Done\": \"Done\",\n\t    \"SaveFacetState\": \"Save this facet state\",\n\t    \"ClearFacetState\": \"Clear facet state\",\n\t    \"DisplayingTheOnlyMessage\": \"Displaying the only message in this conversation\",\n\t    \"NoNetworkConnection\": \"No network connection\",\n\t    \"UnknownConnection\": \"Unknown connection\",\n\t    \"EthernetConnection\": \"Ethernet connection\",\n\t    \"WiFi\": \"WiFi connection\",\n\t    \"CELL\": \"Cellular connection\",\n\t    \"CELL_2G\": \"Cellular 2G connection\",\n\t    \"CELL_3G\": \"Cellular 3G connection\",\n\t    \"CELL_4G\": \"Cellular 4G connection\",\n\t    \"Relevance\": \"Relevance\",\n\t    \"Date\": \"Date\",\n\t    \"Amount\": \"Amount\",\n\t    \"QueryExceptionNoException\": \"No exception\",\n\t    \"QueryExceptionInvalidSyntax\": \"Invalid syntax\",\n\t    \"QueryExceptionInvalidCustomField\": \"Invalid custom field\",\n\t    \"QueryExceptionInvalidDate\": \"Invalid date\",\n\t    \"QueryExceptionInvalidExactPhrase\": \"Invalid exact phrase\",\n\t    \"QueryExceptionInvalidDateOp\": \"Invalid date operator\",\n\t    \"QueryExceptionInvalidNear\": \"Invalid NEAR operator\",\n\t    \"QueryExceptionInvalidWeightedNear\": \"Invalid weighted NEAR\",\n\t    \"QueryExceptionInvalidTerm\": \"Invalid term\",\n\t    \"QueryExceptionTooManyTerms\": \"Too many terms\",\n\t    \"QueryExceptionWildcardTooGeneral\": \"Wildcard too general\",\n\t    \"QueryExceptionInvalidSortField\": \"Invalid sort field\",\n\t    \"QueryExceptionInvalidSmallStringOp\": \"Invalid small string operator\",\n\t    \"QueryExceptionRequestedResultsMax\": \"Requested results maximum\",\n\t    \"QueryExceptionAggregatedMirrorDead\": \"Aggregated mirror is offline\",\n\t    \"QueryExceptionAggregatedMirrorQueryTimeOut\": \"Aggregated mirror query timeout\",\n\t    \"QueryExceptionAggregatedMirrorInvalidBuildNumber\": \"Aggregated mirror invalid build number\",\n\t    \"QueryExceptionAggregatedMirrorCannotConnect\": \"Aggregated mirror cannot connect\",\n\t    \"QueryExceptionNotEnoughLeadingCharsWildcard\": \"Not enough leading character wildcard\",\n\t    \"QueryExceptionSecurityInverterNotFound\": \"Security inverter not found\",\n\t    \"QueryExceptionSecurityInverterAccessDenied\": \"Security inverter access denied\",\n\t    \"QueryExceptionAggregatedMirrorCannotImpersonate\": \"Aggregated mirror cannot impersonate\",\n\t    \"QueryExceptionUnexpected\": \"Unexpected\",\n\t    \"QueryExceptionAccessDenied\": \"Access denied\",\n\t    \"QueryExceptionSuperUserTokenInvalid\": \"Super user token invalid\",\n\t    \"QueryExceptionSuperUserTokenExpired\": \"Super user token is expired\",\n\t    \"QueryExceptionLicenseQueriesExpired\": \"Queries license expired\",\n\t    \"QueryExceptionLicenseSuperUserTokenNotSupported\": \"License super user token not supported\",\n\t    \"QueryExceptionInvalidSession\": \"Invalid session\",\n\t    \"QueryExceptionInvalidDocument\": \"Invalid document\",\n\t    \"QueryExceptionSearchDisabled\": \"Search disabled\",\n\t    \"FileType\": \"File type\",\n\t    \"ShowAttachment\": \"Show attachment\",\n\t    \"OnFeed\": \"on {0}'s feed.\",\n\t    \"Author\": \"Author\",\n\t    \"NoTitle\": \"No title\",\n\t    \"CurrentSelections\": \"Current selections\",\n\t    \"AllContent\": \"All content\",\n\t    \"CancelLastAction\": \"Cancel last action\",\n\t    \"SearchTips\": \"Search tips\",\n\t    \"CheckSpelling\": \"Check the spelling of your keywords.\",\n\t    \"TryUsingFewerKeywords\": \"Try using fewer, different or more general keywords.\",\n\t    \"SelectFewerFilters\": \"Select fewer filters to broaden your search.\",\n\t    \"Document\": \"Document\",\n\t    \"Time\": \"Time\",\n\t    \"StartDate\": \"Start Date\",\n\t    \"StartTime\": \"Start Time\",\n\t    \"DurationTitle\": \"Duration\",\n\t    \"UserQuery\": \"User query\",\n\t    \"ShowUserActions\": \"Show User Actions\",\n\t    \"NoData\": \"No data available\",\n\t    \"EventType\": \"Event type\",\n\t    \"GoToFullSearch\": \"Full search\",\n\t    \"GoToEdition\": \"Customize Panel\",\n\t    \"RemoveContext\": \"Remove context\",\n\t    \"BoxAttachToCase\": \"Attach to case\",\n\t    \"AttachToCase\": \"Attach to case\",\n\t    \"Attach\": \"Attach\",\n\t    \"Attached\": \"Attached\",\n\t    \"Detach\": \"Detach\",\n\t    \"Details\": \"Details\",\n\t    \"AdditionalFilters\": \"Additional filters\",\n\t    \"SelectNonContextualSearch\": \"Remove the context from the current record to broaden your search\",\n\t    \"CopyPasteToSupport\": \"Copy paste this message to Coveo Support team for more information.\",\n\t    \"FollowQueryDescription\": \"Alert me for changes to the search results of this query.\",\n\t    \"SearchAlerts_Panel\": \"Manage Alerts\",\n\t    \"SearchAlerts_PanelDescription\": \"View and manage your search alerts.\",\n\t    \"SearchAlerts_PanelNoSearchAlerts\": \"You have no subscriptions.\",\n\t    \"SearchAlerts_Fail\": \"The Search Alerts service is currently unavailable.\",\n\t    \"SearchAlerts_Type\": \"Type\",\n\t    \"SearchAlerts_Content\": \"Content\",\n\t    \"SearchAlerts_Actions\": \"Action\",\n\t    \"EmptyQuery\": \"&lt;empty&gt;\",\n\t    \"SearchAlerts_Type_followQuery\": \"Query\",\n\t    \"SearchAlerts_Type_followDocument\": \"Item\",\n\t    \"SearchAlerts_unFollowing\": \"Stop Following\",\n\t    \"SearchAlerts_follow\": \"Follow\",\n\t    \"SearchAlerts_followed\": \"Followed\",\n\t    \"SearchAlerts_followQuery\": \"Follow Query\",\n\t    \"Subscription_StopFollowingQuery\": \"Stop Following Query\",\n\t    \"SearchAlerts_Frequency\": \"When\",\n\t    \"SubscriptionsManageSubscriptions\": \"Manage Alerts\",\n\t    \"SubscriptionsMessageFollowQuery\": \"You will receive alerts when the query <b>{0}</b> returns new or updated items.\",\n\t    \"SubscriptionsMessageFollow\": \"You will receive alerts for changes to the item <b>{0}</b>.\",\n\t    \"Expiration\": \"Expiration\",\n\t    \"Monthly\": \"Monthly\",\n\t    \"Daily\": \"Daily\",\n\t    \"Monday\": \"Monday\",\n\t    \"Tuesday\": \"Tuesday\",\n\t    \"Wednesday\": \"Wednesday\",\n\t    \"Thursday\": \"Thursday\",\n\t    \"Friday\": \"Friday\",\n\t    \"Saturday\": \"Saturday\",\n\t    \"Sunday\": \"Sunday\",\n\t    \"NextDay\": \"Next {0}\",\n\t    \"LastDay\": \"Last {0}\",\n\t    \"StartTypingCaseForSuggestions\": \"Describe your problem to see possible solutions\",\n\t    \"ExportToExcel\": \"Export to Excel\",\n\t    \"ExportToExcelDescription\": \"Export search results to Excel\",\n\t    \"CaseCreationNoResults\": \"No recommended solutions were found\",\n\t    \"SortBy\": \"Sort by\",\n\t    \"BoxCreateArticle\": \"Create Article\",\n\t    \"Facets\": \"Facets\",\n\t    \"AdvancedSearch\": \"Advanced Search\",\n\t    \"Keywords\": \"Keywords\",\n\t    \"AllTheseWords\": \"All these words\",\n\t    \"ExactPhrase\": \"This exact phrase\",\n\t    \"AnyOfTheseWords\": \"Any of these words\",\n\t    \"NoneOfTheseWords\": \"None of these words\",\n\t    \"Anytime\": \"Anytime\",\n\t    \"InTheLast\": \"In the last\",\n\t    \"Days\": \"days\",\n\t    \"Months\": \"months\",\n\t    \"Between\": \"Between\",\n\t    \"Language\": \"Language\",\n\t    \"Size\": \"Size\",\n\t    \"AtLeast\": \"at least\",\n\t    \"AtMost\": \"at most\",\n\t    \"Contains\": \"contains\",\n\t    \"DoesNotContain\": \"does not contain\",\n\t    \"Matches\": \"matches\",\n\t    \"Bytes\": \"bytes\",\n\t    \"list\": \"List\",\n\t    \"card\": \"Card\",\n\t    \"table\": \"Table\",\n\t    \"ResultLinks\": \"Result links\",\n\t    \"EnableQuerySyntax\": \"Enable query syntax\",\n\t    \"On\": \"On\",\n\t    \"Off\": \"Off\",\n\t    \"Automatic\": \"Automatic\",\n\t    \"ResultsPerPage\": \"Results per page\",\n\t    \"objecttype_people\": \"People\",\n\t    \"objecttype_message\": \"Message\",\n\t    \"objecttype_feed\": \"RSS Feed\",\n\t    \"objecttype_thread\": \"Thread\",\n\t    \"objecttype_file\": \"File\",\n\t    \"objecttype_board\": \"Board\",\n\t    \"objecttype_category\": \"Category\",\n\t    \"objecttype_account\": \"Account\",\n\t    \"objecttype_annotation\": \"Note\",\n\t    \"objecttype_campaign\": \"Campaign\",\n\t    \"objecttype_case\": \"Case\",\n\t    \"objecttype_contentversion\": \"Salesforce File\",\n\t    \"objecttype_contact\": \"Contact\",\n\t    \"objecttype_contract\": \"Contract\",\n\t    \"objecttype_event\": \"Event\",\n\t    \"objecttype_email\": \"Email\",\n\t    \"objecttype_goal\": \"Goal\",\n\t    \"objecttype_incident\": \"Case\",\n\t    \"objecttype_invoice\": \"Invoice\",\n\t    \"objecttype_lead\": \"Lead\",\n\t    \"objecttype_list\": \"Marketing List\",\n\t    \"objecttype_solution\": \"Solution\",\n\t    \"objecttype_task\": \"Task\",\n\t    \"objecttype_user\": \"User\",\n\t    \"objecttype_attachment\": \"Attachment\",\n\t    \"objecttype_casecomment\": \"Case Comment\",\n\t    \"objecttype_opportunity\": \"Opportunity\",\n\t    \"objecttype_opportunityproduct\": \"Opportunity Product\",\n\t    \"objecttype_feeditem\": \"Chatter\",\n\t    \"objecttype_feedcomment\": \"Chatter\",\n\t    \"objecttype_note\": \"Note\",\n\t    \"objecttype_product\": \"Product\",\n\t    \"objecttype_partner\": \"Partner\",\n\t    \"objecttype_queueitem\": \"Queue Item\",\n\t    \"objecttype_quote\": \"Quote\",\n\t    \"objecttype_salesliterature\": \"Sales Literature\",\n\t    \"objecttype_salesorder\": \"Sales Order\",\n\t    \"objecttype_service\": \"Service\",\n\t    \"objecttype_socialprofile\": \"Social Profile\",\n\t    \"objecttype_kbdocumentation\": \"Documentation\",\n\t    \"objecttype_kbtechnicalarticle\": \"Documentation\",\n\t    \"objecttype_kbsolution\": \"Solution\",\n\t    \"objecttype_kbknowledgearticle\": \"Knowledge Article\",\n\t    \"objecttype_kbattachment\": \"Attachment\",\n\t    \"objecttype_kbarticle\": \"Article\",\n\t    \"objecttype_kbarticlecomment\": \"Article Comment\",\n\t    \"objecttype_knowledgearticle\": \"Knowledge Article\",\n\t    \"filetype_box user\": \"Box User\",\n\t    \"filetype_html\": \"HTML File\",\n\t    \"filetype_wiki\": \"Wiki\",\n\t    \"filetype_webscraperwebpage\": \"Web Page\",\n\t    \"filetype_image\": \"Image\",\n\t    \"filetype_folder\": \"Folder\",\n\t    \"filetype_txt\": \"Text\",\n\t    \"filetype_zip\": \"Zip File\",\n\t    \"filetype_olefile\": \"OLE file\",\n\t    \"filetype_gmailmessage\": \"Gmail Message\",\n\t    \"filetype_pdf\": \"PDF File\",\n\t    \"filetype_swf\": \"Flash File\",\n\t    \"filetype_xml\": \"XML File\",\n\t    \"filetype_vsd\": \"Visio\",\n\t    \"filetype_svg\": \"SVG\",\n\t    \"filetype_svm\": \"Open Office\",\n\t    \"filetype_rssitem\": \"RSS feed\",\n\t    \"filetype_doc\": \"Document\",\n\t    \"filetype_docx\": \"Microsoft Word Document\",\n\t    \"filetype_xls\": \"Spreadsheet Document\",\n\t    \"filetype_ppt\": \"Presentation Document\",\n\t    \"filetype_video\": \"Video\",\n\t    \"filetype_youtube\": \"YouTube video\",\n\t    \"filetype_saleforceitem\": \"Salesforce\",\n\t    \"filetype_dynamicscrmitem\": \"Dynamics CRM\",\n\t    \"filetype_salesforceitem\": \"Salesforce\",\n\t    \"filetype_odt\": \"Open Text Document\",\n\t    \"filetype_cfpage\": \"Confluence Page\",\n\t    \"filetype_cfcomment\": \"Confluence Comment\",\n\t    \"filetype_cfspace\": \"Confluence Space\",\n\t    \"filetype_cfblogentry\": \"Confluence Blog Entry\",\n\t    \"filetype_confluencespace\": \"Confluence Space\",\n\t    \"filetype_exchangemessage\": \"Message\",\n\t    \"filetype_exchangeappointment\": \"Appointment\",\n\t    \"filetype_exchangenote\": \"Note\",\n\t    \"filetype_exchangetask\": \"Task\",\n\t    \"filetype_exchangeperson\": \"Exchange User\",\n\t    \"filetype_activedirperson\": \"Active Directory User\",\n\t    \"filetype_exchangeactivity\": \"Activity\",\n\t    \"filetype_exchangecalendarmessage\": \"Calendar Message\",\n\t    \"filetype_exchangedocument\": \"Exchange Document\",\n\t    \"filetype_exchangedsn\": \"DSN\",\n\t    \"filetype_exchangefreebusy\": \"Free/Busy\",\n\t    \"filetype_exchangegroup\": \"Group\",\n\t    \"filetype_exchangerssfeed\": \"RSS Feed\",\n\t    \"filetype_exchangejunkmessage\": \"Junk Email\",\n\t    \"filetype_exchangeofficecom\": \"Communications\",\n\t    \"filetype_lithiummessage\": \"Lithium Message\",\n\t    \"filetype_lithiumthread\": \"Lithium Thread\",\n\t    \"filetype_lithiumboard\": \"Lithium Board\",\n\t    \"filetype_lithiumcategory\": \"Lithium Category\",\n\t    \"filetype_lithiumcommunity\": \"Lithium Community\",\n\t    \"filetype_spportal\": \"Portal\",\n\t    \"filetype_spsite\": \"Site\",\n\t    \"filetype_spuserprofile\": \"SharePoint User\",\n\t    \"filetype_sparea\": \"Area\",\n\t    \"filetype_spannouncement\": \"Announcement\",\n\t    \"filetype_spannouncementlist\": \"Announcements\",\n\t    \"filetype_spcontact\": \"Contact\",\n\t    \"filetype_spcontactlist\": \"Contacts\",\n\t    \"filetype_spcustomlist\": \"Custom Lists\",\n\t    \"filetype_spdiscussionboard\": \"Discussion Board\",\n\t    \"filetype_spdiscussionboardlist\": \"Discussion Boards\",\n\t    \"filetype_spdocumentlibrarylist\": \"Document Library\",\n\t    \"filetype_spevent\": \"Event\",\n\t    \"filetype_speventlist\": \"Events\",\n\t    \"filetype_spformlibrarylist\": \"Form Library\",\n\t    \"filetype_spissue\": \"Issue\",\n\t    \"filetype_spissuelist\": \"Issues\",\n\t    \"filetype_splink\": \"Link\",\n\t    \"filetype_splinklist\": \"Links\",\n\t    \"filetype_sppicturelibrarylist\": \"Picture Library\",\n\t    \"filetype_spsurvey\": \"Survey\",\n\t    \"filetype_spsurveylist\": \"Surveys\",\n\t    \"filetype_sptask\": \"Task\",\n\t    \"filetype_sptasklist\": \"Tasks\",\n\t    \"filetype_spagenda\": \"Agenda\",\n\t    \"filetype_spagendalist\": \"Ordres du jour\",\n\t    \"filetype_spattendee\": \"Attendee\",\n\t    \"filetype_spattendeelist\": \"Attendees\",\n\t    \"filetype_spcustomgridlist\": \"Custom Grids\",\n\t    \"filetype_spdecision\": \"Decision\",\n\t    \"filetype_spdecisionlist\": \"Decisions\",\n\t    \"filetype_spobjective\": \"Objective\",\n\t    \"filetype_spobjectivelist\": \"Objectives\",\n\t    \"filetype_sptextbox\": \"Textbox\",\n\t    \"filetype_sptextboxlist\": \"Textbox list\",\n\t    \"filetype_spthingstobring\": \"Thing To Bring\",\n\t    \"filetype_spthingstobringlist\": \"Things To Bring\",\n\t    \"filetype_sparealisting\": \"Area Listing\",\n\t    \"filetype_spmeetingserie\": \"Meeting series\",\n\t    \"filetype_spmeetingserielist\": \"Meeting Series List\",\n\t    \"filetype_spsitedirectory\": \"Site Directory Item\",\n\t    \"filetype_spsitedirectorylist\": \"Site Directory\",\n\t    \"filetype_spdatasource\": \"Data Source\",\n\t    \"filetype_spdatasourcelist\": \"Data Source List\",\n\t    \"filetype_splisttemplatecataloglist\": \"List Template Gallery\",\n\t    \"filetype_spwebpartcataloglist\": \"WebPart Gallery\",\n\t    \"filetype_spwebtemplatecataloglist\": \"Site Template Gallery\",\n\t    \"filetype_spworkspacepagelist\": \"Workspace Pages\",\n\t    \"filetype_spunknownlist\": \"Custom List\",\n\t    \"filetype_spadministratortask\": \"Administrator Task\",\n\t    \"filetype_spadministratortasklist\": \"Administrator Tasks\",\n\t    \"filetype_spareadocumentlibrarylist\": \"Area Document Library\",\n\t    \"filetype_spblogcategory\": \"Blog Category\",\n\t    \"filetype_spblogcategorylist\": \"Blog Categories\",\n\t    \"filetype_spblogcomment\": \"Blog Comment\",\n\t    \"filetype_spblogcommentlist\": \"Blog Comments\",\n\t    \"filetype_spblogpost\": \"Blog Post\",\n\t    \"filetype_spblogpostlist\": \"Blog Posts\",\n\t    \"filetype_spdataconnectionlibrarylist\": \"Data Connection Library\",\n\t    \"filetype_spdistributiongroup\": \"Distribution Group\",\n\t    \"filetype_spdistributiongrouplist\": \"Distribution Groups\",\n\t    \"filetype_spipfslist\": \"InfoPath Forms Servers\",\n\t    \"filetype_spkeyperformanceindicator\": \"Key Performance Indicator\",\n\t    \"filetype_spkeyperformanceindicatorlist\": \"Key Performance Indicators\",\n\t    \"filetype_splanguagesandtranslator\": \"Languages and Translator\",\n\t    \"filetype_splanguagesandtranslatorlist\": \"Languages and Translators\",\n\t    \"filetype_spmasterpagescataloglist\": \"Master Page Gallery\",\n\t    \"filetype_spnocodeworkflowlibrarylist\": \"No-code Workflow Libraries\",\n\t    \"filetype_spprojecttask\": \"Project Task\",\n\t    \"filetype_spprojecttasklist\": \"Project Tasks\",\n\t    \"filetype_sppublishingpageslibrarylist\": \"Page Library\",\n\t    \"filetype_spreportdocumentlibrarylist\": \"Report Document Library\",\n\t    \"filetype_spreportlibrarylist\": \"Report Library\",\n\t    \"filetype_spslidelibrarylist\": \"Slide Library\",\n\t    \"filetype_sptab\": \"Tabs\",\n\t    \"filetype_sptablist\": \"Tabs List\",\n\t    \"filetype_sptranslationmanagementlibrarylist\": \"Translation Management Library\",\n\t    \"filetype_spuserinformation\": \"User Information\",\n\t    \"filetype_spuserinformationlist\": \"User Information List\",\n\t    \"filetype_spwikipagelibrarylist\": \"Wiki Page Library\",\n\t    \"filetype_spworkflowhistory\": \"Workflow History\",\n\t    \"filetype_spworkflowhistorylist\": \"Workflow History List\",\n\t    \"filetype_spworkflowprocess\": \"Custom Workflow Process\",\n\t    \"filetype_spworkflowprocesslist\": \"Custom Workflow Processes\",\n\t    \"filetype_sppublishingimageslibrarylist\": \"Publishing Image Library\",\n\t    \"filetype_spcirculation\": \"Circulation\",\n\t    \"filetype_spcirculationlist\": \"Circulations\",\n\t    \"filetype_spdashboardslibrarylist\": \"Dashboards Library\",\n\t    \"filetype_spdataconnectionforperformancepointlibrarylist\": \"PerformancePoint Data Connection Library\",\n\t    \"filetype_sphealthreport\": \"Health Report\",\n\t    \"filetype_sphealthreportlist\": \"Health Reports\",\n\t    \"filetype_sphealthrule\": \"Health Rule\",\n\t    \"filetype_sphealthrulelist\": \"Health Rules\",\n\t    \"filetype_spimedictionary\": \"IME Dictionary\",\n\t    \"filetype_spimedictionarylist\": \"IME Dictionaries\",\n\t    \"filetype_spperformancepointcontent\": \"PerformancePoint Content\",\n\t    \"filetype_spperformancepointcontentlist\": \"PerformancePoint Contents\",\n\t    \"filetype_spphonecallmemo\": \"Phone Call Memo\",\n\t    \"filetype_spphonecallmemolist\": \"Phone Call Memos\",\n\t    \"filetype_sprecordlibrarylist\": \"Record Library\",\n\t    \"filetype_spresource\": \"Resource\",\n\t    \"filetype_spresourcelist\": \"Resources\",\n\t    \"filetype_spprocessdiagramslibrarylist\": \"Process Diagram Library\",\n\t    \"filetype_spsitethemeslibrarylist\": \"Site Theme Library\",\n\t    \"filetype_spsolutionslibrarylist\": \"Solution Library\",\n\t    \"filetype_spwfpublibrarylist\": \"WFPUB Library\",\n\t    \"filetype_spwhereabout\": \"Whereabout\",\n\t    \"filetype_spwhereaboutlist\": \"Whereabouts\",\n\t    \"filetype_spdocumentlink\": \"Link to a Document\",\n\t    \"filetype_spdocumentset\": \"Document Set\",\n\t    \"filetype_spmicrofeedpost\": \"Microfeed Post\",\n\t    \"filetype_spmicrofeedlist\": \"Microfeed\",\n\t    \"filetype_splistfolder\": \"List Folder\",\n\t    \"filetype_youtubevideo\": \"YouTube video\",\n\t    \"filetype_youtubeplaylistitem\": \"YouTube playlist item\",\n\t};\n\tfunction defaultLanguage() {\n\t    var locales = String[\"locales\"] || (String[\"locales\"] = {});\n\t    locales[\"en\"] = merge(locales[\"en\"], dict);\n\t    String[\"toLocaleString\"].call(this, { \"en\": dict });\n\t    String[\"locale\"] = \"en\";\n\t    String[\"defaultLocale\"] = \"en\";\n\t    Globalize.culture(\"en\");\n\t}\n\texports.defaultLanguage = defaultLanguage;\n\tfunction setLanguageAfterPageLoaded() {\n\t    var locales = String[\"locales\"] || (String[\"locales\"] = {});\n\t    locales[\"en\"] = merge(locales[\"en\"], dict);\n\t    String[\"toLocaleString\"].call(this, { \"en\": dict });\n\t    String[\"locale\"] = \"en\";\n\t    String[\"defaultLocale\"] = \"en\";\n\t    Globalize.culture(\"en\");\n\t}\n\texports.setLanguageAfterPageLoaded = setLanguageAfterPageLoaded;\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"Globalize\"] = __webpack_require__(31);\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*! globalize - v0.1.1 - 2013-04-30\n\t* https://github.com/jquery/globalize\n\t* Copyright 2013 ; Licensed MIT */\n\tvar Globalize = (function(e,r){var t,n,a,s,u,l,i,c,o,f,d,p,h,g,b,m,y,M,v,k,z,F,A,x;t=function(e){return new t.prototype.init(e)}, true?module.exports=t:e.Globalize=t,t.cultures={},t.prototype={constructor:t,init:function(e){return this.cultures=t.cultures,this.cultureSelector=e,this}},t.prototype.init.prototype=t.prototype,t.cultures[\"default\"]={name:\"en\",englishName:\"English\",nativeName:\"English\",isRTL:!1,language:\"en\",numberFormat:{pattern:[\"-n\"],decimals:2,\",\":\",\",\".\":\".\",groupSizes:[3],\"+\":\"+\",\"-\":\"-\",NaN:\"NaN\",negativeInfinity:\"-Infinity\",positiveInfinity:\"Infinity\",percent:{pattern:[\"-n %\",\"n %\"],decimals:2,groupSizes:[3],\",\":\",\",\".\":\".\",symbol:\"%\"},currency:{pattern:[\"($n)\",\"$n\"],decimals:2,groupSizes:[3],\",\":\",\",\".\":\".\",symbol:\"$\"}},calendars:{standard:{name:\"Gregorian_USEnglish\",\"/\":\"/\",\":\":\":\",firstDay:0,days:{names:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],namesAbbr:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],namesShort:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]},months:{names:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],namesAbbr:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"]},AM:[\"AM\",\"am\",\"AM\"],PM:[\"PM\",\"pm\",\"PM\"],eras:[{name:\"A.D.\",start:null,offset:0}],twoDigitYearMax:2029,patterns:{d:\"M/d/yyyy\",D:\"dddd, MMMM dd, yyyy\",t:\"h:mm tt\",T:\"h:mm:ss tt\",f:\"dddd, MMMM dd, yyyy h:mm tt\",F:\"dddd, MMMM dd, yyyy h:mm:ss tt\",M:\"MMMM dd\",Y:\"yyyy MMMM\",S:\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\"}}},messages:{}},t.cultures[\"default\"].calendar=t.cultures[\"default\"].calendars.standard,t.cultures.en=t.cultures[\"default\"],t.cultureSelector=\"en\",n=/^0x[a-f0-9]+$/i,a=/^[+\\-]?infinity$/i,s=/^[+\\-]?\\d*\\.?\\d*(e[+\\-]?\\d+)?$/,u=/^\\s+|\\s+$/g,l=function(e,r){if(e.indexOf)return e.indexOf(r);for(var t=0,n=e.length;n>t;t++)if(e[t]===r)return t;return-1},i=function(e,r){return e.substr(e.length-r.length)===r},c=function(){var e,t,n,a,s,u,l=arguments[0]||{},i=1,p=arguments.length,h=!1;for(\"boolean\"==typeof l&&(h=l,l=arguments[1]||{},i=2),\"object\"==typeof l||f(l)||(l={});p>i;i++)if(null!=(e=arguments[i]))for(t in e)n=l[t],a=e[t],l!==a&&(h&&a&&(d(a)||(s=o(a)))?(s?(s=!1,u=n&&o(n)?n:[]):u=n&&d(n)?n:{},l[t]=c(h,u,a)):a!==r&&(l[t]=a));return l},o=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},f=function(e){return\"[object Function]\"===Object.prototype.toString.call(e)},d=function(e){return\"[object Object]\"===Object.prototype.toString.call(e)},p=function(e,r){return 0===e.indexOf(r)},h=function(e){return(e+\"\").replace(u,\"\")},g=function(e){return isNaN(e)?0/0:Math[0>e?\"ceil\":\"floor\"](e)},b=function(e,r,t){var n;for(n=e.length;r>n;n+=1)e=t?\"0\"+e:e+\"0\";return e},m=function(e,r){for(var t=0,n=!1,a=0,s=e.length;s>a;a++){var u=e.charAt(a);switch(u){case\"'\":n?r.push(\"'\"):t++,n=!1;break;case\"\\\\\":n&&r.push(\"\\\\\"),n=!n;break;default:r.push(u),n=!1}}return t},y=function(e,r){r=r||\"F\";var t,n=e.patterns,a=r.length;if(1===a){if(t=n[r],!t)throw\"Invalid date format string '\"+r+\"'.\";r=t}else 2===a&&\"%\"===r.charAt(0)&&(r=r.charAt(1));return r},M=function(e,r,t){function n(e,r){var t,n=e+\"\";return r>1&&r>n.length?(t=v[r-2]+n,t.substr(t.length-r,r)):t=n}function a(){return h||g?h:(h=A.test(r),g=!0,h)}function s(e,r){if(b)return b[r];switch(r){case 0:return e.getFullYear();case 1:return e.getMonth();case 2:return e.getDate();default:throw\"Invalid part value \"+r}}var u,l=t.calendar,i=l.convert;if(!r||!r.length||\"i\"===r){if(t&&t.name.length)if(i)u=M(e,l.patterns.F,t);else{var c=new Date(e.getTime()),o=z(e,l.eras);c.setFullYear(F(e,l,o)),u=c.toLocaleString()}else u=\"\"+e;return u}var f=l.eras,d=\"s\"===r;r=y(l,r),u=[];var p,h,g,b,v=[\"0\",\"00\",\"000\"],A=/([^d]|^)(d|dd)([^d]|$)/g,x=0,I=k();for(!d&&i&&(b=i.fromGregorian(e));;){var S=I.lastIndex,w=I.exec(r),C=r.slice(S,w?w.index:r.length);if(x+=m(C,u),!w)break;if(x%2)u.push(w[0]);else{var D=w[0],H=D.length;switch(D){case\"ddd\":case\"dddd\":var O=3===H?l.days.namesAbbr:l.days.names;u.push(O[e.getDay()]);break;case\"d\":case\"dd\":h=!0,u.push(n(s(e,2),H));break;case\"MMM\":case\"MMMM\":var N=s(e,1);u.push(l.monthsGenitive&&a()?l.monthsGenitive[3===H?\"namesAbbr\":\"names\"][N]:l.months[3===H?\"namesAbbr\":\"names\"][N]);break;case\"M\":case\"MM\":u.push(n(s(e,1)+1,H));break;case\"y\":case\"yy\":case\"yyyy\":N=b?b[0]:F(e,l,z(e,f),d),4>H&&(N%=100),u.push(n(N,H));break;case\"h\":case\"hh\":p=e.getHours()%12,0===p&&(p=12),u.push(n(p,H));break;case\"H\":case\"HH\":u.push(n(e.getHours(),H));break;case\"m\":case\"mm\":u.push(n(e.getMinutes(),H));break;case\"s\":case\"ss\":u.push(n(e.getSeconds(),H));break;case\"t\":case\"tt\":N=12>e.getHours()?l.AM?l.AM[0]:\" \":l.PM?l.PM[0]:\" \",u.push(1===H?N.charAt(0):N);break;case\"f\":case\"ff\":case\"fff\":u.push(n(e.getMilliseconds(),3).substr(0,H));break;case\"z\":case\"zz\":p=e.getTimezoneOffset()/60,u.push((0>=p?\"+\":\"-\")+n(Math.floor(Math.abs(p)),H));break;case\"zzz\":p=e.getTimezoneOffset()/60,u.push((0>=p?\"+\":\"-\")+n(Math.floor(Math.abs(p)),2)+\":\"+n(Math.abs(e.getTimezoneOffset()%60),2));break;case\"g\":case\"gg\":l.eras&&u.push(l.eras[z(e,f)].name);break;case\"/\":u.push(l[\"/\"]);break;default:throw\"Invalid date format pattern '\"+D+\"'.\"}}}return u.join(\"\")},function(){var e;e=function(e,r,t){var n=t.groupSizes,a=n[0],s=1,u=Math.pow(10,r),l=Math.round(e*u)/u;isFinite(l)||(l=e),e=l;var i=e+\"\",c=\"\",o=i.split(/e/i),f=o.length>1?parseInt(o[1],10):0;i=o[0],o=i.split(\".\"),i=o[0],c=o.length>1?o[1]:\"\",f>0?(c=b(c,f,!1),i+=c.slice(0,f),c=c.substr(f)):0>f&&(f=-f,i=b(i,f+1,!0),c=i.slice(-f,i.length)+c,i=i.slice(0,-f)),c=r>0?t[\".\"]+(c.length>r?c.slice(0,r):b(c,r)):\"\";for(var d=i.length-1,p=t[\",\"],h=\"\";d>=0;){if(0===a||a>d)return i.slice(0,d+1)+(h.length?p+h+c:c);h=i.slice(d-a+1,d+1)+(h.length?p+h:\"\"),d-=a,n.length>s&&(a=n[s],s++)}return i.slice(0,d+1)+p+h+c},v=function(r,t,n){if(!isFinite(r))return 1/0===r?n.numberFormat.positiveInfinity:r===-1/0?n.numberFormat.negativeInfinity:n.numberFormat.NaN;if(!t||\"i\"===t)return n.name.length?r.toLocaleString():\"\"+r;t=t||\"D\";var a,s=n.numberFormat,u=Math.abs(r),l=-1;t.length>1&&(l=parseInt(t.slice(1),10));var i,c=t.charAt(0).toUpperCase();switch(c){case\"D\":a=\"n\",u=g(u),-1!==l&&(u=b(\"\"+u,l,!0)),0>r&&(u=\"-\"+u);break;case\"N\":i=s;case\"C\":i=i||s.currency;case\"P\":i=i||s.percent,a=0>r?i.pattern[0]:i.pattern[1]||\"n\",-1===l&&(l=i.decimals),u=e(u*(\"P\"===c?100:1),l,i);break;default:throw\"Bad number format specifier: \"+c}for(var o=/n|\\$|-|%/g,f=\"\";;){var d=o.lastIndex,p=o.exec(a);if(f+=a.slice(d,p?p.index:a.length),!p)break;switch(p[0]){case\"n\":f+=u;break;case\"$\":f+=s.currency.symbol;break;case\"-\":/[1-9]/.test(u)&&(f+=s[\"-\"]);break;case\"%\":f+=s.percent.symbol}}return f}}(),k=function(){return/\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g},z=function(e,r){if(!r)return 0;for(var t,n=e.getTime(),a=0,s=r.length;s>a;a++)if(t=r[a].start,null===t||n>=t)return a;return 0},F=function(e,r,t,n){var a=e.getFullYear();return!n&&r.eras&&(a-=r.eras[t].offset),a},function(){var e,r,t,n,a,s,u;e=function(e,r){if(100>r){var t=new Date,n=z(t),a=F(t,e,n),s=e.twoDigitYearMax;s=\"string\"==typeof s?(new Date).getFullYear()%100+parseInt(s,10):s,r+=a-a%100,r>s&&(r-=100)}return r},r=function(e,r,t){var n,a=e.days,i=e._upperDays;return i||(e._upperDays=i=[u(a.names),u(a.namesAbbr),u(a.namesShort)]),r=s(r),t?(n=l(i[1],r),-1===n&&(n=l(i[2],r))):n=l(i[0],r),n},t=function(e,r,t){var n=e.months,a=e.monthsGenitive||e.months,i=e._upperMonths,c=e._upperMonthsGen;i||(e._upperMonths=i=[u(n.names),u(n.namesAbbr)],e._upperMonthsGen=c=[u(a.names),u(a.namesAbbr)]),r=s(r);var o=l(t?i[1]:i[0],r);return 0>o&&(o=l(t?c[1]:c[0],r)),o},n=function(e,r){var t=e._parseRegExp;if(t){var n=t[r];if(n)return n}else e._parseRegExp=t={};for(var a,s=y(e,r).replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\"),u=[\"^\"],l=[],i=0,c=0,o=k();null!==(a=o.exec(s));){var f=s.slice(i,a.index);if(i=o.lastIndex,c+=m(f,u),c%2)u.push(a[0]);else{var d,p=a[0],h=p.length;switch(p){case\"dddd\":case\"ddd\":case\"MMMM\":case\"MMM\":case\"gg\":case\"g\":d=\"(\\\\D+)\";break;case\"tt\":case\"t\":d=\"(\\\\D*)\";break;case\"yyyy\":case\"fff\":case\"ff\":case\"f\":d=\"(\\\\d{\"+h+\"})\";break;case\"dd\":case\"d\":case\"MM\":case\"M\":case\"yy\":case\"y\":case\"HH\":case\"H\":case\"hh\":case\"h\":case\"mm\":case\"m\":case\"ss\":case\"s\":d=\"(\\\\d\\\\d?)\";break;case\"zzz\":d=\"([+-]?\\\\d\\\\d?:\\\\d{2})\";break;case\"zz\":case\"z\":d=\"([+-]?\\\\d\\\\d?)\";break;case\"/\":d=\"(\\\\/)\";break;default:throw\"Invalid date format pattern '\"+p+\"'.\"}d&&u.push(d),l.push(a[0])}}m(s.slice(i),u),u.push(\"$\");var g=u.join(\"\").replace(/\\s+/g,\"\\\\s+\"),b={regExp:g,groups:l};return t[r]=b},a=function(e,r,t){return r>e||e>t},s=function(e){return e.split(\"\\u00a0\").join(\" \").toUpperCase()},u=function(e){for(var r=[],t=0,n=e.length;n>t;t++)r[t]=s(e[t]);return r},A=function(s,u,l){s=h(s);var i=l.calendar,c=n(i,u),o=RegExp(c.regExp).exec(s);if(null===o)return null;for(var f,d=c.groups,g=null,b=null,m=null,y=null,M=null,v=0,k=0,z=0,F=0,A=null,x=!1,I=0,S=d.length;S>I;I++){var w=o[I+1];if(w){var C=d[I],D=C.length,H=parseInt(w,10);switch(C){case\"dd\":case\"d\":if(y=H,a(y,1,31))return null;break;case\"MMM\":case\"MMMM\":if(m=t(i,w,3===D),a(m,0,11))return null;break;case\"M\":case\"MM\":if(m=H-1,a(m,0,11))return null;break;case\"y\":case\"yy\":case\"yyyy\":if(b=4>D?e(i,H):H,a(b,0,9999))return null;break;case\"h\":case\"hh\":if(v=H,12===v&&(v=0),a(v,0,11))return null;break;case\"H\":case\"HH\":if(v=H,a(v,0,23))return null;break;case\"m\":case\"mm\":if(k=H,a(k,0,59))return null;break;case\"s\":case\"ss\":if(z=H,a(z,0,59))return null;break;case\"tt\":case\"t\":if(x=i.PM&&(w===i.PM[0]||w===i.PM[1]||w===i.PM[2]),!x&&(!i.AM||w!==i.AM[0]&&w!==i.AM[1]&&w!==i.AM[2]))return null;break;case\"f\":case\"ff\":case\"fff\":if(F=H*Math.pow(10,3-D),a(F,0,999))return null;break;case\"ddd\":case\"dddd\":if(M=r(i,w,3===D),a(M,0,6))return null;break;case\"zzz\":var O=w.split(/:/);if(2!==O.length)return null;if(f=parseInt(O[0],10),a(f,-12,13))return null;var N=parseInt(O[1],10);if(a(N,0,59))return null;A=60*f+(p(w,\"-\")?-N:N);break;case\"z\":case\"zz\":if(f=H,a(f,-12,13))return null;A=60*f;break;case\"g\":case\"gg\":var T=w;if(!T||!i.eras)return null;T=h(T.toLowerCase());for(var j=0,$=i.eras.length;$>j;j++)if(T===i.eras[j].name.toLowerCase()){g=j;break}if(null===g)return null}}}var P,G=new Date,E=i.convert;if(P=E?E.fromGregorian(G)[0]:G.getFullYear(),null===b?b=P:i.eras&&(b+=i.eras[g||0].offset),null===m&&(m=0),null===y&&(y=1),E){if(G=E.toGregorian(b,m,y),null===G)return null}else{if(G.setFullYear(b,m,y),G.getDate()!==y)return null;if(null!==M&&G.getDay()!==M)return null}if(x&&12>v&&(v+=12),G.setHours(v,k,z,F),null!==A){var Y=G.getMinutes()-(A+G.getTimezoneOffset());G.setHours(G.getHours()+parseInt(Y/60,10),Y%60)}return G}}(),x=function(e,r,t){var n,a=r[\"-\"],s=r[\"+\"];switch(t){case\"n -\":a=\" \"+a,s=\" \"+s;case\"n-\":i(e,a)?n=[\"-\",e.substr(0,e.length-a.length)]:i(e,s)&&(n=[\"+\",e.substr(0,e.length-s.length)]);break;case\"- n\":a+=\" \",s+=\" \";case\"-n\":p(e,a)?n=[\"-\",e.substr(a.length)]:p(e,s)&&(n=[\"+\",e.substr(s.length)]);break;case\"(n)\":p(e,\"(\")&&i(e,\")\")&&(n=[\"-\",e.substr(1,e.length-2)])}return n||[\"\",e]},t.prototype.findClosestCulture=function(e){return t.findClosestCulture.call(this,e)},t.prototype.format=function(e,r,n){return t.format.call(this,e,r,n)},t.prototype.localize=function(e,r){return t.localize.call(this,e,r)},t.prototype.parseInt=function(e,r,n){return t.parseInt.call(this,e,r,n)},t.prototype.parseFloat=function(e,r,n){return t.parseFloat.call(this,e,r,n)},t.prototype.culture=function(e){return t.culture.call(this,e)},t.addCultureInfo=function(e,r,t){var n={},a=!1;\"string\"!=typeof e?(t=e,e=this.culture().name,n=this.cultures[e]):\"string\"!=typeof r?(t=r,a=null==this.cultures[e],n=this.cultures[e]||this.cultures[\"default\"]):(a=!0,n=this.cultures[r]),this.cultures[e]=c(!0,{},n,t),a&&(this.cultures[e].calendar=this.cultures[e].calendars.standard)},t.findClosestCulture=function(e){var r;if(!e)return this.findClosestCulture(this.cultureSelector)||this.cultures[\"default\"];if(\"string\"==typeof e&&(e=e.split(\",\")),o(e)){var t,n,a=this.cultures,s=e,u=s.length,l=[];for(n=0;u>n;n++){e=h(s[n]);var i,c=e.split(\";\");t=h(c[0]),1===c.length?i=1:(e=h(c[1]),0===e.indexOf(\"q=\")?(e=e.substr(2),i=parseFloat(e),i=isNaN(i)?0:i):i=1),l.push({lang:t,pri:i})}for(l.sort(function(e,r){return e.pri<r.pri?1:e.pri>r.pri?-1:0}),n=0;u>n;n++)if(t=l[n].lang,r=a[t])return r;for(n=0;u>n;n++)for(t=l[n].lang;;){var f=t.lastIndexOf(\"-\");if(-1===f)break;if(t=t.substr(0,f),r=a[t])return r}for(n=0;u>n;n++){t=l[n].lang;for(var d in a){var p=a[d];if(p.language===t)return p}}}else if(\"object\"==typeof e)return e;return r||null},t.format=function(e,r,t){var n=this.findClosestCulture(t);return e instanceof Date?e=M(e,r,n):\"number\"==typeof e&&(e=v(e,r,n)),e},t.localize=function(e,r){return this.findClosestCulture(r).messages[e]||this.cultures[\"default\"].messages[e]},t.parseDate=function(e,r,t){t=this.findClosestCulture(t);var n,a,s;if(r){if(\"string\"==typeof r&&(r=[r]),r.length)for(var u=0,l=r.length;l>u;u++){var i=r[u];if(i&&(n=A(e,i,t)))break}}else{s=t.calendar.patterns;for(a in s)if(n=A(e,s[a],t))break}return n||null},t.parseInt=function(e,r,n){return g(t.parseFloat(e,r,n))},t.parseFloat=function(e,r,t){\"number\"!=typeof r&&(t=r,r=10);var u=this.findClosestCulture(t),l=0/0,i=u.numberFormat;if(e.indexOf(u.numberFormat.currency.symbol)>-1&&(e=e.replace(u.numberFormat.currency.symbol,\"\"),e=e.replace(u.numberFormat.currency[\".\"],u.numberFormat[\".\"])),e.indexOf(u.numberFormat.percent.symbol)>-1&&(e=e.replace(u.numberFormat.percent.symbol,\"\")),e=e.replace(/ /g,\"\"),a.test(e))l=parseFloat(e);else if(!r&&n.test(e))l=parseInt(e,16);else{var c=x(e,i,i.pattern[0]),o=c[0],f=c[1];\"\"===o&&\"(n)\"!==i.pattern[0]&&(c=x(e,i,\"(n)\"),o=c[0],f=c[1]),\"\"===o&&\"-n\"!==i.pattern[0]&&(c=x(e,i,\"-n\"),o=c[0],f=c[1]),o=o||\"+\";var d,p,h=f.indexOf(\"e\");0>h&&(h=f.indexOf(\"E\")),0>h?(p=f,d=null):(p=f.substr(0,h),d=f.substr(h+1));var g,b,m=i[\".\"],y=p.indexOf(m);0>y?(g=p,b=null):(g=p.substr(0,y),b=p.substr(y+m.length));var M=i[\",\"];g=g.split(M).join(\"\");var v=M.replace(/\\u00A0/g,\" \");M!==v&&(g=g.split(v).join(\"\"));var k=o+g;if(null!==b&&(k+=\".\"+b),null!==d){var z=x(d,i,\"-n\");k+=\"e\"+(z[0]||\"+\")+z[1]}s.test(k)&&(l=parseFloat(k))}return l},t.culture=function(e){return e!==r&&(this.cultureSelector=e),this.findClosestCulture(e)||this.cultures[\"default\"]}; return Globalize;}(this));\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\texports.Assert = Assert_1.Assert;\n\tvar Cache_1 = __webpack_require__(33);\n\texports.Cache = Cache_1.Cache;\n\tvar Defer_1 = __webpack_require__(34);\n\texports.Defer = Defer_1.Defer;\n\tvar L10N_1 = __webpack_require__(35);\n\texports.L10N = L10N_1.L10N;\n\tvar Logger_1 = __webpack_require__(13);\n\texports.Logger = Logger_1.Logger;\n\tvar Options_1 = __webpack_require__(36);\n\texports.Options = Options_1.Options;\n\tvar Strings_1 = __webpack_require__(37);\n\texports.l = Strings_1.l;\n\n\n/***/ },\n/* 33 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Cache = (function () {\n\t    function Cache(onEmpty) {\n\t        this.onEmpty = onEmpty;\n\t        this.cache = [];\n\t    }\n\t    Cache.prototype.get = function () {\n\t        if (this.cache.length == 0) {\n\t            return this.onEmpty();\n\t        }\n\t        else {\n\t            return this.cache.pop();\n\t        }\n\t    };\n\t    Cache.prototype.push = function (value) {\n\t        this.cache.push(value);\n\t    };\n\t    return Cache;\n\t}());\n\texports.Cache = Cache;\n\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar Defer = (function () {\n\t    function Defer() {\n\t    }\n\t    Defer.defer = function (code) {\n\t        Defer.functions.push(code);\n\t        Defer.arm();\n\t    };\n\t    Defer.flush = function () {\n\t        while (Defer.popOne()) {\n\t        }\n\t    };\n\t    Defer.arm = function () {\n\t        _.defer(function () {\n\t            if (Defer.popOne()) {\n\t                Defer.arm();\n\t            }\n\t        });\n\t    };\n\t    Defer.popOne = function () {\n\t        if (Defer.functions.length > 0) {\n\t            var fun = Defer.functions[0];\n\t            Defer.functions = _.rest(Defer.functions);\n\t            fun();\n\t            return Defer.functions.length > 0;\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    return Defer;\n\t}());\n\tDefer.functions = [];\n\texports.Defer = Defer;\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\tString.toLocaleString = ExternalModulesShim_1.LocaleString;\n\tvar pluralRegex = /<pl>(((?!<\\/pl>).)*)<\\/pl>/g;\n\tvar singularRegex = /<sn>(((?!<\\/sn>).)*)<\\/sn>/g;\n\texports.L10N = {\n\t    format: function (key) {\n\t        var args = [];\n\t        for (var _i = 1; _i < arguments.length; _i++) {\n\t            args[_i - 1] = arguments[_i];\n\t        }\n\t        var value = key.toLocaleString();\n\t        if (args.length > 0) {\n\t            var last = _.last(args);\n\t            // Last argument is either the count or a boolean forcing plural (true) or singular (false)\n\t            if (_.isBoolean(last) || _.isNumber(last)) {\n\t                args.pop();\n\t                value = exports.L10N.formatPlSn(value, last);\n\t            }\n\t            _.each(args, function (arg, i) { return value = value.replace(\"{\" + i + \"}\", arg); });\n\t        }\n\t        return value;\n\t    },\n\t    formatPlSn: function (value, count) {\n\t        var isPlural = _.isBoolean(count) ? count : count > 1;\n\t        if (isPlural) {\n\t            value = value.replace(pluralRegex, '$1').replace(singularRegex, '');\n\t        }\n\t        else {\n\t            value = value.replace(pluralRegex, '').replace(singularRegex, '$1');\n\t        }\n\t        return value;\n\t    }\n\t};\n\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar Options = (function () {\n\t    function Options() {\n\t    }\n\t    Options.prototype.merge = function (provided) {\n\t        return _.extend({}, this, provided);\n\t    };\n\t    Options.prototype.mergeDeep = function (provided) {\n\t        return _.extend({}, Utils_1.Utils.extendDeep(this, provided));\n\t    };\n\t    return Options;\n\t}());\n\texports.Options = Options;\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar L10N_1 = __webpack_require__(35);\n\tfunction l() {\n\t    var params = [];\n\t    for (var _i = 0; _i < arguments.length; _i++) {\n\t        params[_i] = arguments[_i];\n\t    }\n\t    return L10N_1.L10N.format.apply(this, arguments);\n\t}\n\texports.l = l;\n\t;\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar AnalyticsEndpoint_1 = __webpack_require__(39);\n\texports.AnalyticsEndpoint = AnalyticsEndpoint_1.AnalyticsEndpoint;\n\tvar EndpointCaller_1 = __webpack_require__(12);\n\texports.EndpointCaller = EndpointCaller_1.EndpointCaller;\n\tvar QueryError_1 = __webpack_require__(24);\n\texports.QueryError = QueryError_1.QueryError;\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar EndpointCaller_1 = __webpack_require__(12);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar CookieUtils_1 = __webpack_require__(40);\n\tvar _ = __webpack_require__(16);\n\tvar AnalyticsEndpoint = (function () {\n\t    function AnalyticsEndpoint(options) {\n\t        this.options = options;\n\t        this.logger = new Logger_1.Logger(this);\n\t        var endpointCallerOptions = {\n\t            accessToken: (this.options.token && this.options.token != '') ? this.options.token : null\n\t        };\n\t        this.endpointCaller = new EndpointCaller_1.EndpointCaller(endpointCallerOptions);\n\t        this.organization = options.organization;\n\t    }\n\t    AnalyticsEndpoint.prototype.getCurrentVisitId = function () {\n\t        return this.visitId;\n\t    };\n\t    AnalyticsEndpoint.prototype.getCurrentVisitIdPromise = function () {\n\t        var _this = this;\n\t        return new Promise(function (resolve, reject) {\n\t            if (_this.getCurrentVisitId()) {\n\t                resolve(_this.getCurrentVisitId());\n\t            }\n\t            else {\n\t                var url = _this.buildAnalyticsUrl('/analytics/visit');\n\t                _this.getFromService(url, {})\n\t                    .then(function (response) {\n\t                    _this.visitId = response.id;\n\t                    resolve(_this.visitId);\n\t                })\n\t                    .catch(function (response) {\n\t                    reject(response);\n\t                });\n\t            }\n\t        });\n\t    };\n\t    AnalyticsEndpoint.prototype.sendSearchEvents = function (searchEvents) {\n\t        if (searchEvents.length > 0) {\n\t            this.logger.info('Logging analytics search events', searchEvents);\n\t            return this.sendToService(searchEvents, 'searches', 'searchEvents');\n\t        }\n\t    };\n\t    AnalyticsEndpoint.prototype.sendDocumentViewEvent = function (documentViewEvent) {\n\t        Assert_1.Assert.exists(documentViewEvent);\n\t        this.logger.info('Logging analytics document view', documentViewEvent);\n\t        return this.sendToService(documentViewEvent, 'click', 'clickEvent');\n\t    };\n\t    AnalyticsEndpoint.prototype.sendCustomEvent = function (customEvent) {\n\t        Assert_1.Assert.exists(customEvent);\n\t        this.logger.info('Logging analytics custom event', customEvent);\n\t        return this.sendToService(customEvent, 'custom', 'customEvent');\n\t    };\n\t    AnalyticsEndpoint.prototype.getTopQueries = function (params) {\n\t        var url = this.buildAnalyticsUrl('/stats/topQueries');\n\t        return this.getFromService(url, params);\n\t    };\n\t    AnalyticsEndpoint.prototype.sendToService = function (data, path, paramName) {\n\t        var _this = this;\n\t        var url = QueryUtils_1.QueryUtils.mergePath(this.options.serviceUrl, '/rest/' + (AnalyticsEndpoint.CUSTOM_ANALYTICS_VERSION || AnalyticsEndpoint.DEFAULT_ANALYTICS_VERSION) + '/analytics/' + path);\n\t        var queryString = [];\n\t        if (this.organization) {\n\t            queryString.push('org=' + this.organization);\n\t        }\n\t        if (CookieUtils_1.Cookie.get('visitorId')) {\n\t            queryString.push('visitor=' + encodeURIComponent(CookieUtils_1.Cookie.get('visitorId')));\n\t        }\n\t        // We use pendingRequest because we don't want to have 2 request to analytics at the same time.\n\t        // Otherwise the cookie visitId won't be set correctly.\n\t        if (AnalyticsEndpoint.pendingRequest == null) {\n\t            AnalyticsEndpoint.pendingRequest = this.endpointCaller.call({\n\t                errorsAsSuccess: false,\n\t                method: 'POST',\n\t                queryString: queryString,\n\t                requestData: data,\n\t                url: url,\n\t                responseType: 'text',\n\t                requestDataType: 'application/json'\n\t            }).then(function (res) {\n\t                return _this.handleAnalyticsEventResponse(res.data);\n\t            }).finally(function () {\n\t                AnalyticsEndpoint.pendingRequest = null;\n\t            });\n\t            return AnalyticsEndpoint.pendingRequest;\n\t        }\n\t        else {\n\t            return AnalyticsEndpoint.pendingRequest.finally(function () {\n\t                return _this.sendToService(data, path, paramName);\n\t            });\n\t        }\n\t    };\n\t    AnalyticsEndpoint.prototype.getFromService = function (url, params) {\n\t        var paramsToSend = (this.options.token && this.options.token != '') ? _.extend({ 'access_token': this.options.token }, params) : params;\n\t        return this.endpointCaller.call({\n\t            errorsAsSuccess: false,\n\t            method: 'GET',\n\t            queryString: this.options.organization ? ['org=' + encodeURIComponent(this.options.organization)] : [],\n\t            requestData: paramsToSend,\n\t            responseType: 'json',\n\t            url: url\n\t        }).then(function (res) {\n\t            return res.data;\n\t        });\n\t    };\n\t    AnalyticsEndpoint.prototype.handleAnalyticsEventResponse = function (response) {\n\t        var visitId;\n\t        var visitorId;\n\t        if (response['visitId']) {\n\t            visitId = response['visitId'];\n\t            visitorId = response['visitorId'];\n\t        }\n\t        else if (response['searchEventResponses']) {\n\t            visitId = _.first(response['searchEventResponses']).visitId;\n\t            visitorId = _.first(response['searchEventResponses']).visitorId;\n\t        }\n\t        if (visitId) {\n\t            this.visitId = visitId;\n\t        }\n\t        if (visitorId) {\n\t            CookieUtils_1.Cookie.set('visitorId', visitorId, AnalyticsEndpoint.VISITOR_COOKIE_TIME);\n\t        }\n\t        return response;\n\t    };\n\t    AnalyticsEndpoint.prototype.buildAnalyticsUrl = function (path) {\n\t        return this.options.serviceUrl + '/rest/' + (AnalyticsEndpoint.CUSTOM_ANALYTICS_VERSION || AnalyticsEndpoint.DEFAULT_ANALYTICS_VERSION) + path;\n\t    };\n\t    return AnalyticsEndpoint;\n\t}());\n\tAnalyticsEndpoint.DEFAULT_ANALYTICS_URI = 'https://usageanalytics.coveo.com';\n\tAnalyticsEndpoint.DEFAULT_ANALYTICS_VERSION = 'v15';\n\tAnalyticsEndpoint.CUSTOM_ANALYTICS_VERSION = undefined;\n\tAnalyticsEndpoint.VISITOR_COOKIE_TIME = 10000 * 24 * 60 * 60 * 1000;\n\texports.AnalyticsEndpoint = AnalyticsEndpoint;\n\n\n/***/ },\n/* 40 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Code originally taken from : https://developers.livechatinc.com/blog/setting-cookies-to-subdomains-in-javascript/\n\tvar Cookie = (function () {\n\t    function Cookie() {\n\t    }\n\t    Cookie.set = function (name, value, expiration) {\n\t        var domain, domainParts, date, expires, host;\n\t        if (expiration) {\n\t            date = new Date();\n\t            date.setTime(date.getTime() + expiration);\n\t            expires = '; expires=' + date.toGMTString();\n\t        }\n\t        else {\n\t            expires = '';\n\t        }\n\t        host = location.hostname;\n\t        if (host.split('.').length === 1) {\n\t            // no '.' in a domain - it's localhost or something similar\n\t            document.cookie = this.prefix + name + '=' + value + expires + '; path=/';\n\t        }\n\t        else {\n\t            // Remember the cookie on all subdomains.\n\t            //\n\t            // Start with trying to set cookie to the top domain.\n\t            // (example: if user is on foo.com, try to set\n\t            //  cookie to domain '.com')\n\t            //\n\t            // If the cookie will not be set, it means '.com'\n\t            // is a top level domain and we need to\n\t            // set the cookie to '.foo.com'\n\t            domainParts = host.split('.');\n\t            domainParts.shift();\n\t            domain = '.' + domainParts.join('.');\n\t            document.cookie = this.prefix + name + '=' + value + expires + '; path=/; domain=' + domain;\n\t            // check if cookie was successfuly set to the given domain\n\t            // (otherwise it was a Top-Level Domain)\n\t            if (Cookie.get(name) == null || Cookie.get(name) != value) {\n\t                // append '.' to current domain\n\t                domain = '.' + host;\n\t                document.cookie = this.prefix + name + '=' + value + expires + '; path=/; domain=' + domain;\n\t            }\n\t        }\n\t    };\n\t    Cookie.get = function (name) {\n\t        var nameEQ = this.prefix + name + '=';\n\t        var ca = document.cookie.split(';');\n\t        for (var i = 0; i < ca.length; i++) {\n\t            var c = ca[i];\n\t            while (c.charAt(0) == ' ') {\n\t                c = c.substring(1, c.length);\n\t            }\n\t            if (c.indexOf(nameEQ) == 0) {\n\t                return c.substring(nameEQ.length, c.length);\n\t            }\n\t        }\n\t        return null;\n\t    };\n\t    Cookie.erase = function (name) {\n\t        Cookie.set(name, '', -1);\n\t    };\n\t    return Cookie;\n\t}());\n\tCookie.prefix = 'coveo_';\n\texports.Cookie = Cookie;\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\texports.AdvancedSearchEvents = AdvancedSearchEvents_1.AdvancedSearchEvents;\n\tvar AnalyticsEvents_1 = __webpack_require__(43);\n\texports.AnalyticsEvents = AnalyticsEvents_1.AnalyticsEvents;\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\texports.BreadcrumbEvents = BreadcrumbEvents_1.BreadcrumbEvents;\n\tvar DebugEvents_1 = __webpack_require__(45);\n\texports.DebugEvents = DebugEvents_1.DebugEvents;\n\tvar ImageResultListEvents_1 = __webpack_require__(46);\n\texports.ImageResultListEvents = ImageResultListEvents_1.ImageResultListEvents;\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\texports.InitializationEvents = InitializationEvents_1.InitializationEvents;\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\texports.OmniboxEvents = OmniboxEvents_1.OmniboxEvents;\n\tvar PreferencesPanelEvents_1 = __webpack_require__(49);\n\texports.PreferencesPanelEvents = PreferencesPanelEvents_1.PreferencesPanelEvents;\n\tvar QueryEvents_1 = __webpack_require__(50);\n\texports.QueryEvents = QueryEvents_1.QueryEvents;\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\texports.ResultListEvents = ResultListEvents_1.ResultListEvents;\n\tvar ResultLayoutEvents_1 = __webpack_require__(52);\n\texports.ResultLayoutEvents = ResultLayoutEvents_1.ResultLayoutEvents;\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\texports.SearchAlertsEvents = SearchAlertEvents_1.SearchAlertsEvents;\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\texports.SettingsEvents = SettingsEvents_1.SettingsEvents;\n\tvar SliderEvents_1 = __webpack_require__(55);\n\texports.SliderEvents = SliderEvents_1.SliderEvents;\n\tvar StandaloneSearchInterfaceEvents_1 = __webpack_require__(56);\n\texports.StandaloneSearchInterfaceEvents = StandaloneSearchInterfaceEvents_1.StandaloneSearchInterfaceEvents;\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contains the different string definition for all the events related to the {@link AdvancedSearch} component.\n\t */\n\tvar AdvancedSearchEvents = (function () {\n\t    function AdvancedSearchEvents() {\n\t    }\n\t    return AdvancedSearchEvents;\n\t}());\n\t/**\n\t * Triggered when the {@link AdvancedSearch} component is being built.\n\t *\n\t * Allows external code to add new sections in the **Advanced Search** panel.\n\t *\n\t * All bound handlers receive {@link IBuildingAdvancedSearchEventArgs} as an argument\n\t *\n\t * @type {string}\n\t */\n\tAdvancedSearchEvents.buildingAdvancedSearch = 'buildingAdvancedSearch';\n\tAdvancedSearchEvents.executeAdvancedSearch = 'executeAdvancedSearch';\n\texports.AdvancedSearchEvents = AdvancedSearchEvents;\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contains the different string definition for all the events related to analytics.\n\t */\n\tvar AnalyticsEvents = (function () {\n\t    function AnalyticsEvents() {\n\t    }\n\t    return AnalyticsEvents;\n\t}());\n\tAnalyticsEvents.searchEvent = 'analyticsSearchEvent';\n\tAnalyticsEvents.documentViewEvent = 'analyticsDocumentViewEvent';\n\tAnalyticsEvents.customEvent = 'analyticsCustomEvent';\n\t/**\n\t * Triggered whenever an analytics event is logged. This event allows external code to modify the analytics data.\n\t *\n\t * All bound handlers will receive {@link IChangeAnalyticsCustomDataEventArgs} as an argument.\n\t *\n\t * The string value is `changeAnalyticsCustomData`.\n\t */\n\tAnalyticsEvents.changeAnalyticsCustomData = 'changeAnalyticsCustomData';\n\texports.AnalyticsEvents = AnalyticsEvents;\n\n\n/***/ },\n/* 44 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contains the different string definition for all the events related to {@link Breadcrumb}.\n\t */\n\tvar BreadcrumbEvents = (function () {\n\t    function BreadcrumbEvents() {\n\t    }\n\t    return BreadcrumbEvents;\n\t}());\n\t/**\n\t * Triggered when the breadcrumb needs to update its content. External code can use this event to provide bits of HTML that should be included in the breadcrumb.\n\t *\n\t * All handlers bound to this event will receive a {@link IPopulateBreadcrumbEventArgs} as an argument.\n\t */\n\tBreadcrumbEvents.populateBreadcrumb = 'populateBreadcrumb';\n\t/**\n\t * Triggered when the user clicks the Clear All button in the breadcrumb. When this event is raised, every filter that is included in the breadcrumb should be removed.\n\t *\n\t * This event does not provide custom event data.\n\t */\n\tBreadcrumbEvents.clearBreadcrumb = 'clearBreadcrumb';\n\tBreadcrumbEvents.redrawBreadcrumb = 'redrawBreadcrumb';\n\texports.BreadcrumbEvents = BreadcrumbEvents;\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DebugEvents = (function () {\n\t    function DebugEvents() {\n\t    }\n\t    return DebugEvents;\n\t}());\n\tDebugEvents.showDebugPanel = 'showDebugPanel';\n\texports.DebugEvents = DebugEvents;\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ImageResultListEvents = (function () {\n\t    function ImageResultListEvents() {\n\t    }\n\t    return ImageResultListEvents;\n\t}());\n\tImageResultListEvents.imageResultsLayoutComplete = 'imageResultsLayoutComplete';\n\texports.ImageResultListEvents = ImageResultListEvents;\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contain the different string definitions for all the events related to initialization.\n\t *\n\t * Note that these events will only be triggered when the {@link init} function is called.\n\t *\n\t * This means these events are normally called only once when the search interface is initialized.\n\t */\n\tvar InitializationEvents = (function () {\n\t    function InitializationEvents() {\n\t    }\n\t    return InitializationEvents;\n\t}());\n\t/**\n\t * This event is triggered right before each components inside the search interface get initialized (eg: Before the constructor of each component is executed).\n\t *\n\t * The string value is `beforeInitialization`.\n\t * @type {string}\n\t */\n\tInitializationEvents.beforeInitialization = 'beforeInitialization';\n\t/**\n\t * Triggered after the components are initialized (eg: After the constructor of each component is executed)\n\t * but before their state is set from the hash portion of the URL (e.g., http://mysearchinterface#q=myQuery ).\n\t *\n\t * This is also before the first query is launched (if the {@link SearchInterface.options.autoTriggerQuery} is `true`).\n\t *\n\t * The string value is `afterComponentsInitialization`.\n\t * @type {string}\n\t */\n\tInitializationEvents.afterComponentsInitialization = 'afterComponentsInitialization';\n\t/**\n\t * Triggered right before the state from the URL (e.g., http://mysearchinterface#q=myQuery ) gets applied in the interface.\n\t *\n\t * This will typically only be useful if the {@link SearchInterface.options.enableHistory} is set to `true`.\n\t *\n\t * The string value is `restoreHistoryState`.\n\t * @type {string}\n\t */\n\tInitializationEvents.restoreHistoryState = 'restoreHistoryState';\n\t/**\n\t * Triggered right after the UI is fully initialized.\n\t *\n\t * Concretely this means that the constructor of each component has been executed, and that the state coming for the URL (e.g., http://mysearchinterface#q=myquery) has been applied.\n\t *\n\t * It is triggered *before* the first query is launched, and if the {@link SearchInterface.options.autoTriggerQuery} is `true`.\n\t *\n\t * The string value is `afterInitialization`.\n\t * @type {string}\n\t */\n\tInitializationEvents.afterInitialization = 'afterInitialization';\n\t/**\n\t * This is triggered when the UI needs to be dynamically removed so that components can unbind any internal handlers they might have set globally on the window or the document.\n\t *\n\t * After this event has been executed, the search interface can be dynamically removed and all handlers can be considered cleanly removed.\n\t *\n\t * The string value is `nuke`.\n\t * @type {string}\n\t */\n\tInitializationEvents.nuke = 'nuke';\n\texports.InitializationEvents = InitializationEvents;\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports) {\n\n\t/// <reference path=\"../../lib/magic-box/index.d.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OmniboxEvents = (function () {\n\t    function OmniboxEvents() {\n\t    }\n\t    return OmniboxEvents;\n\t}());\n\tOmniboxEvents.populateOmnibox = 'populateOmnibox';\n\tOmniboxEvents.openOmnibox = 'openOmnibox';\n\tOmniboxEvents.closeOmnibox = 'closeOmnibox';\n\tOmniboxEvents.populateOmniboxSuggestions = 'populateOmniboxSuggestions';\n\tOmniboxEvents.omniboxPreprocessResultForQuery = 'omniboxPreprocessResultForQuery';\n\texports.OmniboxEvents = OmniboxEvents;\n\n\n/***/ },\n/* 49 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar PreferencesPanelEvents = (function () {\n\t    function PreferencesPanelEvents() {\n\t    }\n\t    return PreferencesPanelEvents;\n\t}());\n\tPreferencesPanelEvents.savePreferences = 'savePreferences';\n\tPreferencesPanelEvents.exitPreferencesWithoutSave = 'exitPreferencesWithoutSave';\n\texports.PreferencesPanelEvents = PreferencesPanelEvents;\n\n\n/***/ },\n/* 50 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contains the different string definition for all the events related to query.\n\t *\n\t * Note that these events will only be triggered when the {@link QueryController.executeQuery} method is used, either directly or by using {@link executeQuery}\n\t */\n\tvar QueryEvents = (function () {\n\t    function QueryEvents() {\n\t    }\n\t    return QueryEvents;\n\t}());\n\t/**\n\t * Triggered when a new query is launched.\n\t *\n\t * All bound handlers will receive {@link INewQueryEventArgs} as an argument.\n\t *\n\t * The string value is `newQuery`.\n\t * @type {string}\n\t */\n\tQueryEvents.newQuery = 'newQuery';\n\t/**\n\t * Triggered when the query is being built.\n\t *\n\t * This is typically where all components will contribute their part to the {@link IQuery} using the {@link QueryBuilder}.\n\t *\n\t * All bound handlers will receive {@link IBuildingQueryEventArgs} as an argument.\n\t *\n\t * The string value is `buildingQuery`.\n\t * @type {string}\n\t */\n\tQueryEvents.buildingQuery = 'buildingQuery';\n\t/**\n\t * Triggered when the query is done being built.\n\t *\n\t * This is typically where the facet will add it's {@link IGroupByRequest} to the {@link IQuery}.\n\t *\n\t * All bound handlers will receive {@link IDoneBuildingQueryEventArgs} as an argument.\n\t *\n\t * The string value is `doneBuildingQuery`.\n\t * @type {string}\n\t */\n\tQueryEvents.doneBuildingQuery = 'doneBuildingQuery';\n\t/**\n\t * Triggered when the query is being executed on the Search API.\n\t *\n\t * All bound handlers will receive {@link IDuringQueryEventArgs} as an argument.\n\t *\n\t * The string value is `duringQuery`.\n\t * @type {string}\n\t */\n\tQueryEvents.duringQuery = 'duringQuery';\n\t/**\n\t * Triggered when more results are being fetched on the Search API (think : infinite scrolling, or pager).\n\t *\n\t * All bound handlers will receive {@link IDuringQueryEventArgs} as an argument.\n\t *\n\t * The string value is `duringFetchMoreQuery`.\n\t * @type {string}\n\t */\n\tQueryEvents.duringFetchMoreQuery = 'duringFetchMoreQuery';\n\t/**\n\t * Triggered when a query successfully returns from the Search API.\n\t *\n\t * All bound handlers will receive {@link IQuerySuccessEventArgs} as an argument.\n\t *\n\t * The string value is `querySuccess`.\n\t * @type {string}\n\t */\n\tQueryEvents.querySuccess = 'querySuccess';\n\t/**\n\t * Triggered when a more results were successfully returned from the Search API. (think : infinite scrolling, or pager).\n\t *\n\t * All bound handlers will receive {@link IFetchMoreSuccessEventArgs} as an argument.\n\t *\n\t * The string value is `fetchMoreSuccess`.\n\t * @type {string}\n\t */\n\tQueryEvents.fetchMoreSuccess = 'fetchMoreSuccess';\n\t/**\n\t * Triggered after the main query success event has finished executing.\n\t *\n\t * This is typically where facets will process the {@link IGroupByResult} and render themselves.\n\t *\n\t * All bound handlers will receive {@link IQuerySuccessEventArgs} as an argument.\n\t *\n\t * The string value is `deferredQuerySuccess`.\n\t * @type {string}\n\t */\n\tQueryEvents.deferredQuerySuccess = 'deferredQuerySuccess';\n\t/**\n\t * Triggered when there was an error executing a query on the Search API.\n\t *\n\t * All bound handlers will receive {@link IQueryErrorEventArgs} as an argument.\n\t *\n\t * The string value is `queryError`.\n\t * @type {string}\n\t */\n\tQueryEvents.queryError = 'queryError';\n\t/**\n\t * Triggered before the {@link QueryEvents.querySuccess} event.\n\t *\n\t * This allows external code to modify the results before rendering them.\n\t *\n\t * For example, the {@link Folding} component might use this event to construct a coherent parent child relationship between query results.\n\t *\n\t * All bound handlers will receive {@link IPreprocessResultsEventArgs} as an argument.\n\t *\n\t * The string value is `preprocessResults`.\n\t * @type {string}\n\t */\n\tQueryEvents.preprocessResults = 'preprocessResults';\n\t/**\n\t * Triggered before the {@link QueryEvents.fetchMoreSuccess} event.\n\t *\n\t * This allows external code to modify the results before rendering them.\n\t *\n\t * For example, the {@link Folding} component might use this event to construct a coherent parent child relationship between query results.\n\t *\n\t * All bound handlers will receive {@link IPreprocessResultsEventArgs} as an argument.\n\t *\n\t * The string value is `preprocessMoreResults`.\n\t * @type {string}\n\t */\n\tQueryEvents.preprocessMoreResults = 'preprocessMoreResults';\n\t/**\n\t * Triggered when there is no result for a particular query.\n\t *\n\t * All bound handlers will receive {@link INoResultsEventArgs} as an argument.\n\t *\n\t * The string value is `noResults`.\n\t * @type {string}\n\t */\n\tQueryEvents.noResults = 'noResults';\n\tQueryEvents.buildingCallOptions = 'buildingCallOptions';\n\texports.QueryEvents = QueryEvents;\n\n\n/***/ },\n/* 51 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResultListEvents = (function () {\n\t    function ResultListEvents() {\n\t    }\n\t    return ResultListEvents;\n\t}());\n\tResultListEvents.newResultsDisplayed = 'newResultsDisplayed';\n\tResultListEvents.newResultDisplayed = 'newResultDisplayed';\n\tResultListEvents.openQuickview = 'openQuickview';\n\tResultListEvents.changeLayout = 'changeLayout';\n\texports.ResultListEvents = ResultListEvents;\n\n\n/***/ },\n/* 52 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResultLayoutEvents = (function () {\n\t    function ResultLayoutEvents() {\n\t    }\n\t    return ResultLayoutEvents;\n\t}());\n\tResultLayoutEvents.populateResultLayout = 'populateResultLayout';\n\texports.ResultLayoutEvents = ResultLayoutEvents;\n\n\n/***/ },\n/* 53 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SearchAlertsEvents = (function () {\n\t    function SearchAlertsEvents() {\n\t    }\n\t    return SearchAlertsEvents;\n\t}());\n\tSearchAlertsEvents.searchAlertsCreated = 'searchAlertsCreated';\n\tSearchAlertsEvents.searchAlertsDeleted = 'searchAlertsDeleted';\n\tSearchAlertsEvents.searchAlertsFail = 'searchAlertsFail';\n\tSearchAlertsEvents.searchAlertsPopulateMessage = 'searchAlertsPopulateMessage';\n\texports.SearchAlertsEvents = SearchAlertsEvents;\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SettingsEvents = (function () {\n\t    function SettingsEvents() {\n\t    }\n\t    return SettingsEvents;\n\t}());\n\tSettingsEvents.settingsPopulateMenu = 'settingsPopulateMenu';\n\texports.SettingsEvents = SettingsEvents;\n\n\n/***/ },\n/* 55 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SliderEvents = (function () {\n\t    function SliderEvents() {\n\t    }\n\t    return SliderEvents;\n\t}());\n\tSliderEvents.startSlide = 'startSlide';\n\tSliderEvents.duringSlide = 'duringSlide';\n\tSliderEvents.endSlide = 'endSlide';\n\tSliderEvents.graphValueSelected = 'graphValueSelected';\n\texports.SliderEvents = SliderEvents;\n\n\n/***/ },\n/* 56 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar StandaloneSearchInterfaceEvents = (function () {\n\t    function StandaloneSearchInterfaceEvents() {\n\t    }\n\t    return StandaloneSearchInterfaceEvents;\n\t}());\n\tStandaloneSearchInterfaceEvents.beforeRedirect = 'beforeRedirect';\n\texports.StandaloneSearchInterfaceEvents = StandaloneSearchInterfaceEvents;\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ColorUtils_1 = __webpack_require__(58);\n\texports.ColorUtils = ColorUtils_1.ColorUtils;\n\tvar CookieUtils_1 = __webpack_require__(40);\n\texports.Cookie = CookieUtils_1.Cookie;\n\tvar CurrencyUtils_1 = __webpack_require__(59);\n\texports.CurrencyUtils = CurrencyUtils_1.CurrencyUtils;\n\tvar DateUtils_1 = __webpack_require__(60);\n\texports.DateUtils = DateUtils_1.DateUtils;\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\texports.DeviceUtils = DeviceUtils_1.DeviceUtils;\n\tvar Dom_1 = __webpack_require__(61);\n\texports.Dom = Dom_1.Dom;\n\texports.$$ = Dom_1.$$;\n\tvar DomUtils_1 = __webpack_require__(62);\n\texports.DomUtils = DomUtils_1.DomUtils;\n\tvar EmailUtils_1 = __webpack_require__(66);\n\texports.EmailUtils = EmailUtils_1.EmailUtils;\n\tvar HashUtils_1 = __webpack_require__(67);\n\texports.HashUtils = HashUtils_1.HashUtils;\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\texports.HighlightUtils = HighlightUtils_1.HighlightUtils;\n\texports.StringAndHoles = HighlightUtils_1.StringAndHoles;\n\tvar HtmlUtils_1 = __webpack_require__(69);\n\texports.HTMLUtils = HtmlUtils_1.HTMLUtils;\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\texports.KEYBOARD = KeyboardUtils_1.KEYBOARD;\n\texports.KeyboardUtils = KeyboardUtils_1.KeyboardUtils;\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\texports.LocalStorageUtils = LocalStorageUtils_1.LocalStorageUtils;\n\tvar OSUtils_1 = __webpack_require__(72);\n\texports.OSUtils = OSUtils_1.OSUtils;\n\texports.OS_NAME = OSUtils_1.OS_NAME;\n\tvar PopupUtils_1 = __webpack_require__(73);\n\texports.PopupUtils = PopupUtils_1.PopupUtils;\n\tvar QueryUtils_1 = __webpack_require__(23);\n\texports.QueryUtils = QueryUtils_1.QueryUtils;\n\tvar StreamHighlightUtils_1 = __webpack_require__(74);\n\texports.StreamHighlightUtils = StreamHighlightUtils_1.StreamHighlightUtils;\n\tvar StringUtils_1 = __webpack_require__(64);\n\texports.StringUtils = StringUtils_1.StringUtils;\n\tvar TimeSpanUtils_1 = __webpack_require__(17);\n\texports.TimeSpan = TimeSpanUtils_1.TimeSpan;\n\tvar Utils_1 = __webpack_require__(15);\n\texports.Utils = Utils_1.Utils;\n\n\n/***/ },\n/* 58 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ColorUtils = (function () {\n\t    function ColorUtils() {\n\t    }\n\t    ColorUtils.hsvToRgb = function (h, s, v) {\n\t        var r, g, b;\n\t        var i = Math.floor(h * 6);\n\t        var f = h * 6 - i;\n\t        var p = v * (1 - s);\n\t        var q = v * (1 - f * s);\n\t        var t = v * (1 - (1 - f) * s);\n\t        switch (i % 6) {\n\t            case 0:\n\t                r = v, g = t, b = p;\n\t                break;\n\t            case 1:\n\t                r = q, g = v, b = p;\n\t                break;\n\t            case 2:\n\t                r = p, g = v, b = t;\n\t                break;\n\t            case 3:\n\t                r = p, g = q, b = v;\n\t                break;\n\t            case 4:\n\t                r = t, g = p, b = v;\n\t                break;\n\t            case 5:\n\t                r = v, g = p, b = q;\n\t                break;\n\t        }\n\t        return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n\t    };\n\t    ColorUtils.rgbToHsv = function (r, g, b) {\n\t        r = r / 255, g = g / 255, b = b / 255;\n\t        var max = Math.max(r, g, b), min = Math.min(r, g, b);\n\t        var h, s, v = max;\n\t        var d = max - min;\n\t        s = max == 0 ? 0 : d / max;\n\t        if (max == min) {\n\t            h = 0; // achromatic\n\t        }\n\t        else {\n\t            switch (max) {\n\t                case r:\n\t                    h = (g - b) / d + (g < b ? 6 : 0);\n\t                    break;\n\t                case g:\n\t                    h = (b - r) / d + 2;\n\t                    break;\n\t                case b:\n\t                    h = (r - g) / d + 4;\n\t                    break;\n\t            }\n\t            h /= 6;\n\t        }\n\t        return [h, s, v];\n\t    };\n\t    return ColorUtils;\n\t}());\n\texports.ColorUtils = ColorUtils;\n\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Options_1 = __webpack_require__(36);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Globalize = __webpack_require__(30);\n\tvar DefaultCurrencyToStringOptions = (function (_super) {\n\t    __extends(DefaultCurrencyToStringOptions, _super);\n\t    function DefaultCurrencyToStringOptions() {\n\t        var _this = _super !== null && _super.apply(this, arguments) || this;\n\t        _this.decimals = 0;\n\t        return _this;\n\t    }\n\t    return DefaultCurrencyToStringOptions;\n\t}(Options_1.Options));\n\tvar CurrencyUtils = (function () {\n\t    function CurrencyUtils() {\n\t    }\n\t    CurrencyUtils.currencyToString = function (value, options) {\n\t        if (Utils_1.Utils.isNullOrUndefined(value)) {\n\t            return '';\n\t        }\n\t        value = Number(value);\n\t        Assert_1.Assert.isNumber(value);\n\t        options = new DefaultCurrencyToStringOptions().merge(options);\n\t        var currency = Globalize.culture().numberFormat.currency;\n\t        var backup = currency.symbol;\n\t        if (Utils_1.Utils.isNonEmptyString(options.symbol)) {\n\t            currency.symbol = options.symbol;\n\t        }\n\t        var str = Globalize.format(value, 'c' + options.decimals.toString());\n\t        currency.symbol = backup;\n\t        return str;\n\t    };\n\t    return CurrencyUtils;\n\t}());\n\texports.CurrencyUtils = CurrencyUtils;\n\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Options_1 = __webpack_require__(36);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar TimeSpanUtils_1 = __webpack_require__(17);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\tvar DefaultDateToStringOptions = (function (_super) {\n\t    __extends(DefaultDateToStringOptions, _super);\n\t    function DefaultDateToStringOptions() {\n\t        var _this = _super !== null && _super.apply(this, arguments) || this;\n\t        _this.now = new Date();\n\t        _this.useTodayYesterdayAndTomorrow = true;\n\t        _this.useWeekdayIfThisWeek = true;\n\t        _this.omitYearIfCurrentOne = true;\n\t        _this.useLongDateFormat = false;\n\t        _this.includeTimeIfToday = true;\n\t        _this.includeTimeIfThisWeek = true;\n\t        _this.alwaysIncludeTime = false;\n\t        _this.predefinedFormat = undefined;\n\t        return _this;\n\t    }\n\t    return DefaultDateToStringOptions;\n\t}(Options_1.Options));\n\tvar DateUtils = (function () {\n\t    function DateUtils() {\n\t    }\n\t    DateUtils.convertFromJsonDateIfNeeded = function (date) {\n\t        if (_.isDate(date)) {\n\t            return date;\n\t        }\n\t        else if (date !== null && !isNaN(Number(date))) {\n\t            return new Date(Number(date));\n\t        }\n\t        else if (_.isString(date)) {\n\t            return new Date(date.replace('@', ' '));\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    DateUtils.dateForQuery = function (date) {\n\t        return date.getFullYear() + '/' + DateUtils.padNumber((date.getMonth() + 1).toString()) + '/' + DateUtils.padNumber(date.getDate().toString());\n\t    };\n\t    DateUtils.padNumber = function (num, length) {\n\t        if (length === void 0) { length = 2; }\n\t        while (num.length < length) {\n\t            num = '0' + num;\n\t        }\n\t        return num;\n\t    };\n\t    DateUtils.keepOnlyDatePart = function (date) {\n\t        return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t    };\n\t    DateUtils.offsetDateByDays = function (date, offset) {\n\t        var newDate = new Date(date.valueOf());\n\t        newDate.setDate(newDate.getDate() + offset);\n\t        return newDate;\n\t    };\n\t    DateUtils.dateToString = function (d, options) {\n\t        if (Utils_1.Utils.isNullOrUndefined(d)) {\n\t            return '';\n\t        }\n\t        options = new DefaultDateToStringOptions().merge(options);\n\t        var dateOnly = DateUtils.keepOnlyDatePart(d);\n\t        if (options.predefinedFormat) {\n\t            return Globalize.format(dateOnly, options.predefinedFormat);\n\t        }\n\t        var today = DateUtils.keepOnlyDatePart(options.now);\n\t        if (options.useTodayYesterdayAndTomorrow) {\n\t            if (dateOnly.valueOf() == today.valueOf()) {\n\t                return Strings_1.l('Today');\n\t            }\n\t            var tomorrow = DateUtils.offsetDateByDays(today, 1);\n\t            if (dateOnly.valueOf() == tomorrow.valueOf()) {\n\t                return Strings_1.l('Tomorrow');\n\t            }\n\t            var yesterday = DateUtils.offsetDateByDays(today, -1);\n\t            if (dateOnly.valueOf() == yesterday.valueOf()) {\n\t                return Strings_1.l('Yesterday');\n\t            }\n\t        }\n\t        var isThisWeek = Math.abs(TimeSpanUtils_1.TimeSpan.fromDates(dateOnly, today).getDays()) < 7;\n\t        if (options.useWeekdayIfThisWeek && isThisWeek) {\n\t            if (dateOnly.valueOf() > today.valueOf()) {\n\t                return Strings_1.l('NextDay', Globalize.format(dateOnly, 'dddd'));\n\t            }\n\t            else {\n\t                return Strings_1.l('LastDay', Globalize.format(dateOnly, 'dddd'));\n\t            }\n\t        }\n\t        if (options.omitYearIfCurrentOne && dateOnly.getFullYear() === today.getFullYear()) {\n\t            return Globalize.format(dateOnly, 'M');\n\t        }\n\t        if (options.useLongDateFormat) {\n\t            return Globalize.format(dateOnly, 'D');\n\t        }\n\t        return Globalize.format(dateOnly, 'd');\n\t    };\n\t    DateUtils.timeToString = function (date, options) {\n\t        if (Utils_1.Utils.isNullOrUndefined(date)) {\n\t            return '';\n\t        }\n\t        return Globalize.format(date, 't');\n\t    };\n\t    DateUtils.dateTimeToString = function (date, options) {\n\t        if (Utils_1.Utils.isNullOrUndefined(date)) {\n\t            return '';\n\t        }\n\t        options = new DefaultDateToStringOptions().merge(options);\n\t        var today = DateUtils.keepOnlyDatePart(options.now);\n\t        var isThisWeek = Math.abs(TimeSpanUtils_1.TimeSpan.fromDates(date, today).getDays()) < 7;\n\t        var datePart = DateUtils.dateToString(date, options);\n\t        var dateWithoutTime = DateUtils.keepOnlyDatePart(date);\n\t        if (options.alwaysIncludeTime || (options.includeTimeIfThisWeek && isThisWeek) || (options.includeTimeIfToday && dateWithoutTime.valueOf() == today.valueOf())) {\n\t            return datePart + ', ' + DateUtils.timeToString(date);\n\t        }\n\t        else {\n\t            return datePart;\n\t        }\n\t    };\n\t    DateUtils.monthToString = function (month) {\n\t        var date = new Date(1980, month);\n\t        return Globalize.format(date, 'MMMM');\n\t    };\n\t    DateUtils.isValid = function (date) {\n\t        if (date instanceof Date) {\n\t            return !isNaN(date.getTime());\n\t        }\n\t        return false;\n\t    };\n\t    DateUtils.timeBetween = function (from, to) {\n\t        if (Utils_1.Utils.isNullOrUndefined(from) || Utils_1.Utils.isNullOrUndefined(to)) {\n\t            return '';\n\t        }\n\t        return ('0' + ((to.getTime() - from.getTime()) / (1000 * 60 * 60)).toFixed()).slice(-2) +\n\t            ':' + ('0' + ((to.getTime() - from.getTime()) % (1000 * 60 * 60) / (1000 * 60)).toFixed()).slice(-2) +\n\t            ':' + ('0' + ((to.getTime() - from.getTime()) % (1000 * 60) / (1000)).toFixed()).slice(-2);\n\t    };\n\t    return DateUtils;\n\t}());\n\texports.DateUtils = DateUtils;\n\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar JQueryutils_1 = __webpack_require__(20);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * This is essentially an helper class for dom manipulation.<br/>\n\t * This is intended to provide some basic functionality normally offered by jQuery.<br/>\n\t * To minimize the multiple jQuery conflict we have while integrating in various system, we implemented the very small subset that the framework needs.<br/>\n\t * See {@link $$}, which is a function that wraps this class constructor, for less verbose code.\n\t */\n\tvar Dom = (function () {\n\t    /**\n\t     * Create a new Dom object with the given HTMLElement\n\t     * @param el The HTMLElement to wrap in a Dom object\n\t     */\n\t    function Dom(el) {\n\t        Assert_1.Assert.exists(el);\n\t        this.el = el;\n\t    }\n\t    /**\n\t     * Helper function to quickly create an HTMLElement\n\t     * @param type The type of the element (e.g. div, span)\n\t     * @param props The props (id, className, attributes) of the element<br/>\n\t     * Can be either specified in dashed-case strings ('my-attribute') or camelCased keys (myAttribute),\n\t     * the latter of which will automatically get replaced to dash-case.\n\t     * @param innerHTML The contents of the new HTMLElement, either in string form or as another HTMLElement\n\t     */\n\t    Dom.createElement = function (type, props) {\n\t        var children = [];\n\t        for (var _i = 2; _i < arguments.length; _i++) {\n\t            children[_i - 2] = arguments[_i];\n\t        }\n\t        var elem = document.createElement(type);\n\t        for (var key in props) {\n\t            if (key === 'className') {\n\t                elem.className = props['className'];\n\t            }\n\t            else {\n\t                var attr = key.indexOf('-') !== -1 ? key : Utils_1.Utils.toDashCase(key);\n\t                elem.setAttribute(attr, props[key]);\n\t            }\n\t        }\n\t        _.each(children, function (child) {\n\t            if (child instanceof HTMLElement) {\n\t                elem.appendChild(child);\n\t            }\n\t            else if (_.isString(child)) {\n\t                elem.innerHTML += child;\n\t            }\n\t            else if (child instanceof Dom) {\n\t                elem.appendChild(child.el);\n\t            }\n\t        });\n\t        return elem;\n\t    };\n\t    /**\n\t     * Adds the element to the children of the current element\n\t     * @param element The element to append\n\t     * @returns {string}\n\t     */\n\t    Dom.prototype.append = function (element) {\n\t        this.el.appendChild(element);\n\t    };\n\t    /**\n\t     * Get the css value of the specified property.<br/>\n\t     * @param property The property\n\t     * @returns {string}\n\t     */\n\t    Dom.prototype.css = function (property) {\n\t        if (this.el.style[property]) {\n\t            return this.el.style[property];\n\t        }\n\t        return window.getComputedStyle(this.el).getPropertyValue(property);\n\t    };\n\t    /**\n\t     * Get or set the text content of the HTMLElement.<br/>\n\t     * @param txt Optional. If given, this will set the text content of the element. If not, will return the text content.\n\t     * @returns {string}\n\t     */\n\t    Dom.prototype.text = function (txt) {\n\t        if (Utils_1.Utils.isUndefined(txt)) {\n\t            return this.el.innerText || this.el.textContent;\n\t        }\n\t        else {\n\t            if (this.el.innerText != undefined) {\n\t                this.el.innerText = txt;\n\t            }\n\t            else if (this.el.textContent != undefined) {\n\t                this.el.textContent = txt;\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Performant way to transform a NodeList to an array of HTMLElement, for manipulation<br/>\n\t     * http://jsperf.com/nodelist-to-array/72\n\t     * @param nodeList a {NodeList} to convert to an array\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.nodeListToArray = function (nodeList) {\n\t        var i = nodeList.length;\n\t        var arr = new Array(i);\n\t        while (i--) {\n\t            arr[i] = nodeList.item(i);\n\t        }\n\t        return arr;\n\t    };\n\t    /**\n\t     * Empty (remove all child) from the element;\n\t     */\n\t    Dom.prototype.empty = function () {\n\t        while (this.el.firstChild) {\n\t            this.el.removeChild(this.el.firstChild);\n\t        }\n\t    };\n\t    /**\n\t     * Empty the element and all childs from the dom;\n\t     */\n\t    Dom.prototype.remove = function () {\n\t        this.el.parentNode.removeChild(this.el);\n\t    };\n\t    /**\n\t     * Show the element;\n\t     */\n\t    Dom.prototype.show = function () {\n\t        this.el.style.display = 'block';\n\t    };\n\t    /**\n\t     * Hide the element;\n\t     */\n\t    Dom.prototype.hide = function () {\n\t        this.el.style.display = 'none';\n\t    };\n\t    /**\n\t     * Toggle the element visibility.<br/>\n\t     * Optional visible parameter, if specified will set the element visibility\n\t     * @param visible Optional parameter to display or hide the element\n\t     */\n\t    Dom.prototype.toggle = function (visible) {\n\t        if (visible === undefined) {\n\t            if (this.el.style.display == 'block') {\n\t                this.hide();\n\t            }\n\t            else {\n\t                this.show();\n\t            }\n\t        }\n\t        else {\n\t            if (visible) {\n\t                this.show();\n\t            }\n\t            else {\n\t                this.hide();\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Returns the value of the specified attribute.\n\t     * @param name The name of the attribute\n\t     */\n\t    Dom.prototype.getAttribute = function (name) {\n\t        return this.el.getAttribute(name);\n\t    };\n\t    /**\n\t     * Sets the value of the specified attribute.\n\t     * @param name The name of the attribute\n\t     * @param value The value to set\n\t     */\n\t    Dom.prototype.setAttribute = function (name, value) {\n\t        this.el.setAttribute(name, value);\n\t    };\n\t    /**\n\t     * Find a child element, given a CSS selector\n\t     * @param selector A CSS selector, can be a .className or #id\n\t     * @returns {HTMLElement}\n\t     */\n\t    Dom.prototype.find = function (selector) {\n\t        return this.el.querySelector(selector);\n\t    };\n\t    /**\n\t     * Check if the element match the selector.<br/>\n\t     * The selector can be a class, an id or a tag.<br/>\n\t     * Eg : .is('.foo') or .is('#foo') or .is('div').\n\t     */\n\t    Dom.prototype.is = function (selector) {\n\t        if (this.el.tagName.toLowerCase() == selector.toLowerCase()) {\n\t            return true;\n\t        }\n\t        if (selector[0] == '.') {\n\t            if (this.hasClass(selector.substr(1))) {\n\t                return true;\n\t            }\n\t        }\n\t        if (selector[0] == '#') {\n\t            if (this.el.getAttribute('id') == selector.substr(1)) {\n\t                return true;\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    /**\n\t     * Get the first element that matches the classname by testing the element itself and traversing up through its ancestors in the DOM tree.\n\t     *\n\t     * Stops at the body of the document\n\t     * @param className A CSS classname\n\t     */\n\t    Dom.prototype.closest = function (className) {\n\t        return this.traverseAncestorForClass(this.el, className);\n\t    };\n\t    /**\n\t     * Get the first element that matches the classname by testing the element itself and traversing up through its ancestors in the DOM tree.\n\t     *\n\t     * Stops at the body of the document\n\t     * @returns {any}\n\t     */\n\t    Dom.prototype.parent = function (className) {\n\t        if (this.el.parentElement == undefined) {\n\t            return undefined;\n\t        }\n\t        return this.traverseAncestorForClass(this.el.parentElement, className);\n\t    };\n\t    /**\n\t     *  Get all the ancestors of the current element that match the given className\n\t     *\n\t     *  Return an empty array if none found.\n\t     * @param className\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.parents = function (className) {\n\t        var parentsFound = [];\n\t        var parentFound = this.parent(className);\n\t        while (parentFound) {\n\t            parentsFound.push(parentFound);\n\t            parentFound = new Dom(parentFound).parent(className);\n\t        }\n\t        return parentsFound;\n\t    };\n\t    /**\n\t     * Return all children\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.children = function () {\n\t        return this.nodeListToArray(this.el.children);\n\t    };\n\t    /**\n\t     * Return all siblings\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.siblings = function (selector) {\n\t        var sibs = [];\n\t        var currentElement = this.el.parentNode.firstChild;\n\t        for (; currentElement; currentElement = currentElement.nextSibling) {\n\t            if (currentElement != this.el) {\n\t                if (this.matches(currentElement, selector) || !selector) {\n\t                    sibs.push(currentElement);\n\t                }\n\t            }\n\t        }\n\t        return sibs;\n\t    };\n\t    Dom.prototype.matches = function (element, selector) {\n\t        var all = document.querySelectorAll(selector);\n\t        for (var i = 0; i < all.length; i++) {\n\t            if (all[i] === element) {\n\t                return true;\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    /**\n\t     * Find all children that match the given CSS selector\n\t     * @param selector A CSS selector, can be a .className\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.findAll = function (selector) {\n\t        return this.nodeListToArray(this.el.querySelectorAll(selector));\n\t    };\n\t    /**\n\t     * Find the child elements using a className\n\t     * @param className Class of the childs elements to find\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    Dom.prototype.findClass = function (className) {\n\t        if ('getElementsByClassName' in this.el) {\n\t            return this.nodeListToArray(this.el.getElementsByClassName(className));\n\t        }\n\t        // For ie 8\n\t        return this.nodeListToArray(this.el.querySelectorAll('.' + className));\n\t    };\n\t    /**\n\t     * Find an element using an ID\n\t     * @param id ID of the element to find\n\t     * @returns {HTMLElement}\n\t     */\n\t    Dom.prototype.findId = function (id) {\n\t        return document.getElementById(id);\n\t    };\n\t    Dom.prototype.addClass = function (className) {\n\t        var _this = this;\n\t        if (_.isArray(className)) {\n\t            _.each(className, function (name) {\n\t                _this.addClass(name);\n\t            });\n\t        }\n\t        else {\n\t            if (!this.hasClass(className)) {\n\t                if (this.el.className) {\n\t                    this.el.className += ' ' + className;\n\t                }\n\t                else {\n\t                    this.el.className = className;\n\t                }\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Remove the class on the element. Works even if the element does not possess the class.\n\t     * @param className Classname to remove on the the element\n\t     */\n\t    Dom.prototype.removeClass = function (className) {\n\t        this.el.className = this.el.className.replace(new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|\\\\b)\", 'g'), '$1').trim();\n\t    };\n\t    /**\n\t     * Toggle the class on the element.\n\t     * @param className Classname to toggle\n\t     * @swtch If true, add the class regardless and if false, remove the class\n\t     */\n\t    Dom.prototype.toggleClass = function (className, swtch) {\n\t        if (Utils_1.Utils.isNullOrUndefined(swtch)) {\n\t            if (this.hasClass(className)) {\n\t                this.removeClass(className);\n\t            }\n\t            else {\n\t                this.addClass(className);\n\t            }\n\t        }\n\t        else {\n\t            if (swtch) {\n\t                this.addClass(className);\n\t            }\n\t            else {\n\t                this.removeClass(className);\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Sets the inner html of the element\n\t     * @param html The html to set\n\t     */\n\t    Dom.prototype.setHtml = function (html) {\n\t        this.el.innerHTML = html;\n\t    };\n\t    /**\n\t     * Return an array with all the classname on the element. Empty array if the element has not classname\n\t     * @returns {any|Array}\n\t     */\n\t    Dom.prototype.getClass = function () {\n\t        return this.el.className.match(Dom.CLASS_NAME_REGEX) || [];\n\t    };\n\t    /**\n\t     * Check if the element has the given class name\n\t     * @param className Classname to verify\n\t     * @returns {boolean}\n\t     */\n\t    Dom.prototype.hasClass = function (className) {\n\t        return _.contains(this.getClass(), className);\n\t    };\n\t    /**\n\t     * Detach the element from the DOM.\n\t     */\n\t    Dom.prototype.detach = function () {\n\t        this.el.parentElement && this.el.parentElement.removeChild(this.el);\n\t    };\n\t    /**\n\t     * Insert the current node after the given reference node\n\t     * @param refNode\n\t     */\n\t    Dom.prototype.insertAfter = function (refNode) {\n\t        refNode.parentNode && refNode.parentNode.insertBefore(this.el, refNode.nextSibling);\n\t    };\n\t    /**\n\t     * Insert the current node before the given reference node\n\t     * @param refNode\n\t     */\n\t    Dom.prototype.insertBefore = function (refNode) {\n\t        refNode.parentNode && refNode.parentNode.insertBefore(this.el, refNode);\n\t    };\n\t    /**\n\t     * Insert the given node as the first child of the current node\n\t     * @param toPrepend\n\t     */\n\t    Dom.prototype.prepend = function (toPrepend) {\n\t        if (this.el.firstChild) {\n\t            new Dom(toPrepend).insertBefore(this.el.firstChild);\n\t        }\n\t        else {\n\t            this.el.appendChild(toPrepend);\n\t        }\n\t    };\n\t    Dom.prototype.on = function (type, eventHandle) {\n\t        var _this = this;\n\t        if (_.isArray(type)) {\n\t            _.each(type, function (t) {\n\t                _this.on(t, eventHandle);\n\t            });\n\t        }\n\t        else {\n\t            var modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n\t            var jq = JQueryutils_1.JQueryUtils.getJQuery();\n\t            if (jq) {\n\t                jq(this.el).on(modifiedType, eventHandle);\n\t            }\n\t            else if (this.el.addEventListener) {\n\t                var fn = function (e) {\n\t                    eventHandle(e, e.detail);\n\t                };\n\t                Dom.handlers.push({\n\t                    eventHandle: eventHandle,\n\t                    fn: fn\n\t                });\n\t                this.el.addEventListener(modifiedType, fn, false);\n\t            }\n\t            else if (this.el['on']) {\n\t                this.el['on']('on' + modifiedType, eventHandle);\n\t            }\n\t        }\n\t    };\n\t    Dom.prototype.one = function (type, eventHandle) {\n\t        var _this = this;\n\t        if (_.isArray(type)) {\n\t            _.each(type, function (t) {\n\t                _this.one(t, eventHandle);\n\t            });\n\t        }\n\t        else {\n\t            var modifiedType_1 = this.processEventTypeToBeJQueryCompatible(type);\n\t            var once_1 = function (e, args) {\n\t                _this.off(modifiedType_1, once_1);\n\t                return eventHandle(e, args);\n\t            };\n\t            this.on(modifiedType_1, once_1);\n\t        }\n\t    };\n\t    Dom.prototype.off = function (type, eventHandle) {\n\t        var _this = this;\n\t        if (_.isArray(type)) {\n\t            _.each(type, function (t) {\n\t                _this.off(t, eventHandle);\n\t            });\n\t        }\n\t        else {\n\t            var modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n\t            var jq = JQueryutils_1.JQueryUtils.getJQuery();\n\t            if (jq) {\n\t                jq(this.el).off(modifiedType, eventHandle);\n\t            }\n\t            else if (this.el.removeEventListener) {\n\t                var idx_1 = 0;\n\t                var found = _.find(Dom.handlers, function (handlerObj, i) {\n\t                    if (handlerObj.eventHandle == eventHandle) {\n\t                        idx_1 = i;\n\t                        return true;\n\t                    }\n\t                });\n\t                if (found) {\n\t                    this.el.removeEventListener(modifiedType, found.fn, false);\n\t                    Dom.handlers.splice(idx_1, 1);\n\t                }\n\t            }\n\t            else if (this.el['off']) {\n\t                this.el['off']('on' + modifiedType, eventHandle);\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Trigger an event on the element.\n\t     * @param type The event type to trigger\n\t     * @param data\n\t     */\n\t    Dom.prototype.trigger = function (type, data) {\n\t        var modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n\t        var jq = JQueryutils_1.JQueryUtils.getJQuery();\n\t        if (jq) {\n\t            jq(this.el).trigger(modifiedType, data);\n\t        }\n\t        else if (CustomEvent !== undefined) {\n\t            var event_1 = new CustomEvent(modifiedType, { detail: data, bubbles: true });\n\t            this.el.dispatchEvent(event_1);\n\t        }\n\t        else {\n\t            new Logger_1.Logger(this).error('CANNOT TRIGGER EVENT FOR OLDER BROWSER');\n\t        }\n\t    };\n\t    /**\n\t     * Check if the element is \"empty\" (has no innerHTML content). Whitespace is considered empty</br>\n\t     * @returns {boolean}\n\t     */\n\t    Dom.prototype.isEmpty = function () {\n\t        return Dom.ONLY_WHITE_SPACE_REGEX.test(this.el.innerHTML);\n\t    };\n\t    /**\n\t     * Check if the element is a descendant of parent\n\t     * @param other\n\t     */\n\t    Dom.prototype.isDescendant = function (parent) {\n\t        var node = this.el.parentNode;\n\t        while (node != null) {\n\t            if (node == parent) {\n\t                return true;\n\t            }\n\t            node = node.parentNode;\n\t        }\n\t        return false;\n\t    };\n\t    /**\n\t     * Replace the current element with the other element, then detach the current element\n\t     * @param otherElem\n\t     */\n\t    Dom.prototype.replaceWith = function (otherElem) {\n\t        var parent = this.el.parentNode;\n\t        if (parent) {\n\t            new Dom(otherElem).insertAfter(this.el);\n\t        }\n\t        this.detach();\n\t    };\n\t    // based on http://api.jquery.com/position/\n\t    /**\n\t     * Return the position relative to the offset parent.\n\t     */\n\t    Dom.prototype.position = function () {\n\t        var offsetParent = this.offsetParent();\n\t        var offset = this.offset();\n\t        var parentOffset = { top: 0, left: 0 };\n\t        if (!$$(offsetParent).is('html')) {\n\t            parentOffset = $$(offsetParent).offset();\n\t        }\n\t        var borderTopWidth = parseInt($$(offsetParent).css('borderTopWidth'));\n\t        var borderLeftWidth = parseInt($$(offsetParent).css('borderLeftWidth'));\n\t        borderTopWidth = isNaN(borderTopWidth) ? 0 : borderTopWidth;\n\t        borderLeftWidth = isNaN(borderLeftWidth) ? 0 : borderLeftWidth;\n\t        parentOffset = {\n\t            top: parentOffset.top + borderTopWidth,\n\t            left: parentOffset.left + borderLeftWidth\n\t        };\n\t        var marginTop = parseInt(this.css('marginTop'));\n\t        var marginLeft = parseInt(this.css('marginLeft'));\n\t        marginTop = isNaN(marginTop) ? 0 : marginTop;\n\t        marginLeft = isNaN(marginLeft) ? 0 : marginLeft;\n\t        return {\n\t            top: offset.top - parentOffset.top - marginTop,\n\t            left: offset.left - parentOffset.left - marginLeft\n\t        };\n\t    };\n\t    // based on https://api.jquery.com/offsetParent/\n\t    /**\n\t     * Returns the offset parent. The offset parent is the closest parent that is positioned.\n\t     * An element is positioned when its position property is not 'static', which is the default.\n\t     */\n\t    Dom.prototype.offsetParent = function () {\n\t        var offsetParent = this.el.offsetParent;\n\t        while (offsetParent instanceof HTMLElement && $$(offsetParent).css('position') === 'static') {\n\t            // Will break out if it stumbles upon an non-HTMLElement and return documentElement\n\t            offsetParent = offsetParent.offsetParent;\n\t        }\n\t        if (!(offsetParent instanceof HTMLElement)) {\n\t            return document.documentElement;\n\t        }\n\t        return offsetParent;\n\t    };\n\t    // based on http://api.jquery.com/offset/\n\t    /**\n\t     * Return the position relative to the document.\n\t     */\n\t    Dom.prototype.offset = function () {\n\t        // In <=IE11, calling getBoundingClientRect on a disconnected node throws an error\n\t        if (!this.el.getClientRects().length) {\n\t            return { top: 0, left: 0 };\n\t        }\n\t        var rect = this.el.getBoundingClientRect();\n\t        if (rect.width || rect.height) {\n\t            var doc = this.el.ownerDocument;\n\t            var docElem = doc.documentElement;\n\t            return {\n\t                top: rect.top + window.pageYOffset - docElem.clientTop,\n\t                left: rect.left + window.pageXOffset - docElem.clientLeft\n\t            };\n\t        }\n\t        return rect;\n\t    };\n\t    /**\n\t     * Returns the offset width of the element\n\t     */\n\t    Dom.prototype.width = function () {\n\t        return this.el.offsetWidth;\n\t    };\n\t    /**\n\t     * Returns the offset height of the element\n\t     */\n\t    Dom.prototype.height = function () {\n\t        return this.el.offsetHeight;\n\t    };\n\t    /**\n\t     * Clone the node\n\t     * @param deep true if the children of the node should also be cloned, or false to clone only the specified node.\n\t     * @returns {Dom}\n\t     */\n\t    Dom.prototype.clone = function (deep) {\n\t        if (deep === void 0) { deep = false; }\n\t        return $$(this.el.cloneNode(deep));\n\t    };\n\t    Dom.prototype.processEventTypeToBeJQueryCompatible = function (event) {\n\t        // From https://api.jquery.com/on/\n\t        // [...]\n\t        // > In addition, the .trigger() method can trigger both standard browser event names and custom event names to call attached handlers. Event names should only contain alphanumerics, underscore, and colon characters.\n\t        if (event) {\n\t            return event.replace(/[^a-zA-Z0-9\\:\\_]/g, '');\n\t        }\n\t        return event;\n\t    };\n\t    Dom.prototype.traverseAncestorForClass = function (current, className) {\n\t        if (current === void 0) { current = this.el; }\n\t        if (className.indexOf('.') == 0) {\n\t            className = className.substr(1);\n\t        }\n\t        var found = false;\n\t        while (!found) {\n\t            if ($$(current).hasClass(className)) {\n\t                found = true;\n\t            }\n\t            if (current.tagName.toLowerCase() == 'body') {\n\t                break;\n\t            }\n\t            if (current.parentElement == null) {\n\t                break;\n\t            }\n\t            if (!found) {\n\t                current = current.parentElement;\n\t            }\n\t        }\n\t        if (found) {\n\t            return current;\n\t        }\n\t        return undefined;\n\t    };\n\t    return Dom;\n\t}());\n\tDom.CLASS_NAME_REGEX = /-?[_a-zA-Z]+[_a-zA-Z0-9-]*/g;\n\tDom.ONLY_WHITE_SPACE_REGEX = /^\\s*$/;\n\tDom.handlers = [];\n\texports.Dom = Dom;\n\tvar Win = (function () {\n\t    function Win(win) {\n\t        this.win = win;\n\t    }\n\t    Win.prototype.height = function () {\n\t        return this.win.innerHeight;\n\t    };\n\t    Win.prototype.width = function () {\n\t        return this.win.innerWidth;\n\t    };\n\t    Win.prototype.scrollY = function () {\n\t        return this.supportPageOffset() ? this.win.pageYOffset : this.isCSS1Compat() ? this.win.document.documentElement.scrollTop : this.win.document.body.scrollTop;\n\t    };\n\t    Win.prototype.scrollX = function () {\n\t        return this.supportPageOffset() ? window.pageXOffset : this.isCSS1Compat() ? document.documentElement.scrollLeft : document.body.scrollLeft;\n\t    };\n\t    Win.prototype.isCSS1Compat = function () {\n\t        return (this.win.document.compatMode || '') === 'CSS1Compat';\n\t    };\n\t    Win.prototype.supportPageOffset = function () {\n\t        return this.win.pageXOffset !== undefined;\n\t    };\n\t    return Win;\n\t}());\n\texports.Win = Win;\n\tvar Doc = (function () {\n\t    function Doc(doc) {\n\t        this.doc = doc;\n\t    }\n\t    Doc.prototype.height = function () {\n\t        var body = this.doc.body;\n\t        return Math.max(body.scrollHeight, body.offsetHeight);\n\t    };\n\t    Doc.prototype.width = function () {\n\t        var body = this.doc.body;\n\t        return Math.max(body.scrollWidth, body.offsetWidth);\n\t    };\n\t    return Doc;\n\t}());\n\texports.Doc = Doc;\n\tfunction $$() {\n\t    var args = [];\n\t    for (var _i = 0; _i < arguments.length; _i++) {\n\t        args[_i] = arguments[_i];\n\t    }\n\t    if (args.length === 1 && args[0] instanceof Dom) {\n\t        return args[0];\n\t    }\n\t    else if (args.length === 1 && (!_.isString(args[0]))) {\n\t        return new Dom(args[0]);\n\t    }\n\t    else {\n\t        return new Dom(Dom.createElement.apply(Dom, args));\n\t    }\n\t}\n\texports.$$ = $$;\n\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar FileTypes_1 = __webpack_require__(63);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar DomUtils = (function () {\n\t    function DomUtils() {\n\t    }\n\t    DomUtils.getPopUpCloseButton = function (captionForClose, captionForReminder) {\n\t        var container = document.createElement('span');\n\t        var closeButton = document.createElement('span');\n\t        Dom_1.$$(closeButton).addClass('coveo-close-button');\n\t        container.appendChild(closeButton);\n\t        var iconClose = document.createElement('span');\n\t        Dom_1.$$(iconClose).addClass('coveo-icon');\n\t        Dom_1.$$(iconClose).addClass('coveo-sprites-quickview-close');\n\t        closeButton.appendChild(iconClose);\n\t        Dom_1.$$(closeButton).text(captionForClose);\n\t        var closeReminder = document.createElement('span');\n\t        Dom_1.$$(closeReminder).addClass('coveo-pop-up-reminder');\n\t        Dom_1.$$(closeReminder).text(captionForReminder);\n\t        container.appendChild(closeReminder);\n\t        return container.outerHTML;\n\t    };\n\t    DomUtils.getBasicLoadingAnimation = function () {\n\t        var loadDotClass = 'coveo-loading-dot';\n\t        var dom = document.createElement('div');\n\t        dom.className = 'coveo-first-loading-animation';\n\t        dom.innerHTML = \"<div class='coveo-logo' ></div>\\n    <div class='coveo-loading-container'>\\n      <div class='\" + loadDotClass + \"'></div>\\n      <div class='\" + loadDotClass + \"'></div>\\n      <div class='\" + loadDotClass + \"'></div>\\n      <div class='\" + loadDotClass + \"'></div>\\n    </div>\";\n\t        return dom;\n\t    };\n\t    DomUtils.highlightElement = function (initialString, valueToSearch) {\n\t        var regex = new RegExp(Utils_1.Utils.escapeRegexCharacter(StringUtils_1.StringUtils.latinize(valueToSearch)), 'i');\n\t        var firstChar = StringUtils_1.StringUtils.latinize(initialString).search(regex);\n\t        var lastChar = firstChar + valueToSearch.length;\n\t        return StringUtils_1.StringUtils.htmlEncode(initialString.slice(0, firstChar)) + \"<span class='coveo-highlight'>\" + StringUtils_1.StringUtils.htmlEncode(initialString.slice(firstChar, lastChar)) + \"</span>\" + StringUtils_1.StringUtils.htmlEncode(initialString.slice(lastChar));\n\t    };\n\t    DomUtils.getLoadingSpinner = function () {\n\t        var loading = Dom_1.$$('div', {\n\t            className: 'coveo-loading-spinner'\n\t        });\n\t        return loading.el;\n\t    };\n\t    DomUtils.getModalBoxHeader = function (title) {\n\t        var header = Dom_1.$$('div');\n\t        header.el.innerHTML = \"<div class='coveo-modalbox-right-header'>\\n        <span class='coveo-modalbox-close-button'>\\n          <span class='coveo-icon coveo-sprites-common-clear'></span>\\n        </span>\\n      </div>\\n      <div class='coveo-modalbox-left-header'>\\n        <span class='coveo-modalbox-pop-up-reminder'> \" + (title || '') + \"</span>\\n      </div>\";\n\t        return header;\n\t    };\n\t    DomUtils.getQuickviewHeader = function (result, options, bindings) {\n\t        var date = '';\n\t        if (options.showDate) {\n\t            date = DateUtils_1.DateUtils.dateTimeToString(new Date(Utils_1.Utils.getFieldValue(result, 'date')));\n\t        }\n\t        var fileType = FileTypes_1.FileTypes.get(result);\n\t        var header = Dom_1.$$('div');\n\t        header.el.innerHTML = \"<div class='coveo-quickview-right-header'>\\n        <span class='coveo-quickview-time'>\" + date + \"</span>\\n        <span class='coveo-quickview-close-button'>\\n          <span class='coveo-icon coveo-sprites-common-clear'></span>\\n        </span>\\n      </div>\\n      <div class='coveo-quickview-left-header'>\\n        <span class='coveo-quickview-icon coveo-small \" + fileType.icon + \"'></span>\\n        <a class='coveo-quickview-pop-up-reminder'> \" + (options.title || '') + \"</a>\\n      </div>\";\n\t        new Coveo[Coveo['Salesforce'] ? 'SalesforceResultLink' : 'ResultLink'](header.find('.coveo-quickview-pop-up-reminder'), undefined, bindings, result);\n\t        return header;\n\t    };\n\t    return DomUtils;\n\t}());\n\texports.DomUtils = DomUtils;\n\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar _ = __webpack_require__(16);\n\t// On-demand mapping of file types to captions. Used by facets, but I don't\n\t// really like this. Maybe a dedicated filetype facet would be better? Hmm...\n\tvar fileTypeCaptions;\n\tvar FileTypes = (function () {\n\t    function FileTypes() {\n\t    }\n\t    FileTypes.get = function (result) {\n\t        var objecttype = Utils_1.Utils.getFieldValue(result, 'objecttype');\n\t        var filetype = Utils_1.Utils.getFieldValue(result, 'filetype');\n\t        // When @objecttype is File we fallback on @filetype for icons and such\n\t        if (Utils_1.Utils.isNonEmptyString(objecttype) && objecttype.toLowerCase() != 'file') {\n\t            return FileTypes.getObjectType(objecttype);\n\t        }\n\t        else if (Utils_1.Utils.isNonEmptyString(filetype)) {\n\t            return FileTypes.getFileType(filetype);\n\t        }\n\t        else {\n\t            return {\n\t                // This will render a default icon. Really it should not happen.\n\t                icon: 'coveo-icon filetype',\n\t                caption: Strings_1.l('Unknown')\n\t            };\n\t        }\n\t    };\n\t    FileTypes.getObjectType = function (objecttype) {\n\t        // We must use lowercase filetypes because that's how the CSS classes\n\t        // are generated (they are case sensitive, alas).\n\t        objecttype = objecttype.toLowerCase();\n\t        var variableValue = \"objecttype_\" + objecttype;\n\t        // Most object types have a set of localized strings in the main dictionary\n\t        var localizedString = Strings_1.l(variableValue);\n\t        return {\n\t            'icon': 'coveo-icon objecttype ' + objecttype.replace(' ', '-'),\n\t            caption: localizedString != variableValue ? localizedString : objecttype\n\t        };\n\t    };\n\t    FileTypes.getFileType = function (filetype) {\n\t        // We must use lowercase filetypes because that's how the CSS classes\n\t        // are generated (they are case sensitive, alas).\n\t        filetype = filetype.toLowerCase();\n\t        // Sometimes, filetype begins with a period (typically means the index has\n\t        // no idea and uses the file extension as a filetype).\n\t        if (filetype[0] == '.') {\n\t            filetype = filetype.substring(1);\n\t        }\n\t        var variableValue = \"filetype_\" + filetype;\n\t        // Most filetypes have a set of localized strings in the main dictionary\n\t        var localizedString = Strings_1.l(variableValue);\n\t        return {\n\t            'icon': 'coveo-icon filetype ' + filetype.replace(' ', '-'),\n\t            caption: localizedString != variableValue ? localizedString : filetype\n\t        };\n\t    };\n\t    FileTypes.getFileTypeCaptions = function () {\n\t        if (fileTypeCaptions == undefined) {\n\t            fileTypeCaptions = {};\n\t            var strings = String['locales'][String['locale'].toLowerCase()];\n\t            Assert_1.Assert.isNotUndefined(strings);\n\t            _.each(_.keys(strings), function (key) {\n\t                if (key.indexOf('filetype_') == 0) {\n\t                    fileTypeCaptions[key.substr('filetype_'.length)] = key.toLocaleString();\n\t                }\n\t                else if (key.indexOf('objecttype_') == 0) {\n\t                    fileTypeCaptions[key.substr('objecttype_'.length)] = key.toLocaleString();\n\t                }\n\t            });\n\t        }\n\t        return fileTypeCaptions;\n\t    };\n\t    return FileTypes;\n\t}());\n\texports.FileTypes = FileTypes;\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar latinize = __webpack_require__(65);\n\tvar _ = __webpack_require__(16);\n\tvar StringUtils = (function () {\n\t    function StringUtils() {\n\t    }\n\t    StringUtils.javascriptEncode = function (value) {\n\t        Assert_1.Assert.isString(value);\n\t        value = value.replace(/\\\\/g, '\\\\\\\\');\n\t        value = value.replace(/'/g, '\\\\\\'');\n\t        value = value.replace(/\"/g, '\\\\\"');\n\t        return value;\n\t    };\n\t    StringUtils.htmlEncode = function (value) {\n\t        Assert_1.Assert.isString(value);\n\t        var div = Dom_1.$$('div');\n\t        div.text(value);\n\t        return div.el.innerHTML;\n\t    };\n\t    StringUtils.splice = function (value, index, remove, toAdd) {\n\t        return value.slice(0, index) + toAdd + value.slice(index + Math.abs(remove));\n\t    };\n\t    StringUtils.removeMiddle = function (value, length, toAdd) {\n\t        if (value.length < length) {\n\t            return value;\n\t        }\n\t        var toRemove = value.length - length;\n\t        var index = Math.floor(length / 2);\n\t        return StringUtils.splice(value, index, toRemove, toAdd);\n\t    };\n\t    StringUtils.regexEncode = function (value) {\n\t        Assert_1.Assert.isString(value);\n\t        return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n\t    };\n\t    StringUtils.stringToRegex = function (value, ignoreAccent) {\n\t        if (ignoreAccent === void 0) { ignoreAccent = false; }\n\t        Assert_1.Assert.isString(value);\n\t        var encoded = StringUtils.regexEncode(value);\n\t        if (ignoreAccent) {\n\t            return _.map(encoded, function (char) {\n\t                var regexp = _.find(StringUtils.accented, function (regexp) { return char.match(regexp) != null; });\n\t                if (regexp) {\n\t                    return regexp.source;\n\t                }\n\t                return char;\n\t            }).join('');\n\t        }\n\t        return encoded;\n\t    };\n\t    StringUtils.wildcardsToRegex = function (value, ignoreAccent) {\n\t        if (ignoreAccent === void 0) { ignoreAccent = false; }\n\t        Assert_1.Assert.isString(value);\n\t        var encoded = StringUtils.stringToRegex(value, ignoreAccent);\n\t        encoded = encoded.replace(/\\\\\\*/, '.*');\n\t        encoded = encoded.replace(/\\\\\\?/, '.');\n\t        return encoded;\n\t    };\n\t    StringUtils.getHighlights = function (strToSearch, regexToFind, dataHighlightGroupTerm) {\n\t        var match, indexes = [];\n\t        while (match = regexToFind.exec(strToSearch)) {\n\t            var desiredMatch = match[2];\n\t            var undesiredMatch = match[1];\n\t            var offset = match.index + undesiredMatch.length;\n\t            indexes.push({ offset: offset, length: desiredMatch.length, dataHighlightGroupTerm: dataHighlightGroupTerm });\n\t            if (!regexToFind.global) {\n\t                break;\n\t            }\n\t        }\n\t        return _.isEmpty(indexes) ? undefined : indexes;\n\t    };\n\t    StringUtils.encodeCarriageReturn = function (strToEncode) {\n\t        Assert_1.Assert.isString(strToEncode);\n\t        return strToEncode.replace(/\\n/g, '<br/>');\n\t    };\n\t    StringUtils.equalsCaseInsensitive = function (str1, str2) {\n\t        return str1.toLowerCase() == str2.toLowerCase();\n\t    };\n\t    StringUtils.match = function (value, regex) {\n\t        var results = [];\n\t        var arr;\n\t        while ((arr = regex.exec(value)) !== null) {\n\t            results.push(arr);\n\t        }\n\t        return results;\n\t    };\n\t    StringUtils.hashCode = function (str) {\n\t        var hash = 0;\n\t        var len = str.length;\n\t        for (var i = 0; i < len; i++) {\n\t            var char = str.charCodeAt(i);\n\t            hash = ((hash << 5) - hash) + char;\n\t            hash = hash & hash; // Convert to 32bit integer\n\t        }\n\t        return hash.toString(16);\n\t    };\n\t    // http://stackoverflow.com/a/25575009\n\t    StringUtils.latinize = function (str) {\n\t        return latinize(str);\n\t    };\n\t    StringUtils.capitalizeFirstLetter = function (str) {\n\t        return str.charAt(0).toUpperCase() + str.slice(1);\n\t    };\n\t    return StringUtils;\n\t}());\n\tStringUtils.accented = {\n\t    'A': /[Aa\\xaa\\xc0-\\xc5\\xe0-\\xe5\\u0100-\\u0105\\u01cd\\u01ce\\u0200-\\u0203\\u0226\\u0227\\u1d2c\\u1d43\\u1e00\\u1e01\\u1e9a\\u1ea0-\\u1ea3\\u2090\\u2100\\u2101\\u213b\\u249c\\u24b6\\u24d0\\u3371-\\u3374\\u3380-\\u3384\\u3388\\u3389\\u33a9-\\u33af\\u33c2\\u33ca\\u33df\\u33ff\\uff21\\uff41]/g,\n\t    'B': /[Bb\\u1d2e\\u1d47\\u1e02-\\u1e07\\u212c\\u249d\\u24b7\\u24d1\\u3374\\u3385-\\u3387\\u33c3\\u33c8\\u33d4\\u33dd\\uff22\\uff42]/g,\n\t    'C': /[Cc\\xc7\\xe7\\u0106-\\u010d\\u1d9c\\u2100\\u2102\\u2103\\u2105\\u2106\\u212d\\u216d\\u217d\\u249e\\u24b8\\u24d2\\u3376\\u3388\\u3389\\u339d\\u33a0\\u33a4\\u33c4-\\u33c7\\uff23\\uff43]/g,\n\t    'D': /[Dd\\u010e\\u010f\\u01c4-\\u01c6\\u01f1-\\u01f3\\u1d30\\u1d48\\u1e0a-\\u1e13\\u2145\\u2146\\u216e\\u217e\\u249f\\u24b9\\u24d3\\u32cf\\u3372\\u3377-\\u3379\\u3397\\u33ad-\\u33af\\u33c5\\u33c8\\uff24\\uff44]/g,\n\t    'E': /[Ee\\xc8-\\xcb\\xe8-\\xeb\\u0112-\\u011b\\u0204-\\u0207\\u0228\\u0229\\u1d31\\u1d49\\u1e18-\\u1e1b\\u1eb8-\\u1ebd\\u2091\\u2121\\u212f\\u2130\\u2147\\u24a0\\u24ba\\u24d4\\u3250\\u32cd\\u32ce\\uff25\\uff45]/g,\n\t    'F': /[Ff\\u1da0\\u1e1e\\u1e1f\\u2109\\u2131\\u213b\\u24a1\\u24bb\\u24d5\\u338a-\\u338c\\u3399\\ufb00-\\ufb04\\uff26\\uff46]/g,\n\t    'G': /[Gg\\u011c-\\u0123\\u01e6\\u01e7\\u01f4\\u01f5\\u1d33\\u1d4d\\u1e20\\u1e21\\u210a\\u24a2\\u24bc\\u24d6\\u32cc\\u32cd\\u3387\\u338d-\\u338f\\u3393\\u33ac\\u33c6\\u33c9\\u33d2\\u33ff\\uff27\\uff47]/g,\n\t    'H': /[Hh\\u0124\\u0125\\u021e\\u021f\\u02b0\\u1d34\\u1e22-\\u1e2b\\u1e96\\u210b-\\u210e\\u24a3\\u24bd\\u24d7\\u32cc\\u3371\\u3390-\\u3394\\u33ca\\u33cb\\u33d7\\uff28\\uff48]/g,\n\t    'I': /[Ii\\xcc-\\xcf\\xec-\\xef\\u0128-\\u0130\\u0132\\u0133\\u01cf\\u01d0\\u0208-\\u020b\\u1d35\\u1d62\\u1e2c\\u1e2d\\u1ec8-\\u1ecb\\u2071\\u2110\\u2111\\u2139\\u2148\\u2160-\\u2163\\u2165-\\u2168\\u216a\\u216b\\u2170-\\u2173\\u2175-\\u2178\\u217a\\u217b\\u24a4\\u24be\\u24d8\\u337a\\u33cc\\u33d5\\ufb01\\ufb03\\uff29\\uff49]/g,\n\t    'J': /[Jj\\u0132-\\u0135\\u01c7-\\u01cc\\u01f0\\u02b2\\u1d36\\u2149\\u24a5\\u24bf\\u24d9\\u2c7c\\uff2a\\uff4a]/g,\n\t    'K': /[Kk\\u0136\\u0137\\u01e8\\u01e9\\u1d37\\u1d4f\\u1e30-\\u1e35\\u212a\\u24a6\\u24c0\\u24da\\u3384\\u3385\\u3389\\u338f\\u3391\\u3398\\u339e\\u33a2\\u33a6\\u33aa\\u33b8\\u33be\\u33c0\\u33c6\\u33cd-\\u33cf\\uff2b\\uff4b]/g,\n\t    'L': /[Ll\\u0139-\\u0140\\u01c7-\\u01c9\\u02e1\\u1d38\\u1e36\\u1e37\\u1e3a-\\u1e3d\\u2112\\u2113\\u2121\\u216c\\u217c\\u24a7\\u24c1\\u24db\\u32cf\\u3388\\u3389\\u33d0-\\u33d3\\u33d5\\u33d6\\u33ff\\ufb02\\ufb04\\uff2c\\uff4c]/g,\n\t    'M': /[Mm\\u1d39\\u1d50\\u1e3e-\\u1e43\\u2120\\u2122\\u2133\\u216f\\u217f\\u24a8\\u24c2\\u24dc\\u3377-\\u3379\\u3383\\u3386\\u338e\\u3392\\u3396\\u3399-\\u33a8\\u33ab\\u33b3\\u33b7\\u33b9\\u33bd\\u33bf\\u33c1\\u33c2\\u33ce\\u33d0\\u33d4-\\u33d6\\u33d8\\u33d9\\u33de\\u33df\\uff2d\\uff4d]/g,\n\t    'N': /[Nn\\xd1\\xf1\\u0143-\\u0149\\u01ca-\\u01cc\\u01f8\\u01f9\\u1d3a\\u1e44-\\u1e4b\\u207f\\u2115\\u2116\\u24a9\\u24c3\\u24dd\\u3381\\u338b\\u339a\\u33b1\\u33b5\\u33bb\\u33cc\\u33d1\\uff2e\\uff4e]/g,\n\t    'O': /[Oo\\xba\\xd2-\\xd6\\xf2-\\xf6\\u014c-\\u0151\\u01a0\\u01a1\\u01d1\\u01d2\\u01ea\\u01eb\\u020c-\\u020f\\u022e\\u022f\\u1d3c\\u1d52\\u1ecc-\\u1ecf\\u2092\\u2105\\u2116\\u2134\\u24aa\\u24c4\\u24de\\u3375\\u33c7\\u33d2\\u33d6\\uff2f\\uff4f]/g,\n\t    'P': /[Pp\\u1d3e\\u1d56\\u1e54-\\u1e57\\u2119\\u24ab\\u24c5\\u24df\\u3250\\u3371\\u3376\\u3380\\u338a\\u33a9-\\u33ac\\u33b0\\u33b4\\u33ba\\u33cb\\u33d7-\\u33da\\uff30\\uff50]/g,\n\t    'Q': /[Qq\\u211a\\u24ac\\u24c6\\u24e0\\u33c3\\uff31\\uff51]/g,\n\t    'R': /[Rr\\u0154-\\u0159\\u0210-\\u0213\\u02b3\\u1d3f\\u1d63\\u1e58-\\u1e5b\\u1e5e\\u1e5f\\u20a8\\u211b-\\u211d\\u24ad\\u24c7\\u24e1\\u32cd\\u3374\\u33ad-\\u33af\\u33da\\u33db\\uff32\\uff52]/g,\n\t    'S': /[Ss\\u015a-\\u0161\\u017f\\u0218\\u0219\\u02e2\\u1e60-\\u1e63\\u20a8\\u2101\\u2120\\u24ae\\u24c8\\u24e2\\u33a7\\u33a8\\u33ae-\\u33b3\\u33db\\u33dc\\ufb06\\uff33\\uff53]/g,\n\t    'T': /[Tt\\u0162-\\u0165\\u021a\\u021b\\u1d40\\u1d57\\u1e6a-\\u1e71\\u1e97\\u2121\\u2122\\u24af\\u24c9\\u24e3\\u3250\\u32cf\\u3394\\u33cf\\ufb05\\ufb06\\uff34\\uff54]/g,\n\t    'U': /[Uu\\xd9-\\xdc\\xf9-\\xfc\\u0168-\\u0173\\u01af\\u01b0\\u01d3\\u01d4\\u0214-\\u0217\\u1d41\\u1d58\\u1d64\\u1e72-\\u1e77\\u1ee4-\\u1ee7\\u2106\\u24b0\\u24ca\\u24e4\\u3373\\u337a\\uff35\\uff55]/g,\n\t    'V': /[Vv\\u1d5b\\u1d65\\u1e7c-\\u1e7f\\u2163-\\u2167\\u2173-\\u2177\\u24b1\\u24cb\\u24e5\\u2c7d\\u32ce\\u3375\\u33b4-\\u33b9\\u33dc\\u33de\\uff36\\uff56]/g,\n\t    'W': /[Ww\\u0174\\u0175\\u02b7\\u1d42\\u1e80-\\u1e89\\u1e98\\u24b2\\u24cc\\u24e6\\u33ba-\\u33bf\\u33dd\\uff37\\uff57]/g,\n\t    'X': /[Xx\\u02e3\\u1e8a-\\u1e8d\\u2093\\u213b\\u2168-\\u216b\\u2178-\\u217b\\u24b3\\u24cd\\u24e7\\u33d3\\uff38\\uff58]/g,\n\t    'Y': /[Yy\\xdd\\xfd\\xff\\u0176-\\u0178\\u0232\\u0233\\u02b8\\u1e8e\\u1e8f\\u1e99\\u1ef2-\\u1ef9\\u24b4\\u24ce\\u24e8\\u33c9\\uff39\\uff59]/g,\n\t    'Z': /[Zz\\u0179-\\u017e\\u01f1-\\u01f3\\u1dbb\\u1e90-\\u1e95\\u2124\\u2128\\u24b5\\u24cf\\u24e9\\u3390-\\u3394\\uff3a\\uff5a]/g\n\t};\n\texports.StringUtils = StringUtils;\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, factory) {\n\t  if (true) {\n\t    // AMD. Register as an anonymous module.\n\t    !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t  } else if (typeof exports === 'object') {\n\t    // CommonJS\n\t    module.exports = factory();\n\t  } else {\n\t    // running in browser\n\t    root.latinize = factory();\n\t  }\n\t})(this, function() {\n\t\n\t  function latinize(str) {\n\t    if (typeof str === 'string') {\n\t      return str.replace(/[^A-Za-z0-9]/g, function(x) {\n\t        return latinize.characters[x] || x;\n\t      });\n\t    } else {\n\t      return str;\n\t    }\n\t  }\n\t\n\t  latinize.characters = {\n\t    'Á': 'A',\n\t    'Ă': 'A',\n\t    'Ắ': 'A',\n\t    'Ặ': 'A',\n\t    'Ằ': 'A',\n\t    'Ẳ': 'A',\n\t    'Ẵ': 'A',\n\t    'Ǎ': 'A',\n\t    'Â': 'A',\n\t    'Ấ': 'A',\n\t    'Ậ': 'A',\n\t    'Ầ': 'A',\n\t    'Ẩ': 'A',\n\t    'Ẫ': 'A',\n\t    'Ä': 'A',\n\t    'Ǟ': 'A',\n\t    'Ȧ': 'A',\n\t    'Ǡ': 'A',\n\t    'Ạ': 'A',\n\t    'Ȁ': 'A',\n\t    'À': 'A',\n\t    'Ả': 'A',\n\t    'Ȃ': 'A',\n\t    'Ā': 'A',\n\t    'Ą': 'A',\n\t    'Å': 'A',\n\t    'Ǻ': 'A',\n\t    'Ḁ': 'A',\n\t    'Ⱥ': 'A',\n\t    'Ã': 'A',\n\t    'Ꜳ': 'AA',\n\t    'Æ': 'AE',\n\t    'Ǽ': 'AE',\n\t    'Ǣ': 'AE',\n\t    'Ꜵ': 'AO',\n\t    'Ꜷ': 'AU',\n\t    'Ꜹ': 'AV',\n\t    'Ꜻ': 'AV',\n\t    'Ꜽ': 'AY',\n\t    'Ḃ': 'B',\n\t    'Ḅ': 'B',\n\t    'Ɓ': 'B',\n\t    'Ḇ': 'B',\n\t    'Ƀ': 'B',\n\t    'Ƃ': 'B',\n\t    'Ć': 'C',\n\t    'Č': 'C',\n\t    'Ç': 'C',\n\t    'Ḉ': 'C',\n\t    'Ĉ': 'C',\n\t    'Ċ': 'C',\n\t    'Ƈ': 'C',\n\t    'Ȼ': 'C',\n\t    'Ď': 'D',\n\t    'Ḑ': 'D',\n\t    'Ḓ': 'D',\n\t    'Ḋ': 'D',\n\t    'Ḍ': 'D',\n\t    'Ɗ': 'D',\n\t    'Ḏ': 'D',\n\t    'Dz': 'D',\n\t    'Dž': 'D',\n\t    'Đ': 'D',\n\t    'Ƌ': 'D',\n\t    'DZ': 'DZ',\n\t    'DŽ': 'DZ',\n\t    'É': 'E',\n\t    'Ĕ': 'E',\n\t    'Ě': 'E',\n\t    'Ȩ': 'E',\n\t    'Ḝ': 'E',\n\t    'Ê': 'E',\n\t    'Ế': 'E',\n\t    'Ệ': 'E',\n\t    'Ề': 'E',\n\t    'Ể': 'E',\n\t    'Ễ': 'E',\n\t    'Ḙ': 'E',\n\t    'Ë': 'E',\n\t    'Ė': 'E',\n\t    'Ẹ': 'E',\n\t    'Ȅ': 'E',\n\t    'È': 'E',\n\t    'Ẻ': 'E',\n\t    'Ȇ': 'E',\n\t    'Ē': 'E',\n\t    'Ḗ': 'E',\n\t    'Ḕ': 'E',\n\t    'Ę': 'E',\n\t    'Ɇ': 'E',\n\t    'Ẽ': 'E',\n\t    'Ḛ': 'E',\n\t    'Ꝫ': 'ET',\n\t    'Ḟ': 'F',\n\t    'Ƒ': 'F',\n\t    'Ǵ': 'G',\n\t    'Ğ': 'G',\n\t    'Ǧ': 'G',\n\t    'Ģ': 'G',\n\t    'Ĝ': 'G',\n\t    'Ġ': 'G',\n\t    'Ɠ': 'G',\n\t    'Ḡ': 'G',\n\t    'Ǥ': 'G',\n\t    'Ḫ': 'H',\n\t    'Ȟ': 'H',\n\t    'Ḩ': 'H',\n\t    'Ĥ': 'H',\n\t    'Ⱨ': 'H',\n\t    'Ḧ': 'H',\n\t    'Ḣ': 'H',\n\t    'Ḥ': 'H',\n\t    'Ħ': 'H',\n\t    'Í': 'I',\n\t    'Ĭ': 'I',\n\t    'Ǐ': 'I',\n\t    'Î': 'I',\n\t    'Ï': 'I',\n\t    'Ḯ': 'I',\n\t    'İ': 'I',\n\t    'Ị': 'I',\n\t    'Ȉ': 'I',\n\t    'Ì': 'I',\n\t    'Ỉ': 'I',\n\t    'Ȋ': 'I',\n\t    'Ī': 'I',\n\t    'Į': 'I',\n\t    'Ɨ': 'I',\n\t    'Ĩ': 'I',\n\t    'Ḭ': 'I',\n\t    'Ꝺ': 'D',\n\t    'Ꝼ': 'F',\n\t    'Ᵹ': 'G',\n\t    'Ꞃ': 'R',\n\t    'Ꞅ': 'S',\n\t    'Ꞇ': 'T',\n\t    'Ꝭ': 'IS',\n\t    'Ĵ': 'J',\n\t    'Ɉ': 'J',\n\t    'Ḱ': 'K',\n\t    'Ǩ': 'K',\n\t    'Ķ': 'K',\n\t    'Ⱪ': 'K',\n\t    'Ꝃ': 'K',\n\t    'Ḳ': 'K',\n\t    'Ƙ': 'K',\n\t    'Ḵ': 'K',\n\t    'Ꝁ': 'K',\n\t    'Ꝅ': 'K',\n\t    'Ĺ': 'L',\n\t    'Ƚ': 'L',\n\t    'Ľ': 'L',\n\t    'Ļ': 'L',\n\t    'Ḽ': 'L',\n\t    'Ḷ': 'L',\n\t    'Ḹ': 'L',\n\t    'Ⱡ': 'L',\n\t    'Ꝉ': 'L',\n\t    'Ḻ': 'L',\n\t    'Ŀ': 'L',\n\t    'Ɫ': 'L',\n\t    'Lj': 'L',\n\t    'Ł': 'L',\n\t    'LJ': 'LJ',\n\t    'Ḿ': 'M',\n\t    'Ṁ': 'M',\n\t    'Ṃ': 'M',\n\t    'Ɱ': 'M',\n\t    'Ń': 'N',\n\t    'Ň': 'N',\n\t    'Ņ': 'N',\n\t    'Ṋ': 'N',\n\t    'Ṅ': 'N',\n\t    'Ṇ': 'N',\n\t    'Ǹ': 'N',\n\t    'Ɲ': 'N',\n\t    'Ṉ': 'N',\n\t    'Ƞ': 'N',\n\t    'Nj': 'N',\n\t    'Ñ': 'N',\n\t    'NJ': 'NJ',\n\t    'Ó': 'O',\n\t    'Ŏ': 'O',\n\t    'Ǒ': 'O',\n\t    'Ô': 'O',\n\t    'Ố': 'O',\n\t    'Ộ': 'O',\n\t    'Ồ': 'O',\n\t    'Ổ': 'O',\n\t    'Ỗ': 'O',\n\t    'Ö': 'O',\n\t    'Ȫ': 'O',\n\t    'Ȯ': 'O',\n\t    'Ȱ': 'O',\n\t    'Ọ': 'O',\n\t    'Ő': 'O',\n\t    'Ȍ': 'O',\n\t    'Ò': 'O',\n\t    'Ỏ': 'O',\n\t    'Ơ': 'O',\n\t    'Ớ': 'O',\n\t    'Ợ': 'O',\n\t    'Ờ': 'O',\n\t    'Ở': 'O',\n\t    'Ỡ': 'O',\n\t    'Ȏ': 'O',\n\t    'Ꝋ': 'O',\n\t    'Ꝍ': 'O',\n\t    'Ō': 'O',\n\t    'Ṓ': 'O',\n\t    'Ṑ': 'O',\n\t    'Ɵ': 'O',\n\t    'Ǫ': 'O',\n\t    'Ǭ': 'O',\n\t    'Ø': 'O',\n\t    'Ǿ': 'O',\n\t    'Õ': 'O',\n\t    'Ṍ': 'O',\n\t    'Ṏ': 'O',\n\t    'Ȭ': 'O',\n\t    'Ƣ': 'OI',\n\t    'Ꝏ': 'OO',\n\t    'Ɛ': 'E',\n\t    'Ɔ': 'O',\n\t    'Ȣ': 'OU',\n\t    'Ṕ': 'P',\n\t    'Ṗ': 'P',\n\t    'Ꝓ': 'P',\n\t    'Ƥ': 'P',\n\t    'Ꝕ': 'P',\n\t    'Ᵽ': 'P',\n\t    'Ꝑ': 'P',\n\t    'Ꝙ': 'Q',\n\t    'Ꝗ': 'Q',\n\t    'Ŕ': 'R',\n\t    'Ř': 'R',\n\t    'Ŗ': 'R',\n\t    'Ṙ': 'R',\n\t    'Ṛ': 'R',\n\t    'Ṝ': 'R',\n\t    'Ȑ': 'R',\n\t    'Ȓ': 'R',\n\t    'Ṟ': 'R',\n\t    'Ɍ': 'R',\n\t    'Ɽ': 'R',\n\t    'Ꜿ': 'C',\n\t    'Ǝ': 'E',\n\t    'Ś': 'S',\n\t    'Ṥ': 'S',\n\t    'Š': 'S',\n\t    'Ṧ': 'S',\n\t    'Ş': 'S',\n\t    'Ŝ': 'S',\n\t    'Ș': 'S',\n\t    'Ṡ': 'S',\n\t    'Ṣ': 'S',\n\t    'Ṩ': 'S',\n\t    'ß': 'ss',\n\t    'Ť': 'T',\n\t    'Ţ': 'T',\n\t    'Ṱ': 'T',\n\t    'Ț': 'T',\n\t    'Ⱦ': 'T',\n\t    'Ṫ': 'T',\n\t    'Ṭ': 'T',\n\t    'Ƭ': 'T',\n\t    'Ṯ': 'T',\n\t    'Ʈ': 'T',\n\t    'Ŧ': 'T',\n\t    'Ɐ': 'A',\n\t    'Ꞁ': 'L',\n\t    'Ɯ': 'M',\n\t    'Ʌ': 'V',\n\t    'Ꜩ': 'TZ',\n\t    'Ú': 'U',\n\t    'Ŭ': 'U',\n\t    'Ǔ': 'U',\n\t    'Û': 'U',\n\t    'Ṷ': 'U',\n\t    'Ü': 'U',\n\t    'Ǘ': 'U',\n\t    'Ǚ': 'U',\n\t    'Ǜ': 'U',\n\t    'Ǖ': 'U',\n\t    'Ṳ': 'U',\n\t    'Ụ': 'U',\n\t    'Ű': 'U',\n\t    'Ȕ': 'U',\n\t    'Ù': 'U',\n\t    'Ủ': 'U',\n\t    'Ư': 'U',\n\t    'Ứ': 'U',\n\t    'Ự': 'U',\n\t    'Ừ': 'U',\n\t    'Ử': 'U',\n\t    'Ữ': 'U',\n\t    'Ȗ': 'U',\n\t    'Ū': 'U',\n\t    'Ṻ': 'U',\n\t    'Ų': 'U',\n\t    'Ů': 'U',\n\t    'Ũ': 'U',\n\t    'Ṹ': 'U',\n\t    'Ṵ': 'U',\n\t    'Ꝟ': 'V',\n\t    'Ṿ': 'V',\n\t    'Ʋ': 'V',\n\t    'Ṽ': 'V',\n\t    'Ꝡ': 'VY',\n\t    'Ẃ': 'W',\n\t    'Ŵ': 'W',\n\t    'Ẅ': 'W',\n\t    'Ẇ': 'W',\n\t    'Ẉ': 'W',\n\t    'Ẁ': 'W',\n\t    'Ⱳ': 'W',\n\t    'Ẍ': 'X',\n\t    'Ẋ': 'X',\n\t    'Ý': 'Y',\n\t    'Ŷ': 'Y',\n\t    'Ÿ': 'Y',\n\t    'Ẏ': 'Y',\n\t    'Ỵ': 'Y',\n\t    'Ỳ': 'Y',\n\t    'Ƴ': 'Y',\n\t    'Ỷ': 'Y',\n\t    'Ỿ': 'Y',\n\t    'Ȳ': 'Y',\n\t    'Ɏ': 'Y',\n\t    'Ỹ': 'Y',\n\t    'Ź': 'Z',\n\t    'Ž': 'Z',\n\t    'Ẑ': 'Z',\n\t    'Ⱬ': 'Z',\n\t    'Ż': 'Z',\n\t    'Ẓ': 'Z',\n\t    'Ȥ': 'Z',\n\t    'Ẕ': 'Z',\n\t    'Ƶ': 'Z',\n\t    'IJ': 'IJ',\n\t    'Œ': 'OE',\n\t    'ᴀ': 'A',\n\t    'ᴁ': 'AE',\n\t    'ʙ': 'B',\n\t    'ᴃ': 'B',\n\t    'ᴄ': 'C',\n\t    'ᴅ': 'D',\n\t    'ᴇ': 'E',\n\t    'ꜰ': 'F',\n\t    'ɢ': 'G',\n\t    'ʛ': 'G',\n\t    'ʜ': 'H',\n\t    'ɪ': 'I',\n\t    'ʁ': 'R',\n\t    'ᴊ': 'J',\n\t    'ᴋ': 'K',\n\t    'ʟ': 'L',\n\t    'ᴌ': 'L',\n\t    'ᴍ': 'M',\n\t    'ɴ': 'N',\n\t    'ᴏ': 'O',\n\t    'ɶ': 'OE',\n\t    'ᴐ': 'O',\n\t    'ᴕ': 'OU',\n\t    'ᴘ': 'P',\n\t    'ʀ': 'R',\n\t    'ᴎ': 'N',\n\t    'ᴙ': 'R',\n\t    'ꜱ': 'S',\n\t    'ᴛ': 'T',\n\t    'ⱻ': 'E',\n\t    'ᴚ': 'R',\n\t    'ᴜ': 'U',\n\t    'ᴠ': 'V',\n\t    'ᴡ': 'W',\n\t    'ʏ': 'Y',\n\t    'ᴢ': 'Z',\n\t    'á': 'a',\n\t    'ă': 'a',\n\t    'ắ': 'a',\n\t    'ặ': 'a',\n\t    'ằ': 'a',\n\t    'ẳ': 'a',\n\t    'ẵ': 'a',\n\t    'ǎ': 'a',\n\t    'â': 'a',\n\t    'ấ': 'a',\n\t    'ậ': 'a',\n\t    'ầ': 'a',\n\t    'ẩ': 'a',\n\t    'ẫ': 'a',\n\t    'ä': 'a',\n\t    'ǟ': 'a',\n\t    'ȧ': 'a',\n\t    'ǡ': 'a',\n\t    'ạ': 'a',\n\t    'ȁ': 'a',\n\t    'à': 'a',\n\t    'ả': 'a',\n\t    'ȃ': 'a',\n\t    'ā': 'a',\n\t    'ą': 'a',\n\t    'ᶏ': 'a',\n\t    'ẚ': 'a',\n\t    'å': 'a',\n\t    'ǻ': 'a',\n\t    'ḁ': 'a',\n\t    'ⱥ': 'a',\n\t    'ã': 'a',\n\t    'ꜳ': 'aa',\n\t    'æ': 'ae',\n\t    'ǽ': 'ae',\n\t    'ǣ': 'ae',\n\t    'ꜵ': 'ao',\n\t    'ꜷ': 'au',\n\t    'ꜹ': 'av',\n\t    'ꜻ': 'av',\n\t    'ꜽ': 'ay',\n\t    'ḃ': 'b',\n\t    'ḅ': 'b',\n\t    'ɓ': 'b',\n\t    'ḇ': 'b',\n\t    'ᵬ': 'b',\n\t    'ᶀ': 'b',\n\t    'ƀ': 'b',\n\t    'ƃ': 'b',\n\t    'ɵ': 'o',\n\t    'ć': 'c',\n\t    'č': 'c',\n\t    'ç': 'c',\n\t    'ḉ': 'c',\n\t    'ĉ': 'c',\n\t    'ɕ': 'c',\n\t    'ċ': 'c',\n\t    'ƈ': 'c',\n\t    'ȼ': 'c',\n\t    'ď': 'd',\n\t    'ḑ': 'd',\n\t    'ḓ': 'd',\n\t    'ȡ': 'd',\n\t    'ḋ': 'd',\n\t    'ḍ': 'd',\n\t    'ɗ': 'd',\n\t    'ᶑ': 'd',\n\t    'ḏ': 'd',\n\t    'ᵭ': 'd',\n\t    'ᶁ': 'd',\n\t    'đ': 'd',\n\t    'ɖ': 'd',\n\t    'ƌ': 'd',\n\t    'ı': 'i',\n\t    'ȷ': 'j',\n\t    'ɟ': 'j',\n\t    'ʄ': 'j',\n\t    'dz': 'dz',\n\t    'dž': 'dz',\n\t    'é': 'e',\n\t    'ĕ': 'e',\n\t    'ě': 'e',\n\t    'ȩ': 'e',\n\t    'ḝ': 'e',\n\t    'ê': 'e',\n\t    'ế': 'e',\n\t    'ệ': 'e',\n\t    'ề': 'e',\n\t    'ể': 'e',\n\t    'ễ': 'e',\n\t    'ḙ': 'e',\n\t    'ë': 'e',\n\t    'ė': 'e',\n\t    'ẹ': 'e',\n\t    'ȅ': 'e',\n\t    'è': 'e',\n\t    'ẻ': 'e',\n\t    'ȇ': 'e',\n\t    'ē': 'e',\n\t    'ḗ': 'e',\n\t    'ḕ': 'e',\n\t    'ⱸ': 'e',\n\t    'ę': 'e',\n\t    'ᶒ': 'e',\n\t    'ɇ': 'e',\n\t    'ẽ': 'e',\n\t    'ḛ': 'e',\n\t    'ꝫ': 'et',\n\t    'ḟ': 'f',\n\t    'ƒ': 'f',\n\t    'ᵮ': 'f',\n\t    'ᶂ': 'f',\n\t    'ǵ': 'g',\n\t    'ğ': 'g',\n\t    'ǧ': 'g',\n\t    'ģ': 'g',\n\t    'ĝ': 'g',\n\t    'ġ': 'g',\n\t    'ɠ': 'g',\n\t    'ḡ': 'g',\n\t    'ᶃ': 'g',\n\t    'ǥ': 'g',\n\t    'ḫ': 'h',\n\t    'ȟ': 'h',\n\t    'ḩ': 'h',\n\t    'ĥ': 'h',\n\t    'ⱨ': 'h',\n\t    'ḧ': 'h',\n\t    'ḣ': 'h',\n\t    'ḥ': 'h',\n\t    'ɦ': 'h',\n\t    'ẖ': 'h',\n\t    'ħ': 'h',\n\t    'ƕ': 'hv',\n\t    'í': 'i',\n\t    'ĭ': 'i',\n\t    'ǐ': 'i',\n\t    'î': 'i',\n\t    'ï': 'i',\n\t    'ḯ': 'i',\n\t    'ị': 'i',\n\t    'ȉ': 'i',\n\t    'ì': 'i',\n\t    'ỉ': 'i',\n\t    'ȋ': 'i',\n\t    'ī': 'i',\n\t    'į': 'i',\n\t    'ᶖ': 'i',\n\t    'ɨ': 'i',\n\t    'ĩ': 'i',\n\t    'ḭ': 'i',\n\t    'ꝺ': 'd',\n\t    'ꝼ': 'f',\n\t    'ᵹ': 'g',\n\t    'ꞃ': 'r',\n\t    'ꞅ': 's',\n\t    'ꞇ': 't',\n\t    'ꝭ': 'is',\n\t    'ǰ': 'j',\n\t    'ĵ': 'j',\n\t    'ʝ': 'j',\n\t    'ɉ': 'j',\n\t    'ḱ': 'k',\n\t    'ǩ': 'k',\n\t    'ķ': 'k',\n\t    'ⱪ': 'k',\n\t    'ꝃ': 'k',\n\t    'ḳ': 'k',\n\t    'ƙ': 'k',\n\t    'ḵ': 'k',\n\t    'ᶄ': 'k',\n\t    'ꝁ': 'k',\n\t    'ꝅ': 'k',\n\t    'ĺ': 'l',\n\t    'ƚ': 'l',\n\t    'ɬ': 'l',\n\t    'ľ': 'l',\n\t    'ļ': 'l',\n\t    'ḽ': 'l',\n\t    'ȴ': 'l',\n\t    'ḷ': 'l',\n\t    'ḹ': 'l',\n\t    'ⱡ': 'l',\n\t    'ꝉ': 'l',\n\t    'ḻ': 'l',\n\t    'ŀ': 'l',\n\t    'ɫ': 'l',\n\t    'ᶅ': 'l',\n\t    'ɭ': 'l',\n\t    'ł': 'l',\n\t    'lj': 'lj',\n\t    'ſ': 's',\n\t    'ẜ': 's',\n\t    'ẛ': 's',\n\t    'ẝ': 's',\n\t    'ḿ': 'm',\n\t    'ṁ': 'm',\n\t    'ṃ': 'm',\n\t    'ɱ': 'm',\n\t    'ᵯ': 'm',\n\t    'ᶆ': 'm',\n\t    'ń': 'n',\n\t    'ň': 'n',\n\t    'ņ': 'n',\n\t    'ṋ': 'n',\n\t    'ȵ': 'n',\n\t    'ṅ': 'n',\n\t    'ṇ': 'n',\n\t    'ǹ': 'n',\n\t    'ɲ': 'n',\n\t    'ṉ': 'n',\n\t    'ƞ': 'n',\n\t    'ᵰ': 'n',\n\t    'ᶇ': 'n',\n\t    'ɳ': 'n',\n\t    'ñ': 'n',\n\t    'nj': 'nj',\n\t    'ó': 'o',\n\t    'ŏ': 'o',\n\t    'ǒ': 'o',\n\t    'ô': 'o',\n\t    'ố': 'o',\n\t    'ộ': 'o',\n\t    'ồ': 'o',\n\t    'ổ': 'o',\n\t    'ỗ': 'o',\n\t    'ö': 'o',\n\t    'ȫ': 'o',\n\t    'ȯ': 'o',\n\t    'ȱ': 'o',\n\t    'ọ': 'o',\n\t    'ő': 'o',\n\t    'ȍ': 'o',\n\t    'ò': 'o',\n\t    'ỏ': 'o',\n\t    'ơ': 'o',\n\t    'ớ': 'o',\n\t    'ợ': 'o',\n\t    'ờ': 'o',\n\t    'ở': 'o',\n\t    'ỡ': 'o',\n\t    'ȏ': 'o',\n\t    'ꝋ': 'o',\n\t    'ꝍ': 'o',\n\t    'ⱺ': 'o',\n\t    'ō': 'o',\n\t    'ṓ': 'o',\n\t    'ṑ': 'o',\n\t    'ǫ': 'o',\n\t    'ǭ': 'o',\n\t    'ø': 'o',\n\t    'ǿ': 'o',\n\t    'õ': 'o',\n\t    'ṍ': 'o',\n\t    'ṏ': 'o',\n\t    'ȭ': 'o',\n\t    'ƣ': 'oi',\n\t    'ꝏ': 'oo',\n\t    'ɛ': 'e',\n\t    'ᶓ': 'e',\n\t    'ɔ': 'o',\n\t    'ᶗ': 'o',\n\t    'ȣ': 'ou',\n\t    'ṕ': 'p',\n\t    'ṗ': 'p',\n\t    'ꝓ': 'p',\n\t    'ƥ': 'p',\n\t    'ᵱ': 'p',\n\t    'ᶈ': 'p',\n\t    'ꝕ': 'p',\n\t    'ᵽ': 'p',\n\t    'ꝑ': 'p',\n\t    'ꝙ': 'q',\n\t    'ʠ': 'q',\n\t    'ɋ': 'q',\n\t    'ꝗ': 'q',\n\t    'ŕ': 'r',\n\t    'ř': 'r',\n\t    'ŗ': 'r',\n\t    'ṙ': 'r',\n\t    'ṛ': 'r',\n\t    'ṝ': 'r',\n\t    'ȑ': 'r',\n\t    'ɾ': 'r',\n\t    'ᵳ': 'r',\n\t    'ȓ': 'r',\n\t    'ṟ': 'r',\n\t    'ɼ': 'r',\n\t    'ᵲ': 'r',\n\t    'ᶉ': 'r',\n\t    'ɍ': 'r',\n\t    'ɽ': 'r',\n\t    'ↄ': 'c',\n\t    'ꜿ': 'c',\n\t    'ɘ': 'e',\n\t    'ɿ': 'r',\n\t    'ś': 's',\n\t    'ṥ': 's',\n\t    'š': 's',\n\t    'ṧ': 's',\n\t    'ş': 's',\n\t    'ŝ': 's',\n\t    'ș': 's',\n\t    'ṡ': 's',\n\t    'ṣ': 's',\n\t    'ṩ': 's',\n\t    'ʂ': 's',\n\t    'ᵴ': 's',\n\t    'ᶊ': 's',\n\t    'ȿ': 's',\n\t    'ɡ': 'g',\n\t    'ᴑ': 'o',\n\t    'ᴓ': 'o',\n\t    'ᴝ': 'u',\n\t    'ť': 't',\n\t    'ţ': 't',\n\t    'ṱ': 't',\n\t    'ț': 't',\n\t    'ȶ': 't',\n\t    'ẗ': 't',\n\t    'ⱦ': 't',\n\t    'ṫ': 't',\n\t    'ṭ': 't',\n\t    'ƭ': 't',\n\t    'ṯ': 't',\n\t    'ᵵ': 't',\n\t    'ƫ': 't',\n\t    'ʈ': 't',\n\t    'ŧ': 't',\n\t    'ᵺ': 'th',\n\t    'ɐ': 'a',\n\t    'ᴂ': 'ae',\n\t    'ǝ': 'e',\n\t    'ᵷ': 'g',\n\t    'ɥ': 'h',\n\t    'ʮ': 'h',\n\t    'ʯ': 'h',\n\t    'ᴉ': 'i',\n\t    'ʞ': 'k',\n\t    'ꞁ': 'l',\n\t    'ɯ': 'm',\n\t    'ɰ': 'm',\n\t    'ᴔ': 'oe',\n\t    'ɹ': 'r',\n\t    'ɻ': 'r',\n\t    'ɺ': 'r',\n\t    'ⱹ': 'r',\n\t    'ʇ': 't',\n\t    'ʌ': 'v',\n\t    'ʍ': 'w',\n\t    'ʎ': 'y',\n\t    'ꜩ': 'tz',\n\t    'ú': 'u',\n\t    'ŭ': 'u',\n\t    'ǔ': 'u',\n\t    'û': 'u',\n\t    'ṷ': 'u',\n\t    'ü': 'u',\n\t    'ǘ': 'u',\n\t    'ǚ': 'u',\n\t    'ǜ': 'u',\n\t    'ǖ': 'u',\n\t    'ṳ': 'u',\n\t    'ụ': 'u',\n\t    'ű': 'u',\n\t    'ȕ': 'u',\n\t    'ù': 'u',\n\t    'ủ': 'u',\n\t    'ư': 'u',\n\t    'ứ': 'u',\n\t    'ự': 'u',\n\t    'ừ': 'u',\n\t    'ử': 'u',\n\t    'ữ': 'u',\n\t    'ȗ': 'u',\n\t    'ū': 'u',\n\t    'ṻ': 'u',\n\t    'ų': 'u',\n\t    'ᶙ': 'u',\n\t    'ů': 'u',\n\t    'ũ': 'u',\n\t    'ṹ': 'u',\n\t    'ṵ': 'u',\n\t    'ᵫ': 'ue',\n\t    'ꝸ': 'um',\n\t    'ⱴ': 'v',\n\t    'ꝟ': 'v',\n\t    'ṿ': 'v',\n\t    'ʋ': 'v',\n\t    'ᶌ': 'v',\n\t    'ⱱ': 'v',\n\t    'ṽ': 'v',\n\t    'ꝡ': 'vy',\n\t    'ẃ': 'w',\n\t    'ŵ': 'w',\n\t    'ẅ': 'w',\n\t    'ẇ': 'w',\n\t    'ẉ': 'w',\n\t    'ẁ': 'w',\n\t    'ⱳ': 'w',\n\t    'ẘ': 'w',\n\t    'ẍ': 'x',\n\t    'ẋ': 'x',\n\t    'ᶍ': 'x',\n\t    'ý': 'y',\n\t    'ŷ': 'y',\n\t    'ÿ': 'y',\n\t    'ẏ': 'y',\n\t    'ỵ': 'y',\n\t    'ỳ': 'y',\n\t    'ƴ': 'y',\n\t    'ỷ': 'y',\n\t    'ỿ': 'y',\n\t    'ȳ': 'y',\n\t    'ẙ': 'y',\n\t    'ɏ': 'y',\n\t    'ỹ': 'y',\n\t    'ź': 'z',\n\t    'ž': 'z',\n\t    'ẑ': 'z',\n\t    'ʑ': 'z',\n\t    'ⱬ': 'z',\n\t    'ż': 'z',\n\t    'ẓ': 'z',\n\t    'ȥ': 'z',\n\t    'ẕ': 'z',\n\t    'ᵶ': 'z',\n\t    'ᶎ': 'z',\n\t    'ʐ': 'z',\n\t    'ƶ': 'z',\n\t    'ɀ': 'z',\n\t    'ff': 'ff',\n\t    'ffi': 'ffi',\n\t    'ffl': 'ffl',\n\t    'fi': 'fi',\n\t    'fl': 'fl',\n\t    'ij': 'ij',\n\t    'œ': 'oe',\n\t    'st': 'st',\n\t    'ₐ': 'a',\n\t    'ₑ': 'e',\n\t    'ᵢ': 'i',\n\t    'ⱼ': 'j',\n\t    'ₒ': 'o',\n\t    'ᵣ': 'r',\n\t    'ᵤ': 'u',\n\t    'ᵥ': 'v',\n\t    'ₓ': 'x',\n\t    'Ё': 'YO',\n\t    'Й': 'I',\n\t    'Ц': 'TS',\n\t    'У': 'U',\n\t    'К': 'K',\n\t    'Е': 'E',\n\t    'Н': 'N',\n\t    'Г': 'G',\n\t    'Ш': 'SH',\n\t    'Щ': 'SCH',\n\t    'З': 'Z',\n\t    'Х': 'H',\n\t    'Ъ': \"'\",\n\t    'ё': 'yo',\n\t    'й': 'i',\n\t    'ц': 'ts',\n\t    'у': 'u',\n\t    'к': 'k',\n\t    'е': 'e',\n\t    'н': 'n',\n\t    'г': 'g',\n\t    'ш': 'sh',\n\t    'щ': 'sch',\n\t    'з': 'z',\n\t    'х': 'h',\n\t    'ъ': \"'\",\n\t    'Ф': 'F',\n\t    'Ы': 'I',\n\t    'В': 'V',\n\t    'А': 'a',\n\t    'П': 'P',\n\t    'Р': 'R',\n\t    'О': 'O',\n\t    'Л': 'L',\n\t    'Д': 'D',\n\t    'Ж': 'ZH',\n\t    'Э': 'E',\n\t    'ф': 'f',\n\t    'ы': 'i',\n\t    'в': 'v',\n\t    'а': 'a',\n\t    'п': 'p',\n\t    'р': 'r',\n\t    'о': 'o',\n\t    'л': 'l',\n\t    'д': 'd',\n\t    'ж': 'zh',\n\t    'э': 'e',\n\t    'Я': 'Ya',\n\t    'Ч': 'CH',\n\t    'С': 'S',\n\t    'М': 'M',\n\t    'И': 'I',\n\t    'Т': 'T',\n\t    'Ь': \"'\",\n\t    'Б': 'B',\n\t    'Ю': 'YU',\n\t    'я': 'ya',\n\t    'ч': 'ch',\n\t    'с': 's',\n\t    'м': 'm',\n\t    'и': 'i',\n\t    'т': 't',\n\t    'ь': \"'\",\n\t    'б': 'b',\n\t    'ю': 'yu'\n\t  };\n\t\n\t  return latinize;\n\t});\n\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\tvar EmailUtils = (function () {\n\t    function EmailUtils() {\n\t    }\n\t    EmailUtils.splitSemicolonSeparatedListOfEmailAddresses = function (addresses) {\n\t        var addressesAsList = addresses.split(/\\s*;\\s*/);\n\t        return _.filter(addressesAsList, function (s) {\n\t            return Utils_1.Utils.exists(s) && Utils_1.Utils.isNonEmptyString(Utils_1.Utils.trim(s));\n\t        });\n\t    };\n\t    EmailUtils.emailAddressesToHyperlinks = function (addresses, companyDomain, me, lengthLimit, truncateName) {\n\t        if (lengthLimit === void 0) { lengthLimit = 2; }\n\t        if (truncateName === void 0) { truncateName = false; }\n\t        addresses = _.filter(addresses, function (s) {\n\t            return Utils_1.Utils.exists(s) && Utils_1.Utils.isNonEmptyString(Utils_1.Utils.trim(s));\n\t        });\n\t        var hyperlinks = _.map(addresses, function (item) {\n\t            var emailArray = EmailUtils.parseEmail(item);\n\t            var email = emailArray[1];\n\t            var name = emailArray[0];\n\t            if (Utils_1.Utils.exists(me) && email == me) {\n\t                name = Strings_1.l('Me');\n\t            }\n\t            if (truncateName) {\n\t                var split = name.split(' ');\n\t                if (!Utils_1.Utils.isNullOrUndefined(split[1])) {\n\t                    name = split[0] + ' ' + split[1].substring(0, 1) + '.';\n\t                }\n\t            }\n\t            var domainIndex = email.indexOf('@') >= 0 ? email.indexOf('@') + 1 : 0;\n\t            var domain = email.substr(domainIndex);\n\t            if (Utils_1.Utils.exists(companyDomain) && domain != companyDomain) {\n\t                name += ' (' + domain + ')';\n\t            }\n\t            return '<a title=\"' + item.replace(/'/g, '&quot;') + '\" href=\"mailto:' + encodeURI(email) + '\">' + name + '</a>';\n\t        });\n\t        var excess = hyperlinks.length - lengthLimit;\n\t        var andOthers = excess > 0 ? EmailUtils.buildEmailAddressesAndOthers(_.last(hyperlinks, excess)) : '';\n\t        return _.first(hyperlinks, lengthLimit).join(', ') + andOthers;\n\t    };\n\t    EmailUtils.buildEmailAddressesAndOthers = function (excessHyperLinks) {\n\t        return '<span class=\"coveo-emails-excess-collapsed coveo-active\" onclick=\"Coveo.TemplateHelpers.getHelper(\\'excessEmailToggle\\')(this);\"> ' + Strings_1.l('AndOthers', excessHyperLinks.length.toString(), excessHyperLinks.length) + '</span>' +\n\t            '<span class=\"coveo-emails-excess-expanded\"> , ' + excessHyperLinks.join(' , ') + '</span>';\n\t    };\n\t    EmailUtils.parseEmail = function (email) {\n\t        var name;\n\t        var match = email.match(/^\\s*(.*)\\s+<(.*)>$/);\n\t        if (match != null) {\n\t            name = match[1];\n\t            if (/^'.*'|'.*'$/.test(name)) {\n\t                name = name.substr(1, name.length - 2);\n\t            }\n\t            email = match[2];\n\t        }\n\t        else {\n\t            name = email;\n\t            email = email;\n\t        }\n\t        return [name, email];\n\t    };\n\t    return EmailUtils;\n\t}());\n\texports.EmailUtils = EmailUtils;\n\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar HashUtils = (function () {\n\t    function HashUtils() {\n\t    }\n\t    HashUtils.getHash = function (w) {\n\t        if (w === void 0) { w = window; }\n\t        Assert_1.Assert.exists(w);\n\t        // window.location.hash returns the DECODED hash on Firefox (it's a well known bug),\n\t        // so any & in values will be already unescaped. This breaks our value splitting.\n\t        // The following trick works on all browsers.\n\t        var ret = '#' + (w.location.href.split('#')[1] || '');\n\t        return HashUtils.getAjaxcrawlableHash(ret);\n\t    };\n\t    HashUtils.getValue = function (key, toParse) {\n\t        Assert_1.Assert.isNonEmptyString(key);\n\t        Assert_1.Assert.exists(toParse);\n\t        toParse = HashUtils.getAjaxcrawlableHash(toParse);\n\t        var paramValue = HashUtils.getRawValue(key, toParse);\n\t        if (paramValue != undefined) {\n\t            paramValue = HashUtils.getValueDependingOnType(key, paramValue);\n\t        }\n\t        return paramValue;\n\t    };\n\t    HashUtils.encodeValues = function (values) {\n\t        var hash = [];\n\t        _.each(values, function (valueToEncode, key, obj) {\n\t            var encodedValue = '';\n\t            if (Utils_1.Utils.isNonEmptyArray(valueToEncode)) {\n\t                encodedValue = HashUtils.encodeArray(valueToEncode);\n\t            }\n\t            else if (_.isObject(valueToEncode) && Utils_1.Utils.isNonEmptyArray(_.keys(valueToEncode))) {\n\t                encodedValue = HashUtils.encodeObject(valueToEncode);\n\t            }\n\t            else if (!Utils_1.Utils.isNullOrUndefined(valueToEncode)) {\n\t                encodedValue = encodeURIComponent(valueToEncode.toString());\n\t            }\n\t            if (encodedValue != '') {\n\t                hash.push(key + '=' + encodedValue);\n\t            }\n\t        });\n\t        return hash.join('&');\n\t    };\n\t    HashUtils.getAjaxcrawlableHash = function (hash) {\n\t        if (hash[1] != undefined && hash[1] == '!') {\n\t            return hash.substring(0, 1) + hash.substring(2);\n\t        }\n\t        else {\n\t            return hash;\n\t        }\n\t    };\n\t    HashUtils.getRawValue = function (key, toParse) {\n\t        Assert_1.Assert.exists(key);\n\t        Assert_1.Assert.exists(toParse);\n\t        Assert_1.Assert.check(toParse.indexOf('#') == 0 || toParse == '');\n\t        var toParseArray = toParse.substr(1).split('&');\n\t        var paramPos = 0;\n\t        var loop = true;\n\t        var paramValue = undefined;\n\t        while (loop) {\n\t            var paramValuePair = toParseArray[paramPos].split('=');\n\t            if (paramValuePair[0] == key) {\n\t                loop = false;\n\t                paramValue = paramValuePair[1];\n\t            }\n\t            else {\n\t                paramPos++;\n\t                if (paramPos >= toParseArray.length) {\n\t                    paramPos = undefined;\n\t                    loop = false;\n\t                }\n\t            }\n\t        }\n\t        return paramValue;\n\t    };\n\t    HashUtils.getValueDependingOnType = function (key, paramValue) {\n\t        var type = HashUtils.getValueType(key, paramValue);\n\t        var returnValue;\n\t        if (type == 'object') {\n\t            returnValue = HashUtils.decodeObject(paramValue);\n\t        }\n\t        else if (type == 'array') {\n\t            returnValue = HashUtils.decodeArray(paramValue);\n\t        }\n\t        else {\n\t            returnValue = decodeURIComponent(paramValue);\n\t        }\n\t        return returnValue;\n\t    };\n\t    HashUtils.getValueType = function (key, paramValue) {\n\t        if (key == 'q') {\n\t            return 'other';\n\t        }\n\t        else if (HashUtils.isObject(paramValue)) {\n\t            return 'object';\n\t        }\n\t        else if (HashUtils.isArray(paramValue)) {\n\t            return 'array';\n\t        }\n\t        else {\n\t            return 'other';\n\t        }\n\t    };\n\t    HashUtils.isArrayStartNotEncoded = function (value) {\n\t        return value.substr(0, 1) == HashUtils.DELIMITER.arrayStart;\n\t    };\n\t    HashUtils.isArrayStartEncoded = function (value) {\n\t        return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.arrayStart)) == 0;\n\t    };\n\t    HashUtils.isArrayEndNotEncoded = function (value) {\n\t        return value.substr(value.length - 1);\n\t    };\n\t    HashUtils.isArrayEndEncoded = function (value) {\n\t        return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.arrayEnd)) == value.length - encodeURIComponent(HashUtils.DELIMITER.arrayEnd).length;\n\t    };\n\t    HashUtils.isObjectStartNotEncoded = function (value) {\n\t        return value.substr(0, 1) == HashUtils.DELIMITER.objectStart;\n\t    };\n\t    HashUtils.isObjectStartEncoded = function (value) {\n\t        return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.objectStart)) == 0;\n\t    };\n\t    HashUtils.isObjectEndNotEncoded = function (value) {\n\t        return value.substr(value.length - 1) == HashUtils.DELIMITER.objectEnd;\n\t    };\n\t    HashUtils.isObjectEndEncoded = function (value) {\n\t        return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.objectEnd)) == value.length - encodeURIComponent(HashUtils.DELIMITER.objectEnd).length;\n\t    };\n\t    HashUtils.isObject = function (value) {\n\t        var isObjectStart = HashUtils.isObjectStartNotEncoded(value) || HashUtils.isObjectStartEncoded(value);\n\t        var isObjectEnd = HashUtils.isObjectEndNotEncoded(value) || HashUtils.isObjectEndEncoded(value);\n\t        return isObjectStart && isObjectEnd;\n\t    };\n\t    HashUtils.isArray = function (value) {\n\t        var isArrayStart = HashUtils.isArrayStartNotEncoded(value) || HashUtils.isArrayStartEncoded(value);\n\t        var isArrayEnd = HashUtils.isArrayEndNotEncoded(value) || HashUtils.isArrayEndEncoded(value);\n\t        return isArrayStart && isArrayEnd;\n\t    };\n\t    HashUtils.encodeArray = function (array) {\n\t        var arrayReturn = _.map(array, function (value) {\n\t            return encodeURIComponent(value);\n\t        });\n\t        return HashUtils.DELIMITER.arrayStart + arrayReturn.join(',') + HashUtils.DELIMITER.arrayEnd;\n\t    };\n\t    HashUtils.encodeObject = function (obj) {\n\t        var _this = this;\n\t        var retArray = _.map(obj, function (val, key, obj) {\n\t            return \"\\\"\" + encodeURIComponent(key) + \"\\\":\" + _this.encodeValue(val);\n\t        });\n\t        return HashUtils.DELIMITER.objectStart + retArray.join(' , ') + HashUtils.DELIMITER.objectEnd;\n\t    };\n\t    HashUtils.encodeValue = function (val) {\n\t        var encodedValue = '';\n\t        if (_.isArray(val)) {\n\t            encodedValue = HashUtils.encodeArray(val);\n\t        }\n\t        else if (_.isObject(val)) {\n\t            encodedValue = HashUtils.encodeObject(val);\n\t        }\n\t        else if (_.isNumber(val) || _.isBoolean(val)) {\n\t            encodedValue = encodeURIComponent(val.toString());\n\t        }\n\t        else {\n\t            encodedValue = '\"' + encodeURIComponent(val) + '\"';\n\t        }\n\t        return encodedValue;\n\t    };\n\t    HashUtils.decodeObject = function (obj) {\n\t        if (HashUtils.isObjectStartEncoded(obj) && HashUtils.isObjectEndEncoded(obj)) {\n\t            obj = obj.replace(/encodeURIComponent(HashUtils.Delimiter.objectStart)/, HashUtils.DELIMITER.objectStart);\n\t            obj = obj.replace(encodeURIComponent(HashUtils.DELIMITER.objectEnd), HashUtils.DELIMITER.objectEnd);\n\t        }\n\t        return JSON.parse(decodeURIComponent(obj));\n\t    };\n\t    HashUtils.decodeArray = function (value) {\n\t        if (HashUtils.isArrayStartEncoded(value) && HashUtils.isArrayEndEncoded(value)) {\n\t            value = value.replace(encodeURIComponent(HashUtils.DELIMITER.arrayStart), HashUtils.DELIMITER.arrayStart);\n\t            value = value.replace(encodeURIComponent(HashUtils.DELIMITER.arrayEnd), HashUtils.DELIMITER.arrayEnd);\n\t        }\n\t        value = value.substr(1);\n\t        value = value.substr(0, value.length - 1);\n\t        var array = value.split(',');\n\t        return _.map(array, function (val) {\n\t            return decodeURIComponent(val);\n\t        });\n\t    };\n\t    return HashUtils;\n\t}());\n\tHashUtils.DELIMITER = {\n\t    'objectStart': '{',\n\t    'objectEnd': '}',\n\t    'arrayStart': '[',\n\t    'arrayEnd': ']',\n\t    'objectStartRegExp': '^{',\n\t    'objectEndRegExp': '}+$',\n\t    'arrayStartRegExp': '^[',\n\t    'arrayEndRegExp': ']+$'\n\t};\n\texports.HashUtils = HashUtils;\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar _ = __webpack_require__(16);\n\tvar StringAndHoles = (function () {\n\t    function StringAndHoles() {\n\t    }\n\t    StringAndHoles.replace = function (str, find, replace) {\n\t        var strAndHoles = new StringAndHoles();\n\t        if (Utils_1.Utils.isNullOrEmptyString(str)) {\n\t            return strAndHoles;\n\t        }\n\t        var index = str.lastIndexOf(find);\n\t        if (index == -1) {\n\t            strAndHoles.value = str;\n\t            return strAndHoles;\n\t        }\n\t        var holes = [];\n\t        while (index >= 0) {\n\t            var hole = {\n\t                begin: index,\n\t                size: find.length,\n\t                replacementSize: replace.length\n\t            };\n\t            holes.push(hole);\n\t            str = str.slice(0, index) + replace + str.slice(index + find.length);\n\t            index = str.lastIndexOf(find);\n\t        }\n\t        strAndHoles.holes = holes;\n\t        strAndHoles.value = str;\n\t        return strAndHoles;\n\t    };\n\t    /**\n\t     * Shorten the passed path intelligently (path-aware).\n\t     * Works with *local paths* and *network paths*\n\t     * @param uriOrig The path to shorten\n\t     * @param length The length to which the path will be shortened.\n\t     */\n\t    StringAndHoles.shortenPath = function (uriOrig, length) {\n\t        var strAndHoles = new StringAndHoles();\n\t        var uri = uriOrig;\n\t        if (Utils_1.Utils.isNullOrEmptyString(uri) || (uri.length <= length)) {\n\t            strAndHoles.value = uri;\n\t            return strAndHoles;\n\t        }\n\t        var holes = [];\n\t        var first = -1;\n\t        if (Utils_1.Utils.stringStartsWith(uri, '\\\\\\\\')) {\n\t            first = uri.indexOf('\\\\', first + 2);\n\t        }\n\t        else {\n\t            first = uri.indexOf('\\\\');\n\t        }\n\t        if (first !== -1) {\n\t            var removed = 0;\n\t            var next = uri.indexOf('\\\\', first + 1);\n\t            while (next !== -1 && uri.length - removed + StringAndHoles.SHORTEN_END.length > length) {\n\t                removed = next - first - 1;\n\t                next = uri.indexOf('\\\\', next + 1);\n\t            }\n\t            if (removed > 0) {\n\t                uri = uri.slice(0, first + 1) + StringAndHoles.SHORTEN_END + uri.slice(removed);\n\t                var hole = {\n\t                    begin: first + 1,\n\t                    size: removed - StringAndHoles.SHORTEN_END.length,\n\t                    replacementSize: StringAndHoles.SHORTEN_END.length\n\t                };\n\t                holes.push(hole);\n\t            }\n\t        }\n\t        if (uri.length > length) {\n\t            var over = uri.length - length + StringAndHoles.SHORTEN_END.length;\n\t            var start = uri.length - over;\n\t            uri = uri.slice(0, start) + StringAndHoles.SHORTEN_END;\n\t            var hole = {\n\t                begin: start,\n\t                size: over,\n\t                replacementSize: StringAndHoles.SHORTEN_END.length\n\t            };\n\t            holes.push(hole);\n\t        }\n\t        strAndHoles.holes = holes;\n\t        strAndHoles.value = uri;\n\t        return strAndHoles;\n\t    };\n\t    /**\n\t     * Shorten the passed string.\n\t     * @param toShortenOrig The string to shorten\n\t     * @param length The length to which the string will be shortened.\n\t     * @param toAppend The string to append at the end (usually, it is set to '...')\n\t     */\n\t    StringAndHoles.shortenString = function (toShortenOrig, length, toAppend) {\n\t        if (length === void 0) { length = 200; }\n\t        var toShorten = toShortenOrig;\n\t        toAppend = Utils_1.Utils.toNotNullString(toAppend);\n\t        var strAndHoles = new StringAndHoles();\n\t        if (Utils_1.Utils.isNullOrEmptyString(toShorten) || length <= toAppend.length) {\n\t            strAndHoles.value = toShorten;\n\t            return strAndHoles;\n\t        }\n\t        if (toShorten.length <= length) {\n\t            strAndHoles.value = toShorten;\n\t            return strAndHoles;\n\t        }\n\t        var str = toShorten;\n\t        length = length - toAppend.length;\n\t        str = str.slice(0, length);\n\t        if (toShorten.charAt(str.length) !== ' ') {\n\t            var pos = str.lastIndexOf(' ');\n\t            if (pos !== -1 && str.length - pos < StringAndHoles.WORD_SHORTER) {\n\t                str = str.slice(0, pos);\n\t            }\n\t        }\n\t        var holes = [];\n\t        holes[0] = {\n\t            begin: str.length,\n\t            size: toShorten.length - str.length,\n\t            replacementSize: toAppend.length\n\t        };\n\t        str += toAppend;\n\t        strAndHoles.value = str;\n\t        strAndHoles.holes = holes;\n\t        return strAndHoles;\n\t    };\n\t    /**\n\t     * Shorten the passed URI intelligently (path-aware).\n\t     * @param toShortenOrig The URI to shorten\n\t     * @param length The length to which the URI will be shortened.\n\t     */\n\t    StringAndHoles.shortenUri = function (uri, length) {\n\t        var strAndHoles = new StringAndHoles();\n\t        if (Utils_1.Utils.isNullOrEmptyString(uri) || (uri.length <= length)) {\n\t            strAndHoles.value = uri;\n\t            return strAndHoles;\n\t        }\n\t        var holes = [];\n\t        var first = uri.indexOf('//');\n\t        if (first !== -1) {\n\t            first = uri.indexOf('/', first + 2);\n\t        }\n\t        if (first !== -1) {\n\t            var removed = 0;\n\t            var next = uri.indexOf('/', first + 1);\n\t            while (next !== -1 && uri.length - removed + StringAndHoles.SHORTEN_END.length > length) {\n\t                removed = next - first - 1;\n\t                next = uri.indexOf('/', next + 1);\n\t            }\n\t            if (removed > 0) {\n\t                uri = uri.slice(0, first + 1) + StringAndHoles.SHORTEN_END + uri.slice(first + 1 + removed);\n\t                var hole = {\n\t                    begin: first + 1,\n\t                    size: removed,\n\t                    replacementSize: StringAndHoles.SHORTEN_END.length\n\t                };\n\t                holes.push(hole);\n\t            }\n\t        }\n\t        if (uri.length > length) {\n\t            var over = uri.length - length + StringAndHoles.SHORTEN_END.length;\n\t            var start = uri.length - over;\n\t            uri = uri.slice(0, start) + StringAndHoles.SHORTEN_END;\n\t            var hole = {\n\t                begin: start,\n\t                size: over,\n\t                replacementSize: StringAndHoles.SHORTEN_END.length\n\t            };\n\t            holes.push(hole);\n\t        }\n\t        strAndHoles.holes = holes;\n\t        strAndHoles.value = uri;\n\t        return strAndHoles;\n\t    };\n\t    return StringAndHoles;\n\t}());\n\tStringAndHoles.SHORTEN_END = '...';\n\tStringAndHoles.WORD_SHORTER = 10;\n\texports.StringAndHoles = StringAndHoles;\n\tvar HighlightUtils = (function () {\n\t    function HighlightUtils() {\n\t    }\n\t    /**\n\t     * Highlight the passed string using specified highlights and holes.\n\t     * @param content The string to highlight items in.\n\t     * @param highlights The highlighted positions to highlight in the string.\n\t     * @param holes Possible holes which are used to skip highlighting.\n\t     * @param cssClass The css class to use on the highlighting `span`.\n\t     */\n\t    HighlightUtils.highlightString = function (content, highlights, holes, cssClass) {\n\t        Assert_1.Assert.isNotUndefined(highlights);\n\t        Assert_1.Assert.isNotNull(highlights);\n\t        Assert_1.Assert.isNonEmptyString(cssClass);\n\t        if (Utils_1.Utils.isNullOrEmptyString(content)) {\n\t            return content;\n\t        }\n\t        var maxIndex = content.length;\n\t        var highlighted = '';\n\t        var last = 0;\n\t        for (var i = 0; i < highlights.length; i++) {\n\t            var highlight = highlights[i];\n\t            var start = highlight.offset;\n\t            var end = start + highlight.length;\n\t            if (holes !== null) {\n\t                var skip = false;\n\t                for (var j = 0; j < holes.length; j++) {\n\t                    var hole = holes[j];\n\t                    var holeBegin = hole.begin;\n\t                    var holeEnd = holeBegin + hole.size;\n\t                    if (start < holeBegin && end >= holeBegin && end < holeEnd) {\n\t                        end = holeBegin;\n\t                    }\n\t                    else if (start >= holeBegin && end < holeEnd) {\n\t                        skip = true;\n\t                        break;\n\t                    }\n\t                    else if (start >= holeBegin && start < holeEnd && end >= holeEnd) {\n\t                        start = holeBegin + hole.replacementSize;\n\t                        end -= hole.size - hole.replacementSize;\n\t                    }\n\t                    else if (start < holeBegin && end >= holeEnd) {\n\t                        end -= hole.size - hole.replacementSize;\n\t                    }\n\t                    else if (start >= holeEnd) {\n\t                        var offset = hole.size - hole.replacementSize;\n\t                        start -= offset;\n\t                        end -= offset;\n\t                    }\n\t                }\n\t                if (skip || start === end) {\n\t                    continue;\n\t                }\n\t            }\n\t            if (end > maxIndex) {\n\t                break;\n\t            }\n\t            highlighted += _.escape(content.slice(last, start));\n\t            highlighted += \"<span class=\\\"\" + cssClass + \"\\\"\";\n\t            if (highlight.dataHighlightGroup) {\n\t                highlighted += \" data-highlight-group=\\\"\" + highlight.dataHighlightGroup.toString() + \"\\\"\";\n\t            }\n\t            if (highlight.dataHighlightGroupTerm) {\n\t                highlighted += \" data-highlight-group-term=\\\"\" + highlight.dataHighlightGroupTerm + \"\\\"\";\n\t            }\n\t            highlighted += '>';\n\t            highlighted += _.escape(content.slice(start, end));\n\t            highlighted += '</span>';\n\t            last = end;\n\t        }\n\t        if (last != maxIndex) {\n\t            highlighted += _.escape(content.slice(last));\n\t        }\n\t        return highlighted;\n\t    };\n\t    return HighlightUtils;\n\t}());\n\texports.HighlightUtils = HighlightUtils;\n\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar _ = __webpack_require__(16);\n\tvar HTMLUtils = (function () {\n\t    function HTMLUtils() {\n\t    }\n\t    HTMLUtils.buildAttributeString = function (options) {\n\t        var ret = [];\n\t        _.each(options, function (val, key, obj) {\n\t            if (val != undefined) {\n\t                ret.push(key + '=' + JSON.stringify(val.toString()));\n\t            }\n\t        });\n\t        return ret.join(' ');\n\t    };\n\t    return HTMLUtils;\n\t}());\n\texports.HTMLUtils = HTMLUtils;\n\tvar AnchorUtils = (function () {\n\t    function AnchorUtils() {\n\t    }\n\t    AnchorUtils.buildAnchor = function (href, options) {\n\t        var text;\n\t        if (!options || !options.text) {\n\t            text = href;\n\t        }\n\t        else {\n\t            text = options.text;\n\t            options.text = undefined;\n\t        }\n\t        return \"<a href='\" + href + \"' \" + HTMLUtils.buildAttributeString(options) + \">\" + text + \"</a>\";\n\t    };\n\t    return AnchorUtils;\n\t}());\n\texports.AnchorUtils = AnchorUtils;\n\tvar ImageUtils = (function () {\n\t    function ImageUtils() {\n\t    }\n\t    ImageUtils.buildImage = function (src, options) {\n\t        var ret = '<img ';\n\t        ret += src ? \"src='\" + src + \"' \" : '';\n\t        ret += HTMLUtils.buildAttributeString(options) + '/>';\n\t        return ret;\n\t    };\n\t    ImageUtils.selectImageFromResult = function (result) {\n\t        return document.querySelector(\"img[data-coveo-uri-hash=\" + result.raw['urihash'] + \"]\");\n\t    };\n\t    ImageUtils.buildImageWithDirectSrcAttribute = function (endpoint, result) {\n\t        var image = new Image();\n\t        var dataStreamUri = endpoint.getViewAsDatastreamUri(result.uniqueId, '$Thumbnail$', { contentType: 'image/png' });\n\t        image.onload = function () {\n\t            ImageUtils.selectImageFromResult(result).setAttribute('src', dataStreamUri);\n\t        };\n\t        image.src = dataStreamUri;\n\t    };\n\t    ImageUtils.buildImageWithBase64SrcAttribute = function (endpoint, result) {\n\t        endpoint.getRawDataStream(result.uniqueId, '$Thumbnail$')\n\t            .then(function (response) {\n\t            var rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));\n\t            ImageUtils.selectImageFromResult(result).setAttribute('src', 'data:image/png;base64, ' + btoa(rawBinary));\n\t        })\n\t            .catch(function () {\n\t            ImageUtils.selectImageFromResult(result).remove();\n\t        });\n\t    };\n\t    ImageUtils.buildImageFromResult = function (result, endpoint, options) {\n\t        options = options ? options : {};\n\t        var img = ImageUtils.buildImage(undefined, _.extend(options, { 'data-coveo-uri-hash': result.raw['urihash'] }));\n\t        if (endpoint.isJsonp() || DeviceUtils_1.DeviceUtils.isIE8or9()) {\n\t            // For jsonp and IE8-9 (XDomain) we can't GET/POST for binary data. We are limited to only setting the src attribute directly on the img.\n\t            ImageUtils.buildImageWithDirectSrcAttribute(endpoint, result);\n\t        }\n\t        else {\n\t            // Base 64 img allows us to GET/POST the image as raw binary, so that we can also pass the credential of the user\n\t            // Useful for phonegap.\n\t            ImageUtils.buildImageWithBase64SrcAttribute(endpoint, result);\n\t        }\n\t        return img;\n\t    };\n\t    return ImageUtils;\n\t}());\n\texports.ImageUtils = ImageUtils;\n\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar KEYBOARD;\n\t(function (KEYBOARD) {\n\t    KEYBOARD[KEYBOARD[\"BACKSPACE\"] = 8] = \"BACKSPACE\";\n\t    KEYBOARD[KEYBOARD[\"TAB\"] = 9] = \"TAB\";\n\t    KEYBOARD[KEYBOARD[\"ENTER\"] = 13] = \"ENTER\";\n\t    KEYBOARD[KEYBOARD[\"SHIFT\"] = 16] = \"SHIFT\";\n\t    KEYBOARD[KEYBOARD[\"CTRL\"] = 17] = \"CTRL\";\n\t    KEYBOARD[KEYBOARD[\"ALT\"] = 18] = \"ALT\";\n\t    KEYBOARD[KEYBOARD[\"ESCAPE\"] = 27] = \"ESCAPE\";\n\t    KEYBOARD[KEYBOARD[\"SPACEBAR\"] = 32] = \"SPACEBAR\";\n\t    KEYBOARD[KEYBOARD[\"PAGE_UP\"] = 33] = \"PAGE_UP\";\n\t    KEYBOARD[KEYBOARD[\"PAGE_DOWN\"] = 34] = \"PAGE_DOWN\";\n\t    KEYBOARD[KEYBOARD[\"HOME\"] = 36] = \"HOME\";\n\t    KEYBOARD[KEYBOARD[\"LEFT_ARROW\"] = 37] = \"LEFT_ARROW\";\n\t    KEYBOARD[KEYBOARD[\"UP_ARROW\"] = 38] = \"UP_ARROW\";\n\t    KEYBOARD[KEYBOARD[\"RIGHT_ARROW\"] = 39] = \"RIGHT_ARROW\";\n\t    KEYBOARD[KEYBOARD[\"DOWN_ARROW\"] = 40] = \"DOWN_ARROW\";\n\t    KEYBOARD[KEYBOARD[\"INSERT\"] = 45] = \"INSERT\";\n\t    KEYBOARD[KEYBOARD[\"DELETE\"] = 46] = \"DELETE\";\n\t})(KEYBOARD = exports.KEYBOARD || (exports.KEYBOARD = {}));\n\tvar KeyboardUtils = (function () {\n\t    function KeyboardUtils() {\n\t    }\n\t    KeyboardUtils.keysEqual = function (key, code) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(key.keyCode)) {\n\t            return key.keyCode == code;\n\t        }\n\t        else if (!Utils_1.Utils.isNullOrUndefined(key.which)) {\n\t            return key.which == code;\n\t        }\n\t        return false;\n\t    };\n\t    KeyboardUtils.isAllowedKeyForOmnibox = function (e) {\n\t        var keycode = e.keyCode;\n\t        var valid = (KeyboardUtils.isNumberKeyPushed(keycode)) ||\n\t            (keycode == 32 || keycode == 13) ||\n\t            (KeyboardUtils.isLetterKeyPushed(keycode)) ||\n\t            (keycode > 95 && keycode < 112) ||\n\t            (keycode > 185 && keycode < 193) ||\n\t            (keycode > 218 && keycode < 223) ||\n\t            (keycode == KEYBOARD.BACKSPACE || keycode == KEYBOARD.DELETE) ||\n\t            (KeyboardUtils.isArrowKeyPushed(keycode));\n\t        return valid;\n\t    };\n\t    KeyboardUtils.isAllowedKeyForSearchAsYouType = function (e) {\n\t        return KeyboardUtils.isAllowedKeyForOmnibox(e) && !KeyboardUtils.isArrowKeyPushed(e.keyCode);\n\t    };\n\t    KeyboardUtils.isDeleteOrBackspace = function (e) {\n\t        return KeyboardUtils.keysEqual(e, KEYBOARD.BACKSPACE) || KeyboardUtils.keysEqual(e, KEYBOARD.DELETE);\n\t    };\n\t    KeyboardUtils.isArrowKeyPushed = function (keycode) {\n\t        return keycode == KEYBOARD.LEFT_ARROW ||\n\t            keycode == KEYBOARD.UP_ARROW ||\n\t            keycode == KEYBOARD.RIGHT_ARROW ||\n\t            keycode == KEYBOARD.DOWN_ARROW;\n\t    };\n\t    KeyboardUtils.isNumberKeyPushed = function (keycode) {\n\t        return keycode > 47 && keycode < 58;\n\t    };\n\t    KeyboardUtils.isLetterKeyPushed = function (keycode) {\n\t        return keycode > 64 && keycode < 91;\n\t    };\n\t    // Return a keyboard event listener that only executes the function if certain keys are pressed.\n\t    KeyboardUtils.keypressAction = function (keyCode, action) {\n\t        return function (e) {\n\t            var data = [];\n\t            for (var _i = 1; _i < arguments.length; _i++) {\n\t                data[_i - 1] = arguments[_i];\n\t            }\n\t            if (e) {\n\t                var eventCode = e.charCode || e.keyCode;\n\t                if (eventCode) {\n\t                    if (_.isArray(keyCode) && _.contains(keyCode, eventCode)) {\n\t                        action(e);\n\t                    }\n\t                    else if (eventCode === keyCode) {\n\t                        action(e);\n\t                    }\n\t                }\n\t            }\n\t        };\n\t    };\n\t    return KeyboardUtils;\n\t}());\n\texports.KeyboardUtils = KeyboardUtils;\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar localStorage = window.localStorage;\n\tvar LocalStorageUtils = (function () {\n\t    function LocalStorageUtils(id) {\n\t        this.id = id;\n\t    }\n\t    LocalStorageUtils.prototype.save = function (data) {\n\t        try {\n\t            if (localStorage != null) {\n\t                localStorage.setItem(this.getLocalStorageKey(), JSON.stringify(data));\n\t            }\n\t        }\n\t        catch (error) {\n\t        }\n\t    };\n\t    LocalStorageUtils.prototype.load = function () {\n\t        try {\n\t            if (localStorage == null) {\n\t                return null;\n\t            }\n\t            var value = localStorage.getItem(this.getLocalStorageKey());\n\t            return value && JSON.parse(value);\n\t        }\n\t        catch (error) {\n\t            return null;\n\t        }\n\t    };\n\t    LocalStorageUtils.prototype.remove = function (key) {\n\t        try {\n\t            if (localStorage != null) {\n\t                if (key == undefined) {\n\t                    localStorage.removeItem(this.getLocalStorageKey());\n\t                }\n\t                else {\n\t                    var oldObj = this.load();\n\t                    delete oldObj[key];\n\t                    this.save(oldObj);\n\t                }\n\t            }\n\t        }\n\t        catch (error) {\n\t        }\n\t    };\n\t    LocalStorageUtils.prototype.getLocalStorageKey = function () {\n\t        return 'coveo-' + this.id;\n\t    };\n\t    return LocalStorageUtils;\n\t}());\n\texports.LocalStorageUtils = LocalStorageUtils;\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OS_NAME;\n\t(function (OS_NAME) {\n\t    OS_NAME[OS_NAME[\"WINDOWS\"] = 0] = \"WINDOWS\";\n\t    OS_NAME[OS_NAME[\"MACOSX\"] = 1] = \"MACOSX\";\n\t    OS_NAME[OS_NAME[\"UNIX\"] = 2] = \"UNIX\";\n\t    OS_NAME[OS_NAME[\"LINUX\"] = 3] = \"LINUX\";\n\t    OS_NAME[OS_NAME[\"UNKNOWN\"] = 4] = \"UNKNOWN\";\n\t})(OS_NAME = exports.OS_NAME || (exports.OS_NAME = {}));\n\tvar OSUtils = (function () {\n\t    function OSUtils() {\n\t    }\n\t    OSUtils.get = function (nav) {\n\t        if (nav === void 0) { nav = navigator; }\n\t        var osName;\n\t        if (nav.appVersion.indexOf('Win') != -1) {\n\t            osName = OS_NAME.WINDOWS;\n\t        }\n\t        else if (nav.appVersion.indexOf('Mac') != -1) {\n\t            osName = OS_NAME.MACOSX;\n\t        }\n\t        else if (nav.appVersion.indexOf('X11') != -1) {\n\t            osName = OS_NAME.UNIX;\n\t        }\n\t        else if (nav.appVersion.indexOf('Linux') != -1) {\n\t            osName = OS_NAME.LINUX;\n\t        }\n\t        else {\n\t            osName = OS_NAME.UNKNOWN;\n\t        }\n\t        return osName;\n\t    };\n\t    return OSUtils;\n\t}());\n\texports.OSUtils = OSUtils;\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar VerticalAlignment;\n\t(function (VerticalAlignment) {\n\t    VerticalAlignment[VerticalAlignment[\"TOP\"] = 0] = \"TOP\";\n\t    VerticalAlignment[VerticalAlignment[\"MIDDLE\"] = 1] = \"MIDDLE\";\n\t    VerticalAlignment[VerticalAlignment[\"BOTTOM\"] = 2] = \"BOTTOM\";\n\t    VerticalAlignment[VerticalAlignment[\"INNERTOP\"] = 3] = \"INNERTOP\";\n\t    VerticalAlignment[VerticalAlignment[\"INNERBOTTOM\"] = 4] = \"INNERBOTTOM\";\n\t})(VerticalAlignment = exports.VerticalAlignment || (exports.VerticalAlignment = {}));\n\tvar HorizontalAlignment;\n\t(function (HorizontalAlignment) {\n\t    HorizontalAlignment[HorizontalAlignment[\"LEFT\"] = 0] = \"LEFT\";\n\t    HorizontalAlignment[HorizontalAlignment[\"CENTER\"] = 1] = \"CENTER\";\n\t    HorizontalAlignment[HorizontalAlignment[\"RIGHT\"] = 2] = \"RIGHT\";\n\t    HorizontalAlignment[HorizontalAlignment[\"INNERLEFT\"] = 3] = \"INNERLEFT\";\n\t    HorizontalAlignment[HorizontalAlignment[\"INNERRIGHT\"] = 4] = \"INNERRIGHT\";\n\t})(HorizontalAlignment = exports.HorizontalAlignment || (exports.HorizontalAlignment = {}));\n\tvar PopupUtils = (function () {\n\t    function PopupUtils() {\n\t    }\n\t    PopupUtils.positionPopup = function (popUp, nextTo, boundary, desiredPosition, appendTo, checkForBoundary) {\n\t        if (checkForBoundary === void 0) { checkForBoundary = 0; }\n\t        popUp.style.position = 'absolute';\n\t        if (appendTo) {\n\t            Dom_1.$$(appendTo).append(popUp);\n\t        }\n\t        desiredPosition.verticalOffset = desiredPosition.verticalOffset ? desiredPosition.verticalOffset : 0;\n\t        desiredPosition.horizontalOffset = desiredPosition.horizontalOffset ? desiredPosition.horizontalOffset : 0;\n\t        var popUpPosition = Dom_1.$$(nextTo).offset();\n\t        PopupUtils.basicVerticalAlignment(popUpPosition, popUp, nextTo, desiredPosition);\n\t        PopupUtils.basicHorizontalAlignment(popUpPosition, popUp, nextTo, desiredPosition);\n\t        PopupUtils.finalAdjustement(Dom_1.$$(popUp).offset(), popUpPosition, popUp, desiredPosition);\n\t        var popUpBoundary = PopupUtils.getBoundary(popUp);\n\t        var boundaryPosition = PopupUtils.getBoundary(boundary);\n\t        if (checkForBoundary < 2) {\n\t            var checkBoundary = PopupUtils.checkForOutOfBoundary(popUpBoundary, boundaryPosition);\n\t            if (checkBoundary.horizontal != 'ok' && desiredPosition.horizontalClip === true) {\n\t                var width = popUp.offsetWidth;\n\t                if (popUpBoundary.left < boundaryPosition.left) {\n\t                    width -= boundaryPosition.left - popUpBoundary.left;\n\t                }\n\t                if (popUpBoundary.right > boundaryPosition.right) {\n\t                    width -= popUpBoundary.right - boundaryPosition.right;\n\t                }\n\t                popUp.style.width = width + 'px';\n\t                checkBoundary.horizontal = 'ok';\n\t            }\n\t            if (checkBoundary.vertical != 'ok' || checkBoundary.horizontal != 'ok') {\n\t                var newDesiredPosition = PopupUtils.alignInsideBoundary(desiredPosition, checkBoundary);\n\t                PopupUtils.positionPopup(popUp, nextTo, boundary, newDesiredPosition, appendTo, checkForBoundary + 1);\n\t            }\n\t        }\n\t    };\n\t    PopupUtils.finalAdjustement = function (popUpOffSet, popUpPosition, popUp, desiredPosition) {\n\t        var position = Dom_1.$$(popUp).position();\n\t        popUp.style.top = (position.top + desiredPosition.verticalOffset) - (popUpOffSet.top - popUpPosition.top) + 'px';\n\t        popUp.style.left = (position.left + desiredPosition.horizontalOffset) - (popUpOffSet.left - popUpPosition.left) + 'px';\n\t    };\n\t    PopupUtils.basicVerticalAlignment = function (popUpPosition, popUp, nextTo, desiredPosition) {\n\t        switch (desiredPosition.vertical) {\n\t            case VerticalAlignment.TOP:\n\t                popUpPosition.top -= popUp.offsetHeight;\n\t                break;\n\t            case VerticalAlignment.BOTTOM:\n\t                popUpPosition.top += nextTo.offsetHeight;\n\t                break;\n\t            case VerticalAlignment.MIDDLE:\n\t                popUpPosition.top -= popUp.offsetHeight / 3;\n\t            case VerticalAlignment.INNERTOP:\n\t                break; // Nothing to do, it's the default alignment normally\n\t            case VerticalAlignment.INNERBOTTOM:\n\t                popUpPosition.top -= popUp.offsetHeight - nextTo.offsetHeight;\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t    };\n\t    PopupUtils.basicHorizontalAlignment = function (popUpPosition, popUp, nextTo, desiredPosition) {\n\t        switch (desiredPosition.horizontal) {\n\t            case HorizontalAlignment.LEFT:\n\t                popUpPosition.left -= popUp.offsetWidth;\n\t                break;\n\t            case HorizontalAlignment.RIGHT:\n\t                popUpPosition.left += nextTo.offsetWidth;\n\t                break;\n\t            case HorizontalAlignment.CENTER:\n\t                popUpPosition.left += PopupUtils.offSetToAlignCenter(popUp, nextTo);\n\t                break;\n\t            case HorizontalAlignment.INNERLEFT:\n\t                break; // Nothing to do, it's the default alignment normally\n\t            case HorizontalAlignment.INNERRIGHT:\n\t                popUpPosition.left -= popUp.offsetWidth - nextTo.offsetWidth;\n\t                break;\n\t            default:\n\t                break;\n\t        }\n\t    };\n\t    PopupUtils.alignInsideBoundary = function (oldPosition, checkBoundary) {\n\t        var newDesiredPosition = oldPosition;\n\t        if (checkBoundary.horizontal == 'left') {\n\t            newDesiredPosition.horizontal = HorizontalAlignment.RIGHT;\n\t        }\n\t        if (checkBoundary.horizontal == 'right') {\n\t            newDesiredPosition.horizontal = HorizontalAlignment.LEFT;\n\t        }\n\t        if (checkBoundary.vertical == 'top') {\n\t            newDesiredPosition.vertical = VerticalAlignment.BOTTOM;\n\t        }\n\t        if (checkBoundary.vertical == 'bottom') {\n\t            newDesiredPosition.vertical = VerticalAlignment.TOP;\n\t        }\n\t        return newDesiredPosition;\n\t    };\n\t    PopupUtils.offSetToAlignCenter = function (popUp, nextTo) {\n\t        return (nextTo.offsetWidth - popUp.offsetWidth) / 2;\n\t    };\n\t    PopupUtils.getBoundary = function (element) {\n\t        var boundaryOffset = Dom_1.$$(element).offset();\n\t        var toAddVertically;\n\t        if (element.tagName.toLowerCase() == 'body') {\n\t            toAddVertically = Math.max(element.scrollHeight, element.offsetHeight);\n\t        }\n\t        else if (element.tagName.toLowerCase() == 'html') {\n\t            toAddVertically = Math.max(element.clientHeight, element.scrollHeight, element.offsetHeight);\n\t        }\n\t        else {\n\t            toAddVertically = element.offsetHeight;\n\t        }\n\t        return {\n\t            top: boundaryOffset.top,\n\t            left: boundaryOffset.left,\n\t            right: boundaryOffset.left + element.offsetWidth,\n\t            bottom: boundaryOffset.top + toAddVertically\n\t        };\n\t    };\n\t    PopupUtils.checkForOutOfBoundary = function (popUpBoundary, boundary) {\n\t        var ret = {\n\t            vertical: 'ok',\n\t            horizontal: 'ok'\n\t        };\n\t        if (popUpBoundary.top < boundary.top) {\n\t            ret.vertical = 'top';\n\t        }\n\t        if (popUpBoundary.bottom > boundary.bottom) {\n\t            ret.vertical = 'bottom';\n\t        }\n\t        if (popUpBoundary.left < boundary.left) {\n\t            ret.horizontal = 'left';\n\t        }\n\t        if (popUpBoundary.right > boundary.right) {\n\t            ret.horizontal = 'right';\n\t        }\n\t        return ret;\n\t    };\n\t    return PopupUtils;\n\t}());\n\texports.PopupUtils = PopupUtils;\n\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Options_1 = __webpack_require__(36);\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t// \\u2011: http://graphemica.com/%E2%80%91\n\t// Used to split terms and phrases. Should match characters that can separate words.\n\tvar wordBoundary = '[\\\\.\\\\-\\\\u2011\\\\s~=,.\\\\|\\\\/:\\'`’;_()!?&+]';\n\tvar regexStart = '(' + wordBoundary + '|^)(';\n\tvar DefaultStreamHighlightOptions = (function (_super) {\n\t    __extends(DefaultStreamHighlightOptions, _super);\n\t    function DefaultStreamHighlightOptions(cssClass, shorten, regexFlags) {\n\t        if (cssClass === void 0) { cssClass = 'coveo-highlight'; }\n\t        if (shorten === void 0) { shorten = 0; }\n\t        if (regexFlags === void 0) { regexFlags = 'gi'; }\n\t        var _this = _super.call(this) || this;\n\t        _this.cssClass = cssClass;\n\t        _this.shorten = shorten;\n\t        _this.regexFlags = regexFlags;\n\t        return _this;\n\t    }\n\t    return DefaultStreamHighlightOptions;\n\t}(Options_1.Options));\n\tvar StreamHighlightUtils = (function () {\n\t    function StreamHighlightUtils() {\n\t    }\n\t    StreamHighlightUtils.highlightStreamHTML = function (stream, termsToHighlight, phrasesToHighlight, options) {\n\t        var opts = new DefaultStreamHighlightOptions().merge(options);\n\t        var container = createStreamHTMLContainer(stream);\n\t        var allElements = Dom_1.$$(container).findAll('*');\n\t        if (allElements.length > 0) {\n\t            _.each(allElements, function (elem, i) {\n\t                var text = Dom_1.$$(elem).text();\n\t                elem.innerHTML = HighlightUtils_1.HighlightUtils.highlightString(text, getRestHighlightsForAllTerms(text, termsToHighlight, phrasesToHighlight, opts), [], opts.cssClass);\n\t            });\n\t        }\n\t        else {\n\t            return StreamHighlightUtils.highlightStreamText(stream, termsToHighlight, phrasesToHighlight, options);\n\t        }\n\t        return container.innerHTML;\n\t    };\n\t    StreamHighlightUtils.highlightStreamText = function (stream, termsToHighlight, phrasesToHighlight, options) {\n\t        var opts = new DefaultStreamHighlightOptions().merge(options);\n\t        return HighlightUtils_1.HighlightUtils.highlightString(stream, getRestHighlightsForAllTerms(stream, termsToHighlight, phrasesToHighlight, opts), [], opts.cssClass);\n\t    };\n\t    return StreamHighlightUtils;\n\t}());\n\texports.StreamHighlightUtils = StreamHighlightUtils;\n\tfunction getRestHighlightsForAllTerms(toHighlight, termsToHighlight, phrasesToHighlight, opts) {\n\t    var indexes = [];\n\t    var sortedTerms = _.keys(termsToHighlight).sort(termsSorting);\n\t    _.each(sortedTerms, function (term) {\n\t        var termsToIterate = _.compact([term].concat(termsToHighlight[term]).sort(termsSorting));\n\t        termsToIterate = _.map(termsToIterate, function (term) { return Utils_1.Utils.escapeRegexCharacter(term); });\n\t        var regex = regexStart;\n\t        regex += termsToIterate.join('|') + ')(?=(?:' + wordBoundary + '|$)+)';\n\t        var indexesFound = StringUtils_1.StringUtils.getHighlights(toHighlight, new RegExp(regex, opts.regexFlags), term);\n\t        if (indexesFound != undefined && Utils_1.Utils.isNonEmptyArray(indexesFound)) {\n\t            indexes.push(indexesFound);\n\t        }\n\t    });\n\t    _.each(phrasesToHighlight, function (phrase, origPhrase) {\n\t        var split = origPhrase.split(' ');\n\t        var regex = regexStart;\n\t        _.each(split, function (origWord, i) {\n\t            regex += '(?:' + [origWord].concat(phrase[origWord]).join('|') + ')';\n\t            if (i == split.length - 1) {\n\t                regex += '(?=';\n\t            }\n\t            regex += wordBoundary;\n\t            if (i == split.length - 1) {\n\t                regex += '|$)';\n\t            }\n\t            if (i != split.length - 1) {\n\t                regex += '+';\n\t            }\n\t        });\n\t        regex += ')';\n\t        var indexesFound = StringUtils_1.StringUtils.getHighlights(toHighlight, new RegExp(regex, opts.regexFlags), origPhrase);\n\t        if (indexesFound != undefined && Utils_1.Utils.isNonEmptyArray(indexesFound)) {\n\t            indexes.push(indexesFound);\n\t        }\n\t    });\n\t    return _.chain(indexes)\n\t        .flatten()\n\t        .compact()\n\t        .uniq(function (highlight) {\n\t        return highlight.offset;\n\t    })\n\t        .sortBy(function (highlight) {\n\t        return highlight.offset;\n\t    })\n\t        .map(function (highlight) {\n\t        var keysFromTerms = _.keys(termsToHighlight);\n\t        var keysFromPhrases = _.keys(phrasesToHighlight);\n\t        var keys = keysFromTerms.concat(keysFromPhrases);\n\t        var group = _.indexOf(keys, highlight.dataHighlightGroupTerm) + 1;\n\t        return _.extend(highlight, { dataHighlightGroup: group });\n\t    })\n\t        .value();\n\t}\n\tfunction termsSorting(first, second) {\n\t    return first.length - second.length;\n\t}\n\tfunction createStreamHTMLContainer(stream) {\n\t    var container = Dom_1.$$('div').el;\n\t    container.innerHTML = stream;\n\t    return container;\n\t}\n\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar QueryController_1 = __webpack_require__(76);\n\texports.QueryController = QueryController_1.QueryController;\n\tvar FacetQueryController_1 = __webpack_require__(93);\n\texports.FacetQueryController = FacetQueryController_1.FacetQueryController;\n\tvar FacetRangeQueryController_1 = __webpack_require__(96);\n\texports.FacetRangeQueryController = FacetRangeQueryController_1.FacetRangeQueryController;\n\tvar FacetSliderQueryController_1 = __webpack_require__(97);\n\texports.FacetSliderQueryController = FacetSliderQueryController_1.FacetSliderQueryController;\n\tvar HierarchicalFacetQueryController_1 = __webpack_require__(98);\n\texports.HierarchicalFacetQueryController = HierarchicalFacetQueryController_1.HierarchicalFacetQueryController;\n\tvar HistoryController_1 = __webpack_require__(99);\n\texports.HistoryController = HistoryController_1.HistoryController;\n\tvar LocalStorageHistoryController_1 = __webpack_require__(101);\n\texports.LocalStorageHistoryController = LocalStorageHistoryController_1.LocalStorageHistoryController;\n\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar RootComponent_1 = __webpack_require__(77);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar SearchEndpointWithDefaultCallOptions_1 = __webpack_require__(81);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar coveo_analytics_1 = __webpack_require__(82);\n\tvar _ = __webpack_require__(16);\n\tvar DefaultQueryOptions = (function () {\n\t    function DefaultQueryOptions() {\n\t        this.searchAsYouType = false;\n\t        this.closeModalBox = true;\n\t        this.cancel = false;\n\t        this.logInActionsHistory = false;\n\t    }\n\t    return DefaultQueryOptions;\n\t}());\n\t/**\n\t * This class is automatically instantiated and bound to the root of your search interface when you initialize the framework.<br/>\n\t * It is essentially a singleton that wraps the access to the {@link SearchEndpoint} endpoint to execute query, and is in charge of triggering the different query events.<br/>\n\t * This is what every component of the framework uses internally to execute query or access the endpoint.<br/>\n\t * When calling <code>Coveo.executeQuery</code> this class is used.\n\t */\n\tvar QueryController = (function (_super) {\n\t    __extends(QueryController, _super);\n\t    /**\n\t     * Create a new query controller\n\t     * @param element\n\t     * @param options\n\t     */\n\t    function QueryController(element, options, usageAnalytics, searchInterface) {\n\t        var _this = _super.call(this, element, QueryController.ID) || this;\n\t        _this.options = options;\n\t        _this.usageAnalytics = usageAnalytics;\n\t        _this.searchInterface = searchInterface;\n\t        _this.showingExecutingQueryAnimation = false;\n\t        _this.localStorage = new LocalStorageUtils_1.LocalStorageUtils('lastQueryHash');\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(options);\n\t        _this.firstQuery = true;\n\t        _this.historyStore = new coveo_analytics_1.history.HistoryStore();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Set the {@link SearchEndpoint} that the query controller should use to execute query\n\t     * @param endpoint\n\t     */\n\t    QueryController.prototype.setEndpoint = function (endpoint) {\n\t        this.overrideEndpoint = endpoint;\n\t        this.logger.debug('Endpoint set', endpoint);\n\t    };\n\t    /**\n\t     * Get the {@link SearchEndpoint} that is currently used by the query controller to execute query\n\t     * @returns {SearchEndpoint}\n\t     */\n\t    QueryController.prototype.getEndpoint = function () {\n\t        var endpoint = this.overrideEndpoint || this.options.endpoint;\n\t        // We must wrap the endpoint in a decorator that'll add the call options\n\t        // we obtain by firing the proper event. Those are used for authentication\n\t        // providers, and I guess other stuff later on.\n\t        return new SearchEndpointWithDefaultCallOptions_1.SearchEndpointWithDefaultCallOptions(endpoint, this.getCallOptions());\n\t    };\n\t    /**\n\t     * Return the last query that was performed by the query controller\n\t     * @returns {IQuery|Query}\n\t     */\n\t    QueryController.prototype.getLastQuery = function () {\n\t        return this.lastQuery || new QueryBuilder_1.QueryBuilder().build();\n\t    };\n\t    /**\n\t     * Return the last query results set.\n\t     * @returns {IQueryResults}\n\t     */\n\t    QueryController.prototype.getLastResults = function () {\n\t        return this.lastQueryResults;\n\t    };\n\t    /**\n\t     * Execute a query and return a Promise of IQueryResults.<br/>\n\t     * This will execute the normal query flow, triggering all the necessary query events (newQuery <br/>\n\t     * All components present in the interface will act accordingly (modify the query and render results if needed).\n\t     * @param options\n\t     * @returns {Promise<IQueryResults>}\n\t     */\n\t    QueryController.prototype.executeQuery = function (options) {\n\t        var _this = this;\n\t        options = _.extend(new DefaultQueryOptions(), options);\n\t        if (options.closeModalBox) {\n\t            ExternalModulesShim_1.ModalBox.close(true);\n\t        }\n\t        this.logger.debug('Executing new query');\n\t        this.cancelAnyCurrentPendingQuery();\n\t        if (options.beforeExecuteQuery != null) {\n\t            options.beforeExecuteQuery();\n\t        }\n\t        if (!options.ignoreWarningSearchEvent) {\n\t            this.usageAnalytics.warnAboutSearchEvent();\n\t        }\n\t        this.showExecutingQueryAnimation();\n\t        var dataToSendOnNewQuery = {\n\t            searchAsYouType: options.searchAsYouType,\n\t            cancel: options.cancel,\n\t            origin: options.origin\n\t        };\n\t        this.newQueryEvent(dataToSendOnNewQuery);\n\t        if (dataToSendOnNewQuery.cancel) {\n\t            this.cancelQuery();\n\t            return;\n\t        }\n\t        var queryBuilder = this.createQueryBuilder(options);\n\t        // The query was canceled\n\t        if (!queryBuilder) {\n\t            return;\n\t        }\n\t        var query = queryBuilder.build();\n\t        if (options.logInActionsHistory) {\n\t            this.logQueryInActionsHistory(query, options.isFirstQuery);\n\t        }\n\t        var endpointToUse = this.getEndpoint();\n\t        var promise = this.currentPendingQuery = endpointToUse.search(query);\n\t        promise.then(function (queryResults) {\n\t            Assert_1.Assert.exists(queryResults);\n\t            var firstQuery = _this.firstQuery;\n\t            if (_this.firstQuery) {\n\t                _this.firstQuery = false;\n\t            }\n\t            // If our promise is no longer the current one, then the query\n\t            // has been cancel. We should do nothing here.\n\t            if (promise !== _this.currentPendingQuery) {\n\t                return;\n\t            }\n\t            _this.logger.debug('Query results received', query, queryResults);\n\t            var enableHistory = _this.searchInterface && _this.searchInterface.options && _this.searchInterface.options.enableHistory;\n\t            if ((!firstQuery || enableHistory) && _this.keepLastSearchUid(query, queryResults)) {\n\t                queryResults.searchUid = _this.getLastSearchUid();\n\t                queryResults._reusedSearchUid = true;\n\t                QueryUtils_1.QueryUtils.setPropertyOnResults(queryResults, 'queryUid', _this.getLastSearchUid());\n\t            }\n\t            else {\n\t                _this.lastQueryHash = _this.queryHash(query, queryResults);\n\t                _this.lastSearchUid = queryResults.searchUid;\n\t            }\n\t            _this.lastQuery = query;\n\t            _this.lastQueryResults = queryResults;\n\t            _this.currentError = null;\n\t            var dataToSendOnPreprocessResult = {\n\t                queryBuilder: queryBuilder,\n\t                query: query,\n\t                results: queryResults,\n\t                searchAsYouType: options.searchAsYouType\n\t            };\n\t            _this.preprocessResultsEvent(dataToSendOnPreprocessResult);\n\t            var dataToSendOnNoResult = {\n\t                queryBuilder: queryBuilder,\n\t                query: query,\n\t                results: queryResults,\n\t                searchAsYouType: options.searchAsYouType,\n\t                retryTheQuery: false\n\t            };\n\t            if (queryResults.results.length == 0) {\n\t                _this.noResultEvent(dataToSendOnNoResult);\n\t            }\n\t            if (dataToSendOnNoResult.retryTheQuery) {\n\t                // When retrying the query, we must forward the results to the deferred we\n\t                // initially returned, in case someone is listening on it.\n\t                return _this.executeQuery();\n\t            }\n\t            else {\n\t                _this.lastQueryBuilder = queryBuilder;\n\t                _this.currentPendingQuery = undefined;\n\t                var dataToSendOnSuccess_1 = {\n\t                    queryBuilder: queryBuilder,\n\t                    query: query,\n\t                    results: queryResults,\n\t                    searchAsYouType: options.searchAsYouType\n\t                };\n\t                _this.querySuccessEvent(dataToSendOnSuccess_1);\n\t                Defer_1.Defer.defer(function () {\n\t                    _this.deferredQuerySuccessEvent(dataToSendOnSuccess_1);\n\t                    _this.hideExecutingQueryAnimation();\n\t                });\n\t                return queryResults;\n\t            }\n\t        }).catch(function (error) {\n\t            // If our deferred is no longer the current one, then the query\n\t            // has been cancel. We should do nothing here.\n\t            if (promise !== _this.currentPendingQuery) {\n\t                return;\n\t            }\n\t            _this.logger.error('Query triggered an error', query, error);\n\t            // this.currentPendingQuery.reject(error);\n\t            _this.currentPendingQuery = undefined;\n\t            var dataToSendOnError = {\n\t                queryBuilder: queryBuilder,\n\t                endpoint: endpointToUse,\n\t                query: query,\n\t                error: error,\n\t                searchAsYouType: options.searchAsYouType\n\t            };\n\t            _this.lastQuery = query;\n\t            _this.lastQueryResults = null;\n\t            _this.currentError = error;\n\t            _this.queryError(dataToSendOnError);\n\t            _this.hideExecutingQueryAnimation();\n\t        });\n\t        var dataToSendDuringQuery = {\n\t            queryBuilder: queryBuilder,\n\t            query: query,\n\t            searchAsYouType: options.searchAsYouType,\n\t            promise: promise\n\t        };\n\t        this.duringQueryEvent(dataToSendDuringQuery);\n\t        return this.currentPendingQuery;\n\t    };\n\t    /**\n\t     * Using the same parameters as the last successful query, fetch another batch of results. Particularly useful for infinite scrolling, for example.\n\t     * @param count\n\t     * @returns {any}\n\t     */\n\t    QueryController.prototype.fetchMore = function (count) {\n\t        var _this = this;\n\t        if (this.currentPendingQuery != undefined) {\n\t            return undefined;\n\t        }\n\t        // Send all pending events (think : search as you type)\n\t        // This allows us to get the real search id for the results when the query returns\n\t        this.usageAnalytics.sendAllPendingEvents();\n\t        var queryBuilder = new QueryBuilder_1.QueryBuilder();\n\t        this.continueLastQueryBuilder(queryBuilder, count);\n\t        var query = queryBuilder.build();\n\t        var endpointToUse = this.getEndpoint();\n\t        var promise = this.currentPendingQuery = endpointToUse.search(query);\n\t        var dataToSendDuringQuery = {\n\t            queryBuilder: queryBuilder,\n\t            query: query,\n\t            searchAsYouType: false,\n\t            promise: promise\n\t        };\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.duringFetchMoreQuery, dataToSendDuringQuery);\n\t        this.lastQueryBuilder = queryBuilder;\n\t        this.lastQuery = query;\n\t        promise.then(function (results) {\n\t            // We re-use the search id from the initial search here, even though the\n\t            // server provided us with a new one. 'Fetch mores' are considered to be\n\t            // the same query from an analytics point of view.\n\t            _this.currentPendingQuery = undefined;\n\t            if (_this.lastQueryResults == null) {\n\t                _this.lastQueryResults = results;\n\t            }\n\t            else {\n\t                _.forEach(results.results, function (result) {\n\t                    _this.lastQueryResults.results.push(result);\n\t                });\n\t            }\n\t            var dataToSendOnPreprocessResult = {\n\t                queryBuilder: queryBuilder,\n\t                query: query,\n\t                results: results,\n\t                searchAsYouType: false\n\t            };\n\t            _this.preprocessResultsEvent(dataToSendOnPreprocessResult);\n\t            QueryUtils_1.QueryUtils.setIndexAndUidOnQueryResults(query, results, _this.getLastSearchUid(), results.pipeline, results.splitTestRun);\n\t            var dataToSendOnFetchMoreSuccess = {\n\t                query: query,\n\t                results: results,\n\t                queryBuilder: queryBuilder,\n\t                searchAsYouType: false\n\t            };\n\t            _this.fetchMoreSuccessEvent(dataToSendOnFetchMoreSuccess);\n\t        });\n\t        return this.currentPendingQuery;\n\t    };\n\t    /**\n\t     * Cancel any pending query\n\t     */\n\t    QueryController.prototype.cancelQuery = function () {\n\t        this.cancelAnyCurrentPendingQuery();\n\t        this.hideExecutingQueryAnimation();\n\t    };\n\t    QueryController.prototype.deferExecuteQuery = function (options) {\n\t        var _this = this;\n\t        this.showExecutingQueryAnimation();\n\t        Defer_1.Defer.defer(function () { return _this.executeQuery(options); });\n\t    };\n\t    QueryController.prototype.ensureCreatedQueryBuilder = function () {\n\t        if (!this.createdOneQueryBuilder) {\n\t            this.createQueryBuilder(new DefaultQueryOptions());\n\t        }\n\t    };\n\t    QueryController.prototype.createQueryBuilder = function (options) {\n\t        Assert_1.Assert.exists(options);\n\t        this.createdOneQueryBuilder = true;\n\t        var queryBuilder = new QueryBuilder_1.QueryBuilder();\n\t        // Default values, components will probably override them if they exists\n\t        queryBuilder.language = String['locale'];\n\t        queryBuilder.firstResult = queryBuilder.firstResult || 0;\n\t        // Allow outside code to customize the query builder. We provide two events,\n\t        // to allow someone to have a peep at the query builder after the first phase\n\t        // and add some stuff depending on what was put in there. The facets are using\n\t        // this mechanism to generate query overrides.\n\t        var dataToSendDuringBuildingQuery = {\n\t            queryBuilder: queryBuilder,\n\t            searchAsYouType: options.searchAsYouType,\n\t            cancel: options.cancel\n\t        };\n\t        this.buildingQueryEvent(dataToSendDuringBuildingQuery);\n\t        var dataToSendDuringDoneBuildingQuery = {\n\t            queryBuilder: queryBuilder,\n\t            searchAsYouType: options.searchAsYouType,\n\t            cancel: options.cancel\n\t        };\n\t        this.doneBuildingQueryEvent(dataToSendDuringDoneBuildingQuery);\n\t        if (dataToSendDuringBuildingQuery.cancel || dataToSendDuringDoneBuildingQuery.cancel) {\n\t            this.cancelQuery();\n\t            return;\n\t        }\n\t        var pipeline = this.getPipelineInUrl();\n\t        if (pipeline) {\n\t            queryBuilder.pipeline = pipeline;\n\t        }\n\t        return queryBuilder;\n\t    };\n\t    QueryController.prototype.isStandaloneSearchbox = function () {\n\t        return Utils_1.Utils.isNonEmptyString(this.options.searchPageUri);\n\t    };\n\t    QueryController.prototype.saveLastQuery = function () {\n\t        this.localStorage.save({\n\t            expire: new Date().getTime() + 1000 * 60 * 30,\n\t            hash: this.lastQueryHash,\n\t            uid: this.lastSearchUid\n\t        });\n\t    };\n\t    // This field is exposed for components rendered in the results or on-demand which\n\t    // need access to the entire query. For example, the QuickviewDocument need to pass\n\t    // the entire query to the Search API. For other components, QueryStateModel or\n\t    // listening to events like 'doneBuildingQuery' is the way to go.\n\t    QueryController.prototype.getLastQueryHash = function () {\n\t        if (this.lastQueryHash != null) {\n\t            return this.lastQueryHash;\n\t        }\n\t        this.loadLastQueryHash();\n\t        return this.lastQueryHash || this.queryHash(new QueryBuilder_1.QueryBuilder().build());\n\t    };\n\t    QueryController.prototype.getLastSearchUid = function () {\n\t        if (this.lastSearchUid != null) {\n\t            return this.lastSearchUid;\n\t        }\n\t        this.loadLastQueryHash();\n\t        return this.lastSearchUid;\n\t    };\n\t    QueryController.prototype.loadLastQueryHash = function () {\n\t        var lastQuery = this.localStorage.load();\n\t        if (lastQuery != null && new Date().getTime() <= lastQuery.expire) {\n\t            this.lastQueryHash = lastQuery.hash;\n\t            this.lastSearchUid = lastQuery.uid;\n\t            this.localStorage.remove();\n\t        }\n\t    };\n\t    QueryController.prototype.continueLastQueryBuilder = function (queryBuilder, count) {\n\t        _.extend(queryBuilder, this.lastQueryBuilder);\n\t        queryBuilder.firstResult = queryBuilder.firstResult + queryBuilder.numberOfResults;\n\t        queryBuilder.numberOfResults = count;\n\t    };\n\t    QueryController.prototype.getPipelineInUrl = function () {\n\t        return QueryUtils_1.QueryUtils.getUrlParameter('pipeline');\n\t    };\n\t    QueryController.prototype.cancelAnyCurrentPendingQuery = function () {\n\t        if (Utils_1.Utils.exists(this.currentPendingQuery)) {\n\t            this.logger.debug('Cancelling current pending query');\n\t            Promise.reject('Cancelling current pending query');\n\t            this.currentPendingQuery = undefined;\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    QueryController.prototype.showExecutingQueryAnimation = function () {\n\t        if (!this.showingExecutingQueryAnimation) {\n\t            Dom_1.$$(this.element).addClass('coveo-executing-query');\n\t            this.showingExecutingQueryAnimation = true;\n\t        }\n\t    };\n\t    QueryController.prototype.hideExecutingQueryAnimation = function () {\n\t        if (this.showingExecutingQueryAnimation) {\n\t            Dom_1.$$(this.element).removeClass('coveo-executing-query');\n\t            this.showingExecutingQueryAnimation = false;\n\t        }\n\t    };\n\t    QueryController.prototype.keepLastSearchUid = function (query, queryResults) {\n\t        return this.getLastQueryHash() == this.queryHash(query, queryResults);\n\t    };\n\t    QueryController.prototype.queryHash = function (query, queryResults) {\n\t        var queryHash = JSON.stringify(_.omit(query, 'firstResult', 'groupBy', 'debug'));\n\t        if (queryResults != null) {\n\t            queryHash += queryResults.pipeline;\n\t        }\n\t        return queryHash;\n\t    };\n\t    QueryController.prototype.getCallOptions = function () {\n\t        var args = {\n\t            options: {\n\t                authentication: []\n\t            }\n\t        };\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.buildingCallOptions, args);\n\t        return args.options;\n\t    };\n\t    QueryController.prototype.newQueryEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.newQuery, args);\n\t    };\n\t    QueryController.prototype.buildingQueryEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.buildingQuery, args);\n\t    };\n\t    QueryController.prototype.doneBuildingQueryEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.doneBuildingQuery, args);\n\t    };\n\t    QueryController.prototype.duringQueryEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.duringQuery, args);\n\t    };\n\t    QueryController.prototype.querySuccessEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.querySuccess, args);\n\t    };\n\t    QueryController.prototype.fetchMoreSuccessEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.fetchMoreSuccess, args);\n\t    };\n\t    QueryController.prototype.deferredQuerySuccessEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.deferredQuerySuccess, args);\n\t    };\n\t    QueryController.prototype.queryError = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.queryError, args);\n\t    };\n\t    QueryController.prototype.preprocessResultsEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.preprocessResults, args);\n\t    };\n\t    QueryController.prototype.noResultEvent = function (args) {\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.noResults, args);\n\t    };\n\t    QueryController.prototype.debugInfo = function () {\n\t        var _this = this;\n\t        var info = {\n\t            'query': this.lastQuery,\n\t        };\n\t        if (this.lastQueryResults != null) {\n\t            info.queryDuration = function () { return _this.buildQueryDurationSection(_this.lastQueryResults); };\n\t            info.results = function () { return _.omit(_this.lastQueryResults, 'results'); };\n\t        }\n\t        if (this.currentError != null) {\n\t            info.error = function () { return _this.currentError; };\n\t        }\n\t        return info;\n\t    };\n\t    QueryController.prototype.buildQueryDurationSection = function (queryResults) {\n\t        var dom = Dom_1.Dom.createElement('div', { className: 'coveo-debug-queryDuration' });\n\t        var graph = Dom_1.Dom.createElement('div', { className: 'coveo-debug-durations' });\n\t        var debugRef = BaseComponent_1.BaseComponent.getComponentRef('Debug');\n\t        dom.appendChild(graph);\n\t        _.forEach(debugRef.durationKeys, function (key) {\n\t            var duration = queryResults[key];\n\t            if (duration != null) {\n\t                graph.appendChild(Dom_1.Dom.createElement('div', {\n\t                    className: 'coveo-debug-duration',\n\t                    style: \"width:\" + duration + \"px\",\n\t                    'data-id': key\n\t                }));\n\t                var legend = Dom_1.Dom.createElement('div', { className: 'coveo-debug-duration-legend', 'data-id': key });\n\t                dom.appendChild(legend);\n\t                var keyDom = Dom_1.Dom.createElement('span', { className: 'coveo-debug-duration-label' });\n\t                keyDom.appendChild(document.createTextNode(key));\n\t                legend.appendChild(keyDom);\n\t                var durationDom = Dom_1.Dom.createElement('span', { className: 'coveo-debug-duration-value' });\n\t                durationDom.appendChild(document.createTextNode(duration));\n\t                legend.appendChild(durationDom);\n\t            }\n\t        });\n\t        return dom;\n\t    };\n\t    QueryController.prototype.logQueryInActionsHistory = function (query, isFirstQuery) {\n\t        var queryElement = {\n\t            name: 'Query',\n\t            value: query.q,\n\t            time: JSON.stringify(new Date())\n\t        };\n\t        this.historyStore.addElement(queryElement);\n\t    };\n\t    return QueryController;\n\t}(RootComponent_1.RootComponent));\n\tQueryController.ID = 'QueryController';\n\texports.QueryController = QueryController;\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar RootComponent = (function (_super) {\n\t    __extends(RootComponent, _super);\n\t    function RootComponent(element, type) {\n\t        var _this = _super.call(this, element, type) || this;\n\t        _this.element = element;\n\t        _this.type = type;\n\t        return _this;\n\t    }\n\t    return RootComponent;\n\t}(BaseComponent_1.BaseComponent));\n\texports.RootComponent = RootComponent;\n\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Logger_1 = __webpack_require__(13);\n\t/**\n\t * Every component in the framework ultimately inherits from this base component class.\n\t */\n\tvar BaseComponent = (function () {\n\t    function BaseComponent(element, type) {\n\t        this.element = element;\n\t        this.type = type;\n\t        /**\n\t         * A disabled component will not participate in the query, or listen to {@link ComponentEvents}.\n\t         * @type {boolean}\n\t         */\n\t        this.disabled = false;\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.isNonEmptyString(type);\n\t        this.logger = new Logger_1.Logger(this);\n\t        BaseComponent.bindComponentToElement(element, this);\n\t    }\n\t    /**\n\t     * Return the debug info about this component.\n\t     * @returns {any}\n\t     */\n\t    BaseComponent.prototype.debugInfo = function () {\n\t        var info = {};\n\t        info[this['constructor']['ID']] = this;\n\t        return info;\n\t    };\n\t    /**\n\t     * Disable the component.\n\t     * Normally this means that the component will not execute handlers for the framework events (query events, for example).\n\t     * Component are enabled by default on creation.\n\t     */\n\t    BaseComponent.prototype.disable = function () {\n\t        this.disabled = true;\n\t    };\n\t    /**\n\t     * Enable the component.\n\t     * Normally this means that the component will execute handlers for the framework events (query events, for example).\n\t     * Components are enabled by default on creation.\n\t     */\n\t    BaseComponent.prototype.enable = function () {\n\t        this.disabled = false;\n\t    };\n\t    BaseComponent.bindComponentToElement = function (element, component) {\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(component);\n\t        Assert_1.Assert.isNonEmptyString(component.type);\n\t        element[BaseComponent.computeCssClassNameForType(component.type)] = component;\n\t        Dom_1.$$(element).addClass(BaseComponent.computeCssClassNameForType(component.type));\n\t        BaseComponent.getBoundComponentsForElement(element).push(component);\n\t    };\n\t    BaseComponent.computeCssClassName = function (componentClass) {\n\t        return BaseComponent.computeCssClassNameForType(componentClass['ID']);\n\t    };\n\t    BaseComponent.computeCssClassNameForType = function (type) {\n\t        Assert_1.Assert.isNonEmptyString(type);\n\t        return 'Coveo' + type;\n\t    };\n\t    BaseComponent.computeSelectorForType = function (type) {\n\t        Assert_1.Assert.isNonEmptyString(type);\n\t        return '.' + BaseComponent.computeCssClassNameForType(type);\n\t    };\n\t    BaseComponent.getBoundComponentsForElement = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        if (element.CoveoBoundComponents == null) {\n\t            element.CoveoBoundComponents = [];\n\t        }\n\t        return element.CoveoBoundComponents;\n\t    };\n\t    BaseComponent.getComponentRef = function (component) {\n\t        return Coveo[component];\n\t    };\n\t    return BaseComponent;\n\t}());\n\texports.BaseComponent = BaseComponent;\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ExpressionBuilder_1 = __webpack_require__(80);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The QueryBuilder is used to build a {@link IQuery} that will be able to be executed using the Search API.<br/>\n\t * The class exposes several members and methods that help components and external code to build up the final query that is sent to the Search API.<br/>\n\t */\n\tvar QueryBuilder = (function () {\n\t    function QueryBuilder() {\n\t        /**\n\t         * Used to build the basic part of the query expression.<br/>\n\t         * This part typically consists of user-entered content such as query keywords, etc.\n\t         * @type {Coveo.ExpressionBuilder}\n\t         */\n\t        this.expression = new ExpressionBuilder_1.ExpressionBuilder();\n\t        /**\n\t         * Used to build the advanced part of the query expression.<br/>\n\t         * This part is typically formed of filter expressions generated by components such as facets, external code, etc.\n\t         * @type {Coveo.ExpressionBuilder}\n\t         */\n\t        this.advancedExpression = new ExpressionBuilder_1.ExpressionBuilder();\n\t        /**\n\t         * Used to build the advanced part of the query expression.<br/>\n\t         * This part is similar to `advancedExpression`, but its content is interpreted as a constant expression by the index and it takes advantage of special caching features.\n\t         * @type {Coveo.ExpressionBuilder}\n\t         */\n\t        this.constantExpression = new ExpressionBuilder_1.ExpressionBuilder();\n\t        /**\n\t         * The contextual text.<br/>\n\t         * This is the contextual text part of the query. It uses the Coveo Machine Learning service to pick key keywords from the text and add them to the basic expression.\n\t         * This field is mainly used to pass context such a case description, long textual query or any other form of text that might help in\n\t         * refining the query.\n\t         */\n\t        this.longQueryExpression = new ExpressionBuilder_1.ExpressionBuilder();\n\t        /**\n\t         * Used to build the disjunctive part of the query expression.<br/>\n\t         * When present, this part is evaluated separately from the other expressions and the matching results are merged to those matching expressions, `advancedExpression` and `constantExpression`.<br/>\n\t         * The final boolean expression for the query is thus (basic advanced constant) OR (disjunction).\n\t         * @type {Coveo.ExpressionBuilder}\n\t         */\n\t        this.disjunctionExpression = new ExpressionBuilder_1.ExpressionBuilder();\n\t        /**\n\t         * Whether to disable the special query syntax such as field references for the basic query expression (parameter q).\n\t         * It is equivalent to a No syntax block applied to the basic query expression.\n\t         * If not specified, the parameter defaults to false.\n\t         */\n\t        this.disableQuerySyntax = false;\n\t        /**\n\t         * This is the 0-based index of the first result to return.<br/>\n\t         * If not specified, this parameter defaults to 0.\n\t         */\n\t        this.firstResult = 0;\n\t        /**\n\t         * This is the number of results to return, starting from {@link IQuery.firstResult}.<br/>\n\t         * If not specified, this parameter defaults to 10.\n\t         */\n\t        this.numberOfResults = 10;\n\t        this.requiredFields = [];\n\t        this.includeRequiredFields = false;\n\t        /**\n\t         * Whether to enable query corrections on this query (see {@link DidYouMean}).\n\t         */\n\t        this.enableDidYouMean = false;\n\t        /**\n\t         * Whether to enable debug info on the query.<br/>\n\t         * This will return additional information on the resulting JSON response from the Search API.<br/>\n\t         * Mostly: execution report (a detailed breakdown of the parsed and executed query).\n\t         */\n\t        this.enableDebug = false;\n\t        /**\n\t         * This specifies the sort criterion(s) to use to sort results. If not specified, this parameter defaults to relevancy.<br/>\n\t         * Possible values are : <br/>\n\t         * -- relevancy :  This uses all the configured ranking weights as well as any specified ranking expressions to rank results.<br/>\n\t         * -- dateascending / datedescending Sort using the value of the `@date` field, which is typically the last modification date of an item in the index.<br/>\n\t         * -- qre : Sort using only the weights applied through ranking expressions. This is much like using `relevancy` except that automatic weights based on keyword proximity etc, are not computed.<br/>\n\t         * -- nosort : Do not sort the results. The order in which items are returned is essentially random.<br/>\n\t         * -- @field ascending / @field descending Sort using the value of a custom field.\n\t         */\n\t        this.sortCriteria = 'relevancy';\n\t        this.retrieveFirstSentences = true;\n\t        /**\n\t         * This specifies an array of Query Function operation that will be executed on the results.\n\t         */\n\t        this.queryFunctions = [];\n\t        /**\n\t         * This specifies an array of Ranking Function operations that will be executed on the results.\n\t         */\n\t        this.rankingFunctions = [];\n\t        /**\n\t         * This specifies an array of Group By operations that can be performed on the query results to extract facets.\n\t         */\n\t        this.groupByRequests = [];\n\t        this.enableDuplicateFiltering = false;\n\t    }\n\t    /**\n\t     * Build the current content or state of the query builder and return a {@link IQuery}.<br/>\n\t     * build can be called multiple times on the same QueryBuilder.\n\t     * @returns {IQuery}\n\t     */\n\t    QueryBuilder.prototype.build = function () {\n\t        var query = {\n\t            q: this.expression.build(),\n\t            aq: this.advancedExpression.build(),\n\t            cq: this.constantExpression.build(),\n\t            lq: this.longQueryExpression.build(),\n\t            dq: this.disjunctionExpression.build(),\n\t            searchHub: this.searchHub,\n\t            tab: this.tab,\n\t            language: this.language,\n\t            pipeline: this.pipeline,\n\t            maximumAge: this.maximumAge,\n\t            wildcards: this.enableWildcards,\n\t            questionMark: this.enableQuestionMarks,\n\t            lowercaseOperators: this.enableLowercaseOperators,\n\t            partialMatch: this.enablePartialMatch,\n\t            partialMatchKeywords: this.partialMatchKeywords,\n\t            partialMatchThreshold: this.partialMatchThreshold,\n\t            firstResult: this.firstResult,\n\t            numberOfResults: this.numberOfResults,\n\t            excerptLength: this.excerptLength,\n\t            filterField: this.filterField,\n\t            filterFieldRange: this.filterFieldRange,\n\t            parentField: this.parentField,\n\t            childField: this.childField,\n\t            fieldsToInclude: this.computeFieldsToInclude(),\n\t            fieldsToExclude: this.fieldsToExclude,\n\t            enableDidYouMean: this.enableDidYouMean,\n\t            sortCriteria: this.sortCriteria,\n\t            sortField: this.sortField,\n\t            queryFunctions: this.queryFunctions,\n\t            rankingFunctions: this.rankingFunctions,\n\t            groupBy: this.groupByRequests,\n\t            retrieveFirstSentences: this.retrieveFirstSentences,\n\t            timezone: this.timezone,\n\t            disableQuerySyntax: this.disableQuerySyntax,\n\t            enableDuplicateFiltering: this.enableDuplicateFiltering,\n\t            enableCollaborativeRating: this.enableCollaborativeRating,\n\t            debug: this.enableDebug,\n\t            context: this.context,\n\t            actionsHistory: this.actionsHistory,\n\t            recommendation: this.recommendation\n\t        };\n\t        return query;\n\t    };\n\t    /**\n\t     * Return only the expression(s) part(s) of the query, as a string.<br/>\n\t     * This means the basic, advanced and constant part in a complete expression {@link IQuery.q}, {@link IQuery.aq}, {@link IQuery.cq}.\n\t     * @returns {string}\n\t     */\n\t    QueryBuilder.prototype.computeCompleteExpression = function () {\n\t        return this.computeCompleteExpressionParts().full;\n\t    };\n\t    /**\n\t     * Return only the expression(s) part(s) of the query, as an object.\n\t     * @returns {{full: string, withoutConstant: string, constant: string}}\n\t     */\n\t    QueryBuilder.prototype.computeCompleteExpressionParts = function () {\n\t        var withoutConstant = ExpressionBuilder_1.ExpressionBuilder.merge(this.expression, this.advancedExpression);\n\t        return {\n\t            full: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(ExpressionBuilder_1.ExpressionBuilder.merge(withoutConstant, this.constantExpression), this.disjunctionExpression).build(),\n\t            withoutConstant: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(withoutConstant, this.disjunctionExpression).build(),\n\t            basic: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(this.expression, this.disjunctionExpression).build(),\n\t            advanced: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(this.advancedExpression, this.disjunctionExpression).build(),\n\t            constant: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(this.constantExpression, this.disjunctionExpression).build()\n\t        };\n\t    };\n\t    /**\n\t     * Return only the expression(s) part(s) of the query, as a string, except the given expression.<br/>\n\t     * This is used by {@link Facet}, to build their group by request with query override.\n\t     * @param except\n\t     * @returns {string}\n\t     */\n\t    QueryBuilder.prototype.computeCompleteExpressionExcept = function (except) {\n\t        return this.computeCompleteExpressionPartsExcept(except).full;\n\t    };\n\t    /**\n\t     * Return only the expression(s) part(s) of the query, as an object, except the given expression.<br/>\n\t     * This is used by {@link Facet}, to build their group by request with query override.\n\t     * @param except\n\t     * @returns {{full: string, withoutConstant: string, constant: string}}\n\t     */\n\t    QueryBuilder.prototype.computeCompleteExpressionPartsExcept = function (except) {\n\t        var withoutConstantAndExcept = ExpressionBuilder_1.ExpressionBuilder.merge(this.expression, this.advancedExpression);\n\t        withoutConstantAndExcept.remove(except);\n\t        var basicAndExcept = new ExpressionBuilder_1.ExpressionBuilder();\n\t        basicAndExcept.fromExpressionBuilder(this.expression);\n\t        basicAndExcept.remove(except);\n\t        var advancedAndExcept = new ExpressionBuilder_1.ExpressionBuilder();\n\t        advancedAndExcept.fromExpressionBuilder(this.advancedExpression);\n\t        advancedAndExcept.remove(except);\n\t        return {\n\t            full: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(ExpressionBuilder_1.ExpressionBuilder.merge(withoutConstantAndExcept, this.constantExpression), this.disjunctionExpression).build(),\n\t            withoutConstant: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(withoutConstantAndExcept, this.disjunctionExpression).build(),\n\t            basic: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(basicAndExcept, this.disjunctionExpression).build(),\n\t            advanced: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(advancedAndExcept, this.disjunctionExpression).build(),\n\t            constant: ExpressionBuilder_1.ExpressionBuilder.mergeUsingOr(this.constantExpression, this.disjunctionExpression).build()\n\t        };\n\t    };\n\t    /**\n\t     * Add fields to specifically include when the results return.<br/>\n\t     * This can be used to accelerate the execution time of every query, as there is much less data to process if you whitelist specific fields.\n\t     * @param fields\n\t     */\n\t    QueryBuilder.prototype.addFieldsToInclude = function (fields) {\n\t        this.fieldsToInclude = _.uniq((this.fieldsToInclude || []).concat(fields));\n\t    };\n\t    QueryBuilder.prototype.addRequiredFields = function (fields) {\n\t        this.requiredFields = _.uniq(this.requiredFields.concat(fields));\n\t    };\n\t    /**\n\t     * Add fields to specifically exclude when the results return.<br/>\n\t     * This can be used to accelerate the execution time of every query, as there is much less data to process if you blacklist specific fields.\n\t     * @param fields\n\t     */\n\t    QueryBuilder.prototype.addFieldsToExclude = function (fields) {\n\t        this.fieldsToExclude = _.uniq((this.fieldsToInclude || []).concat(fields));\n\t    };\n\t    QueryBuilder.prototype.computeFieldsToInclude = function () {\n\t        if (this.includeRequiredFields || this.fieldsToInclude != null) {\n\t            return this.requiredFields.concat(this.fieldsToInclude || []);\n\t        }\n\t        else {\n\t            return null;\n\t        }\n\t    };\n\t    /**\n\t     * Add a single context key->value pair to the query.<br/>\n\t     * This is used by the Query pipeline in the Coveo platform.\n\t     * @param key\n\t     * @param value\n\t     */\n\t    QueryBuilder.prototype.addContextValue = function (key, value) {\n\t        if (this.context == null) {\n\t            this.context = {};\n\t        }\n\t        this.context[key] = value;\n\t    };\n\t    /**\n\t     * Add a context object to the query.<br/>\n\t     * This can contain multiple key->value.<br/>\n\t     * This is used by the Query pipeline in the Coveo platform.\n\t     * @param values\n\t     */\n\t    QueryBuilder.prototype.addContext = function (values) {\n\t        if (this.context == null) {\n\t            this.context = {};\n\t        }\n\t        _.extend(this.context, values);\n\t    };\n\t    return QueryBuilder;\n\t}());\n\texports.QueryBuilder = QueryBuilder;\n\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * An `ExpressionBuilder` that is mostly used by the {@link QueryBuilder}.<br/>\n\t * It is used to build a single query expression.<br/>\n\t * It allows combining multiple expression parts into a single string and provides utilities to generate common expression parts.\n\t */\n\tvar ExpressionBuilder = (function () {\n\t    function ExpressionBuilder() {\n\t        this.parts = []; // he he he\n\t        this.wrapParts = true;\n\t    }\n\t    /**\n\t     * Add a new part to the expression.\n\t     * @param expression\n\t     */\n\t    ExpressionBuilder.prototype.add = function (expression) {\n\t        Assert_1.Assert.isNonEmptyString(expression);\n\t        this.parts.push(expression);\n\t    };\n\t    /**\n\t     * Take another `ExpressionBuilder`, and copy it.\n\t     * @param expression\n\t     */\n\t    ExpressionBuilder.prototype.fromExpressionBuilder = function (expression) {\n\t        this.parts = this.parts.concat(expression.parts);\n\t    };\n\t    /**\n\t     * Add a new part to the expression, but specific for field values<br/>\n\t     * eg @field=(value1,value2,value3).\n\t     * @param field The field for which to create an expression (e.g.: @foo).\n\t     * @param operator The operator to use e.g.: = (equal) == (strict equal) <> (not equal).\n\t     * @param values The values to put in the expression.\n\t     */\n\t    ExpressionBuilder.prototype.addFieldExpression = function (field, operator, values) {\n\t        Assert_1.Assert.isNonEmptyString(field);\n\t        Assert_1.Assert.stringStartsWith(field, '@');\n\t        Assert_1.Assert.isNonEmptyString(operator);\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, values.length);\n\t        this.add(QueryUtils_1.QueryUtils.buildFieldExpression(field, operator, values));\n\t    };\n\t    /**\n\t     * Add a new part to the expression, but specific for field values<br/>\n\t     * eg : NOT @field==(value1, value2, value3).\n\t     * @param field The field for which to create an expression (e.g.: @foo)\n\t     * @param values The values to put in the expression.\n\t     */\n\t    ExpressionBuilder.prototype.addFieldNotEqualExpression = function (field, values) {\n\t        Assert_1.Assert.isNonEmptyString(field);\n\t        Assert_1.Assert.stringStartsWith(field, '@');\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, values.length);\n\t        this.add(QueryUtils_1.QueryUtils.buildFieldNotEqualExpression(field, values));\n\t    };\n\t    /**\n\t     * Removes an expression from the builder.\n\t     * @param expression\n\t     */\n\t    ExpressionBuilder.prototype.remove = function (expression) {\n\t        Assert_1.Assert.isNonEmptyString(expression);\n\t        var index = _.indexOf(this.parts, expression);\n\t        if (index != -1) {\n\t            this.parts.splice(_.indexOf(this.parts, expression), 1);\n\t        }\n\t    };\n\t    /**\n\t     * Checks if the builder is currently empty.\n\t     * @returns {boolean}\n\t     */\n\t    ExpressionBuilder.prototype.isEmpty = function () {\n\t        return this.parts.length == 0;\n\t    };\n\t    /**\n\t     * Builds the expression string by combining all the parts together.<br/>\n\t     * @param exp expression to join the different parts, default to a space.\n\t     * @returns {any}\n\t     */\n\t    ExpressionBuilder.prototype.build = function (exp) {\n\t        if (exp === void 0) { exp = ' '; }\n\t        if (this.parts.length == 0) {\n\t            return undefined;\n\t        }\n\t        else if (this.parts.length == 1) {\n\t            return this.parts[0];\n\t        }\n\t        else if (this.wrapParts) {\n\t            return '(' + this.parts.join(')' + exp + '(') + ')';\n\t        }\n\t        else {\n\t            return this.parts.join(exp);\n\t        }\n\t    };\n\t    /**\n\t     * Merges several `ExpressionBuilder` together.\n\t     * @param builders Builders that should be merged.\n\t     * @returns {Coveo.ExpressionBuilder}\n\t     */\n\t    ExpressionBuilder.merge = function () {\n\t        var builders = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            builders[_i] = arguments[_i];\n\t        }\n\t        var merged = new ExpressionBuilder();\n\t        _.each(builders, function (builder) {\n\t            merged.parts = merged.parts.concat(builder.parts);\n\t        });\n\t        return merged;\n\t    };\n\t    /**\n\t     * Merges several `ExpressionBuilder` together, using the OR operator.\n\t     * @param builders Builders that should be merged.\n\t     * @returns {Coveo.ExpressionBuilder}\n\t     */\n\t    ExpressionBuilder.mergeUsingOr = function () {\n\t        var builders = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            builders[_i] = arguments[_i];\n\t        }\n\t        var nonEmpty = _.filter(builders, function (b) { return !b.isEmpty(); });\n\t        var merged = new ExpressionBuilder();\n\t        if (nonEmpty.length == 1) {\n\t            merged.parts = [].concat(nonEmpty[0].parts);\n\t        }\n\t        else if (nonEmpty.length > 1) {\n\t            var parts = _.map(nonEmpty, function (b) { return b.build(); });\n\t            merged.add('(' + parts.join(') OR (') + ')');\n\t        }\n\t        return merged;\n\t    };\n\t    return ExpressionBuilder;\n\t}());\n\texports.ExpressionBuilder = ExpressionBuilder;\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar SearchEndpointWithDefaultCallOptions = (function () {\n\t    function SearchEndpointWithDefaultCallOptions(endpoint, callOptions) {\n\t        this.endpoint = endpoint;\n\t        this.callOptions = callOptions;\n\t        this.options = endpoint.options;\n\t    }\n\t    SearchEndpointWithDefaultCallOptions.prototype.getBaseUri = function () {\n\t        return this.endpoint.getBaseUri();\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getBaseAlertsUri = function () {\n\t        return this.endpoint.getBaseAlertsUri();\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getAuthenticationProviderUri = function (provider, returnUri, message) {\n\t        return this.endpoint.getAuthenticationProviderUri(provider, returnUri, message);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.isJsonp = function () {\n\t        return this.endpoint.isJsonp();\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.search = function (query, callOptions) {\n\t        return this.endpoint.search(query, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getExportToExcelLink = function (query, numberOfResults, callOptions) {\n\t        return this.endpoint.getExportToExcelLink(query, numberOfResults, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.tagDocument = function (taggingRequest, callOptions) {\n\t        return this.endpoint.tagDocument(taggingRequest, this.enrichCallOptions(taggingRequest));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getRevealQuerySuggest = function (request, callOptions) {\n\t        return this.endpoint.getRevealQuerySuggest(request, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.rateDocument = function (ratingRequest, callOptions) {\n\t        return this.endpoint.rateDocument(ratingRequest, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getRawDataStream = function (documentUniqueId, dataStreamType, callOptions) {\n\t        return this.endpoint.getRawDataStream(documentUniqueId, dataStreamType, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getDocument = function (documentUniqueId, callOptions) {\n\t        return this.endpoint.getDocument(documentUniqueId, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getDocumentText = function (documentUniqueID, callOptions) {\n\t        return this.endpoint.getDocumentText(documentUniqueID, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getDocumentHtml = function (documentUniqueID, callOptions) {\n\t        return this.endpoint.getDocumentHtml(documentUniqueID, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getViewAsHtmlUri = function (documentUniqueID, callOptions) {\n\t        return this.endpoint.getViewAsHtmlUri(documentUniqueID, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.getViewAsDatastreamUri = function (documentUniqueID, dataStreamType, callOptions) {\n\t        return this.endpoint.getViewAsDatastreamUri(documentUniqueID, dataStreamType, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.listFieldValues = function (request, callOptions) {\n\t        return this.endpoint.listFieldValues(request, this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.listFields = function (callOptions) {\n\t        return this.endpoint.listFields(this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.extensions = function (callOptions) {\n\t        return this.endpoint.extensions(this.enrichCallOptions(callOptions));\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.follow = function (request) {\n\t        return this.endpoint.follow(request);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.listSubscriptions = function (page) {\n\t        return this.endpoint.listSubscriptions(page);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.updateSubscription = function (subscription) {\n\t        return this.endpoint.updateSubscription(subscription);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.deleteSubscription = function (subscription) {\n\t        return this.endpoint.deleteSubscription(subscription);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.logError = function (sentryLog) {\n\t        return this.endpoint.logError(sentryLog);\n\t    };\n\t    SearchEndpointWithDefaultCallOptions.prototype.enrichCallOptions = function (callOptions) {\n\t        return _.extend({}, callOptions, this.callOptions);\n\t    };\n\t    return SearchEndpointWithDefaultCallOptions;\n\t}());\n\texports.SearchEndpointWithDefaultCallOptions = SearchEndpointWithDefaultCallOptions;\n\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar analytics = __webpack_require__(83);\n\texports.analytics = analytics;\n\tvar SimpleAnalytics = __webpack_require__(89);\n\texports.SimpleAnalytics = SimpleAnalytics;\n\tvar history = __webpack_require__(84);\n\texports.history = history;\n\tvar donottrack = __webpack_require__(92);\n\texports.donottrack = donottrack;\n\tvar storage = __webpack_require__(85);\n\texports.storage = storage;\n\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar history_1 = __webpack_require__(84);\n\t__webpack_require__(88);\n\texports.Version = 'v15';\n\texports.Endpoints = {\n\t    default: 'https://usageanalytics.coveo.com',\n\t    production: 'https://usageanalytics.coveo.com',\n\t    dev: 'https://usageanalyticsdev.coveo.com',\n\t    staging: 'https://usageanalyticsstaging.coveo.com'\n\t};\n\t;\n\tfunction defaultResponseTransformer(response) {\n\t    return response.json().then(function (data) {\n\t        data.raw = response;\n\t        return data;\n\t    });\n\t}\n\tvar Client = (function () {\n\t    function Client(opts) {\n\t        if (typeof opts === 'undefined') {\n\t            throw new Error('You have to pass options to this constructor');\n\t        }\n\t        this.endpoint = opts.endpoint || exports.Endpoints.default;\n\t        this.token = opts.token;\n\t        this.version = opts.version || exports.Version;\n\t    }\n\t    Client.prototype.sendEvent = function (eventType, request) {\n\t        return fetch(this.getRestEndpoint() + \"/analytics/\" + eventType, {\n\t            method: 'POST',\n\t            headers: this.getHeaders(),\n\t            mode: 'cors',\n\t            body: JSON.stringify(request),\n\t            credentials: 'include'\n\t        });\n\t    };\n\t    Client.prototype.sendSearchEvent = function (request) {\n\t        return this.sendEvent('search', request).then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.sendClickEvent = function (request) {\n\t        return this.sendEvent('click', request).then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.sendCustomEvent = function (request) {\n\t        return this.sendEvent('custom', request).then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.sendViewEvent = function (request) {\n\t        if (request.referrer === '') {\n\t            delete request.referrer;\n\t        }\n\t        var store = new history_1.HistoryStore();\n\t        var historyElement = {\n\t            name: 'PageView',\n\t            value: request.contentIdValue,\n\t            time: JSON.stringify(new Date()),\n\t        };\n\t        store.addElement(historyElement);\n\t        return this.sendEvent('view', request).then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.getVisit = function () {\n\t        return fetch(this.getRestEndpoint() + \"/analytics/visit\")\n\t            .then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.getHealth = function () {\n\t        return fetch(this.getRestEndpoint() + \"/analytics/monitoring/health\")\n\t            .then(defaultResponseTransformer);\n\t    };\n\t    Client.prototype.getRestEndpoint = function () {\n\t        return this.endpoint + \"/rest/\" + this.version;\n\t    };\n\t    Client.prototype.getHeaders = function () {\n\t        var headers = {\n\t            'Content-Type': \"application/json\"\n\t        };\n\t        if (this.token) {\n\t            headers['Authorization'] = \"Bearer \" + this.token;\n\t        }\n\t        return headers;\n\t    };\n\t    return Client;\n\t}());\n\texports.Client = Client;\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.default = Client;\n\n\n/***/ },\n/* 84 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar storage_1 = __webpack_require__(85);\n\tvar detector = __webpack_require__(86);\n\texports.STORE_KEY = '__coveo.analytics.history';\n\texports.MAX_NUMBER_OF_HISTORY_ELEMENTS = 20;\n\texports.MIN_THRESHOLD_FOR_DUPLICATE_VALUE = 1000 * 60;\n\texports.MAX_VALUE_SIZE = 75;\n\tvar HistoryStore = (function () {\n\t    function HistoryStore(store) {\n\t        this.store = store || storage_1.getAvailableStorage();\n\t        if (!(this.store instanceof storage_1.CookieStorage) && detector.hasCookieStorage()) {\n\t            new storage_1.CookieStorage().removeItem(exports.STORE_KEY);\n\t        }\n\t    }\n\t    ;\n\t    HistoryStore.prototype.addElement = function (elem) {\n\t        elem.internalTime = new Date().getTime();\n\t        this.cropQueryElement(elem);\n\t        var currentHistory = this.getHistoryWithInternalTime();\n\t        if (currentHistory != null) {\n\t            if (this.isValidEntry(elem)) {\n\t                this.setHistory([elem].concat(currentHistory));\n\t            }\n\t        }\n\t        else {\n\t            this.setHistory([elem]);\n\t        }\n\t    };\n\t    HistoryStore.prototype.getHistory = function () {\n\t        var history = this.getHistoryWithInternalTime();\n\t        return this.stripInternalTime(history);\n\t    };\n\t    HistoryStore.prototype.getHistoryWithInternalTime = function () {\n\t        try {\n\t            return JSON.parse(this.store.getItem(exports.STORE_KEY));\n\t        }\n\t        catch (e) {\n\t            return [];\n\t        }\n\t    };\n\t    HistoryStore.prototype.setHistory = function (history) {\n\t        try {\n\t            this.store.setItem(exports.STORE_KEY, JSON.stringify(history.slice(0, exports.MAX_NUMBER_OF_HISTORY_ELEMENTS)));\n\t        }\n\t        catch (e) { }\n\t    };\n\t    HistoryStore.prototype.clear = function () {\n\t        try {\n\t            this.store.removeItem(exports.STORE_KEY);\n\t        }\n\t        catch (e) { }\n\t    };\n\t    HistoryStore.prototype.getMostRecentElement = function () {\n\t        var currentHistory = this.getHistoryWithInternalTime();\n\t        if (currentHistory != null) {\n\t            var sorted = currentHistory.sort(function (first, second) {\n\t                if (first.internalTime == null && second.internalTime == null) {\n\t                    return 0;\n\t                }\n\t                if (first.internalTime == null && second.internalTime != null) {\n\t                    return 1;\n\t                }\n\t                if (first.internalTime != null && second.internalTime == null) {\n\t                    return -1;\n\t                }\n\t                return second.internalTime - first.internalTime;\n\t            });\n\t            return sorted[0];\n\t        }\n\t        return null;\n\t    };\n\t    HistoryStore.prototype.cropQueryElement = function (elem) {\n\t        if (elem.name && elem.name.toLowerCase() == 'query' && elem.value != null) {\n\t            elem.value = elem.value.slice(0, exports.MAX_VALUE_SIZE);\n\t        }\n\t    };\n\t    HistoryStore.prototype.isValidEntry = function (elem) {\n\t        var lastEntry = this.getMostRecentElement();\n\t        if (lastEntry && lastEntry.value == elem.value) {\n\t            return elem.internalTime - lastEntry.internalTime > exports.MIN_THRESHOLD_FOR_DUPLICATE_VALUE;\n\t        }\n\t        return true;\n\t    };\n\t    HistoryStore.prototype.stripInternalTime = function (history) {\n\t        if (history) {\n\t            history.forEach(function (part, index, array) {\n\t                delete part.internalTime;\n\t            });\n\t        }\n\t        return history;\n\t    };\n\t    return HistoryStore;\n\t}());\n\texports.HistoryStore = HistoryStore;\n\t;\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.default = HistoryStore;\n\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar detector = __webpack_require__(86);\n\tvar cookieutils_1 = __webpack_require__(87);\n\texports.preferredStorage = null;\n\tfunction getAvailableStorage() {\n\t    if (exports.preferredStorage) {\n\t        return exports.preferredStorage;\n\t    }\n\t    if (detector.hasLocalStorage()) {\n\t        return localStorage;\n\t    }\n\t    if (detector.hasCookieStorage()) {\n\t        return new CookieStorage();\n\t    }\n\t    if (detector.hasSessionStorage()) {\n\t        return sessionStorage;\n\t    }\n\t    return new NullStorage();\n\t}\n\texports.getAvailableStorage = getAvailableStorage;\n\tvar CookieStorage = (function () {\n\t    function CookieStorage() {\n\t    }\n\t    CookieStorage.prototype.getItem = function (key) {\n\t        return cookieutils_1.Cookie.get(key);\n\t    };\n\t    CookieStorage.prototype.removeItem = function (key) {\n\t        cookieutils_1.Cookie.erase(key);\n\t    };\n\t    CookieStorage.prototype.setItem = function (key, data) {\n\t        cookieutils_1.Cookie.set(key, data);\n\t    };\n\t    return CookieStorage;\n\t}());\n\texports.CookieStorage = CookieStorage;\n\tvar NullStorage = (function () {\n\t    function NullStorage() {\n\t    }\n\t    NullStorage.prototype.getItem = function (key) { return null; };\n\t    NullStorage.prototype.removeItem = function (key) { };\n\t    NullStorage.prototype.setItem = function (key, data) { };\n\t    return NullStorage;\n\t}());\n\texports.NullStorage = NullStorage;\n\n\n/***/ },\n/* 86 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction hasLocalStorage() {\n\t    try {\n\t        return 'localStorage' in window && window['localStorage'] !== null;\n\t    }\n\t    catch (e) {\n\t        return false;\n\t    }\n\t}\n\texports.hasLocalStorage = hasLocalStorage;\n\t;\n\tfunction hasSessionStorage() {\n\t    try {\n\t        return 'sessionStorage' in window && window['sessionStorage'] !== null;\n\t    }\n\t    catch (e) {\n\t        return false;\n\t    }\n\t}\n\texports.hasSessionStorage = hasSessionStorage;\n\t;\n\tfunction hasCookieStorage() {\n\t    return navigator.cookieEnabled;\n\t}\n\texports.hasCookieStorage = hasCookieStorage;\n\t;\n\tfunction hasDocument() {\n\t    return document !== null;\n\t}\n\texports.hasDocument = hasDocument;\n\t;\n\tfunction hasDocumentLocation() {\n\t    return hasDocument() && document.location !== null;\n\t}\n\texports.hasDocumentLocation = hasDocumentLocation;\n\t;\n\n\n/***/ },\n/* 87 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tvar Cookie = (function () {\n\t    function Cookie() {\n\t    }\n\t    Cookie.set = function (name, value, expiration) {\n\t        var domain, domainParts, date, expires, host;\n\t        if (expiration) {\n\t            date = new Date();\n\t            date.setTime(date.getTime() + expiration);\n\t            expires = '; expires=' + date.toGMTString();\n\t        }\n\t        else {\n\t            expires = '';\n\t        }\n\t        host = location.hostname;\n\t        if (host.indexOf('.') === -1) {\n\t            document.cookie = name + '=' + value + expires + '; path=/';\n\t        }\n\t        else {\n\t            domainParts = host.split('.');\n\t            domainParts.shift();\n\t            domain = '.' + domainParts.join('.');\n\t            document.cookie = name + '=' + value + expires + '; path=/; domain=' + domain;\n\t            if (Cookie.get(name) == null || Cookie.get(name) != value) {\n\t                domain = '.' + host;\n\t                document.cookie = name + '=' + value + expires + '; path=/; domain=' + domain;\n\t            }\n\t        }\n\t    };\n\t    Cookie.get = function (name) {\n\t        var cookiePrefix = name + '=';\n\t        var cookieArray = document.cookie.split(';');\n\t        for (var i = 0; i < cookieArray.length; i++) {\n\t            var cookie = cookieArray[i];\n\t            cookie = cookie.replace(/^\\s+/, '');\n\t            if (cookie.indexOf(cookiePrefix) == 0) {\n\t                return cookie.substring(cookiePrefix.length, cookie.length);\n\t            }\n\t        }\n\t        return null;\n\t    };\n\t    Cookie.erase = function (name) {\n\t        Cookie.set(name, '', -1);\n\t    };\n\t    return Cookie;\n\t}());\n\texports.Cookie = Cookie;\n\n\n/***/ },\n/* 88 */\n/***/ function(module, exports) {\n\n\t(function(self) {\n\t  'use strict';\n\t\n\t  if (self.fetch) {\n\t    return\n\t  }\n\t\n\t  var support = {\n\t    searchParams: 'URLSearchParams' in self,\n\t    iterable: 'Symbol' in self && 'iterator' in Symbol,\n\t    blob: 'FileReader' in self && 'Blob' in self && (function() {\n\t      try {\n\t        new Blob()\n\t        return true\n\t      } catch(e) {\n\t        return false\n\t      }\n\t    })(),\n\t    formData: 'FormData' in self,\n\t    arrayBuffer: 'ArrayBuffer' in self\n\t  }\n\t\n\t  if (support.arrayBuffer) {\n\t    var viewClasses = [\n\t      '[object Int8Array]',\n\t      '[object Uint8Array]',\n\t      '[object Uint8ClampedArray]',\n\t      '[object Int16Array]',\n\t      '[object Uint16Array]',\n\t      '[object Int32Array]',\n\t      '[object Uint32Array]',\n\t      '[object Float32Array]',\n\t      '[object Float64Array]'\n\t    ]\n\t\n\t    var isDataView = function(obj) {\n\t      return obj && DataView.prototype.isPrototypeOf(obj)\n\t    }\n\t\n\t    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n\t      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n\t    }\n\t  }\n\t\n\t  function normalizeName(name) {\n\t    if (typeof name !== 'string') {\n\t      name = String(name)\n\t    }\n\t    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n\t      throw new TypeError('Invalid character in header field name')\n\t    }\n\t    return name.toLowerCase()\n\t  }\n\t\n\t  function normalizeValue(value) {\n\t    if (typeof value !== 'string') {\n\t      value = String(value)\n\t    }\n\t    return value\n\t  }\n\t\n\t  // Build a destructive iterator for the value list\n\t  function iteratorFor(items) {\n\t    var iterator = {\n\t      next: function() {\n\t        var value = items.shift()\n\t        return {done: value === undefined, value: value}\n\t      }\n\t    }\n\t\n\t    if (support.iterable) {\n\t      iterator[Symbol.iterator] = function() {\n\t        return iterator\n\t      }\n\t    }\n\t\n\t    return iterator\n\t  }\n\t\n\t  function Headers(headers) {\n\t    this.map = {}\n\t\n\t    if (headers instanceof Headers) {\n\t      headers.forEach(function(value, name) {\n\t        this.append(name, value)\n\t      }, this)\n\t    } else if (Array.isArray(headers)) {\n\t      headers.forEach(function(header) {\n\t        this.append(header[0], header[1])\n\t      }, this)\n\t    } else if (headers) {\n\t      Object.getOwnPropertyNames(headers).forEach(function(name) {\n\t        this.append(name, headers[name])\n\t      }, this)\n\t    }\n\t  }\n\t\n\t  Headers.prototype.append = function(name, value) {\n\t    name = normalizeName(name)\n\t    value = normalizeValue(value)\n\t    var oldValue = this.map[name]\n\t    this.map[name] = oldValue ? oldValue+','+value : value\n\t  }\n\t\n\t  Headers.prototype['delete'] = function(name) {\n\t    delete this.map[normalizeName(name)]\n\t  }\n\t\n\t  Headers.prototype.get = function(name) {\n\t    name = normalizeName(name)\n\t    return this.has(name) ? this.map[name] : null\n\t  }\n\t\n\t  Headers.prototype.has = function(name) {\n\t    return this.map.hasOwnProperty(normalizeName(name))\n\t  }\n\t\n\t  Headers.prototype.set = function(name, value) {\n\t    this.map[normalizeName(name)] = normalizeValue(value)\n\t  }\n\t\n\t  Headers.prototype.forEach = function(callback, thisArg) {\n\t    for (var name in this.map) {\n\t      if (this.map.hasOwnProperty(name)) {\n\t        callback.call(thisArg, this.map[name], name, this)\n\t      }\n\t    }\n\t  }\n\t\n\t  Headers.prototype.keys = function() {\n\t    var items = []\n\t    this.forEach(function(value, name) { items.push(name) })\n\t    return iteratorFor(items)\n\t  }\n\t\n\t  Headers.prototype.values = function() {\n\t    var items = []\n\t    this.forEach(function(value) { items.push(value) })\n\t    return iteratorFor(items)\n\t  }\n\t\n\t  Headers.prototype.entries = function() {\n\t    var items = []\n\t    this.forEach(function(value, name) { items.push([name, value]) })\n\t    return iteratorFor(items)\n\t  }\n\t\n\t  if (support.iterable) {\n\t    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n\t  }\n\t\n\t  function consumed(body) {\n\t    if (body.bodyUsed) {\n\t      return Promise.reject(new TypeError('Already read'))\n\t    }\n\t    body.bodyUsed = true\n\t  }\n\t\n\t  function fileReaderReady(reader) {\n\t    return new Promise(function(resolve, reject) {\n\t      reader.onload = function() {\n\t        resolve(reader.result)\n\t      }\n\t      reader.onerror = function() {\n\t        reject(reader.error)\n\t      }\n\t    })\n\t  }\n\t\n\t  function readBlobAsArrayBuffer(blob) {\n\t    var reader = new FileReader()\n\t    var promise = fileReaderReady(reader)\n\t    reader.readAsArrayBuffer(blob)\n\t    return promise\n\t  }\n\t\n\t  function readBlobAsText(blob) {\n\t    var reader = new FileReader()\n\t    var promise = fileReaderReady(reader)\n\t    reader.readAsText(blob)\n\t    return promise\n\t  }\n\t\n\t  function readArrayBufferAsText(buf) {\n\t    var view = new Uint8Array(buf)\n\t    var chars = new Array(view.length)\n\t\n\t    for (var i = 0; i < view.length; i++) {\n\t      chars[i] = String.fromCharCode(view[i])\n\t    }\n\t    return chars.join('')\n\t  }\n\t\n\t  function bufferClone(buf) {\n\t    if (buf.slice) {\n\t      return buf.slice(0)\n\t    } else {\n\t      var view = new Uint8Array(buf.byteLength)\n\t      view.set(new Uint8Array(buf))\n\t      return view.buffer\n\t    }\n\t  }\n\t\n\t  function Body() {\n\t    this.bodyUsed = false\n\t\n\t    this._initBody = function(body) {\n\t      this._bodyInit = body\n\t      if (!body) {\n\t        this._bodyText = ''\n\t      } else if (typeof body === 'string') {\n\t        this._bodyText = body\n\t      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n\t        this._bodyBlob = body\n\t      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n\t        this._bodyFormData = body\n\t      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n\t        this._bodyText = body.toString()\n\t      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n\t        this._bodyArrayBuffer = bufferClone(body.buffer)\n\t        // IE 10-11 can't handle a DataView body.\n\t        this._bodyInit = new Blob([this._bodyArrayBuffer])\n\t      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n\t        this._bodyArrayBuffer = bufferClone(body)\n\t      } else {\n\t        throw new Error('unsupported BodyInit type')\n\t      }\n\t\n\t      if (!this.headers.get('content-type')) {\n\t        if (typeof body === 'string') {\n\t          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n\t        } else if (this._bodyBlob && this._bodyBlob.type) {\n\t          this.headers.set('content-type', this._bodyBlob.type)\n\t        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n\t          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n\t        }\n\t      }\n\t    }\n\t\n\t    if (support.blob) {\n\t      this.blob = function() {\n\t        var rejected = consumed(this)\n\t        if (rejected) {\n\t          return rejected\n\t        }\n\t\n\t        if (this._bodyBlob) {\n\t          return Promise.resolve(this._bodyBlob)\n\t        } else if (this._bodyArrayBuffer) {\n\t          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n\t        } else if (this._bodyFormData) {\n\t          throw new Error('could not read FormData body as blob')\n\t        } else {\n\t          return Promise.resolve(new Blob([this._bodyText]))\n\t        }\n\t      }\n\t\n\t      this.arrayBuffer = function() {\n\t        if (this._bodyArrayBuffer) {\n\t          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n\t        } else {\n\t          return this.blob().then(readBlobAsArrayBuffer)\n\t        }\n\t      }\n\t    }\n\t\n\t    this.text = function() {\n\t      var rejected = consumed(this)\n\t      if (rejected) {\n\t        return rejected\n\t      }\n\t\n\t      if (this._bodyBlob) {\n\t        return readBlobAsText(this._bodyBlob)\n\t      } else if (this._bodyArrayBuffer) {\n\t        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n\t      } else if (this._bodyFormData) {\n\t        throw new Error('could not read FormData body as text')\n\t      } else {\n\t        return Promise.resolve(this._bodyText)\n\t      }\n\t    }\n\t\n\t    if (support.formData) {\n\t      this.formData = function() {\n\t        return this.text().then(decode)\n\t      }\n\t    }\n\t\n\t    this.json = function() {\n\t      return this.text().then(JSON.parse)\n\t    }\n\t\n\t    return this\n\t  }\n\t\n\t  // HTTP methods whose capitalization should be normalized\n\t  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\t\n\t  function normalizeMethod(method) {\n\t    var upcased = method.toUpperCase()\n\t    return (methods.indexOf(upcased) > -1) ? upcased : method\n\t  }\n\t\n\t  function Request(input, options) {\n\t    options = options || {}\n\t    var body = options.body\n\t\n\t    if (input instanceof Request) {\n\t      if (input.bodyUsed) {\n\t        throw new TypeError('Already read')\n\t      }\n\t      this.url = input.url\n\t      this.credentials = input.credentials\n\t      if (!options.headers) {\n\t        this.headers = new Headers(input.headers)\n\t      }\n\t      this.method = input.method\n\t      this.mode = input.mode\n\t      if (!body && input._bodyInit != null) {\n\t        body = input._bodyInit\n\t        input.bodyUsed = true\n\t      }\n\t    } else {\n\t      this.url = String(input)\n\t    }\n\t\n\t    this.credentials = options.credentials || this.credentials || 'omit'\n\t    if (options.headers || !this.headers) {\n\t      this.headers = new Headers(options.headers)\n\t    }\n\t    this.method = normalizeMethod(options.method || this.method || 'GET')\n\t    this.mode = options.mode || this.mode || null\n\t    this.referrer = null\n\t\n\t    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n\t      throw new TypeError('Body not allowed for GET or HEAD requests')\n\t    }\n\t    this._initBody(body)\n\t  }\n\t\n\t  Request.prototype.clone = function() {\n\t    return new Request(this, { body: this._bodyInit })\n\t  }\n\t\n\t  function decode(body) {\n\t    var form = new FormData()\n\t    body.trim().split('&').forEach(function(bytes) {\n\t      if (bytes) {\n\t        var split = bytes.split('=')\n\t        var name = split.shift().replace(/\\+/g, ' ')\n\t        var value = split.join('=').replace(/\\+/g, ' ')\n\t        form.append(decodeURIComponent(name), decodeURIComponent(value))\n\t      }\n\t    })\n\t    return form\n\t  }\n\t\n\t  function parseHeaders(rawHeaders) {\n\t    var headers = new Headers()\n\t    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n\t    // https://tools.ietf.org/html/rfc7230#section-3.2\n\t    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n\t    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n\t      var parts = line.split(':')\n\t      var key = parts.shift().trim()\n\t      if (key) {\n\t        var value = parts.join(':').trim()\n\t        headers.append(key, value)\n\t      }\n\t    })\n\t    return headers\n\t  }\n\t\n\t  Body.call(Request.prototype)\n\t\n\t  function Response(bodyInit, options) {\n\t    if (!options) {\n\t      options = {}\n\t    }\n\t\n\t    this.type = 'default'\n\t    this.status = options.status === undefined ? 200 : options.status\n\t    this.ok = this.status >= 200 && this.status < 300\n\t    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n\t    this.headers = new Headers(options.headers)\n\t    this.url = options.url || ''\n\t    this._initBody(bodyInit)\n\t  }\n\t\n\t  Body.call(Response.prototype)\n\t\n\t  Response.prototype.clone = function() {\n\t    return new Response(this._bodyInit, {\n\t      status: this.status,\n\t      statusText: this.statusText,\n\t      headers: new Headers(this.headers),\n\t      url: this.url\n\t    })\n\t  }\n\t\n\t  Response.error = function() {\n\t    var response = new Response(null, {status: 0, statusText: ''})\n\t    response.type = 'error'\n\t    return response\n\t  }\n\t\n\t  var redirectStatuses = [301, 302, 303, 307, 308]\n\t\n\t  Response.redirect = function(url, status) {\n\t    if (redirectStatuses.indexOf(status) === -1) {\n\t      throw new RangeError('Invalid status code')\n\t    }\n\t\n\t    return new Response(null, {status: status, headers: {location: url}})\n\t  }\n\t\n\t  self.Headers = Headers\n\t  self.Request = Request\n\t  self.Response = Response\n\t\n\t  self.fetch = function(input, init) {\n\t    return new Promise(function(resolve, reject) {\n\t      var request = new Request(input, init)\n\t      var xhr = new XMLHttpRequest()\n\t\n\t      xhr.onload = function() {\n\t        var options = {\n\t          status: xhr.status,\n\t          statusText: xhr.statusText,\n\t          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n\t        }\n\t        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n\t        var body = 'response' in xhr ? xhr.response : xhr.responseText\n\t        resolve(new Response(body, options))\n\t      }\n\t\n\t      xhr.onerror = function() {\n\t        reject(new TypeError('Network request failed'))\n\t      }\n\t\n\t      xhr.ontimeout = function() {\n\t        reject(new TypeError('Network request failed'))\n\t      }\n\t\n\t      xhr.open(request.method, request.url, true)\n\t\n\t      if (request.credentials === 'include') {\n\t        xhr.withCredentials = true\n\t      } else if (request.credentials === 'omit') {\n\t        xhr.withCredentials = false\n\t      }\n\t\n\t      if ('responseType' in xhr && support.blob) {\n\t        xhr.responseType = 'blob'\n\t      }\n\t\n\t      request.headers.forEach(function(value, name) {\n\t        xhr.setRequestHeader(name, value)\n\t      })\n\t\n\t      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n\t    })\n\t  }\n\t  self.fetch.polyfill = true\n\t})(typeof self !== 'undefined' ? self : this);\n\n\n/***/ },\n/* 89 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar analytics = __webpack_require__(83);\n\tvar objectassign_1 = __webpack_require__(90);\n\tvar utils_1 = __webpack_require__(91);\n\tvar SimpleAPI = (function () {\n\t    function SimpleAPI() {\n\t    }\n\t    SimpleAPI.prototype.init = function (token, endpoint) {\n\t        if (typeof token === 'undefined') {\n\t            throw new Error(\"You must pass your token when you call 'init'\");\n\t        }\n\t        if (typeof token === 'string') {\n\t            endpoint = endpoint || analytics.Endpoints.default;\n\t            this.client = new analytics.Client({\n\t                token: token,\n\t                endpoint: endpoint\n\t            });\n\t        }\n\t        else if (typeof token === 'object' && typeof token.sendEvent !== 'undefined') {\n\t            this.client = token;\n\t        }\n\t        else {\n\t            throw new Error(\"You must pass either your token or a valid object when you call 'init'\");\n\t        }\n\t    };\n\t    SimpleAPI.prototype.send = function (event, customData) {\n\t        if (typeof this.client == 'undefined') {\n\t            throw new Error(\"You must call init before sending an event\");\n\t        }\n\t        customData = objectassign_1.default({}, {\n\t            hash: window.location.hash\n\t        }, customData);\n\t        switch (event) {\n\t            case 'pageview':\n\t                this.client.sendViewEvent({\n\t                    location: window.location.toString(),\n\t                    referrer: document.referrer,\n\t                    language: document.documentElement.lang,\n\t                    title: document.title,\n\t                    contentIdKey: utils_1.popFromObject(customData, 'contentIdKey'),\n\t                    contentIdValue: utils_1.popFromObject(customData, 'contentIdValue'),\n\t                    contentType: utils_1.popFromObject(customData, 'contentType'),\n\t                    anonymous: utils_1.popFromObject(customData, 'anonymous'),\n\t                    customData: customData\n\t                });\n\t                return;\n\t            default:\n\t                throw new Error(\"Event type: '\" + event + \"' not implemented\");\n\t        }\n\t    };\n\t    SimpleAPI.prototype.onLoad = function (callback) {\n\t        if (typeof callback == 'undefined') {\n\t            throw new Error(\"You must pass a function when you call 'onLoad'\");\n\t        }\n\t        callback();\n\t    };\n\t    return SimpleAPI;\n\t}());\n\texports.SimpleAPI = SimpleAPI;\n\tvar simpleAPI = new SimpleAPI();\n\texports.SimpleAnalytics = function (action) {\n\t    var params = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        params[_i - 1] = arguments[_i];\n\t    }\n\t    var actionFunction = simpleAPI[action];\n\t    if (actionFunction) {\n\t        return actionFunction.apply(simpleAPI, params);\n\t    }\n\t};\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.default = exports.SimpleAnalytics;\n\n\n/***/ },\n/* 90 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar objectAssignPonyfill = function (target) {\n\t    var sources = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        sources[_i - 1] = arguments[_i];\n\t    }\n\t    if (target === undefined || target === null) {\n\t        throw new TypeError('Cannot convert undefined or null to object');\n\t    }\n\t    var output = Object(target);\n\t    sources.forEach(function (source) {\n\t        var from = Object(source);\n\t        for (var key in from) {\n\t            if (hasOwnProperty.call(from, key)) {\n\t                output[key] = from[key];\n\t            }\n\t        }\n\t        if (getOwnPropertySymbols) {\n\t            var symbols = getOwnPropertySymbols(from);\n\t            symbols.forEach(function (symbol) {\n\t                if (propIsEnumerable.call(from, symbol)) {\n\t                    output[symbol] = from[symbol];\n\t                }\n\t            });\n\t        }\n\t    });\n\t    return output;\n\t};\n\texports.ponyfill = objectAssignPonyfill;\n\texports.assign = typeof Object.assign === 'function' ? Object.assign : objectAssignPonyfill;\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.default = exports.assign;\n\n\n/***/ },\n/* 91 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction popFromObject(object, key) {\n\t    if (object) {\n\t        var value = object[key];\n\t        delete object[key];\n\t        return value;\n\t    }\n\t}\n\texports.popFromObject = popFromObject;\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\texports.doNotTrack = [true, 'yes', '1'].indexOf(navigator.doNotTrack || navigator.msDoNotTrack || window.doNotTrack);\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.default = exports.doNotTrack;\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path='../ui/Facet/Facet.ts' />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ExpressionBuilder_1 = __webpack_require__(80);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FacetSearchParameters_1 = __webpack_require__(94);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar _ = __webpack_require__(16);\n\tvar FacetQueryController = (function () {\n\t    function FacetQueryController(facet) {\n\t        this.facet = facet;\n\t    }\n\t    /**\n\t     * Reset the expression for the facet search, used when a new query is triggered\n\t     */\n\t    FacetQueryController.prototype.prepareForNewQuery = function () {\n\t        this.lastGroupByRequestIndex = undefined;\n\t        this.expressionToUseForFacetSearch = undefined;\n\t        this.constantExpressionToUseForFacetSearch = undefined;\n\t    };\n\t    /**\n\t     * Compute the filter expression that the facet need to output for the query\n\t     * @returns {string}\n\t     */\n\t    FacetQueryController.prototype.computeOurFilterExpression = function () {\n\t        var _this = this;\n\t        var builder = new ExpressionBuilder_1.ExpressionBuilder();\n\t        var selected = this.facet.values.getSelected();\n\t        if (selected.length > 0) {\n\t            if (this.facet.options.useAnd) {\n\t                _.each(selected, function (value) {\n\t                    builder.addFieldExpression(_this.facet.options.field, '==', [value.value]);\n\t                });\n\t            }\n\t            else {\n\t                builder.addFieldExpression(this.facet.options.field, '==', _.map(selected, function (value) { return value.value; }));\n\t            }\n\t        }\n\t        var excluded = this.facet.values.getExcluded();\n\t        if (excluded.length > 0) {\n\t            builder.addFieldNotEqualExpression(this.facet.options.field, _.map(excluded, function (value) { return value.value; }));\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(this.facet.options.additionalFilter)) {\n\t            builder.add(this.facet.options.additionalFilter);\n\t        }\n\t        return builder.build();\n\t    };\n\t    /**\n\t     * Build the group by request for the facet, and insert it in the query builder\n\t     * @param queryBuilder\n\t     */\n\t    FacetQueryController.prototype.putGroupByIntoQueryBuilder = function (queryBuilder) {\n\t        Assert_1.Assert.exists(queryBuilder);\n\t        var allowedValues = this.createGroupByAllowedValues();\n\t        var groupByRequest = this.createBasicGroupByRequest(allowedValues);\n\t        var queryOverrideObject = this.createGroupByQueryOverride(queryBuilder);\n\t        if (!Utils_1.Utils.isNullOrUndefined(queryOverrideObject)) {\n\t            groupByRequest.queryOverride = queryOverrideObject.basic;\n\t            groupByRequest.advancedQueryOverride = queryOverrideObject.advanced;\n\t            groupByRequest.constantQueryOverride = queryOverrideObject.constant;\n\t            this.expressionToUseForFacetSearch = queryOverrideObject.withoutConstant;\n\t            this.basicExpressionToUseForFacetSearch = queryOverrideObject.basic;\n\t            this.advancedExpressionToUseForFacetSearch = queryOverrideObject.advanced;\n\t            this.constantExpressionToUseForFacetSearch = queryOverrideObject.constant;\n\t        }\n\t        else {\n\t            var parts = queryBuilder.computeCompleteExpressionParts();\n\t            this.expressionToUseForFacetSearch = parts.withoutConstant == null ? '@uri' : parts.withoutConstant;\n\t            this.basicExpressionToUseForFacetSearch = parts.basic == null ? '@uri' : parts.basic;\n\t            this.advancedExpressionToUseForFacetSearch = parts.advanced;\n\t            this.constantExpressionToUseForFacetSearch = parts.constant;\n\t        }\n\t        this.lastGroupByRequestIndex = queryBuilder.groupByRequests.length;\n\t        this.lastGroupByRequest = groupByRequest;\n\t        queryBuilder.groupByRequests.push(groupByRequest);\n\t    };\n\t    /**\n\t     * Search inside the facet, using a group by request\n\t     * @param params\n\t     * @param oldLength Optional params, used by the search method to call itself recursively to fetch all required values\n\t     * @returns {Promise|Promise<T>}\n\t     */\n\t    FacetQueryController.prototype.search = function (params, oldLength) {\n\t        var _this = this;\n\t        if (oldLength === void 0) { oldLength = params.nbResults; }\n\t        return new Promise(function (resolve, reject) {\n\t            var onResult = function (fieldValues) {\n\t                var newLength = fieldValues.length;\n\t                fieldValues = _this.checkForFacetSearchValuesToRemove(fieldValues, params.valueToSearch);\n\t                if (FacetUtils_1.FacetUtils.needAnotherFacetSearch(fieldValues.length, newLength, oldLength, 5)) {\n\t                    // This means that we removed enough values from the returned one that we need to perform a new search with more values requested.\n\t                    params.nbResults += 5;\n\t                    return _this.search(params, fieldValues.length);\n\t                }\n\t                else {\n\t                    resolve(fieldValues);\n\t                }\n\t            };\n\t            var searchPromise = _this.facet.getEndpoint().search(params.getQuery());\n\t            _this.currentSearchPromise = searchPromise;\n\t            searchPromise.then(function (queryResults) {\n\t                if (_this.currentSearchPromise == searchPromise) {\n\t                    // params.getQuery() will generate a query for all excluded values + some new values\n\t                    // there is no clean way to do a group by and remove some values\n\t                    // so instead we request more values than we need, and crop all the one we don't want\n\t                    var valuesCropped_1 = [];\n\t                    if (queryResults.groupByResults && queryResults.groupByResults[0]) {\n\t                        _.each(queryResults.groupByResults[0].values, function (v) {\n\t                            if (v.lookupValue) {\n\t                                if (!_.contains(params.alwaysExclude, v.lookupValue.toLowerCase())) {\n\t                                    valuesCropped_1.push(v);\n\t                                }\n\t                            }\n\t                            else {\n\t                                if (!_.contains(params.alwaysExclude, v.value.toLowerCase())) {\n\t                                    valuesCropped_1.push(v);\n\t                                }\n\t                            }\n\t                        });\n\t                    }\n\t                    onResult(_.first(valuesCropped_1, params.nbResults));\n\t                }\n\t                else {\n\t                    reject();\n\t                }\n\t            })\n\t                .catch(function (error) {\n\t                reject(error);\n\t            });\n\t        });\n\t    };\n\t    FacetQueryController.prototype.fetchMore = function (numberOfValuesToFetch) {\n\t        var params = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        params.alwaysInclude = this.facet.options.allowedValues || _.pluck(this.facet.values.getAll(), 'value');\n\t        params.nbResults = numberOfValuesToFetch;\n\t        return this.facet.getEndpoint().search(params.getQuery());\n\t    };\n\t    FacetQueryController.prototype.searchInFacetToUpdateDelta = function (facetValues) {\n\t        var params = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        var query = params.getQuery();\n\t        query.aq = this.computeOurFilterExpression();\n\t        _.each(facetValues, function (facetValue) {\n\t            facetValue.waitingForDelta = true;\n\t        });\n\t        query.groupBy = [this.createBasicGroupByRequest(_.map(facetValues, function (facetValue) { return facetValue.value; }))];\n\t        query.groupBy[0].completeFacetWithStandardValues = false;\n\t        return this.facet.getEndpoint().search(query);\n\t    };\n\t    FacetQueryController.prototype.createGroupByAllowedValues = function () {\n\t        // if you want to keep displayed values next time, take all current values as allowed values\n\t        // otherwise take only the selected value\n\t        if (this.facet.options.allowedValues != undefined) {\n\t            return this.facet.options.allowedValues;\n\t        }\n\t        else if (this.facet.options.customSort != undefined) {\n\t            // If there is a custom sort, we still need to add selectedValues to the group by\n\t            // Filter out duplicates with a lower case comparison on the value\n\t            return this.getUnionWithCustomSortLowercase(this.facet.options.customSort, this.getAllowedValuesFromSelected());\n\t        }\n\t        else {\n\t            return _.map(this.getAllowedValuesFromSelected(), function (facetValue) { return facetValue.value; });\n\t        }\n\t    };\n\t    FacetQueryController.prototype.getUnionWithCustomSortLowercase = function (customSort, facetValues) {\n\t        // This will take the custom sort, compare it against the passed in facetValues\n\t        // The comparison is lowercase.\n\t        // The union of the 2 arrays with duplicated filtered out is returned.\n\t        var toCompare = _.map(customSort, function (val) {\n\t            return val.toLowerCase();\n\t        });\n\t        var filtered = _.chain(facetValues)\n\t            .filter(function (facetValue) {\n\t            return !_.contains(toCompare, facetValue.value.toLowerCase());\n\t        })\n\t            .map(function (facetValue) {\n\t            return facetValue.value;\n\t        })\n\t            .value();\n\t        return _.compact(customSort.concat(filtered));\n\t    };\n\t    FacetQueryController.prototype.getAllowedValuesFromSelected = function () {\n\t        var facetValues = [];\n\t        if (this.facet.options.useAnd || !this.facet.keepDisplayedValuesNextTime) {\n\t            var selected = this.facet.values.getSelected();\n\t            if (selected.length == 0) {\n\t                return undefined;\n\t            }\n\t            facetValues = this.facet.values.getSelected();\n\t        }\n\t        else {\n\t            facetValues = this.facet.values.getAll();\n\t        }\n\t        return facetValues;\n\t    };\n\t    FacetQueryController.prototype.createGroupByQueryOverride = function (queryBuilder) {\n\t        var additionalFilter = this.facet.options.additionalFilter ? this.facet.options.additionalFilter : '';\n\t        var queryOverrideObject = undefined;\n\t        if (this.facet.options.useAnd) {\n\t            if (Utils_1.Utils.isNonEmptyString(additionalFilter)) {\n\t                queryOverrideObject = queryBuilder.computeCompleteExpressionParts();\n\t                if (Utils_1.Utils.isEmptyString(queryOverrideObject.basic)) {\n\t                    queryOverrideObject.basic = '@uri';\n\t                }\n\t            }\n\t        }\n\t        else {\n\t            if (this.facet.values.hasSelectedOrExcludedValues()) {\n\t                queryOverrideObject = queryBuilder.computeCompleteExpressionPartsExcept(this.computeOurFilterExpression());\n\t                if (Utils_1.Utils.isEmptyString(queryOverrideObject.basic)) {\n\t                    queryOverrideObject.basic = '@uri';\n\t                }\n\t            }\n\t            else {\n\t                if (Utils_1.Utils.isNonEmptyString(additionalFilter)) {\n\t                    queryOverrideObject = queryBuilder.computeCompleteExpressionParts();\n\t                    if (Utils_1.Utils.isEmptyString(queryOverrideObject.basic)) {\n\t                        queryOverrideObject.basic = '@uri';\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        if (queryOverrideObject) {\n\t            if (Utils_1.Utils.isNonEmptyString(additionalFilter)) {\n\t                queryOverrideObject.constant = queryOverrideObject.constant ? queryOverrideObject.constant + ' ' + additionalFilter : additionalFilter;\n\t            }\n\t        }\n\t        _.each(_.keys(queryOverrideObject), function (k) {\n\t            if (Utils_1.Utils.isEmptyString(queryOverrideObject[k]) || Utils_1.Utils.isNullOrUndefined(queryOverrideObject[k])) {\n\t                delete queryOverrideObject[k];\n\t            }\n\t        });\n\t        if (_.keys(queryOverrideObject).length == 0) {\n\t            queryOverrideObject = undefined;\n\t        }\n\t        return queryOverrideObject;\n\t    };\n\t    FacetQueryController.prototype.createBasicGroupByRequest = function (allowedValues, addComputedField) {\n\t        if (addComputedField === void 0) { addComputedField = true; }\n\t        var nbOfRequestedValues = this.facet.numberOfValues;\n\t        if (this.facet.options.customSort != null) {\n\t            // If we have a custom sort, we need to make sure that we always request at least enough values to always receive them\n\t            var usedValues = this.getUnionWithCustomSortLowercase(this.facet.options.customSort, this.facet.values.getSelected().concat(this.facet.values.getExcluded()));\n\t            nbOfRequestedValues = Math.max(nbOfRequestedValues, usedValues.length);\n\t        }\n\t        var groupByRequest = {\n\t            field: this.facet.options.field,\n\t            maximumNumberOfValues: nbOfRequestedValues + (this.facet.options.enableMoreLess ? 1 : 0),\n\t            sortCriteria: this.facet.options.sortCriteria,\n\t            injectionDepth: this.facet.options.injectionDepth,\n\t            completeFacetWithStandardValues: this.facet.options.allowedValues == undefined ? true : false\n\t        };\n\t        if (this.facet.options.lookupField) {\n\t            groupByRequest.lookupField = this.facet.options.lookupField;\n\t        }\n\t        if (allowedValues != null) {\n\t            groupByRequest.allowedValues = allowedValues;\n\t        }\n\t        if (addComputedField && Utils_1.Utils.isNonEmptyString(this.facet.options.computedField)) {\n\t            groupByRequest.computedFields = [{\n\t                    field: this.facet.options.computedField,\n\t                    operation: this.facet.options.computedFieldOperation\n\t                }];\n\t        }\n\t        return groupByRequest;\n\t    };\n\t    FacetQueryController.prototype.checkForFacetSearchValuesToRemove = function (fieldValues, valueToCheckAgainst) {\n\t        var _this = this;\n\t        var regex = FacetUtils_1.FacetUtils.getRegexToUseForFacetSearch(valueToCheckAgainst, this.facet.options.facetSearchIgnoreAccents);\n\t        return _.filter(fieldValues, function (fieldValue) {\n\t            var isAllowed = _.isEmpty(_this.facet.options.allowedValues) ||\n\t                _.contains(_this.facet.options.allowedValues, fieldValue.value);\n\t            var value = _this.facet.getValueCaption(fieldValue);\n\t            return isAllowed && regex.test(value);\n\t        });\n\t    };\n\t    return FacetQueryController;\n\t}());\n\texports.FacetQueryController = FacetQueryController;\n\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar FacetSearchParameters = (function () {\n\t    function FacetSearchParameters(facet) {\n\t        this.facet = facet;\n\t        this.valueToSearch = '';\n\t        this.alwaysInclude = [];\n\t        this.alwaysExclude = [];\n\t        this.sortCriteria = 'occurrences';\n\t        this.fetchMore = false;\n\t        this.nbResults = facet.options.numberOfValuesInFacetSearch;\n\t        this.ignoreAccents = facet.options.facetSearchIgnoreAccents;\n\t        this.searchEvenIfEmpty = facet.searchInterface.isNewDesign();\n\t    }\n\t    FacetSearchParameters.prototype.setValueToSearch = function (value) {\n\t        this.valueToSearch = value;\n\t        if (Utils_1.Utils.isNonEmptyString(value)) {\n\t            this.valueToSearch = this.valueToSearch.trim();\n\t            this.alwaysInclude = this.alwaysInclude.concat(FacetUtils_1.FacetUtils.getValuesToUseForSearchInFacet(this.valueToSearch, this.facet));\n\t        }\n\t        return this;\n\t    };\n\t    FacetSearchParameters.prototype.excludeCurrentlyDisplayedValuesInSearch = function (searchResults) {\n\t        var _this = this;\n\t        _.each(this.getCurrentlyShowedValueInSearch(searchResults), function (v) {\n\t            var expandedValues = FacetUtils_1.FacetUtils.getValuesToUseForSearchInFacet(v, _this.facet);\n\t            _.each(expandedValues, function (expanded) {\n\t                _this.alwaysExclude.push(expanded);\n\t            });\n\t        });\n\t        _.each(this.facet.getDisplayedFacetValues(), function (v) {\n\t            var expandedValues = FacetUtils_1.FacetUtils.getValuesToUseForSearchInFacet(v.value, _this.facet);\n\t            _.each(expandedValues, function (expanded) {\n\t                _this.alwaysExclude.push(expanded);\n\t            });\n\t        });\n\t    };\n\t    FacetSearchParameters.prototype.getGroupByRequest = function () {\n\t        this.lowerCaseAll();\n\t        var nbResults = this.nbResults;\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            nbResults += this.alwaysExclude.length;\n\t        }\n\t        var typedByUser = [];\n\t        if (this.valueToSearch) {\n\t            typedByUser = ['*' + this.valueToSearch + '*'];\n\t        }\n\t        var request = {\n\t            allowedValues: typedByUser.concat(this.alwaysInclude).concat(this.alwaysExclude),\n\t            maximumNumberOfValues: nbResults,\n\t            completeFacetWithStandardValues: this.facet.options.lookupField ? false : true,\n\t            field: this.facet.options.field,\n\t            sortCriteria: this.facet.options.sortCriteria || this.sortCriteria,\n\t            injectionDepth: this.facet.options.injectionDepth,\n\t        };\n\t        if (this.facet.options.lookupField) {\n\t            request.lookupField = this.facet.options.lookupField;\n\t        }\n\t        if (this.facet.options.computedField) {\n\t            request.computedFields = [{\n\t                    field: this.facet.options.computedField,\n\t                    operation: this.facet.options.computedFieldOperation\n\t                }];\n\t        }\n\t        return request;\n\t    };\n\t    FacetSearchParameters.prototype.getQuery = function () {\n\t        var lastQuery = _.clone(this.facet.queryController.getLastQuery());\n\t        if (!lastQuery) {\n\t            // There should normally always be a last query available\n\t            // If not, just create an empty one.\n\t            lastQuery = new QueryBuilder_1.QueryBuilder().build();\n\t        }\n\t        // We want to always force query syntax to true for a facet search,\n\t        // but arrange for the basic expression to adapt itself with no syntax block\n\t        if (!lastQuery.disableQuerySyntax) {\n\t            lastQuery.q = this.facet.facetQueryController.basicExpressionToUseForFacetSearch;\n\t        }\n\t        else {\n\t            if (this.facet.facetQueryController.basicExpressionToUseForFacetSearch == '@uri') {\n\t                lastQuery.q = '';\n\t            }\n\t            else {\n\t                lastQuery.q = \"<@- \" + this.facet.facetQueryController.basicExpressionToUseForFacetSearch + \" -@>\";\n\t            }\n\t        }\n\t        lastQuery.disableQuerySyntax = false;\n\t        lastQuery.cq = this.facet.facetQueryController.constantExpressionToUseForFacetSearch;\n\t        lastQuery.aq = this.facet.facetQueryController.advancedExpressionToUseForFacetSearch;\n\t        lastQuery.enableDidYouMean = false;\n\t        lastQuery.firstResult = 0;\n\t        lastQuery.numberOfResults = 0;\n\t        lastQuery.fieldsToInclude = [];\n\t        lastQuery.groupBy = [this.getGroupByRequest()];\n\t        return lastQuery;\n\t    };\n\t    FacetSearchParameters.prototype.getCurrentlyShowedValueInSearch = function (searchResults) {\n\t        return _.map(Dom_1.$$(searchResults).findAll('.coveo-facet-value-caption'), function (val) {\n\t            return Dom_1.$$(val).text();\n\t        });\n\t    };\n\t    FacetSearchParameters.prototype.lowerCaseAll = function () {\n\t        this.alwaysExclude = _.chain(this.alwaysExclude)\n\t            .map(function (v) {\n\t            return v.toLowerCase();\n\t        })\n\t            .uniq()\n\t            .value();\n\t        this.alwaysInclude = _.chain(this.alwaysInclude)\n\t            .map(function (v) {\n\t            return v.toLowerCase();\n\t        })\n\t            .uniq()\n\t            .value();\n\t    };\n\t    return FacetSearchParameters;\n\t}());\n\texports.FacetSearchParameters = FacetSearchParameters;\n\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar FileTypes_1 = __webpack_require__(63);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar FacetUtils = (function () {\n\t    function FacetUtils() {\n\t    }\n\t    FacetUtils.getRegexToUseForFacetSearch = function (value, ignoreAccent) {\n\t        return new RegExp(StringUtils_1.StringUtils.stringToRegex(value, ignoreAccent), 'i');\n\t    };\n\t    FacetUtils.getValuesToUseForSearchInFacet = function (original, facet) {\n\t        var ret = [original];\n\t        var regex = this.getRegexToUseForFacetSearch(original, facet.options.facetSearchIgnoreAccents);\n\t        if (facet.options.valueCaption) {\n\t            _.chain(facet.options.valueCaption)\n\t                .pairs()\n\t                .filter(function (pair) {\n\t                return regex.test(pair[1]);\n\t            })\n\t                .each(function (match) {\n\t                ret.push(match[0]);\n\t            });\n\t            if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') || QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')) {\n\t                _.each(FileTypes_1.FileTypes.getFileTypeCaptions(), function (value, key) {\n\t                    if (!(key in facet.options.valueCaption) && regex.test(value)) {\n\t                        ret.push(key);\n\t                    }\n\t                });\n\t            }\n\t        }\n\t        else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@objecttype') || QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@filetype')) {\n\t            _.each(_.filter(_.pairs(FileTypes_1.FileTypes.getFileTypeCaptions()), function (pair) {\n\t                return regex.test(pair[1]);\n\t            }), function (match) {\n\t                ret.push(match[0]);\n\t            });\n\t        }\n\t        else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(facet.options.field, '@month')) {\n\t            _.each(_.range(1, 13), function (month) {\n\t                if (regex.test(DateUtils_1.DateUtils.monthToString(month - 1))) {\n\t                    ret.push(('0' + month.toString()).substr(-2));\n\t                }\n\t            });\n\t        }\n\t        return ret;\n\t    };\n\t    FacetUtils.buildFacetSearchPattern = function (values) {\n\t        values = _.map(values, function (value) {\n\t            return Utils_1.Utils.escapeRegexCharacter(value);\n\t        });\n\t        values[0] = '.*' + values[0] + '.*';\n\t        return values.join('|');\n\t    };\n\t    FacetUtils.needAnotherFacetSearch = function (currentSearchLength, newSearchLength, oldSearchLength, desiredSearchLength) {\n\t        // Something was removed (currentSearch < newSearch)\n\t        // && we might want to display more facet search result(currentSearch < desiredSearch)\n\t        // && the new query returned more stuff than the old one so there's still more results(currentSearchLength > oldLength)\n\t        return currentSearchLength < newSearchLength && currentSearchLength < desiredSearchLength && currentSearchLength > oldSearchLength;\n\t    };\n\t    FacetUtils.addNoStateCssClassToFacetValues = function (facet, container) {\n\t        // This takes care of adding the correct css class on each facet value checkbox (empty white box) if at least one value is selected in that facet\n\t        if (facet.values.getSelected().length != 0) {\n\t            var noStates = Dom_1.$$(container).findAll('li:not(.coveo-selected)');\n\t            _.each(noStates, function (noState) {\n\t                Dom_1.$$(noState).addClass('coveo-no-state');\n\t            });\n\t        }\n\t    };\n\t    FacetUtils.tryToGetTranslatedCaption = function (field, value) {\n\t        var found;\n\t        if (QueryUtils_1.QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@filetype')) {\n\t            found = FileTypes_1.FileTypes.getFileType(value.toLowerCase()).caption;\n\t        }\n\t        else if (QueryUtils_1.QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@month')) {\n\t            try {\n\t                var month = parseInt(value);\n\t                found = DateUtils_1.DateUtils.monthToString(month - 1);\n\t            }\n\t            catch (ex) {\n\t                // Do nothing\n\t            }\n\t        }\n\t        return found != undefined && Utils_1.Utils.isNonEmptyString(found) ? found : value;\n\t    };\n\t    FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer = function (facet, forceClip) {\n\t        // in new design, we don't need this : use flexbox instead (sorry IE user)\n\t        if (facet.getBindings && facet.getBindings().searchInterface && facet.getBindings().searchInterface.isNewDesign()) {\n\t            return;\n\t        }\n\t        if (!(Coveo.HierarchicalFacet && facet instanceof Coveo.HierarchicalFacet) || forceClip) {\n\t            facet.logger.trace('Clipping captions');\n\t            // force facet to show to calculate width\n\t            Dom_1.$$(facet.element).show();\n\t            var element = facet.element;\n\t            var captions = Dom_1.$$(element).findAll('.coveo-facet-value-caption');\n\t            for (var i = 0; i < captions.length; i++) {\n\t                if (captions[i].style.width != '') {\n\t                    captions[i].style.width = '';\n\t                }\n\t            }\n\t            var labels = Dom_1.$$(element).findAll('.coveo-facet-value-label-wrapper');\n\t            var labelsMaxWidth = [];\n\t            for (var i = 0; i < labels.length; i++) {\n\t                var label = labels[i];\n\t                var caption = Dom_1.$$(label).find('.coveo-facet-value-caption');\n\t                var labelWidth = label.scrollWidth;\n\t                var labelVisibleWidth = label.clientWidth;\n\t                var captionWidth = caption.scrollWidth;\n\t                var crop = Math.max(0, labelWidth - labelVisibleWidth);\n\t                if (crop) {\n\t                    labelsMaxWidth.push({\n\t                        element: caption,\n\t                        width: captionWidth,\n\t                        crop: crop,\n\t                        label: label\n\t                    });\n\t                }\n\t            }\n\t            // remove the specific css class\n\t            element.style.display = '';\n\t            for (var i = 0; i < labelsMaxWidth.length; i++) {\n\t                var labelMaxWidth = labelsMaxWidth[i];\n\t                labelMaxWidth.element.style.width = labelMaxWidth.width - labelMaxWidth.crop + 'px';\n\t                if (labelMaxWidth.crop > 0) {\n\t                    labelMaxWidth.label.setAttribute('title', Dom_1.$$(labelMaxWidth.element).text());\n\t                }\n\t                else {\n\t                    labelMaxWidth.label.setAttribute('title', null);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    return FacetUtils;\n\t}());\n\texports.FacetUtils = FacetUtils;\n\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../ui/FacetRange/FacetRange.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetQueryController_1 = __webpack_require__(93);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FacetRangeQueryController = (function (_super) {\n\t    __extends(FacetRangeQueryController, _super);\n\t    function FacetRangeQueryController(facet) {\n\t        var _this = _super.call(this, facet) || this;\n\t        _this.facet = facet;\n\t        return _this;\n\t    }\n\t    FacetRangeQueryController.prototype.createBasicGroupByRequest = function (allowedValues, addComputedField) {\n\t        if (addComputedField === void 0) { addComputedField = true; }\n\t        var groupByQuery = _super.prototype.createBasicGroupByRequest.call(this, null, addComputedField);\n\t        groupByQuery.allowedValues = undefined;\n\t        if (Utils_1.Utils.isNonEmptyArray(this.facet.options.ranges)) {\n\t            groupByQuery = this.buildGroupByQueryForPredefinedRanges(groupByQuery);\n\t        }\n\t        else {\n\t            groupByQuery = this.buildGroupByQueryForAutomaticRanges(groupByQuery);\n\t        }\n\t        return groupByQuery;\n\t    };\n\t    FacetRangeQueryController.prototype.createGroupByAllowedValues = function () {\n\t        return undefined;\n\t    };\n\t    FacetRangeQueryController.prototype.buildGroupByQueryForAutomaticRanges = function (groupByQuery) {\n\t        groupByQuery.generateAutomaticRanges = true;\n\t        return groupByQuery;\n\t    };\n\t    FacetRangeQueryController.prototype.buildGroupByQueryForPredefinedRanges = function (groupByQuery) {\n\t        groupByQuery.rangeValues = this.facet.options.ranges;\n\t        groupByQuery.maximumNumberOfValues = this.facet.options.ranges.length;\n\t        return groupByQuery;\n\t    };\n\t    return FacetRangeQueryController;\n\t}(FacetQueryController_1.FacetQueryController));\n\texports.FacetRangeQueryController = FacetRangeQueryController;\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../ui/FacetSlider/FacetSlider.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar ExpressionBuilder_1 = __webpack_require__(80);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar _ = __webpack_require__(16);\n\tvar FacetSliderQueryController = (function () {\n\t    function FacetSliderQueryController(facet) {\n\t        var _this = this;\n\t        this.facet = facet;\n\t        this.facet.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t    }\n\t    FacetSliderQueryController.prototype.prepareForNewQuery = function () {\n\t        this.lastGroupByRequestIndex = undefined;\n\t    };\n\t    FacetSliderQueryController.prototype.putGroupByIntoQueryBuilder = function (queryBuilder) {\n\t        if (this.facet.options.graph) {\n\t            this.putGroupByForGraphIntoQueryBuilder(queryBuilder);\n\t        }\n\t        this.putGroupByForSliderIntoQueryBuilder(queryBuilder);\n\t    };\n\t    FacetSliderQueryController.prototype.createBasicGroupByRequest = function () {\n\t        var groupByQuery = {\n\t            field: this.facet.options.field,\n\t            completeFacetWithStandardValues: true,\n\t            allowedValues: undefined\n\t        };\n\t        return groupByQuery;\n\t    };\n\t    FacetSliderQueryController.prototype.computeOurFilterExpression = function (boundary) {\n\t        if (boundary === void 0) { boundary = [this.facet.startOfSlider, this.facet.endOfSlider]; }\n\t        var builder = new ExpressionBuilder_1.ExpressionBuilder();\n\t        if (boundary[0] != undefined && boundary[1] != undefined) {\n\t            if (this.facet.options.excludeOuterBounds) {\n\t                this.addFilterExpressionWithOuterBoundsExcluded(boundary[0], boundary[1], builder);\n\t            }\n\t            else {\n\t                this.addFilterExpressionWithOuterBoundsIncluded(boundary[0], boundary[1], builder);\n\t            }\n\t        }\n\t        return builder.build();\n\t    };\n\t    FacetSliderQueryController.prototype.handleQuerySuccess = function (args) {\n\t        var _this = this;\n\t        if (!this.isAValidRangeResponse(args)) {\n\t            var logger = new Logger_1.Logger(this);\n\t            logger.error(\"Cannot instantiate FacetSlider for this field : \" + this.facet.options.field + \". It needs to be configured as a numerical field in the index\");\n\t            logger.error(\"Disabling the FacetSlider\", this.facet);\n\t            this.facet.disable();\n\t            return;\n\t        }\n\t        if (this.facet.options && this.facet.options.graph && this.rangeValuesForGraphToUse == undefined) {\n\t            this.rangeValuesForGraphToUse = [];\n\t            var rawValues = args.results.groupByResults[this.graphGroupByQueriesIndex].values;\n\t            _.each(rawValues, function (rawValue) {\n\t                var rawSplit = rawValue.value.split('..');\n\t                _this.rangeValuesForGraphToUse.push({\n\t                    start: _this.facet.options.dateField ? _this.getISOFormat(rawSplit[0].replace('@', ' ')) : parseInt(rawSplit[0], 10),\n\t                    end: _this.facet.options.dateField ? _this.getISOFormat(rawSplit[1].replace('@', ' ')) : parseInt(rawSplit[1], 10)\n\t                });\n\t            });\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.isAValidRangeResponse = function (args) {\n\t        if (this.lastGroupByRequestIndex != undefined && args.results.groupByResults[this.lastGroupByRequestIndex]) {\n\t            var firstValue = args.results.groupByResults[this.lastGroupByRequestIndex].values[0];\n\t            if (firstValue && !QueryUtils_1.QueryUtils.isRangeString(firstValue.value)) {\n\t                return false;\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    FacetSliderQueryController.prototype.addFilterExpressionWithOuterBoundsIncluded = function (start, end, builder) {\n\t        if (start != this.facet.options.start || end != this.facet.options.end) {\n\t            if (this.facet.options.dateField) {\n\t                start = this.getFilterDateFormat(start);\n\t                end = this.getFilterDateFormat(end);\n\t            }\n\t            builder.addFieldExpression(this.facet.options.field, '==', [start + '..' + end]);\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.addFilterExpressionWithOuterBoundsExcluded = function (start, end, builder) {\n\t        var startCompare = this.facet.options.start;\n\t        var endCompare = this.facet.options.end;\n\t        var startCompared = start;\n\t        var endCompared = end;\n\t        if (this.facet.options.dateField) {\n\t            startCompared = this.getFilterDateFormat(start);\n\t            endCompared = this.getFilterDateFormat(end);\n\t            startCompare = this.getFilterDateFormat(startCompare);\n\t            endCompare = this.getFilterDateFormat(endCompare);\n\t        }\n\t        else {\n\t            startCompared += '';\n\t            endCompared += '';\n\t            startCompare += '';\n\t            endCompare += '';\n\t        }\n\t        if (startCompared != startCompare && endCompared == endCompare) {\n\t            builder.addFieldExpression(this.facet.options.field, '>=', [startCompared]);\n\t        }\n\t        else if (startCompared == startCompare && endCompared != endCompare) {\n\t            builder.addFieldExpression(this.facet.options.field, '<=', [endCompared]);\n\t        }\n\t        else {\n\t            this.addFilterExpressionWithOuterBoundsIncluded(start, end, builder);\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.putGroupByForGraphIntoQueryBuilder = function (queryBuilder) {\n\t        this.graphGroupByQueriesIndex = queryBuilder.groupByRequests.length;\n\t        var basicGroupByRequestForGraph = this.createBasicGroupByRequest();\n\t        if (this.facet.isSimpleSliderConfig()) {\n\t            basicGroupByRequestForGraph.rangeValues = this.createRangeValuesForGraphUsingStartAndEnd();\n\t            basicGroupByRequestForGraph.generateAutomaticRanges = false;\n\t        }\n\t        else {\n\t            basicGroupByRequestForGraph.generateAutomaticRanges = true;\n\t        }\n\t        var filter = this.computeOurFilterExpression(this.facet.getSliderBoundaryForQuery());\n\t        if (filter != undefined) {\n\t            var queryOverrideObject = queryBuilder.computeCompleteExpressionPartsExcept(filter);\n\t            basicGroupByRequestForGraph.queryOverride = queryOverrideObject.basic;\n\t            basicGroupByRequestForGraph.advancedQueryOverride = queryOverrideObject.advanced;\n\t            basicGroupByRequestForGraph.constantQueryOverride = queryOverrideObject.constant;\n\t            if (basicGroupByRequestForGraph.queryOverride == undefined) {\n\t                basicGroupByRequestForGraph.queryOverride = this.facet.options.queryOverride || '@uri';\n\t            }\n\t            else {\n\t                basicGroupByRequestForGraph.queryOverride += (this.facet.options.queryOverride ? ' ' + this.facet.options.queryOverride : '');\n\t            }\n\t        }\n\t        else if (this.facet.options.queryOverride != null) {\n\t            var completeExpression = queryBuilder.computeCompleteExpression();\n\t            basicGroupByRequestForGraph.queryOverride = (completeExpression != null ? completeExpression + ' ' : '') + this.facet.options.queryOverride;\n\t        }\n\t        basicGroupByRequestForGraph.sortCriteria = 'nosort';\n\t        basicGroupByRequestForGraph.maximumNumberOfValues = this.facet.options.graph.steps;\n\t        queryBuilder.groupByRequests.push(basicGroupByRequestForGraph);\n\t    };\n\t    FacetSliderQueryController.prototype.putGroupByForSliderIntoQueryBuilder = function (queryBuilder) {\n\t        this.lastGroupByRequestIndex = queryBuilder.groupByRequests.length;\n\t        var maximumNumberOfValues = 1;\n\t        if (this.facet.hasAGraph()) {\n\t            maximumNumberOfValues = this.facet.options.graph.steps;\n\t        }\n\t        var rangeValues = undefined;\n\t        var _a = this.formatStartAndEnd(), start = _a.start, end = _a.end;\n\t        if (this.facet.isSimpleSliderConfig()) {\n\t            rangeValues = [{\n\t                    start: start,\n\t                    end: end,\n\t                    label: 'slider',\n\t                    endInclusive: false\n\t                }];\n\t        }\n\t        var basicGroupByRequestForSlider = this.createBasicGroupByRequest();\n\t        basicGroupByRequestForSlider.maximumNumberOfValues = maximumNumberOfValues;\n\t        basicGroupByRequestForSlider.queryOverride = this.facet.options.queryOverride || '@uri';\n\t        basicGroupByRequestForSlider.sortCriteria = 'nosort';\n\t        basicGroupByRequestForSlider.generateAutomaticRanges = !this.facet.isSimpleSliderConfig();\n\t        basicGroupByRequestForSlider.rangeValues = rangeValues;\n\t        queryBuilder.groupByRequests.push(basicGroupByRequestForSlider);\n\t    };\n\t    FacetSliderQueryController.prototype.createRangeValuesForGraphUsingStartAndEnd = function () {\n\t        var _a = this.formatStartAndEnd(), start = _a.start, end = _a.end;\n\t        var oneRange = {\n\t            start: start,\n\t            end: end,\n\t            endInclusive: true,\n\t            label: 'Slider'\n\t        };\n\t        if (this.facet.options.graph.steps == undefined) {\n\t            this.facet.options.graph.steps = 10;\n\t        }\n\t        if (this.facet.options.dateField && isNaN(this.facet.options.start)) {\n\t            this.facet.options.start = new Date(this.facet.options.start).getTime();\n\t        }\n\t        if (this.facet.options.dateField && isNaN(this.facet.options.end)) {\n\t            this.facet.options.end = new Date(this.facet.options.end).getTime();\n\t        }\n\t        if (this.rangeValuesForGraphToUse != undefined) {\n\t            return this.usePrebuiltRange(oneRange);\n\t        }\n\t        else {\n\t            return this.buildRange(oneRange);\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.usePrebuiltRange = function (basicRangeRequest) {\n\t        return _.map(this.rangeValuesForGraphToUse, function (value) {\n\t            return {\n\t                start: value.start,\n\t                end: value.end,\n\t                endInclusive: basicRangeRequest.endInclusive,\n\t                label: basicRangeRequest.label\n\t            };\n\t        });\n\t    };\n\t    FacetSliderQueryController.prototype.buildRange = function (basicRangeRequest) {\n\t        var _this = this;\n\t        var start = this.facet.options.start;\n\t        var oneStep = (this.facet.options.end - this.facet.options.start) / this.facet.options.graph.steps;\n\t        return _.map(_.range(0, this.facet.options.graph.steps, 1), function (step) {\n\t            var newStart = start + (step * oneStep);\n\t            var newEnd = start + ((step + 1) * oneStep);\n\t            if (_this.facet.options.dateField) {\n\t                newStart = _this.getISOFormat(newStart);\n\t                newEnd = _this.getISOFormat(newEnd);\n\t            }\n\t            return {\n\t                endInclusive: basicRangeRequest.endInclusive,\n\t                label: basicRangeRequest.label,\n\t                start: newStart,\n\t                end: newEnd\n\t            };\n\t        });\n\t    };\n\t    FacetSliderQueryController.prototype.formatStartAndEnd = function () {\n\t        var start = this.facet.options.start;\n\t        var end = this.facet.options.end;\n\t        if (this.facet.options.dateField) {\n\t            start = this.getISOFormat(start);\n\t            end = this.getISOFormat(end);\n\t        }\n\t        return {\n\t            start: start,\n\t            end: end\n\t        };\n\t    };\n\t    FacetSliderQueryController.prototype.getISOFormat = function (value) {\n\t        if (value) {\n\t            if (!isNaN(value)) {\n\t                value = Number(value);\n\t            }\n\t            var date = new Date(value);\n\t            if (!DateUtils_1.DateUtils.isValid(date)) {\n\t                date = new Date(this.getBrowserCompatibleFormat(value));\n\t                if (!DateUtils_1.DateUtils.isValid(date)) {\n\t                    // If we get here, we'll probably get an error further down the line when querying the index anyway ...\n\t                    this.facet.logger.error('Cannot parse this date format.', value, new Date(value));\n\t                    return undefined;\n\t                }\n\t            }\n\t            return date.toISOString();\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.getFilterDateFormat = function (rawValue) {\n\t        if (rawValue) {\n\t            return this.getISOFormat(rawValue).replace('T', '@').replace('.000Z', '').replace(/-/g, '/');\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    FacetSliderQueryController.prototype.getBrowserCompatibleFormat = function (value) {\n\t        return value.replace('@', 'T').replace(/\\//g, '-');\n\t    };\n\t    return FacetSliderQueryController;\n\t}());\n\texports.FacetSliderQueryController = FacetSliderQueryController;\n\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../ui/HierarchicalFacet/HierarchicalFacet.ts\" />\n\t/// <reference path=\"./FacetQueryController.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetQueryController_1 = __webpack_require__(93);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar _ = __webpack_require__(16);\n\tvar HierarchicalFacetQueryController = (function (_super) {\n\t    __extends(HierarchicalFacetQueryController, _super);\n\t    function HierarchicalFacetQueryController(facet) {\n\t        var _this = _super.call(this, facet) || this;\n\t        _this.facet = facet;\n\t        return _this;\n\t    }\n\t    HierarchicalFacetQueryController.prototype.search = function (params, oldLength) {\n\t        var _this = this;\n\t        if (oldLength === void 0) { oldLength = params.nbResults; }\n\t        // Do a client side search, since HierarchicalFacet should normally have all value client side\n\t        var regex = FacetUtils_1.FacetUtils.getRegexToUseForFacetSearch(this.facet.facetSearch.getValueInInputForFacetSearch(), this.facet.options.facetSearchIgnoreAccents);\n\t        return new Promise(function (resolve) {\n\t            var match = _.chain(_this.facet.getAllValueHierarchy())\n\t                .toArray()\n\t                .filter(function (v) {\n\t                return _this.facet.getValueCaption(v.facetValue).match(regex) != null;\n\t            })\n\t                .first(_this.facet.options.numberOfValuesInFacetSearch)\n\t                .value();\n\t            resolve(_.map(match, function (v) {\n\t                return v.facetValue;\n\t            }));\n\t        });\n\t    };\n\t    HierarchicalFacetQueryController.prototype.getAllowedValuesFromSelected = function () {\n\t        return [];\n\t    };\n\t    return HierarchicalFacetQueryController;\n\t}(FacetQueryController_1.FacetQueryController));\n\texports.HierarchicalFacetQueryController = HierarchicalFacetQueryController;\n\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Model_1 = __webpack_require__(100);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar HashUtils_1 = __webpack_require__(67);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar RootComponent_1 = __webpack_require__(77);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * This component is instantiated automatically by the framework on the root if the {@link SearchInterface}.<br/>\n\t * When the {@link SearchInterface.options.enableHistory} option is set to true, this component is instantiated.<br/>\n\t * It's only job is to apply changes in the {@link QueryStateModel} to the hash in the URL, and vice versa.<br/>\n\t * This component does *not* hold the state of the interface, it only represent it in the URL.\n\t */\n\tvar HistoryController = (function (_super) {\n\t    __extends(HistoryController, _super);\n\t    /**\n\t     * Create a new history controller\n\t     * @param element\n\t     * @param windoh For mock / test purposes.\n\t     * @param model\n\t     * @param queryController\n\t     * @param hashUtilsModule For mock / test purposes.\n\t     */\n\t    function HistoryController(element, windoh, model, queryController, hashUtils) {\n\t        if (hashUtils === void 0) { hashUtils = HashUtils_1.HashUtils; }\n\t        var _this = _super.call(this, element, HistoryController.ID) || this;\n\t        _this.windoh = windoh;\n\t        _this.model = model;\n\t        _this.queryController = queryController;\n\t        _this.hashUtils = hashUtils;\n\t        _this.ignoreNextHashChange = false;\n\t        _this.initialHashChange = false;\n\t        _this.willUpdateHash = false;\n\t        _this.windoh = _this.windoh || window;\n\t        Assert_1.Assert.exists(_this.model);\n\t        Assert_1.Assert.exists(_this.queryController);\n\t        Dom_1.$$(_this.element).on(InitializationEvents_1.InitializationEvents.restoreHistoryState, function () {\n\t            _this.logger.trace('Restore history state. Update model');\n\t            _this.updateModelFromHash();\n\t        });\n\t        Dom_1.$$(_this.element).on(_this.model.getEventName(Model_1.Model.eventTypes.all), function () {\n\t            _this.logger.trace('Query model changed. Update hash');\n\t            _this.updateHashFromModel();\n\t        });\n\t        _this.hashchange = function () {\n\t            _this.handleHashChange();\n\t        };\n\t        _this.windoh.addEventListener('hashchange', _this.hashchange);\n\t        Dom_1.$$(_this.element).on(InitializationEvents_1.InitializationEvents.nuke, function () { return _this.handleNuke(); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Set the given map of key value in the hash of the URL\n\t     * @param values\n\t     */\n\t    HistoryController.prototype.setHashValues = function (values) {\n\t        this.logger.trace('Update history hash');\n\t        var hash = '#' + this.hashUtils.encodeValues(values);\n\t        var hashHasChanged = this.windoh.location.hash != hash;\n\t        this.ignoreNextHashChange = hashHasChanged;\n\t        this.logger.trace('ignoreNextHashChange', this.ignoreNextHashChange);\n\t        this.logger.trace('initialHashChange', this.initialHashChange);\n\t        this.logger.trace('from', this.windoh.location.hash, 'to', hash);\n\t        if (this.initialHashChange) {\n\t            this.initialHashChange = false;\n\t            if (hashHasChanged) {\n\t                this.windoh.location.replace(hash);\n\t                this.logger.trace('History hash modified', hash);\n\t            }\n\t        }\n\t        else if (this.ignoreNextHashChange) {\n\t            this.windoh.location.hash = hash;\n\t            this.logger.trace('History hash created', hash);\n\t        }\n\t    };\n\t    HistoryController.prototype.handleNuke = function () {\n\t        this.windoh.removeEventListener('hashchange', this.hashchange);\n\t    };\n\t    HistoryController.prototype.handleHashChange = function () {\n\t        this.logger.trace('History hash changed');\n\t        if (this.ignoreNextHashChange) {\n\t            this.logger.trace('History hash change ignored');\n\t            this.ignoreNextHashChange = false;\n\t            return;\n\t        }\n\t        var diff = this.updateModelFromHash();\n\t        if (_.difference(diff, HistoryController.attributesThatDoNotTriggerQuery).length > 0) {\n\t            this.queryController.executeQuery();\n\t        }\n\t    };\n\t    HistoryController.prototype.updateHashFromModel = function () {\n\t        var _this = this;\n\t        this.logger.trace('Model -> history hash');\n\t        if (!this.willUpdateHash) {\n\t            Defer_1.Defer.defer(function () {\n\t                var attributes = _this.model.getAttributes();\n\t                _this.setHashValues(attributes);\n\t                _this.logger.debug('Saving state to hash', attributes);\n\t                _this.willUpdateHash = false;\n\t            });\n\t            this.willUpdateHash = true;\n\t        }\n\t    };\n\t    HistoryController.prototype.updateModelFromHash = function () {\n\t        var _this = this;\n\t        this.logger.trace('History hash -> model');\n\t        var toSet = {};\n\t        var diff = [];\n\t        _.each(this.model.attributes, function (value, key, obj) {\n\t            var valToSet = _this.getHashValue(key);\n\t            toSet[key] = valToSet;\n\t            if (_this.model.get(key) != valToSet) {\n\t                diff.push(key);\n\t            }\n\t        });\n\t        this.initialHashChange = true;\n\t        this.model.setMultiple(toSet);\n\t        return diff;\n\t    };\n\t    HistoryController.prototype.getHashValue = function (key) {\n\t        Assert_1.Assert.isNonEmptyString(key);\n\t        var value;\n\t        try {\n\t            value = this.hashUtils.getValue(key, this.hashUtils.getHash(this.windoh));\n\t        }\n\t        catch (error) {\n\t            this.logger.error(\"Could not parse parameter \" + key + \" from URI\");\n\t        }\n\t        if (Utils_1.Utils.isUndefined(value)) {\n\t            value = this.model.defaultAttributes[key];\n\t        }\n\t        return value;\n\t    };\n\t    HistoryController.prototype.debugInfo = function () {\n\t        return {\n\t            'state': this.model.getAttributes()\n\t        };\n\t    };\n\t    return HistoryController;\n\t}(RootComponent_1.RootComponent));\n\tHistoryController.ID = 'HistoryController';\n\tHistoryController.attributesThatDoNotTriggerQuery = ['quickview'];\n\texports.HistoryController = HistoryController;\n\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar _ = __webpack_require__(16);\n\texports.MODEL_EVENTS = {\n\t    PREPROCESS: 'preprocess',\n\t    CHANGE_ONE: 'change:',\n\t    CHANGE: 'change',\n\t    RESET: 'reset',\n\t    ALL: 'all'\n\t};\n\t/**\n\t * A *model* is a key-value store that triggers various JavaScript events when any value associated to one of its key changes.<br/>\n\t * This class is meant to be extended, one of the most important extension being the {@link QueryStateModel} class.<br/>\n\t * Components set values in this key-value store and listen to triggered events in order to update themselves accordingly.<br/>\n\t */\n\tvar Model = (function (_super) {\n\t    __extends(Model, _super);\n\t    function Model(element, id, attributes) {\n\t        var _this = _super.call(this, element, id) || this;\n\t        _this.eventNameSpace = id;\n\t        _this.defaultAttributes = Utils_1.Utils.extendDeep(_this.defaultAttributes, attributes);\n\t        _this.attributes = attributes;\n\t        _this.logger.debug('Creating model');\n\t        return _this;\n\t    }\n\t    /**\n\t     * Sets the value of a single specific attribute.</br>\n\t     * Note: this method calls the `setMultiple` method.\n\t     * @param attribute\n\t     * the specific attribute whose value is to be set.\n\t     * @param value\n\t     * the value to set the attribute to.\n\t     * @param options\n\t     * the options (see {@link setMultiple}).\n\t     */\n\t    Model.prototype.set = function (attribute, value, options) {\n\t        var toSet = {};\n\t        toSet[attribute] = value;\n\t        this.setMultiple(toSet, options);\n\t    };\n\t    /**\n\t     * Gets an object containing all *active* registered attribute key-values.</br>\n\t     * An attribute is considered active when its value is not in its default state.\n\t     * @returns {{object}}\n\t     */\n\t    Model.prototype.getAttributes = function () {\n\t        var _this = this;\n\t        var attributes = {};\n\t        _.each(this.attributes, function (attribute, key) {\n\t            if (_.isObject(attribute)) {\n\t                if (!Utils_1.Utils.objectEqual(attribute, _this.defaultAttributes[key])) {\n\t                    attributes[key] = attribute;\n\t                }\n\t            }\n\t            else if (attribute != _this.defaultAttributes[key]) {\n\t                attributes[key] = attribute;\n\t            }\n\t        });\n\t        return attributes;\n\t    };\n\t    /**\n\t     * Sets the values of one or many attributes.</br>\n\t     * This method may trigger the following events (in order):</br>\n\t     * • `preprocess`</br>\n\t     * • `changeOne`</br>\n\t     * • `change`</br>\n\t     * • `all`\n\t     * @param toSet\n\t     * the key-value list of attributes with their new intended values.\n\t     * @param options\n\t     * if the `customAttribute` option is set to `true`, the method will not validate whether an attribute is registered or not.</br>\n\t     * If the `validateType` option is set to `true`, the method will ensure that each value type is correct.</br>\n\t     * If the `silent` option is set to `true`, then the `changeOne`, `change` and `all` events will not be triggered.\n\t     */\n\t    Model.prototype.setMultiple = function (toSet, options) {\n\t        var _this = this;\n\t        var anythingChanged = false;\n\t        this.preprocessEvent(toSet);\n\t        _.each(toSet, function (value, attribute) {\n\t            if (!options || !options.customAttribute) {\n\t                _this.checkIfAttributeExists(attribute);\n\t            }\n\t            value = _this.parseToCorrectType(attribute, value);\n\t            if (!options || options.validateType) {\n\t                if (!_this.typeIsValid(attribute, value)) {\n\t                    return;\n\t                }\n\t            }\n\t            if (_this.checkIfAttributeChanged(attribute, value)) {\n\t                _this.attributes[attribute] = value;\n\t                anythingChanged = true;\n\t                if (options == null || !options.silent) {\n\t                    _this.attributeHasChangedEvent(attribute);\n\t                }\n\t            }\n\t        });\n\t        if (anythingChanged && (options == null || !options.silent)) {\n\t            this.attributesHasChangedEvent();\n\t            this.anyEvent();\n\t        }\n\t    };\n\t    /**\n\t     * Sets a new default value to a single specific attribute.</br>\n\t     * Note: specifying a new attribute default value does not set the attribute to that value. This can be done using the {@link setDefault} method.\n\t     * @param attribute\n\t     * the specific attribute whose default value is to be changed.\n\t     * @param value\n\t     * the new intended default value.\n\t     * @param options\n\t     * if the `customAttribute` option is set to `true`, the method will not validate whether the attribute is registered or not.\n\t     */\n\t    Model.prototype.setNewDefault = function (attribute, value, options) {\n\t        if (!options || !options.customAttribute) {\n\t            this.checkIfAttributeExists(attribute);\n\t        }\n\t        this.defaultAttributes[attribute] = value;\n\t    };\n\t    /**\n\t     * Sets a single specific attribute to its default value.</br>\n\t     * Note: this method calls the {@link setMultiple} method without specifying any option.\n\t     * @param attribute\n\t     * the specific attribute whose value is to be set to its default value.\n\t     */\n\t    Model.prototype.setDefault = function (attribute) {\n\t        this.set(attribute, this.defaultAttributes[attribute]);\n\t    };\n\t    /**\n\t     * Gets the value of a single specific attribute.</br>\n\t     * If no attribute is specified, the method instead returns an object containing all registered attribute key-values.\n\t     * @param attribute\n\t     * the specific attribute whose value should be returned.\n\t     * @returns {any}\n\t     */\n\t    Model.prototype.get = function (attribute) {\n\t        if (attribute == undefined) {\n\t            return this.attributes;\n\t        }\n\t        else {\n\t            return this.attributes[attribute];\n\t        }\n\t    };\n\t    /**\n\t     * Gets the default value of a single specific attribute.</br>\n\t     * If no attribute is specified, the method instead returns an object containing all registered attribute key-default values.\n\t     * @param attribute\n\t     * the specific attribute whose default value should be returned.\n\t     * @returns {any}\n\t     */\n\t    Model.prototype.getDefault = function (attribute) {\n\t        if (attribute == undefined) {\n\t            return this.defaultAttributes;\n\t        }\n\t        else {\n\t            return this.defaultAttributes[attribute];\n\t        }\n\t    };\n\t    /**\n\t     * Resets each registered attribute to its default value.</br>\n\t     * Note: this method calls the {@link setMultiple} method without specifying any options.</br>\n\t     * After the `setMultiple` call has returned, this method triggers the `reset` event.\n\t     */\n\t    Model.prototype.reset = function () {\n\t        this.setMultiple(this.defaultAttributes);\n\t        this.modelWasResetEvent();\n\t    };\n\t    /**\n\t     * Registers a new attribute key-value.\n\t     * @param attribute\n\t     * the name of the new attribute to register.\n\t     * @param defaultValue\n\t     * the newly registered attribute default value.\n\t     */\n\t    Model.prototype.registerNewAttribute = function (attribute, defaultValue) {\n\t        this.defaultAttributes[attribute] = defaultValue;\n\t        this.attributes[attribute] = defaultValue;\n\t    };\n\t    /**\n\t     * Gets a string displaying the event namespace followed by the specific event name. The returned string is formatted thus:</br>\n\t     * `[eventNameSpace]:[eventName]`\n\t     * @example `getEventName(\"reset\");` could return `\"state:reset\"`.\n\t     * @param event\n\t     * the event name.\n\t     * @returns {string}\n\t     */\n\t    Model.prototype.getEventName = function (event) {\n\t        return this.eventNameSpace + ':' + event;\n\t    };\n\t    Model.prototype.attributesHasChangedEvent = function () {\n\t        Dom_1.$$(this.element).trigger(this.getEventName(Model.eventTypes.change), this.createAttributesChangedArgument());\n\t    };\n\t    Model.prototype.attributeHasChangedEvent = function (attr) {\n\t        Dom_1.$$(this.element).trigger(this.getEventName(Model.eventTypes.changeOne) + attr, this.createAttributeChangedArgument(attr));\n\t    };\n\t    Model.prototype.preprocessEvent = function (attributes) {\n\t        Dom_1.$$(this.element).trigger(this.getEventName(Model.eventTypes.preprocess), attributes);\n\t    };\n\t    Model.prototype.modelWasResetEvent = function () {\n\t        Dom_1.$$(this.element).trigger(this.getEventName(Model.eventTypes.reset), this.createModelChangedArgument());\n\t    };\n\t    Model.prototype.anyEvent = function () {\n\t        Dom_1.$$(this.element).trigger(this.getEventName(Model.eventTypes.all), this.createModelChangedArgument());\n\t    };\n\t    Model.prototype.createAttributeChangedArgument = function (attribute) {\n\t        return { attribute: attribute, value: this.attributes[attribute] };\n\t    };\n\t    Model.prototype.createAttributesChangedArgument = function () {\n\t        return { attributes: this.attributes };\n\t    };\n\t    Model.prototype.createModelChangedArgument = function () {\n\t        return { model: this };\n\t    };\n\t    Model.prototype.checkIfAttributeExists = function (attribute) {\n\t        Assert_1.Assert.check(_.has(this.attributes, attribute));\n\t    };\n\t    Model.prototype.typeIsValid = function (attribute, value) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.attributes[attribute]) && !Utils_1.Utils.isUndefined(value)) {\n\t            if (_.isNumber(this.attributes[attribute])) {\n\t                return this.validateNumber(attribute, value);\n\t            }\n\t            else if (_.isBoolean(this.attributes[attribute])) {\n\t                return this.validateBoolean(attribute, value);\n\t            }\n\t            else {\n\t                return this.validateOther(attribute, value);\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    Model.prototype.validateNumber = function (attribute, value) {\n\t        if (!_.isNumber(value) || isNaN(value)) {\n\t            this.logger.error(\"Non-matching type for \" + attribute + \". Expected number and got \" + value);\n\t            return false;\n\t        }\n\t        return true;\n\t    };\n\t    Model.prototype.validateBoolean = function (attribute, value) {\n\t        if (!_.isBoolean(value) && !Utils_1.Utils.parseBooleanIfNotUndefined(value) !== undefined) {\n\t            this.logger.error(\"Non matching type for \" + attribute + \". Expected boolean and got \" + value);\n\t            return false;\n\t        }\n\t        return true;\n\t    };\n\t    Model.prototype.validateOther = function (attribute, value) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.defaultAttributes[attribute])) {\n\t            if (typeof value !== typeof this.defaultAttributes[attribute]) {\n\t                this.logger.error(\"Non-matching type for \" + attribute + \". Expected \" + typeof this.defaultAttributes[attribute] + \" and got \" + value);\n\t                return false;\n\t            }\n\t        }\n\t        return true;\n\t    };\n\t    Model.prototype.parseToCorrectType = function (attribute, value) {\n\t        if (_.isNumber(this.attributes[attribute])) {\n\t            return parseInt(value, 10);\n\t        }\n\t        else if (_.isBoolean(this.attributes[attribute])) {\n\t            if (_.isBoolean(value)) {\n\t                return value;\n\t            }\n\t            else {\n\t                return Utils_1.Utils.parseBooleanIfNotUndefined(value);\n\t            }\n\t        }\n\t        return value;\n\t    };\n\t    Model.prototype.checkIfAttributeChanged = function (attribute, newValue) {\n\t        var oldValue = this.attributes[attribute];\n\t        if (_.isNumber(oldValue) || _.isString(oldValue) || _.isBoolean(oldValue)) {\n\t            return oldValue !== newValue;\n\t        }\n\t        if (_.isArray(oldValue)) {\n\t            return !Utils_1.Utils.arrayEqual(oldValue, newValue);\n\t        }\n\t        if (_.isObject(oldValue)) {\n\t            return !Utils_1.Utils.objectEqual(oldValue, newValue);\n\t        }\n\t        return true;\n\t    };\n\t    Model.prototype.debugInfo = function () {\n\t        return null;\n\t    };\n\t    return Model;\n\t}(BaseComponent_1.BaseComponent));\n\t/**\n\t * The event types that can be triggered:<br/>\n\t * • `preprocess`: triggered before a value is set on an attribute. This allows the value to be modified before it is set.<br/>\n\t * • `changeOne`: triggered when a single value changes.</br>\n\t * • `change`: triggered when one or many values change.</br>\n\t * • `reset`: triggered when all attributes are reset to their default values. </br>\n\t * • `all`: triggered after the `change` event.</br>\n\t * @type {{preprocess: string, changeOne: string, change: string, reset: string, all: string}}\n\t */\n\tModel.eventTypes = {\n\t    preprocess: 'preprocess',\n\t    changeOne: 'change:',\n\t    change: 'change',\n\t    reset: 'reset',\n\t    all: 'all'\n\t};\n\texports.Model = Model;\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar Model_1 = __webpack_require__(100);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar RootComponent_1 = __webpack_require__(77);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * This component acts like the {@link HistoryController} excepts that is saves the {@link QueryStateModel} in the local storage.<br/>\n\t * This will not allow 'back' and 'forward' navigation in the history, like the standard {@link HistoryController} allows. Instead, it load the query state only on page load.<br/>\n\t * To enable this component, you should set the {@link SearchInterface.options.useLocalStorageForHistory} as well as the {@link SearchInterface.options.enableHistory} options to true.\n\t */\n\tvar LocalStorageHistoryController = (function (_super) {\n\t    __extends(LocalStorageHistoryController, _super);\n\t    /**\n\t     * Create a new LocalStorageHistoryController instance\n\t     * @param element\n\t     * @param windoh For mock purpose\n\t     * @param model\n\t     * @param queryController\n\t     */\n\t    function LocalStorageHistoryController(element, windoh, model, queryController) {\n\t        var _this = _super.call(this, element, LocalStorageHistoryController.ID) || this;\n\t        _this.windoh = windoh;\n\t        _this.model = model;\n\t        _this.queryController = queryController;\n\t        _this.omit = [];\n\t        if (!windoh['localStorage']) {\n\t            new Logger_1.Logger(element).info('No local storage available in current browser. LocalStorageHistoryController cannot initialize itself', _this);\n\t        }\n\t        else {\n\t            _this.storage = new LocalStorageUtils_1.LocalStorageUtils(LocalStorageHistoryController.ID);\n\t            Assert_1.Assert.exists(_this.model);\n\t            Assert_1.Assert.exists(_this.queryController);\n\t            Dom_1.$$(_this.element).on(InitializationEvents_1.InitializationEvents.restoreHistoryState, function () { return _this.updateModelFromLocalStorage(); });\n\t            Dom_1.$$(_this.element).on(_this.model.getEventName(Model_1.Model.eventTypes.all), function () { return _this.updateLocalStorageFromModel(); });\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Specifies an array of attributes from the query state model that should not be persisted in the local storage\n\t     * @param attributes\n\t     */\n\t    LocalStorageHistoryController.prototype.withoutThoseAttribute = function (attributes) {\n\t        this.omit = attributes;\n\t    };\n\t    LocalStorageHistoryController.prototype.updateLocalStorageFromModel = function () {\n\t        var attributes = _.omit(this.model.getAttributes(), this.omit);\n\t        this.setStorageValues(attributes);\n\t        this.logger.debug('Saving state to localstorage', attributes);\n\t    };\n\t    LocalStorageHistoryController.prototype.updateModelFromLocalStorage = function () {\n\t        var _this = this;\n\t        var toSet = {};\n\t        var loadedFromStorage = this.storage.load();\n\t        _.each(this.model.attributes, function (value, key, obj) {\n\t            var valToSet = loadedFromStorage ? loadedFromStorage[key] : undefined;\n\t            if (valToSet == undefined) {\n\t                valToSet = _this.model.defaultAttributes[key];\n\t            }\n\t            toSet[key] = valToSet;\n\t        });\n\t        this.model.setMultiple(toSet);\n\t    };\n\t    LocalStorageHistoryController.prototype.setStorageValues = function (values) {\n\t        this.storage.save(values);\n\t    };\n\t    return LocalStorageHistoryController;\n\t}(RootComponent_1.RootComponent));\n\tLocalStorageHistoryController.ID = 'LocalStorageHistoryController';\n\texports.LocalStorageHistoryController = LocalStorageHistoryController;\n\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Model_1 = __webpack_require__(100);\n\texports.Model = Model_1.Model;\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\texports.QueryStateModel = QueryStateModel_1.QueryStateModel;\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\texports.ComponentOptionsModel = ComponentOptionsModel_1.ComponentOptionsModel;\n\tvar ComponentStateModel_1 = __webpack_require__(105);\n\texports.ComponentStateModel = ComponentStateModel_1.ComponentStateModel;\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Model_1 = __webpack_require__(100);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\texports.QUERY_STATE_ATTRIBUTES = {\n\t    Q: 'q',\n\t    FIRST: 'first',\n\t    T: 't',\n\t    TG: 'tg',\n\t    SORT: 'sort',\n\t    LAYOUT: 'layout',\n\t    HD: 'hd',\n\t    HQ: 'hq',\n\t    QUICKVIEW: 'quickview'\n\t};\n\t/**\n\t * The QueryStateModel is a key->value store of the state of every component that can affect a query.<br/>\n\t * Component set values in this key -> value store, and listen to event triggered to react accordingly.<br/>\n\t * For example, when a query is launched, the searchbox will set the 'q' attribute, the pager will set the 'first' attribute, etc.<br/>\n\t * At the same time, this class will trigger the associated event when a value is modified.<br/>\n\t * eg : The user change the content of the searchbox, and submit a query. This will trigger the following events :<br/>\n\t * -- state:change:q (because the value of 'q' changed)</br>\n\t * -- state:change (because at least one value changed in the query state)<br/>\n\t * Component or external code could hook handler on those events : document.addEventListener('state:change:q', handler);<br/>\n\t * See : {@link Model}, as all the relevant method are exposed in the base class.<br/>\n\t * Optionally, the state can be persisted to the query string to allow browser history management : See {@link HistoryController}\n\t */\n\tvar QueryStateModel = (function (_super) {\n\t    __extends(QueryStateModel, _super);\n\t    /**\n\t     * Create a new QueryState\n\t     * @param element\n\t     * @param attributes\n\t     * @param bindings\n\t     */\n\t    function QueryStateModel(element, attributes) {\n\t        var _this = this;\n\t        var merged = _.extend({}, QueryStateModel.defaultAttributes, attributes);\n\t        _this = _super.call(this, element, QueryStateModel.ID, merged) || this;\n\t        return _this;\n\t    }\n\t    QueryStateModel.getFacetId = function (id, include) {\n\t        if (include === void 0) { include = true; }\n\t        return 'f:' + id + (include ? '' : ':not');\n\t    };\n\t    QueryStateModel.getFacetOperator = function (id) {\n\t        return 'f:' + id + ':operator';\n\t    };\n\t    QueryStateModel.getFacetLookupValue = function (id) {\n\t        return QueryStateModel.getFacetId(id) + ':lookupvalues';\n\t    };\n\t    /**\n\t     * Determine if at least one facet is currently active in the interface (this means that a facet has selected or excluded values)\n\t     * @returns {boolean}\n\t     */\n\t    QueryStateModel.prototype.atLeastOneFacetIsActive = function () {\n\t        return !_.isUndefined(_.find(this.attributes, function (value, key) {\n\t            return key.indexOf('f:') == 0 && Utils_1.Utils.isNonEmptyArray(value);\n\t        }));\n\t    };\n\t    QueryStateModel.prototype.set = function (attribute, value, options) {\n\t        this.validate(attribute, value);\n\t        _super.prototype.set.call(this, attribute, value, options);\n\t    };\n\t    QueryStateModel.prototype.validate = function (attribute, value) {\n\t        if (attribute == QueryStateModel.attributesEnum.first) {\n\t            Assert_1.Assert.isNumber(value);\n\t            Assert_1.Assert.isLargerOrEqualsThan(0, value);\n\t        }\n\t    };\n\t    return QueryStateModel;\n\t}(Model_1.Model));\n\tQueryStateModel.ID = 'state';\n\tQueryStateModel.defaultAttributes = {\n\t    q: '',\n\t    first: 0,\n\t    t: '',\n\t    hd: '',\n\t    hq: '',\n\t    sort: '',\n\t    layout: 'list',\n\t    tg: '',\n\t    quickview: ''\n\t};\n\tQueryStateModel.attributesEnum = {\n\t    q: 'q',\n\t    first: 'first',\n\t    t: 't',\n\t    sort: 'sort',\n\t    layout: 'layout',\n\t    hd: 'hd',\n\t    hq: 'hq',\n\t    tg: 'tg',\n\t    quickview: 'quickview'\n\t};\n\texports.QueryStateModel = QueryStateModel;\n\tfunction setState(model, args) {\n\t    Assert_1.Assert.exists(model);\n\t    if (args.length == 0 || args[0] == undefined) {\n\t        // No args means return the model\n\t        return model;\n\t    }\n\t    else if (args.length == 1 && Utils_1.Utils.isNonEmptyString(args[0])) {\n\t        // One string arg means retrieve value from model\n\t        return model.get(args[0]);\n\t    }\n\t    else if (_.isObject(args[0])) {\n\t        // One dictionary means set multiple values\n\t        var toSet = args[0];\n\t        var options = _.extend({ customAttribute: true }, args[1]);\n\t        return model.setMultiple(toSet, options);\n\t    }\n\t    else if (args.length > 1) {\n\t        // Otherwise we're setting a value\n\t        var name_1 = args[0];\n\t        var value = args[1];\n\t        var options = _.extend({ customAttribute: true }, args[2]);\n\t        Assert_1.Assert.isNonEmptyString(name_1);\n\t        return model.set(name_1, value, options);\n\t    }\n\t}\n\texports.setState = setState;\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Model_1 = __webpack_require__(100);\n\tvar _ = __webpack_require__(16);\n\tvar ComponentOptionsModel = (function (_super) {\n\t    __extends(ComponentOptionsModel, _super);\n\t    function ComponentOptionsModel(element, attributes) {\n\t        var _this = this;\n\t        var merged = _.extend({}, ComponentOptionsModel.defaultAttributes, attributes);\n\t        _this = _super.call(this, element, ComponentOptionsModel.ID, merged) || this;\n\t        return _this;\n\t    }\n\t    return ComponentOptionsModel;\n\t}(Model_1.Model));\n\tComponentOptionsModel.ID = 'ComponentOptions';\n\tComponentOptionsModel.defaultAttributes = {\n\t    resultLink: undefined,\n\t    searchHub: undefined\n\t};\n\tComponentOptionsModel.attributesEnum = {\n\t    resultLink: 'resultLink',\n\t    searchHub: 'searchHub'\n\t};\n\texports.ComponentOptionsModel = ComponentOptionsModel;\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Model_1 = __webpack_require__(100);\n\tvar ComponentStateModel = (function (_super) {\n\t    __extends(ComponentStateModel, _super);\n\t    function ComponentStateModel(element) {\n\t        return _super.call(this, element, ComponentStateModel.ID, {}) || this;\n\t    }\n\t    ComponentStateModel.prototype.registerComponent = function (componentId, component) {\n\t        var currentAttribute = this.attributes[componentId];\n\t        if (currentAttribute == undefined) {\n\t            this.attributes[componentId] = [component];\n\t        }\n\t        else {\n\t            this.attributes[componentId].push(component);\n\t        }\n\t    };\n\t    return ComponentStateModel;\n\t}(Model_1.Model));\n\tComponentStateModel.ID = 'ComponentState';\n\texports.ComponentStateModel = ComponentStateModel;\n\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tfunction __export(m) {\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n\t}\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t__export(__webpack_require__(107));\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\texports.ComponentOptions = ComponentOptions_1.ComponentOptions;\n\texports.ComponentOptionsType = ComponentOptions_1.ComponentOptionsType;\n\tvar Component_1 = __webpack_require__(109);\n\texports.Component = Component_1.Component;\n\tvar BaseComponent_1 = __webpack_require__(78);\n\texports.BaseComponent = BaseComponent_1.BaseComponent;\n\tvar RootComponent_1 = __webpack_require__(77);\n\texports.RootComponent = RootComponent_1.RootComponent;\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\texports.QueryBuilder = QueryBuilder_1.QueryBuilder;\n\tvar ExpressionBuilder_1 = __webpack_require__(80);\n\texports.ExpressionBuilder = ExpressionBuilder_1.ExpressionBuilder;\n\t// Export Initialization under both name, for legacy reason and old code in the wild that\n\t// reference the old CoveoJQuery module\n\tvar Initialization_1 = __webpack_require__(108);\n\texports.Initialization = Initialization_1.Initialization;\n\tvar Initialization_2 = __webpack_require__(108);\n\texports.CoveoJQuery = Initialization_2.Initialization;\n\tvar CoveoJQuery_1 = __webpack_require__(175);\n\texports.initCoveoJQuery = CoveoJQuery_1.initCoveoJQuery;\n\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryController_1 = __webpack_require__(76);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Analytics_1 = __webpack_require__(128);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Component_1 = __webpack_require__(109);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * Initialize the framework with a basic search interface. Calls {@link Initialization.initSearchInterface}.<br/>\n\t * If using the jQuery extension, this is called using <code>$('#root').coveo('init');</code>.\n\t * @param element The root of the interface to initialize.\n\t * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType : true}}</code>).\n\t */\n\tfunction init(element, options) {\n\t    if (options === void 0) { options = {}; }\n\t    Initialization_1.Initialization.initializeFramework(element, options, function () {\n\t        Initialization_1.Initialization.initSearchInterface(element, options);\n\t    });\n\t}\n\texports.init = init;\n\tInitialization_1.Initialization.registerNamedMethod('init', function (element, options) {\n\t    if (options === void 0) { options = {}; }\n\t    init(element, options);\n\t});\n\t/**\n\t * Initialize the framework with a standalone search box. Calls {@link Initialize.initStandaloneSearchInterface}.<br/>\n\t * If using the jQuery extension, this is called using <code>$('#root').coveo('initSearchbox');</code>.\n\t * @param element The root of the interface to initialize.\n\t * @param searchPageUri The search page on which to redirect when there is a query.\n\t * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType : true}}</code>).\n\t */\n\tfunction initSearchbox(element, searchPageUri, options) {\n\t    if (options === void 0) { options = {}; }\n\t    Assert_1.Assert.isNonEmptyString(searchPageUri);\n\t    var searchInterfaceOptions = {};\n\t    searchInterfaceOptions.searchPageUri = searchPageUri;\n\t    searchInterfaceOptions.autoTriggerQuery = false;\n\t    searchInterfaceOptions.hideUntilFirstQuery = false;\n\t    searchInterfaceOptions.enableHistory = false;\n\t    options = _.extend({}, options, { StandaloneSearchInterface: searchInterfaceOptions });\n\t    Initialization_1.Initialization.initializeFramework(element, options, function () {\n\t        Initialization_1.Initialization.initStandaloneSearchInterface(element, options);\n\t    });\n\t}\n\texports.initSearchbox = initSearchbox;\n\tInitialization_1.Initialization.registerNamedMethod('initSearchbox', function (element, searchPageUri, options) {\n\t    if (options === void 0) { options = {}; }\n\t    initSearchbox(element, searchPageUri, options);\n\t});\n\t/**\n\t * Initialize the framework with a recommendation interface. Calls {@link Initialization.initRecommendationInterface}.<br/>\n\t * If using the jQuery extension, this is called using <code>$('#root').coveo('initRecommendation');</code>.\n\t * @param element The root of the interface to initialize.\n\t * @param mainSearchInterface The search interface to link with the recommendation interface (see {@link Recommendation}).\n\t * @param userContext The user context to pass with the query generated in the recommendation interface (see {@link Recommendation}).\n\t * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType: true}}</code>).\n\t */\n\tfunction initRecommendation(element, mainSearchInterface, userContext, options) {\n\t    if (options === void 0) { options = {}; }\n\t    var recommendationOptions = {};\n\t    recommendationOptions.mainSearchInterface = mainSearchInterface;\n\t    recommendationOptions.userContext = JSON.stringify(userContext);\n\t    recommendationOptions.enableHistory = false;\n\t    options = _.extend({}, options, { Recommendation: recommendationOptions });\n\t    Initialization_1.Initialization.initializeFramework(element, options, function () {\n\t        Initialization_1.Initialization.initRecommendationInterface(element, options);\n\t    });\n\t}\n\texports.initRecommendation = initRecommendation;\n\tInitialization_1.Initialization.registerNamedMethod('initRecommendation', function (element, mainSearchInterface, userContext, options) {\n\t    if (userContext === void 0) { userContext = {}; }\n\t    if (options === void 0) { options = {}; }\n\t    initRecommendation(element, mainSearchInterface, userContext, options);\n\t});\n\t/**\n\t * Execute a standard query. Active component in the interface will react to events/ push data in the query / handle the query success or failure as needed.<br/>\n\t * It triggers a standard query flow for which the standard component will perform their expected behavior.<br/>\n\t * If you wish to only perform a query on the index to retrieve results (without the component reacting), look into {@link SearchInterface} instead.<br/>\n\t * Calling this method is the same as calling {@link QueryController.executeQuery}.\n\t * @param element The root of the interface to initialize.\n\t */\n\tfunction executeQuery(element) {\n\t    Assert_1.Assert.exists(element);\n\t    var queryController = Component_1.Component.resolveBinding(element, QueryController_1.QueryController);\n\t    Assert_1.Assert.exists(queryController);\n\t    return queryController.executeQuery();\n\t}\n\texports.executeQuery = executeQuery;\n\tInitialization_1.Initialization.registerNamedMethod('executeQuery', function (element) {\n\t    return executeQuery(element);\n\t});\n\t/**\n\t * Perform operation on the state ({@link QueryStateModel} of the interface.<br/>\n\t * Get the complete {@link QueryStateModel} object: <code>Coveo.state(element)</code><br/>.\n\t * Get an attribute from the {@link QueryStateModel}: <code>Coveo.state(element, 'q')</code> Can be any attribute.<br/>\n\t * Set an attribute on the {@link QueryStateModel}: <code>Coveo.state(element, 'q', 'foobar')</code>. Can be any attribute.<br/>\n\t * Set multiple attribute on the {@link QueryStateModel}: <code>Coveo.state(element, {'q' : 'foobar' , sort : 'relevancy'})</code>. Can be any attribute.<br/>\n\t * If using the jQuery extension, this is called using <code>$('#root').coveo('state');</code>.\n\t * @param element The root of the interface for which to access the {@link QueryStateModel}.\n\t * @param args\n\t * @returns {any}\n\t */\n\tfunction state(element) {\n\t    var args = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        args[_i - 1] = arguments[_i];\n\t    }\n\t    Assert_1.Assert.exists(element);\n\t    var model = Component_1.Component.resolveBinding(element, QueryStateModel_1.QueryStateModel);\n\t    return QueryStateModel_1.setState(model, args);\n\t}\n\texports.state = state;\n\tInitialization_1.Initialization.registerNamedMethod('state', function (element) {\n\t    var args = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        args[_i - 1] = arguments[_i];\n\t    }\n\t    if (args.length != 0) {\n\t        return state.apply(undefined, [element].concat(args));\n\t    }\n\t    else {\n\t        return state.apply(undefined, [element]);\n\t    }\n\t});\n\t/**\n\t * Get the component bound on the given `HTMLElement`.\n\t * @param element The `HTMLElement` for which to get the component instance.\n\t * @param componentClass If multiple components are bound to a single `HTMLElement`, you need to specify which components you wish to get.\n\t * @param noThrow By default, the GET method will throw if there is no component bound, or if there are multiple component and no `componentClass` is specified. This deletes the error if set to true.\n\t * @returns {Component}\n\t */\n\tfunction get(element, componentClass, noThrow) {\n\t    Assert_1.Assert.exists(element);\n\t    return Component_1.Component.get(element, componentClass, noThrow);\n\t}\n\texports.get = get;\n\tInitialization_1.Initialization.registerNamedMethod('get', function (element, componentClass, noThrow) {\n\t    return get(element, componentClass, noThrow);\n\t});\n\tfunction result(element, noThrow) {\n\t    Assert_1.Assert.exists(element);\n\t    return Component_1.Component.getResult(element, noThrow);\n\t}\n\texports.result = result;\n\tInitialization_1.Initialization.registerNamedMethod('result', function (element, noThrow) {\n\t    return result(element, noThrow);\n\t});\n\tfunction getCoveoAnalyticsClient(element) {\n\t    var analytics = getCoveoAnalytics(element);\n\t    if (analytics) {\n\t        return analytics.client;\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t}\n\tfunction getCoveoAnalytics(element) {\n\t    var analyticsElement = Dom_1.$$(element).find('.' + Component_1.Component.computeCssClassName(Analytics_1.Analytics));\n\t    if (analyticsElement) {\n\t        return Component_1.Component.get(analyticsElement);\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t}\n\t/**\n\t * Log a custom event on the Coveo Usage Analytics service.\n\t * @param element The root of the interface for which to log analytics events.\n\t * @param customEventCause The cause of the event.\n\t * @param metadata The metadata associated with the event (JSON key value).\n\t */\n\tfunction logCustomEvent(element, customEventCause, metadata) {\n\t    var client = getCoveoAnalyticsClient(element);\n\t    if (client) {\n\t        client.logCustomEvent(customEventCause, metadata, element);\n\t    }\n\t}\n\texports.logCustomEvent = logCustomEvent;\n\tInitialization_1.Initialization.registerNamedMethod('logCustomEvent', function (element, customEventCause, metadata) {\n\t    logCustomEvent(element, customEventCause, metadata);\n\t});\n\t/**\n\t * Log a `SearchEvent` on the Coveo Usage Analytics service.\n\t * @param element The root of the interface for which to log analytics events.\n\t * @param searchEventCause The cause of the event.\n\t * @param metadata The metadata associated with the event (JSON key value).\n\t */\n\tfunction logSearchEvent(element, searchEventCause, metadata) {\n\t    var client = getCoveoAnalyticsClient(element);\n\t    if (client) {\n\t        client.logSearchEvent(searchEventCause, metadata);\n\t    }\n\t}\n\texports.logSearchEvent = logSearchEvent;\n\tInitialization_1.Initialization.registerNamedMethod('logSearchEvent', function (element, searchEventCause, metadata) {\n\t    logSearchEvent(element, searchEventCause, metadata);\n\t});\n\t/**\n\t * Log a `SearchAsYouTypeEvent` on the Coveo Usage Analytics service.<br/>\n\t * It is a bit different from a standard search event, as it will wait 5 seconds before sending the final `SearchAsYouType` event.\n\t * @param element The root of the interface for which to log analytics events.\n\t * @param searchAsYouTypeEventCause The cause of the event.\n\t * @param metadata The metadata associated with the event (JSON key value).\n\t */\n\tfunction logSearchAsYouTypeEvent(element, searchAsYouTypeEventCause, metadata) {\n\t    var client = getCoveoAnalyticsClient(element);\n\t    if (client) {\n\t        client.logSearchAsYouType(searchAsYouTypeEventCause, metadata);\n\t    }\n\t}\n\texports.logSearchAsYouTypeEvent = logSearchAsYouTypeEvent;\n\tInitialization_1.Initialization.registerNamedMethod('logSearchAsYouTypeEvent', function (element, searchAsYouTypeEventCause, metadata) {\n\t    logSearchAsYouTypeEvent(element, searchAsYouTypeEventCause, metadata);\n\t});\n\t/**\n\t * Log a `ClickEvent` on the Coveo Usage Analytics service.\n\t * @param element The root of the interface for which to log analytics events.\n\t * @param clickEventCause The cause of the event.\n\t * @param metadata The metadata associated with the event (JSON key value).\n\t * @param result The result that was clicked.\n\t */\n\tfunction logClickEvent(element, clickEventCause, metadata, result) {\n\t    var client = getCoveoAnalyticsClient(element);\n\t    if (client) {\n\t        client.logClickEvent(clickEventCause, metadata, result, element);\n\t    }\n\t}\n\texports.logClickEvent = logClickEvent;\n\tInitialization_1.Initialization.registerNamedMethod('logClickEvent', function (element, clickEventCause, metadata, result) {\n\t    logClickEvent(element, clickEventCause, metadata, result);\n\t});\n\t/**\n\t * Pass options to the framework, before it is initialized ({@link init}).<br/>\n\t * All the options passed with this calls will be merged together on initialization.\n\t * @param element The root of the interface for which you wish to set options.\n\t * @param optionsToSet JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType: true}}</code>).\n\t */\n\tfunction options(element, optionsToSet) {\n\t    if (optionsToSet === void 0) { optionsToSet = {}; }\n\t    Initialization_1.Initialization.registerDefaultOptions(element, optionsToSet);\n\t}\n\texports.options = options;\n\tInitialization_1.Initialization.registerNamedMethod('options', function (element, optionsToSet) {\n\t    if (optionsToSet === void 0) { optionsToSet = {}; }\n\t    options(element, optionsToSet);\n\t});\n\t/**\n\t * Patch the given `methodName` on an instance of a component bound to an `HTMLElement` with a new handler.\n\t * @param element\n\t * @param methodName\n\t * @param handler\n\t */\n\tfunction patch(element, methodName, handler) {\n\t    Initialization_1.Initialization.monkeyPatchComponentMethod(methodName, element, handler);\n\t}\n\texports.patch = patch;\n\tInitialization_1.Initialization.registerNamedMethod('patch', function (element, methodName, handler) {\n\t    patch(element, methodName, handler);\n\t});\n\tfunction initBox(element) {\n\t    var args = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        args[_i - 1] = arguments[_i];\n\t    }\n\t    var type, options = {}, injectMarkup;\n\t    // This means : initBox, no type (no injection) and no options\n\t    if (args.length == 0) {\n\t        type = 'Standard';\n\t        injectMarkup = false;\n\t    }\n\t    else if (args.length == 1) {\n\t        // This mean a type (with injection) and no options\n\t        if (typeof args[0] == 'string') {\n\t            type = args[0];\n\t            injectMarkup = true;\n\t        }\n\t        else if (typeof args[0] == 'object') {\n\t            type = 'Standard';\n\t            injectMarkup = false;\n\t            options = args[0];\n\t        }\n\t        else {\n\t            Assert_1.Assert.fail('Invalid parameters to init a box');\n\t        }\n\t    }\n\t    else if (args.length == 2) {\n\t        type = args[0];\n\t        options = args[1];\n\t        injectMarkup = true;\n\t    }\n\t    var merged = {};\n\t    merged[type || 'Container'] = _.extend({}, options.SearchInterface, options[type]);\n\t    options = _.extend({}, options, merged);\n\t    Initialization_1.Initialization.initializeFramework(element, options, function () {\n\t        Initialization_1.Initialization.initBoxInterface(element, options, type, injectMarkup);\n\t    });\n\t}\n\texports.initBox = initBox;\n\tInitialization_1.Initialization.registerNamedMethod('initBox', function (element) {\n\t    var args = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        args[_i - 1] = arguments[_i];\n\t    }\n\t    initBox(element, args);\n\t});\n\tfunction nuke(element) {\n\t    Dom_1.$$(element).trigger(InitializationEvents_1.InitializationEvents.nuke);\n\t}\n\texports.nuke = nuke;\n\tInitialization_1.Initialization.registerNamedMethod('nuke', function (element) {\n\t    nuke(element);\n\t});\n\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar QueryController_1 = __webpack_require__(76);\n\tvar HashUtils_1 = __webpack_require__(67);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar ComponentStateModel_1 = __webpack_require__(105);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar JQueryutils_1 = __webpack_require__(20);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The main purpose of this class is to initialize the framework (a.k.a the code executed when calling `Coveo.init`).<br/>\n\t * It's also in charge or registering the available components, as well as the method that we expost to the global Coveo scope.<br/>\n\t * For example, the `Coveo.executeQuery` function will be registed in this class by the {@link QueryController}.\n\t */\n\tvar Initialization = (function () {\n\t    function Initialization() {\n\t    }\n\t    /**\n\t     * Register a new set of options for a given element.<br/>\n\t     * When the element is eventually initialized as a component, those options will be used / merged to create the final option set to use for this component.<br/>\n\t     * Note that this function should not normally be called directly, but instead using the global `Coveo.options` function\n\t     * @param element\n\t     * @param options\n\t     */\n\t    Initialization.registerDefaultOptions = function (element, options) {\n\t        var existing = element['CoveoDefaultOptions'] || {};\n\t        var updated = Utils_1.Utils.extendDeep(existing, options);\n\t        element['CoveoDefaultOptions'] = updated;\n\t    };\n\t    Initialization.resolveDefaultOptions = function (element, options) {\n\t        var optionsForThisElement = element['CoveoDefaultOptions'];\n\t        var optionsSoFar;\n\t        if (Utils_1.Utils.exists(optionsForThisElement)) {\n\t            optionsSoFar = Utils_1.Utils.extendDeep(optionsForThisElement, options);\n\t        }\n\t        else {\n\t            optionsSoFar = options;\n\t        }\n\t        if (element.parentElement) {\n\t            return Initialization.resolveDefaultOptions(element.parentElement, optionsSoFar);\n\t        }\n\t        else {\n\t            return optionsSoFar;\n\t        }\n\t    };\n\t    /**\n\t     * Register a new Component to be recognized by the framework.<br/>\n\t     * This essentially mean that when we call `Coveo.init`, the Initialization class will scan the DOM for known component (which have registed themselves with this call) and create a new component on each element.\n\t     * @param componentClass\n\t     */\n\t    Initialization.registerAutoCreateComponent = function (componentClass) {\n\t        Assert_1.Assert.exists(componentClass);\n\t        Assert_1.Assert.exists(componentClass.ID);\n\t        Assert_1.Assert.doesNotExists(Initialization.autoCreateComponents[componentClass.ID]);\n\t        Assert_1.Assert.doesNotExists(Initialization.namedMethods[componentClass.ID]);\n\t        Initialization.autoCreateComponents[componentClass.ID] = componentClass;\n\t    };\n\t    /**\n\t     * Check if a component is already registed, using it's ID (e.g. : 'Facet').\n\t     * @param componentClassId\n\t     * @returns {boolean}\n\t     */\n\t    Initialization.isComponentClassIdRegistered = function (componentClassId) {\n\t        return Utils_1.Utils.exists(Initialization.autoCreateComponents[componentClassId]);\n\t    };\n\t    /**\n\t     * Return the list of all known components (the list of ID for each component).\n\t     * @returns {string[]}\n\t     */\n\t    Initialization.getListOfRegisteredComponents = function () {\n\t        return _.keys(Initialization.autoCreateComponents);\n\t    };\n\t    /**\n\t     * Return the component class definition, using it's ID (e.g. : 'CoveoFacet').\n\t     * @param name\n\t     * @returns {IComponentDefinition}\n\t     */\n\t    Initialization.getRegisteredComponent = function (name) {\n\t        return Initialization.autoCreateComponents[name];\n\t    };\n\t    /**\n\t     * Initialize the framework. Note that this function should not normally be called directly, but instead using a globally registered function (e.g.: Coveo.init), or {@link Initialization.initSearchInterface} or {@link Initialization.initStandaloneSearchInterface} <br/>\n\t     * (e.g. : `Coveo.init` or `Coveo.initSearchbox`).\n\t     * @param element The element on which to initialize the interface.\n\t     * @param options The options for all components (eg: {Searchbox : {enableSearchAsYouType : true}}).\n\t     * @param initSearchInterfaceFunction The function to execute to create the {@link SearchInterface} component. Different init call will create different {@link SearchInterface}.\n\t     */\n\t    Initialization.initializeFramework = function (element, options, initSearchInterfaceFunction) {\n\t        Assert_1.Assert.exists(element);\n\t        var alreadyInitialized = Component_1.Component.get(element, QueryController_1.QueryController, true);\n\t        if (alreadyInitialized) {\n\t            this.logger.error('This DOM element has already been initialized as a search interface, skipping initialization', element);\n\t            return;\n\t        }\n\t        options = Initialization.resolveDefaultOptions(element, options);\n\t        Initialization.performInitFunctionsOption(options, InitializationEvents_1.InitializationEvents.beforeInitialization);\n\t        Dom_1.$$(element).trigger(InitializationEvents_1.InitializationEvents.beforeInitialization);\n\t        initSearchInterfaceFunction(element, options);\n\t        Initialization.initExternalComponents(element, options);\n\t        Initialization.performInitFunctionsOption(options, InitializationEvents_1.InitializationEvents.afterComponentsInitialization);\n\t        Dom_1.$$(element).trigger(InitializationEvents_1.InitializationEvents.afterComponentsInitialization);\n\t        Dom_1.$$(element).trigger(InitializationEvents_1.InitializationEvents.restoreHistoryState);\n\t        Initialization.performInitFunctionsOption(options, InitializationEvents_1.InitializationEvents.afterInitialization);\n\t        Dom_1.$$(element).trigger(InitializationEvents_1.InitializationEvents.afterInitialization);\n\t        var searchInterface = Component_1.Component.get(element, SearchInterface_1.SearchInterface);\n\t        // Elements that have the coveo-hide-until-loaded class are hidden by default.\n\t        // Now that we're loaded (and before the first query returns), we can remove\n\t        // the class. Also, we add a class that gives the opportunity for an animation\n\t        // to apply at startup, such as a fade-in that comes in by default.\n\t        var elemsHidden = Dom_1.$$(element).findAll('.coveo-hide-until-loaded');\n\t        _.each(elemsHidden, function (e) {\n\t            Dom_1.$$(e).removeClass('coveo-hide-until-loaded');\n\t            Dom_1.$$(e).addClass('coveo-show-after-loaded');\n\t        });\n\t        if (searchInterface.options.autoTriggerQuery) {\n\t            Initialization.logFirstQueryCause(searchInterface);\n\t            var shouldLogInActionHistory = true;\n\t            // We should not log an action history if the interface is a standalone recommendation component.\n\t            if (Coveo['Recommendation']) {\n\t                shouldLogInActionHistory = !(searchInterface instanceof Coveo['Recommendation']);\n\t            }\n\t            Component_1.Component.get(element, QueryController_1.QueryController).executeQuery({\n\t                logInActionsHistory: shouldLogInActionHistory,\n\t                isFirstQuery: true\n\t            });\n\t        }\n\t    };\n\t    /**\n\t     * Create a new standard search interface. This is the function executed when calling `Coveo.init`.\n\t     * @param element\n\t     * @param options\n\t     */\n\t    Initialization.initSearchInterface = function (element, options) {\n\t        if (options === void 0) { options = {}; }\n\t        options = Initialization.resolveDefaultOptions(element, options);\n\t        var searchInterface = new SearchInterface_1.SearchInterface(element, options.SearchInterface, options.Analytics);\n\t        searchInterface.options.originalOptionsObject = options;\n\t        var initParameters = { options: options, bindings: searchInterface.getBindings() };\n\t        Initialization.automaticallyCreateComponentsInside(element, initParameters, ['Recommendation']);\n\t    };\n\t    /**\n\t     * Create a new standalone search interface (standalone search box). This is the function executed when calling `Coveo.initSearchbox`.\n\t     * @param element\n\t     * @param options\n\t     */\n\t    Initialization.initStandaloneSearchInterface = function (element, options) {\n\t        if (options === void 0) { options = {}; }\n\t        options = Initialization.resolveDefaultOptions(element, options);\n\t        // Set trigger query on clear to false for standalone search interface automatically\n\t        // Take care of not overriding any options that could have been set by external code.\n\t        if (!options.Querybox) {\n\t            options.Querybox = {};\n\t        }\n\t        if (!options.Omnibox) {\n\t            options.Omnibox = {};\n\t        }\n\t        if (!options.Searchbox) {\n\t            options.Searchbox = {};\n\t        }\n\t        if (!options.Querybox.triggerQueryOnClear || !options.Omnibox.triggerQueryOnClear || !options.Searchbox.triggerOnQueryClear) {\n\t            options.Querybox.triggerQueryOnClear = false;\n\t            options.Omnibox.triggerQueryOnClear = false;\n\t            options.Searchbox.triggerQueryOnClear = false;\n\t        }\n\t        var searchInterface = new SearchInterface_1.StandaloneSearchInterface(element, options.StandaloneSearchInterface, options.Analytics);\n\t        searchInterface.options.originalOptionsObject = options;\n\t        var initParameters = { options: options, bindings: searchInterface.getBindings() };\n\t        Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t    };\n\t    /**\n\t     * Create a new recommendation search interface. This is the function executed when calling `Coveo.initRecommendation`.\n\t     * @param element\n\t     * @param options\n\t     */\n\t    Initialization.initRecommendationInterface = function (element, options) {\n\t        if (options === void 0) { options = {}; }\n\t        options = Initialization.resolveDefaultOptions(element, options);\n\t        // Since a recommendation interface inherits from a search interface, we need to merge those if passed on init\n\t        var optionsForRecommendation = _.extend({}, options.SearchInterface, options.Recommendation);\n\t        // If there is a main search interface, modify the loading animation for the recommendation interface to a \"noop\" element\n\t        // We don't want 2 animation overlapping\n\t        if (optionsForRecommendation.mainSearchInterface) {\n\t            optionsForRecommendation.firstLoadingAnimation = Dom_1.$$('span').el;\n\t        }\n\t        var recommendation = new window['Coveo']['Recommendation'](element, optionsForRecommendation, options.Analytics);\n\t        recommendation.options.originalOptionsObject = options;\n\t        var initParameters = { options: options, bindings: recommendation.getBindings() };\n\t        Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t    };\n\t    /**\n\t     * Scan the element and all its children for known components. Initialize every known component found.\n\t     * @param element The element for which to scan it's children.\n\t     * @param initParameters Needed parameters to initialize all the children components.\n\t     * @param ignore An optional list of component ID to ignore and skip when scanning for known components.\n\t     */\n\t    Initialization.automaticallyCreateComponentsInside = function (element, initParameters, ignore) {\n\t        Assert_1.Assert.exists(element);\n\t        var codeToExecute = [];\n\t        var htmlElementsToIgnore = [];\n\t        // Scan for elements to ignore which can be a container component (with other component inside)\n\t        // When a component is ignored, all it's children component should be ignored too.\n\t        // Add them to the array of html elements that should be skipped.\n\t        _.each(ignore, function (toIgnore) {\n\t            var rootToIgnore = Dom_1.$$(element).find(\".\" + Component_1.Component.computeCssClassNameForType(toIgnore));\n\t            if (rootToIgnore) {\n\t                var childsElementsToIgnore = Dom_1.$$(rootToIgnore).findAll('*');\n\t                htmlElementsToIgnore = htmlElementsToIgnore.concat(childsElementsToIgnore);\n\t            }\n\t        });\n\t        for (var componentClassId in Initialization.autoCreateComponents) {\n\t            if (!_.contains(ignore, componentClassId)) {\n\t                var componentClass = Initialization.autoCreateComponents[componentClassId];\n\t                var classname = Component_1.Component.computeCssClassName(componentClass);\n\t                var elements = Dom_1.$$(element).findAll('.' + classname);\n\t                // From all the component we found which match the current className, remove those that should be ignored\n\t                elements = _.difference(elements, htmlElementsToIgnore);\n\t                if (Dom_1.$$(element).hasClass(classname) && !_.contains(htmlElementsToIgnore, element)) {\n\t                    elements.push(element);\n\t                }\n\t                if (elements.length != 0) {\n\t                    // Queue the code that will scan the now resolved selector to after we've\n\t                    // finished evaluating all selectors. This ensures that if a component\n\t                    // constructor adds child components under his tags, those won't get auto-\n\t                    // initialize by this invocation of this method. Components inserting child\n\t                    // components are responsible of invoking this method again if they want\n\t                    // child components to be auto-initialized.\n\t                    //\n\t                    // Explanation: If we don't do that, child components for which selector have\n\t                    // already been evaluated won't be initialized, whereas those that are next\n\t                    // in the list will be.\n\t                    codeToExecute.push(Initialization.createFunctionThatInitializesComponentOnElements(elements, componentClassId, componentClass, initParameters));\n\t                }\n\t            }\n\t        }\n\t        // Now that all selectors are executed, let's really initialize the components.\n\t        _.each(codeToExecute, function (code) { return code(); });\n\t    };\n\t    /**\n\t     * Create a new component on the given element.\n\t     * @param componentClassId The ID of the component to initialize (e.g. : 'CoveoFacet').\n\t     * @param element The HTMLElement on which to initialize.\n\t     * @param initParameters Needed parameters to initialize the component.\n\t     * @returns {Component}\n\t     */\n\t    Initialization.createComponentOfThisClassOnElement = function (componentClassId, element, initParameters) {\n\t        Assert_1.Assert.isNonEmptyString(componentClassId);\n\t        Assert_1.Assert.exists(element);\n\t        var componentClass = Initialization.autoCreateComponents[componentClassId];\n\t        Assert_1.Assert.exists(componentClass);\n\t        var bindings = {};\n\t        var options = {};\n\t        var result = undefined;\n\t        if (initParameters != undefined) {\n\t            _.each(initParameters.bindings, function (value, key) {\n\t                bindings[key] = value;\n\t            });\n\t            options = initParameters.options;\n\t            result = initParameters.result;\n\t        }\n\t        Initialization.logger.trace('Creating component of class ' + componentClassId, element, options);\n\t        return new componentClass(element, options, bindings, result);\n\t    };\n\t    /**\n\t     * Register a new globally available method in the Coveo namespace (e.g.: `Coveo.init`).\n\t     * @param methodName The method name to register.\n\t     * @param handler The function to execute when the method is called.\n\t     */\n\t    Initialization.registerNamedMethod = function (methodName, handler) {\n\t        Assert_1.Assert.isNonEmptyString(methodName);\n\t        Assert_1.Assert.doesNotExists(Initialization.autoCreateComponents[methodName]);\n\t        Assert_1.Assert.doesNotExists(Initialization.namedMethods[methodName]);\n\t        Assert_1.Assert.exists(handler);\n\t        Initialization.namedMethods[methodName] = handler;\n\t    };\n\t    /**\n\t     * Check if the method is already registed.\n\t     * @param methodName\n\t     * @returns {boolean}\n\t     */\n\t    Initialization.isNamedMethodRegistered = function (methodName) {\n\t        return Utils_1.Utils.exists(Initialization.namedMethods[methodName]);\n\t    };\n\t    /**\n\t     * 'Monkey patch' (replace the function with a new one) a given method on a component instance.\n\t     * @param methodName\n\t     * @param element\n\t     * @param handler\n\t     */\n\t    Initialization.monkeyPatchComponentMethod = function (methodName, element, handler) {\n\t        Assert_1.Assert.isNonEmptyString(methodName);\n\t        Assert_1.Assert.exists(handler);\n\t        var componentClass;\n\t        if (methodName.indexOf('.') > 0) {\n\t            var splitArg = methodName.split('.');\n\t            Assert_1.Assert.check(splitArg.length == 2, 'Invalid method name, correct syntax is CoveoComponent.methodName.');\n\t            componentClass = splitArg[0];\n\t            methodName = splitArg[1];\n\t        }\n\t        var boundComponent = Component_1.Component.get(element, componentClass);\n\t        Assert_1.Assert.exists(boundComponent);\n\t        Assert_1.Assert.exists(boundComponent[methodName]);\n\t        var originalMethodName = '__' + methodName;\n\t        if (!Utils_1.Utils.exists(boundComponent[originalMethodName])) {\n\t            boundComponent[originalMethodName] = boundComponent[methodName];\n\t        }\n\t        boundComponent[methodName] = handler;\n\t    };\n\t    Initialization.initBoxInterface = function (element, options, type, injectMarkup) {\n\t        if (options === void 0) { options = {}; }\n\t        if (type === void 0) { type = 'Standard'; }\n\t        if (injectMarkup === void 0) { injectMarkup = true; }\n\t        options = Initialization.resolveDefaultOptions(element, options);\n\t        var fromInitTypeToBoxReference = 'Box';\n\t        if (type != 'Standard') {\n\t            fromInitTypeToBoxReference += 'For' + type;\n\t        }\n\t        var boxRef = Component_1.Component.getComponentRef(fromInitTypeToBoxReference);\n\t        if (boxRef) {\n\t            new Logger_1.Logger(element).info('Initializing box of type ' + fromInitTypeToBoxReference);\n\t            var injectFunction = injectMarkup ? boxRef.getInjection : function () {\n\t            };\n\t            var box = new boxRef(element, options[fromInitTypeToBoxReference], options.Analytics, injectFunction, options);\n\t            box.options.originalOptionsObject = options;\n\t            var initParameters = { options: options, bindings: box.getBindings() };\n\t            Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t        }\n\t        else {\n\t            new Logger_1.Logger(element).error('Trying to initialize box of type : ' + fromInitTypeToBoxReference + ' but not found in code (not compiled)!');\n\t            Assert_1.Assert.fail('Cannot initialize unknown type of box');\n\t        }\n\t    };\n\t    Initialization.dispatchNamedMethodCall = function (methodName, element, args) {\n\t        Assert_1.Assert.isNonEmptyString(methodName);\n\t        Assert_1.Assert.exists(element);\n\t        var namedMethodHandler = Initialization.namedMethods[methodName];\n\t        Assert_1.Assert.exists(namedMethodHandler);\n\t        Initialization.logger.trace('Dispatching named method call of ' + methodName, element, args);\n\t        if (args.length != 0) {\n\t            return namedMethodHandler.apply(null, [element].concat(args));\n\t        }\n\t        else {\n\t            return namedMethodHandler.apply(null, [element]);\n\t        }\n\t    };\n\t    Initialization.dispatchNamedMethodCallOrComponentCreation = function (token, element, args) {\n\t        Assert_1.Assert.isNonEmptyString(token);\n\t        Assert_1.Assert.exists(element);\n\t        if (Initialization.isNamedMethodRegistered(token)) {\n\t            return Initialization.dispatchNamedMethodCall(token, element, args);\n\t        }\n\t        else if (Initialization.isComponentClassIdRegistered(token)) {\n\t            return Initialization.createComponentOfThisClassOnElement(token, element, args[0]);\n\t        }\n\t        else if (Initialization.isThereASingleComponentBoundToThisElement(element)) {\n\t            return Initialization.dispatchMethodCallOnBoundComponent(token, element, args);\n\t        }\n\t        else {\n\t            Assert_1.Assert.fail('No method or component named ' + token + ' are registered.');\n\t        }\n\t    };\n\t    Initialization.isSearchFromLink = function (searchInterface) {\n\t        return Utils_1.Utils.isNonEmptyString(searchInterface.getBindings().queryStateModel.get('q'));\n\t    };\n\t    Initialization.isThereASingleComponentBoundToThisElement = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        return Utils_1.Utils.exists(Component_1.Component.get(element));\n\t    };\n\t    Initialization.dispatchMethodCallOnBoundComponent = function (methodName, element, args) {\n\t        Assert_1.Assert.isNonEmptyString(methodName);\n\t        Assert_1.Assert.exists(element);\n\t        var boundComponent = Component_1.Component.get(element);\n\t        Assert_1.Assert.exists(boundComponent);\n\t        var method = boundComponent[methodName];\n\t        if (Utils_1.Utils.exists(method)) {\n\t            return method.apply(boundComponent, args);\n\t        }\n\t        else {\n\t            Assert_1.Assert.fail('No method named ' + methodName + ' exist on component ' + boundComponent.type);\n\t        }\n\t    };\n\t    Initialization.logFirstQueryCause = function (searchInterface) {\n\t        var firstQueryCause = HashUtils_1.HashUtils.getValue('firstQueryCause', HashUtils_1.HashUtils.getHash());\n\t        if (firstQueryCause != null) {\n\t            var meta = HashUtils_1.HashUtils.getValue('firstQueryMeta', HashUtils_1.HashUtils.getHash()) || {};\n\t            searchInterface.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList[firstQueryCause], meta);\n\t        }\n\t        else {\n\t            if (Initialization.isSearchFromLink(searchInterface)) {\n\t                searchInterface.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchFromLink, {});\n\t            }\n\t            else {\n\t                searchInterface.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.interfaceLoad, {});\n\t            }\n\t        }\n\t    };\n\t    Initialization.performInitFunctionsOption = function (options, event) {\n\t        if (Utils_1.Utils.exists(options)) {\n\t            Initialization.performFunctions(options[event]);\n\t        }\n\t    };\n\t    Initialization.performFunctions = function (option) {\n\t        if (Utils_1.Utils.exists(option)) {\n\t            _.each(option, function (func) {\n\t                if (typeof func == 'function') {\n\t                    func();\n\t                }\n\t            });\n\t        }\n\t    };\n\t    Initialization.initExternalComponents = function (element, options) {\n\t        if (options && options['externalComponents']) {\n\t            var searchInterface = Component_1.Component.get(element, SearchInterface_1.SearchInterface);\n\t            var queryStateModel = Component_1.Component.get(element, QueryStateModel_1.QueryStateModel);\n\t            var componentStateModel = Component_1.Component.get(element, ComponentStateModel_1.ComponentStateModel);\n\t            var queryController = Component_1.Component.get(element, QueryController_1.QueryController);\n\t            var componentOptionsModel = Component_1.Component.get(element, ComponentOptionsModel_1.ComponentOptionsModel);\n\t            var usageAnalytics = searchInterface.usageAnalytics;\n\t            Assert_1.Assert.exists(searchInterface);\n\t            Assert_1.Assert.exists(queryStateModel);\n\t            Assert_1.Assert.exists(queryController);\n\t            Assert_1.Assert.exists(componentStateModel);\n\t            Assert_1.Assert.exists(usageAnalytics);\n\t            var initParameters_1 = {\n\t                options: options,\n\t                bindings: {\n\t                    searchInterface: searchInterface,\n\t                    queryStateModel: queryStateModel,\n\t                    queryController: queryController,\n\t                    usageAnalytics: usageAnalytics,\n\t                    componentStateModel: componentStateModel,\n\t                    componentOptionsModel: componentOptionsModel,\n\t                    root: element\n\t                }\n\t            };\n\t            _.each(options['externalComponents'], function (externalComponent) {\n\t                var elementToInstantiate = externalComponent;\n\t                if (Utils_1.Utils.isHtmlElement(elementToInstantiate)) {\n\t                    Initialization.automaticallyCreateComponentsInside(elementToInstantiate, initParameters_1);\n\t                }\n\t                else if (JQueryutils_1.JQueryUtils.isInstanceOfJQuery(elementToInstantiate)) {\n\t                    Initialization.automaticallyCreateComponentsInside((elementToInstantiate.get(0)), initParameters_1);\n\t                }\n\t            });\n\t        }\n\t    };\n\t    Initialization.createFunctionThatInitializesComponentOnElements = function (elements, componentClassId, componentClass, initParameters) {\n\t        return function () {\n\t            _.each(elements, function (matchingElement) {\n\t                if (Component_1.Component.get(matchingElement, componentClassId) == null) {\n\t                    // If options were provided, lookup options for this component class and\n\t                    // also for the element id. Merge them and pass those to the factory method.\n\t                    var optionsToUse = undefined;\n\t                    if (Utils_1.Utils.exists(initParameters.options)) {\n\t                        var optionsForComponentClass = initParameters.options[componentClassId];\n\t                        var optionsForElementId = initParameters.options[matchingElement.id];\n\t                        var initOptions = initParameters.options['initOptions'] ? initParameters.options['initOptions'][componentClassId] : {};\n\t                        optionsToUse = Utils_1.Utils.extendDeep(optionsForElementId, initOptions);\n\t                        optionsToUse = Utils_1.Utils.extendDeep(optionsForComponentClass, optionsToUse);\n\t                    }\n\t                    var initParamToUse = _.extend({}, initParameters, { options: optionsToUse });\n\t                    Initialization.createComponentOfThisClassOnElement(componentClass['ID'], matchingElement, initParamToUse);\n\t                }\n\t            });\n\t        };\n\t    };\n\t    return Initialization;\n\t}());\n\tInitialization.logger = new Logger_1.Logger('Initialization');\n\tInitialization.autoCreateComponents = {};\n\tInitialization.namedMethods = {};\n\texports.Initialization = Initialization;\n\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar JQueryutils_1 = __webpack_require__(20);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar ComponentStateModel_1 = __webpack_require__(105);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar QueryController_1 = __webpack_require__(76);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar NoopAnalyticsClient_1 = __webpack_require__(121);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar DebugEvents_1 = __webpack_require__(45);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The base class for every component in the framework.\n\t */\n\tvar Component = (function (_super) {\n\t    __extends(Component, _super);\n\t    /**\n\t     * Create a new Component. Resolve all {@link IComponentBindings} if not provided.<br/>\n\t     * Create a new Logger for this component.\n\t     * Attach the component to the {@link SearchInterface}.<br/>\n\t     * @param element The HTMLElement on which to create the component. Used to bind data on the element.\n\t     * @param type The unique identifier for this component. See : {@link IComponentDefinition.ID}. Used to generate the unique Coveo CSS class associated with every component.\n\t     * @param bindings The environment for every component. Optional, but omitting to provide one will impact performance.\n\t     */\n\t    function Component(element, type, bindings) {\n\t        if (bindings === void 0) { bindings = {}; }\n\t        var _this = _super.call(this, element, type) || this;\n\t        _this.element = element;\n\t        _this.type = type;\n\t        /**\n\t         * Allows the component to bind events and execute them only when it is enabled.\n\t         * @type {Coveo.ComponentEvents}\n\t         */\n\t        _this.bind = new ComponentEvents(_this);\n\t        _this.root = bindings.root || _this.resolveRoot();\n\t        _this.queryStateModel = bindings.queryStateModel || _this.resolveQueryStateModel();\n\t        _this.componentStateModel = bindings.componentStateModel || _this.resolveComponentStateModel();\n\t        _this.queryController = bindings.queryController || _this.resolveQueryController();\n\t        _this.searchInterface = bindings.searchInterface || _this.resolveSearchInterface();\n\t        _this.usageAnalytics = bindings.usageAnalytics || _this.resolveUA();\n\t        _this.componentOptionsModel = bindings.componentOptionsModel || _this.resolveComponentOptionsModel();\n\t        _this.ensureDom = _.once(function () { return _this.createDom(); });\n\t        if (_this.searchInterface != null) {\n\t            _this.searchInterface.attachComponent(type, _this);\n\t        }\n\t        _this.initDebugInfo();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Return the bindings, or environment, for the current component.\n\t     * @returns {IComponentBindings}\n\t     */\n\t    Component.prototype.getBindings = function () {\n\t        return {\n\t            root: this.root,\n\t            queryStateModel: this.queryStateModel,\n\t            queryController: this.queryController,\n\t            searchInterface: this.searchInterface,\n\t            componentStateModel: this.componentStateModel,\n\t            componentOptionsModel: this.componentOptionsModel,\n\t            usageAnalytics: this.usageAnalytics\n\t        };\n\t    };\n\t    Component.prototype.createDom = function () {\n\t        // By default we do nothing\n\t    };\n\t    Component.prototype.resolveSearchInterface = function () {\n\t        return Component.resolveBinding(this.element, SearchInterface_1.SearchInterface);\n\t    };\n\t    Component.prototype.resolveRoot = function () {\n\t        var resolvedSearchInterface = Component.resolveBinding(this.element, SearchInterface_1.SearchInterface);\n\t        return resolvedSearchInterface ? resolvedSearchInterface.element : undefined;\n\t    };\n\t    Component.prototype.resolveQueryController = function () {\n\t        return Component.resolveBinding(this.element, QueryController_1.QueryController);\n\t    };\n\t    Component.prototype.resolveComponentStateModel = function () {\n\t        return Component.resolveBinding(this.element, ComponentStateModel_1.ComponentStateModel);\n\t    };\n\t    Component.prototype.resolveQueryStateModel = function () {\n\t        return Component.resolveBinding(this.element, QueryStateModel_1.QueryStateModel);\n\t    };\n\t    Component.prototype.resolveComponentOptionsModel = function () {\n\t        return Component.resolveBinding(this.element, ComponentOptionsModel_1.ComponentOptionsModel);\n\t    };\n\t    Component.prototype.resolveUA = function () {\n\t        var searchInterface = this.resolveSearchInterface();\n\t        return (searchInterface && searchInterface.usageAnalytics) ? searchInterface.usageAnalytics : new NoopAnalyticsClient_1.NoopAnalyticsClient();\n\t    };\n\t    Component.prototype.resolveResult = function () {\n\t        return Component.getResult(this.element);\n\t    };\n\t    Component.prototype.initDebugInfo = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.element).on('dblclick', function (e) {\n\t            if (e.altKey) {\n\t                var debugInfo = _this.debugInfo();\n\t                if (debugInfo != null) {\n\t                    Dom_1.$$(_this.root).trigger(DebugEvents_1.DebugEvents.showDebugPanel, _this.debugInfo());\n\t                }\n\t            }\n\t        });\n\t    };\n\t    /**\n\t     * Get the bound component to the given HTMLElement. Throws an assert if the HTMLElement has no component bound, unless using the noThrow argument.<br/>\n\t     * If there is multiple component bound to the current HTMLElement, you must specify the component class.\n\t     * @param element HTMLElement for which to get the bound component.\n\t     * @param componentClass Optional component class. If the HTMLElement has multiple components bound, you must specify which one you are targeting.\n\t     * @param noThrow Boolean option to tell the method to not throw on error.\n\t     * @returns {Component}\n\t     */\n\t    Component.get = function (element, componentClass, noThrow) {\n\t        Assert_1.Assert.exists(element);\n\t        if (_.isString(componentClass)) {\n\t            return element[Component.computeCssClassNameForType(componentClass)];\n\t        }\n\t        else if (Utils_1.Utils.exists(componentClass)) {\n\t            Assert_1.Assert.exists(componentClass.ID);\n\t            return element[Component.computeCssClassNameForType(componentClass.ID)];\n\t        }\n\t        else {\n\t            // No class specified, but we support returning the bound component\n\t            // if there is exactly one.\n\t            var boundComponents = BaseComponent_1.BaseComponent.getBoundComponentsForElement(element);\n\t            if (!noThrow) {\n\t                Assert_1.Assert.check(boundComponents.length <= 1, 'More than one component is bound to this element. You need to specify the component type.');\n\t            }\n\t            return boundComponents[0];\n\t        }\n\t    };\n\t    Component.getResult = function (element, noThrow) {\n\t        if (noThrow === void 0) { noThrow = false; }\n\t        var resultElement = Dom_1.$$(element).closest('.CoveoResult');\n\t        Assert_1.Assert.check(noThrow || resultElement != undefined);\n\t        return resultElement['CoveoResult'];\n\t    };\n\t    Component.bindResultToElement = function (element, result) {\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(result);\n\t        Dom_1.$$(element).addClass('CoveoResult');\n\t        element['CoveoResult'] = result;\n\t        var jQuery = JQueryutils_1.JQueryUtils.getJQuery();\n\t        if (jQuery) {\n\t            jQuery(element).data(result);\n\t        }\n\t    };\n\t    Component.resolveBinding = function (element, componentClass) {\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(componentClass);\n\t        Assert_1.Assert.exists(componentClass.ID);\n\t        // first, look down\n\t        var found;\n\t        if (Dom_1.$$(element).is('.' + Component.computeCssClassNameForType(componentClass.ID))) {\n\t            found = element;\n\t        }\n\t        else {\n\t            var findDown = Dom_1.$$(element).findClass(Component.computeCssClassNameForType(componentClass.ID));\n\t            if (!findDown || findDown.length == 0) {\n\t                var findUp = Dom_1.$$(element).closest(Component.computeCssClassNameForType(componentClass.ID));\n\t                if (findUp) {\n\t                    found = findUp;\n\t                }\n\t            }\n\t            else {\n\t                found = findDown;\n\t            }\n\t        }\n\t        if (found) {\n\t            return found[Component.computeCssClassNameForType(componentClass.ID)];\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    Component.pointElementsToDummyForm = function (element) {\n\t        var inputs = Dom_1.$$(element).is('input') ? [element] : [];\n\t        inputs = inputs.concat(Dom_1.$$(element).findAll('input'));\n\t        _.each(_.compact(inputs), function (input) {\n\t            input.setAttribute('form', 'coveo-dummy-form');\n\t        });\n\t    };\n\t    return Component;\n\t}(BaseComponent_1.BaseComponent));\n\texports.Component = Component;\n\t/**\n\t * Used by the various Coveo Component to trigger and bind event.<br/>\n\t * It adds a small logic to execute handler or triggers only when the component is \"enabled\".<br/>\n\t * A component is disabled by calling {Component.disable}<br/>\n\t * Typically, a component is disabled when it is not active in the current {Tab}.<br/>\n\t * It can also be disabled by external code.<br/>\n\t * The class serves as a way to not execute handler on component that are invisible and inactive in the query.\n\t */\n\tvar ComponentEvents = (function () {\n\t    /**\n\t     * Create a new `ComponentEvents` for the given {@link Component}.\n\t     * @param owner The {@link Component} which owns those events handler and trigger.\n\t     */\n\t    function ComponentEvents(owner) {\n\t        this.owner = owner;\n\t        Assert_1.Assert.exists(owner);\n\t    }\n\t    ComponentEvents.prototype.on = function (arg, event, handler) {\n\t        if (!JQueryutils_1.JQueryUtils.getJQuery() || !JQueryutils_1.JQueryUtils.isInstanceOfJQuery(arg)) {\n\t            var htmlEl = arg;\n\t            Dom_1.$$(htmlEl).on(event, this.wrapToCallIfEnabled(handler));\n\t        }\n\t        else {\n\t            var jq = arg;\n\t            jq.on(event, this.wrapToCallIfEnabled(handler));\n\t        }\n\t    };\n\t    ComponentEvents.prototype.one = function (arg, event, handler) {\n\t        if (arg instanceof HTMLElement) {\n\t            var htmlEl = arg;\n\t            Dom_1.$$(htmlEl).one(event, this.wrapToCallIfEnabled(handler));\n\t        }\n\t        else {\n\t            var jq = arg;\n\t            jq.one(event, this.wrapToCallIfEnabled(handler));\n\t        }\n\t    };\n\t    /**\n\t     * Bind on the \"root\" of the Component. The root is typically the {@link SearchInterface}.<br/>\n\t     * Bind an event using native javascript code.\n\t     * @param event The event for which to register an handler.\n\t     * @param handler The function to execute when the event is triggered.\n\t     */\n\t    ComponentEvents.prototype.onRootElement = function (event, handler) {\n\t        this.on(this.owner.root, event, handler);\n\t    };\n\t    /**\n\t     * Bind on the \"root\" of the Component. The root is typically the {@link SearchInterface}.<br/>\n\t     * Bind an event using native javascript code.\n\t     * The handler will execute only ONE time.\n\t     * @param event The event for which to register an handler.\n\t     * @param handler The function to execute when the event is triggered.\n\t     */\n\t    ComponentEvents.prototype.oneRootElement = function (event, handler) {\n\t        this.one(this.owner.root, event, handler);\n\t    };\n\t    /**\n\t     * Bind an event related specially to the query state model.<br/>\n\t     * This will build the correct string event and execute the handler only if the component is activated.\n\t     * @param eventType The event type for which to register an event.\n\t     * @param attribute The attribute for which to register an event.\n\t     * @param handler The handler to execute when the query state event is triggered.\n\t     */\n\t    ComponentEvents.prototype.onQueryState = function (eventType, attribute, handler) {\n\t        this.onRootElement(this.getQueryStateEventName(eventType, attribute), handler);\n\t    };\n\t    /**\n\t     * Bind an event related specially to the query state model.<br/>\n\t     * This will build the correct string event and execute the handler only if the component is activated.<br/>\n\t     * Will execute only once.\n\t     * @param eventType The event type for which to register an event.\n\t     * @param attribute The attribute for which to register an event.\n\t     * @param handler The handler to execute when the query state event is triggered.\n\t     */\n\t    ComponentEvents.prototype.oneQueryState = function (eventType, attribute, handler) {\n\t        this.oneRootElement(this.getQueryStateEventName(eventType, attribute), handler);\n\t    };\n\t    ComponentEvents.prototype.trigger = function (arg, event, args) {\n\t        this.wrapToCallIfEnabled(function () {\n\t            if (arg instanceof HTMLElement) {\n\t                var htmlEl = arg;\n\t                Dom_1.$$(htmlEl).trigger(event, args);\n\t            }\n\t            else {\n\t                var jq = arg;\n\t                jq.trigger(event, args);\n\t            }\n\t        })(args);\n\t    };\n\t    /**\n\t     * Execute the function only if the component is enabled.\n\t     * @param func The function to execute if the component is enabled.\n\t     * @returns {function(...[any]): *}\n\t     */\n\t    ComponentEvents.prototype.wrapToCallIfEnabled = function (func) {\n\t        var _this = this;\n\t        return function () {\n\t            var args = [];\n\t            for (var _i = 0; _i < arguments.length; _i++) {\n\t                args[_i] = arguments[_i];\n\t            }\n\t            if (!_this.owner.disabled) {\n\t                if (args && args[0] instanceof CustomEvent) {\n\t                    if (args[0].detail) {\n\t                        args = [args[0].detail];\n\t                    }\n\t                }\n\t                else if (args && JQueryutils_1.JQueryUtils.isInstanceOfJqueryEvent(args[0])) {\n\t                    if (args[1] != undefined) {\n\t                        args = [args[1]];\n\t                    }\n\t                    else {\n\t                        args = [];\n\t                    }\n\t                }\n\t                return func.apply(_this.owner, args);\n\t            }\n\t        };\n\t    };\n\t    ComponentEvents.prototype.getQueryStateEventName = function (eventType, attribute) {\n\t        var evtName;\n\t        if (eventType && attribute) {\n\t            evtName = this.owner.queryStateModel.getEventName(eventType + attribute);\n\t        }\n\t        else {\n\t            evtName = this.owner.queryStateModel.getEventName(eventType);\n\t        }\n\t        return evtName;\n\t    };\n\t    return ComponentEvents;\n\t}());\n\texports.ComponentEvents = ComponentEvents;\n\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar ComponentStateModel_1 = __webpack_require__(105);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar QueryController_1 = __webpack_require__(76);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar StandaloneSearchInterfaceEvents_1 = __webpack_require__(56);\n\tvar HistoryController_1 = __webpack_require__(99);\n\tvar LocalStorageHistoryController_1 = __webpack_require__(101);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar NoopAnalyticsClient_1 = __webpack_require__(121);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar RootComponent_1 = __webpack_require__(77);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar Debug_1 = __webpack_require__(122);\n\tvar HashUtils_1 = __webpack_require__(67);\n\tvar fastclick = __webpack_require__(123);\n\tvar jstz = __webpack_require__(124);\n\tvar SentryLogger_1 = __webpack_require__(126);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The SearchInterface component is the root and main component of your Coveo search interface. You should place all\n\t * other Coveo components inside the SearchInterface component.\n\t *\n\t * It is also on the HTMLElement of the SearchInterface component that you call the {@link init} function.\n\t *\n\t * It is advisable to specify a unique HTML `id` attribute for the SearchInterface component in order to be able to\n\t * reference it easily.\n\t *\n\t * **Example:**\n\t *\n\t * ```html\n\t * <head>\n\t *\n\t * [ ... ]\n\t *\n\t * <script>\n\t *   document.addEventListener('DOMContentLoaded', function() {\n\t *\n\t *     [ ... ]\n\t *     // The init function is called on the SearchInterface element, in this case, the body of the page.\n\t *     Coveo.init(document.body);\n\t *\n\t *     [ ... ]\n\t *\n\t *     });\n\t * </script>\n\t *\n\t * [ ... ]\n\t * </head>\n\t *\n\t * <!-- Specifying a unique HTML id attribute for the SearchInterface component is good practice. -->\n\t * <body id='search' class='CoveoSearchInterface' [ ... other options ... ]>\n\t *\n\t *   [ ... ]\n\t *\n\t *   <!-- You should place all other Coveo components here, inside the SearchInterface component. -->\n\t *\n\t *   [ ... ]\n\t *\n\t * </body>\n\t * ```\n\t */\n\tvar SearchInterface = (function (_super) {\n\t    __extends(SearchInterface, _super);\n\t    /**\n\t     * Creates a new SearchInterface. Initialize various singletons for the interface (e.g., usage analytics, query\n\t     * controller, state model, etc.). Binds events related to the query. Hides and shows the loading animation, if\n\t     * activated (see the [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option).\n\t     * @param element The HTMLElement on which to instantiate the component. This cannot be an `HTMLInputElement` for\n\t     * technical reasons.\n\t     * @param options The options for the SearchInterface.\n\t     * @param analyticsOptions The options for the {@link Analytics} component. Since the Analytics component is normally\n\t     * global, it needs to be passed at initialization of the whole interface.\n\t     * @param _window The window object for the search interface. Used for unit tests, which can pass a mock. Default is\n\t     * the global window object.\n\t     */\n\t    function SearchInterface(element, options, analyticsOptions, _window) {\n\t        if (_window === void 0) { _window = window; }\n\t        var _this = _super.call(this, element, SearchInterface.ID) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.analyticsOptions = analyticsOptions;\n\t        _this.isNewDesignAttribute = false;\n\t        if (DeviceUtils_1.DeviceUtils.isMobileDevice()) {\n\t            Dom_1.$$(document.body).addClass('coveo-mobile-device');\n\t        }\n\t        // The definition file for fastclick does not match the way that fast click gets loaded (AMD)\n\t        if (fastclick.attach) {\n\t            fastclick.attach(element);\n\t        }\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, SearchInterface, options);\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(_this.options);\n\t        if (_this.options.hideUntilFirstQuery) {\n\t            _this.showAndHideFirstQueryAnimation();\n\t        }\n\t        _this.root = element;\n\t        _this.queryStateModel = new QueryStateModel_1.QueryStateModel(element);\n\t        _this.componentStateModel = new ComponentStateModel_1.ComponentStateModel(element);\n\t        _this.componentOptionsModel = new ComponentOptionsModel_1.ComponentOptionsModel(element);\n\t        _this.usageAnalytics = _this.initializeAnalytics();\n\t        _this.queryController = new QueryController_1.QueryController(element, _this.options, _this.usageAnalytics, _this);\n\t        new SentryLogger_1.SentryLogger(_this.queryController);\n\t        var eventName = _this.queryStateModel.getEventName(Model_1.Model.eventTypes.preprocess);\n\t        Dom_1.$$(_this.element).on(eventName, function (e, args) { return _this.handlePreprocessQueryStateModel(args); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.buildingQuery, function (e, args) { return _this.handleBuildingQuery(args); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.querySuccess, function (e, args) { return _this.handleQuerySuccess(args); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.queryError, function (e, args) { return _this.handleQueryError(args); });\n\t        if (_this.options.enableHistory) {\n\t            if (!_this.options.useLocalStorageForHistory) {\n\t                new HistoryController_1.HistoryController(element, _window, _this.queryStateModel, _this.queryController);\n\t            }\n\t            else {\n\t                new LocalStorageHistoryController_1.LocalStorageHistoryController(element, _window, _this.queryStateModel, _this.queryController);\n\t            }\n\t        }\n\t        else {\n\t            Dom_1.$$(_this.element).on(InitializationEvents_1.InitializationEvents.restoreHistoryState, function () { return _this.queryStateModel.setMultiple(_this.queryStateModel.defaultAttributes); });\n\t        }\n\t        var eventNameQuickview = _this.queryStateModel.getEventName(Model_1.Model.eventTypes.changeOne + QueryStateModel_1.QueryStateModel.attributesEnum.quickview);\n\t        Dom_1.$$(_this.element).on(eventNameQuickview, function (e, args) { return _this.handleQuickviewChanged(args); });\n\t        // shows the UI, since it's been hidden while loading\n\t        _this.element.style.display = element.style.display || 'block';\n\t        _this.setupDebugInfo();\n\t        _this.isNewDesignAttribute = _this.root.getAttribute('data-design') == 'new';\n\t        _this.responsiveComponents = new ResponsiveComponents_1.ResponsiveComponents();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Displays the first query animation (see the\n\t     * [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option).\n\t     *\n\t     * By default, this is the Coveo logo with a CSS animation (which can be customized with options or CSS).\n\t     */\n\t    SearchInterface.prototype.showWaitAnimation = function () {\n\t        Dom_1.$$(this.options.firstLoadingAnimation).detach();\n\t        Dom_1.$$(this.element).addClass('coveo-waiting-for-first-query');\n\t        this.element.appendChild(this.options.firstLoadingAnimation);\n\t    };\n\t    /**\n\t     * Hides the first query animation (see the\n\t     * [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option).\n\t     *\n\t     * By default, this is the Coveo logo with a CSS animation (which can be customized with options or CSS).\n\t     */\n\t    SearchInterface.prototype.hideWaitAnimation = function () {\n\t        Dom_1.$$(this.options.firstLoadingAnimation).detach();\n\t        Dom_1.$$(this.element).removeClass('coveo-waiting-for-first-query');\n\t    };\n\t    /**\n\t     * Attaches a component to the search interface. This allows the search interface to easily list and iterate over its\n\t     * components.\n\t     * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n\t     * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n\t     * @param component The component instance to attach.\n\t     */\n\t    SearchInterface.prototype.attachComponent = function (type, component) {\n\t        this.getComponents(type).push(component);\n\t    };\n\t    /**\n\t     * Detaches a component from the search interface.\n\t     * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n\t     * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n\t     * @param component The component instance to detach.\n\t     */\n\t    SearchInterface.prototype.detachComponent = function (type, component) {\n\t        var components = this.getComponents(type);\n\t        var index = _.indexOf(components, component);\n\t        if (index > -1) {\n\t            components.splice(index, 1);\n\t        }\n\t    };\n\t    /**\n\t     * Returns the bindings, or environment, for the current component.\n\t     * @returns {IComponentBindings}\n\t     */\n\t    SearchInterface.prototype.getBindings = function () {\n\t        return {\n\t            root: this.root,\n\t            queryStateModel: this.queryStateModel,\n\t            queryController: this.queryController,\n\t            searchInterface: this,\n\t            componentStateModel: this.componentStateModel,\n\t            componentOptionsModel: this.componentOptionsModel,\n\t            usageAnalytics: this.usageAnalytics\n\t        };\n\t    };\n\t    /**\n\t     * Gets all the components of a given type.\n\t     * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n\t     * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n\t     */\n\t    SearchInterface.prototype.getComponents = function (type) {\n\t        if (this.attachedComponents == null) {\n\t            this.attachedComponents = {};\n\t        }\n\t        if (!(type in this.attachedComponents)) {\n\t            this.attachedComponents[type] = [];\n\t        }\n\t        return this.attachedComponents[type];\n\t    };\n\t    /**\n\t     * Indicates whether the search interface is using the new design.\n\t     * This changes the rendering of multiple components.\n\t     */\n\t    SearchInterface.prototype.isNewDesign = function () {\n\t        return this.isNewDesignAttribute;\n\t    };\n\t    SearchInterface.prototype.initializeAnalytics = function () {\n\t        var analyticsRef = BaseComponent_1.BaseComponent.getComponentRef('Analytics');\n\t        if (analyticsRef) {\n\t            return analyticsRef.create(this.element, this.analyticsOptions);\n\t        }\n\t        return new NoopAnalyticsClient_1.NoopAnalyticsClient();\n\t    };\n\t    SearchInterface.prototype.setupDebugInfo = function () {\n\t        var _this = this;\n\t        if (this.options.enableDebugInfo) {\n\t            setTimeout(function () { return new Debug_1.Debug(_this.element, _this.queryController); });\n\t        }\n\t    };\n\t    SearchInterface.prototype.showAndHideFirstQueryAnimation = function () {\n\t        var _this = this;\n\t        this.showWaitAnimation();\n\t        // On first query success or error, wait for call stack to finish, then remove the animation\n\t        Dom_1.$$(this.element).one(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t            _.defer(function () { return _this.hideWaitAnimation(); });\n\t        });\n\t        Dom_1.$$(this.element).one(QueryEvents_1.QueryEvents.queryError, function () {\n\t            _.defer(function () { return _this.hideWaitAnimation(); });\n\t        });\n\t    };\n\t    SearchInterface.prototype.handlePreprocessQueryStateModel = function (args) {\n\t        var tgFromModel = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.tg);\n\t        var tFromModel = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t);\n\t        var tg = tgFromModel;\n\t        var t = tFromModel;\n\t        // if you want to set the tab group\n\t        if (args.tg !== undefined) {\n\t            args.tg = this.getTabGroupId(args.tg);\n\t            if (tg != args.tg) {\n\t                args.t = args.t || QueryStateModel_1.QueryStateModel.defaultAttributes.t;\n\t                args.sort = args.sort || QueryStateModel_1.QueryStateModel.defaultAttributes.sort;\n\t                tg = args.tg;\n\t            }\n\t        }\n\t        if (args.t !== undefined) {\n\t            args.t = this.getTabId(tg, args.t);\n\t            if (t != args.t) {\n\t                args.sort = args.sort || QueryStateModel_1.QueryStateModel.defaultAttributes.sort;\n\t                t = args.t;\n\t            }\n\t        }\n\t        if (args.sort !== undefined) {\n\t            args.sort = this.getSort(t, args.sort);\n\t        }\n\t        if (args.quickview !== undefined) {\n\t            args.quickview = this.getQuickview(args.quickview);\n\t        }\n\t    };\n\t    SearchInterface.prototype.getTabGroupId = function (tabGroupId) {\n\t        var tabGroupRef = BaseComponent_1.BaseComponent.getComponentRef('TabGroup');\n\t        if (tabGroupRef) {\n\t            var tabGroups = this.getComponents(tabGroupRef.ID);\n\t            // check if the tabgroup is correct\n\t            if (tabGroupId != QueryStateModel_1.QueryStateModel.defaultAttributes.tg && _.any(tabGroups, function (tabGroup) { return !tabGroup.disabled && tabGroupId == tabGroup.options.id; })) {\n\t                return tabGroupId;\n\t            }\n\t            // select the first tabGroup\n\t            if (tabGroups.length > 0) {\n\t                return tabGroups[0].options.id;\n\t            }\n\t        }\n\t        return QueryStateModel_1.QueryStateModel.defaultAttributes.tg;\n\t    };\n\t    SearchInterface.prototype.getTabId = function (tabGroupId, tabId) {\n\t        var tabRef = BaseComponent_1.BaseComponent.getComponentRef('Tab');\n\t        var tabGroupRef = BaseComponent_1.BaseComponent.getComponentRef('TabGroup');\n\t        if (tabRef) {\n\t            var tabs = this.getComponents(tabRef.ID);\n\t            if (tabGroupRef) {\n\t                // if has a tabGroup\n\t                if (tabGroupId != QueryStateModel_1.QueryStateModel.defaultAttributes.tg) {\n\t                    var tabGroups = this.getComponents(tabGroupRef.ID);\n\t                    var tabGroup_1 = _.find(tabGroups, function (tabGroup) { return tabGroupId == tabGroup.options.id; });\n\t                    // check if the tabgroup contain this tab\n\t                    if (tabId != QueryStateModel_1.QueryStateModel.defaultAttributes.t && _.any(tabs, function (tab) { return tabId == tab.options.id && tabGroup_1.isElementIncludedInTabGroup(tab.element); })) {\n\t                        return tabId;\n\t                    }\n\t                    // select the first tab in the tabGroup\n\t                    var tab = _.find(tabs, function (tab) { return tabGroup_1.isElementIncludedInTabGroup(tab.element); });\n\t                    if (tab != null) {\n\t                        return tab.options.id;\n\t                    }\n\t                    return QueryStateModel_1.QueryStateModel.defaultAttributes.t;\n\t                }\n\t            }\n\t            // check if the tab is correct\n\t            if (tabId != QueryStateModel_1.QueryStateModel.defaultAttributes.t && _.any(tabs, function (tab) { return tabId == tab.options.id; })) {\n\t                return tabId;\n\t            }\n\t            // select the first tab\n\t            if (tabs.length > 0) {\n\t                return tabs[0].options.id;\n\t            }\n\t        }\n\t        return QueryStateModel_1.QueryStateModel.defaultAttributes.t;\n\t    };\n\t    SearchInterface.prototype.getSort = function (tabId, sortId) {\n\t        var sortRef = BaseComponent_1.BaseComponent.getComponentRef('Sort');\n\t        if (sortRef) {\n\t            var sorts = this.getComponents(sortRef.ID);\n\t            // if has a selected tab\n\t            var tabRef = BaseComponent_1.BaseComponent.getComponentRef('Tab');\n\t            if (tabRef) {\n\t                if (tabId != QueryStateModel_1.QueryStateModel.defaultAttributes.t) {\n\t                    var tabs = this.getComponents(tabRef.ID);\n\t                    var tab_1 = _.find(tabs, function (tab) { return tabId == tab.options.id; });\n\t                    var sortCriteria = tab_1.options.sort;\n\t                    // check if the tab contain this sort\n\t                    if (sortId != QueryStateModel_1.QueryStateModel.defaultAttributes.sort && _.any(sorts, function (sort) { return tab_1.isElementIncludedInTab(sort.element) && sort.match(sortId); })) {\n\t                        return sortId;\n\t                    }\n\t                    else if (sortCriteria != null) {\n\t                        // if not and tab.options.sort is set apply it\n\t                        return sortCriteria.toString();\n\t                    }\n\t                    // select the first sort in the tab\n\t                    var sort = _.find(sorts, function (sort) { return tab_1.isElementIncludedInTab(sort.element); });\n\t                    if (sort != null) {\n\t                        return sort.options.sortCriteria[0].toString();\n\t                    }\n\t                    return QueryStateModel_1.QueryStateModel.defaultAttributes.sort;\n\t                }\n\t            }\n\t            // check if the sort is correct\n\t            if (sortId != QueryStateModel_1.QueryStateModel.defaultAttributes.sort && _.any(sorts, function (sort) { return sort.match(sortId); })) {\n\t                return sortId;\n\t            }\n\t            // select the first sort\n\t            if (sorts.length > 0) {\n\t                return sorts[0].options.sortCriteria[0].toString();\n\t            }\n\t        }\n\t        return QueryStateModel_1.QueryStateModel.defaultAttributes.sort;\n\t    };\n\t    SearchInterface.prototype.getQuickview = function (quickviewId) {\n\t        var quickviewRef = BaseComponent_1.BaseComponent.getComponentRef('Quickview');\n\t        if (quickviewRef) {\n\t            var quickviews = this.getComponents(quickviewRef.ID);\n\t            if (_.any(quickviews, function (quickview) { return quickview.getHashId() == quickviewId; })) {\n\t                return quickviewId;\n\t            }\n\t        }\n\t        return QueryStateModel_1.QueryStateModel.defaultAttributes.quickview;\n\t    };\n\t    SearchInterface.prototype.handleQuickviewChanged = function (args) {\n\t        var quickviewRef = BaseComponent_1.BaseComponent.getComponentRef('Quickview');\n\t        if (quickviewRef) {\n\t            var quickviews = this.getComponents(quickviewRef.ID);\n\t            if (args.value != '') {\n\t                var quickviewsPartition = _.partition(quickviews, function (quickview) { return quickview.getHashId() == args.value; });\n\t                if (quickviewsPartition[0].length != 0) {\n\t                    _.first(quickviewsPartition[0]).open();\n\t                    _.forEach(_.tail(quickviewsPartition[0]), function (quickview) { return quickview.close(); });\n\t                }\n\t                _.forEach(quickviewsPartition[1], function (quickview) { return quickview.close(); });\n\t            }\n\t            else {\n\t                _.forEach(quickviews, function (quickview) {\n\t                    quickview.close();\n\t                });\n\t            }\n\t        }\n\t    };\n\t    SearchInterface.prototype.handleBuildingQuery = function (data) {\n\t        if (this.options.enableDuplicateFiltering) {\n\t            data.queryBuilder.enableDuplicateFiltering = true;\n\t        }\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.pipeline)) {\n\t            data.queryBuilder.pipeline = this.options.pipeline;\n\t        }\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.maximumAge)) {\n\t            data.queryBuilder.maximumAge = this.options.maximumAge;\n\t        }\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.resultsPerPage)) {\n\t            data.queryBuilder.numberOfResults = this.options.resultsPerPage;\n\t        }\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.excerptLength)) {\n\t            data.queryBuilder.excerptLength = this.options.excerptLength;\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.expression)) {\n\t            data.queryBuilder.constantExpression.add(this.options.expression);\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.filterField)) {\n\t            data.queryBuilder.filterField = this.options.filterField;\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.timezone)) {\n\t            data.queryBuilder.timezone = this.options.timezone;\n\t        }\n\t        data.queryBuilder.enableCollaborativeRating = this.options.enableCollaborativeRating;\n\t        data.queryBuilder.enableDuplicateFiltering = this.options.enableDuplicateFiltering;\n\t    };\n\t    SearchInterface.prototype.handleQuerySuccess = function (data) {\n\t        var noResults = data.results.results.length == 0;\n\t        this.toggleSectionState('coveo-no-results', noResults);\n\t        var resultsHeader = Dom_1.$$(this.element).find('.coveo-results-header');\n\t        if (resultsHeader) {\n\t            Dom_1.$$(resultsHeader).removeClass('coveo-query-error');\n\t        }\n\t    };\n\t    SearchInterface.prototype.handleQueryError = function (data) {\n\t        this.toggleSectionState('coveo-no-results');\n\t        var resultsHeader = Dom_1.$$(this.element).find('.coveo-results-header');\n\t        if (resultsHeader) {\n\t            Dom_1.$$(resultsHeader).addClass('coveo-query-error');\n\t        }\n\t    };\n\t    SearchInterface.prototype.toggleSectionState = function (cssClass, toggle) {\n\t        var _this = this;\n\t        if (toggle === void 0) { toggle = true; }\n\t        var facetSection = Dom_1.$$(this.element).find('.coveo-facet-column');\n\t        var resultsSection = Dom_1.$$(this.element).find('.coveo-results-column');\n\t        var resultsHeader = Dom_1.$$(this.element).find('.coveo-results-header');\n\t        var facetSearchs = Dom_1.$$(this.element).findAll('.coveo-facet-search-results');\n\t        if (facetSection) {\n\t            Dom_1.$$(facetSection).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n\t        }\n\t        if (resultsSection) {\n\t            Dom_1.$$(resultsSection).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n\t        }\n\t        if (resultsHeader) {\n\t            Dom_1.$$(resultsHeader).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n\t        }\n\t        if (facetSearchs && facetSearchs.length > 0) {\n\t            _.each(facetSearchs, function (facetSearch) {\n\t                Dom_1.$$(facetSearch).toggleClass(cssClass, toggle && !_this.queryStateModel.atLeastOneFacetIsActive());\n\t            });\n\t        }\n\t    };\n\t    return SearchInterface;\n\t}(RootComponent_1.RootComponent));\n\tSearchInterface.ID = 'SearchInterface';\n\t/**\n\t * The options for the search interface\n\t * @componentOptions\n\t */\n\tSearchInterface.options = {\n\t    /**\n\t     * Specifies whether to allow the end user to navigate search history using the **Back** and **Forward** buttons\n\t     * of the browser.\n\t     *\n\t     * If this options is `true`, the SearchInterface component saves the state of the current query in the hash portion\n\t     * of the URL when the user submits the query.\n\t     *\n\t     * **Example:**\n\t     * > If the `enableHistory` option is `true` and the current query is `foobar`, the SearchInterface component\n\t     * > saves `q=foobar` in the URL hash when the user submits the query.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableHistory: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to enable automatic responsive mode (i.e., automatically placing {@link Facet} and {@link Tab}\n\t     * components in dropdown menus under the search box when the width of the SearchInterface HTML element reaches or\n\t     * falls behind a certain pixel threshold).\n\t     *\n\t     * You might want to set this option to `false` if automatic responsive mode does not suit the specific design needs\n\t     * of your implementation.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > If this option is `true`, you can also specify whether to enable responsive mode for Facet components (see\n\t     * > {@link Facet.options.enableResponsiveMode}) and for Tab components (see\n\t     * > {@link Tab.options.enableResponsiveMode}).\n\t     * >\n\t     * > In addition, you can specify the label you wish to display on the dropdown buttons (see\n\t     * > {@link Facet.options.dropdownHeaderLabel} and {@link Tab.options.dropdownHeaderLabel}).\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableAutomaticResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to save the interface state in the local storage of the browser.\n\t     *\n\t     * You might want to set this option to `true` for reasons specifically important for your implementation.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    useLocalStorageForHistory: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the number of results to display on each page.\n\t     *\n\t     * For more advanced features, see the {@link ResultsPerPage} component.\n\t     *\n\t     * Default value is `10`. Minimum value is `0`.\n\t     */\n\t    resultsPerPage: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 }),\n\t    /**\n\t     * Specifies the number of characters to get at query time to create an excerpt of the result.\n\t     *\n\t     * This setting is global and cannot be modified on a per-result basis.\n\t     *\n\t     * See also the {@link Excerpt} component.\n\t     *\n\t     * Default value is `200`. Minimum value is `0`.\n\t     */\n\t    excerptLength: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 200, min: 0 }),\n\t    /**\n\t     * Specifies an expression to add to each query.\n\t     *\n\t     * You might want to use this options to add a global filter to your entire search interface that applies for all\n\t     * tabs.\n\t     *\n\t     * You should not use this option to address security concerns (it is JavaScript, after all).\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It also is possible to set this option separately for each {@link Tab} component\n\t     * > (see {@link Tab.options.expression}).\n\t     *\n\t     * Default value is `''`.\n\t     */\n\t    expression: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '' }),\n\t    /**\n\t     * Specifies the name of a field to use as a custom filter when executing the query (also referred to as\n\t     * \"folding\").\n\t     *\n\t     * Setting a value for this option causes the index to return only one result having any particular value inside the\n\t     * filter field. Any other matching result is \"folded\" inside the childResults member of each JSON query result.\n\t     *\n\t     * This feature is typically useful with threaded conversations to include only one top-level result per\n\t     * conversation. Thus, the field you specify for this option will typically be value unique to each thread that is\n\t     * shared by all items (e.g., posts, emails, etc) in the thread.\n\t     *\n\t     * For more advanced features, see the {@link Folding} component.\n\t     *\n\t     * Default value is the empty string (`''`).\n\t     */\n\t    filterField: ComponentOptions_1.ComponentOptions.buildFieldOption({ defaultValue: '' }),\n\t    /**\n\t     * Specifies whether to display a loading animation before the first query successfully returns.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > If you do not set this options to `false`, the loading animation will still run until the first query\n\t     * > successfully returns even if the [autoTriggerQuery]{@link SearchInterface.options.autoTriggerQuery} option is\n\t     * `false`.\n\t     *\n\t     * See also the [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    hideUntilFirstQuery: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the animation that you wish to display while your interface is loading.\n\t     *\n\t     * You can either specify the CSS selector of an HTML element that matches the default CSS class\n\t     * (`coveo-first-loading-animation`), or add `-selector` to the markup attribute of this option to specify the CSS\n\t     * selector of an HTML element that matches any CSS class.\n\t     *\n\t     * See also the [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * In this first case, the SearchInterface uses the HTML element whose `id` attribute is `MyAnimation` as the\n\t     * loading animation only if the `class` attribute of this element also matches `coveo-first-loading-animation`.\n\t     * Default loading animation CSS, which you can customize as you see fit, applies to this HTML element.\n\t     * ```html\n\t     * <div class='CoveoSearchInterface' data-first-loading-animation='#MyAnimation'>\n\t     *   <div id='MyAnimation' class='coveo-first-loading-animation'>\n\t     *     <!-- ... -->\n\t     *   </div>\n\t     *   <!-- ... -->\n\t     * </div>\n\t     * ```\n\t     *\n\t     * In this second case, the SearchInterface uses the HTML element whose `id` attribute is `MyAnimation` as the\n\t     * loading animation no matter what CSS class it matches. However, if the `class` attribute of the HTML element does\n\t     * not match `coveo-first-loading-animation`, no default loading animation CSS applies to this HTML element.\n\t     * Normally, you should only use `data-first-loading-animation-selector` if you want to completely override the\n\t     * default loading animation CSS.\n\t     * ```html\n\t     * <div class='CoveoSearchInterface' data-first-loading-animation-selector='#MyAnimation'>\n\t     *   <div id='MyAnimation' class='my-custom-loading-animation-class'>\n\t     *     <!-- ... -->\n\t     *   </div>\n\t     *   <!-- ... -->\n\t     * </div>\n\t     * ```\n\t     *\n\t     * See [Branding Customization](https://developers.coveo.com/x/EoGfAQ).\n\t     *\n\t     * By default, the loading animation is a Coveo CSS animation (which you can customize with CSS).\n\t     */\n\t    firstLoadingAnimation: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({\n\t        childSelector: '.coveo-first-loading-animation',\n\t        defaultFunction: function () { return DomUtils_1.DomUtils.getBasicLoadingAnimation(); }\n\t    }),\n\t    /**\n\t     * Specifies whether to trigger the first query automatically when the page finishes loading.\n\t     *\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > If you set this option to `false` while the\n\t     * > [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option is `true`, the loading\n\t     * > animation will still run until the first query successfully returns.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    autoTriggerQuery: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    endpoint: ComponentOptions_1.ComponentOptions.buildCustomOption(function (endpoint) { return endpoint != null && endpoint in SearchEndpoint_1.SearchEndpoint.endpoints ? SearchEndpoint_1.SearchEndpoint.endpoints[endpoint] : null; }, { defaultFunction: function () { return SearchEndpoint_1.SearchEndpoint.endpoints['default']; } }),\n\t    /**\n\t     * Specifies the timezone in which the search interface is loaded. This allows the index to recognize some special\n\t     * query syntax.\n\t     *\n\t     * This option must have a valid IANA zone info key (AKA the Olson time zone database) as its value.\n\t     *\n\t     * **Example:** `America/New_York`.\n\t     *\n\t     * By default, the search interface allows a library to try to detect the timezone automatically.\n\t     */\n\t    timezone: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultFunction: function () { return jstz.determine().name(); } }),\n\t    /**\n\t     * Specifies whether to enable the feature that allows the end user to ALT + double click any result to open a debug\n\t     * page with detailed information about all properties and fields for that result.\n\t     *\n\t     * Enabling this feature causes no security concern; the entire debug information is always visible to the end user\n\t     * through the browser developer console or by calling the Coveo API directly.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableDebugInfo: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to enable the collaborative rating for the index and to include user ratings on each results\n\t     * in addition to the normal index ranking.\n\t     *\n\t     * If you set this option to `true`, you can leverage it with the {@link ResultRating} component.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableCollaborativeRating: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to filter duplicates in the search results.\n\t     *\n\t     * Setting this option to `true` forces duplicates to not appear in search results. However, {@link Facet} counts\n\t     * still include the duplicates, which can be confusing for the end user. This is a limitation of the index.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * > The end user narrows a query down to a single document that has a duplicate. If the enableDuplicateFiltering\n\t     * > option is `true`, then only one document appears in the search results while the Facet count is still 2.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It also is possible to set this option separately for each {@link Tab} component\n\t     * > (see {@link Tab.options.enableDuplicateFiltering}).\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableDuplicateFiltering: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the name of the query pipeline to use for the queries.\n\t     *\n\t     * You can specify a value for this option if your index is in a Coveo Cloud organization in which pipelines have\n\t     * been created (see [Managing Query Pipelines](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=128)).\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It also is possible to set this option separately for each {@link Tab} component\n\t     * > (see {@link Tab.options.pipeline}).\n\t     *\n\t     * Default value is `undefined`, which means that the search interface uses the default pipeline.\n\t     */\n\t    pipeline: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the maximum age (in milliseconds) that cached query results can have to still be usable as results\n\t     * instead of performing a new query on the index. The cache is located in the Coveo Search API (which resides\n\t     * between the index and the search interface).\n\t     *\n\t     * If cached results that are older than the age you specify in this option are available, the framework will not\n\t     * use these results; it will rather perform a new query on the index.\n\t     *\n\t     * On high-volume public web sites, specifying a higher value for this option can greatly improve query response\n\t     * time at the cost of result freshness.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It also is possible to set this option separately for each {@link Tab} component\n\t     * > (see {@link Tab.options.maximumAge}).\n\t     *\n\t     * Default value is `undefined`, which means that the search interface lets the Coveo Search API determine the\n\t     * maximum cache age. This is typically equivalent to 30 minutes (see\n\t     * [Query Parameters - maximumAge](https://developers.coveo.com/x/iwEv#QueryParameters-maximumAge)).\n\t     */\n\t    maximumAge: ComponentOptions_1.ComponentOptions.buildNumberOption(),\n\t    /**\n\t     * Specifies the search page you wish to navigate to when instantiating a standalone search box interface.\n\t     *\n\t     * Default value is `undefined`, which means that the search interface does not redirect.\n\t     */\n\t    searchPageUri: ComponentOptions_1.ComponentOptions.buildStringOption()\n\t};\n\tSearchInterface.SMALL_INTERFACE_CLASS_NAME = 'coveo-small-search-interface';\n\texports.SearchInterface = SearchInterface;\n\tvar StandaloneSearchInterface = (function (_super) {\n\t    __extends(StandaloneSearchInterface, _super);\n\t    function StandaloneSearchInterface(element, options, analyticsOptions, _window) {\n\t        if (_window === void 0) { _window = window; }\n\t        var _this = _super.call(this, element, ComponentOptions_1.ComponentOptions.initComponentOptions(element, StandaloneSearchInterface, options), analyticsOptions, _window) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.analyticsOptions = analyticsOptions;\n\t        _this._window = _window;\n\t        Dom_1.$$(_this.root).on(QueryEvents_1.QueryEvents.newQuery, function (e, args) { return _this.handleRedirect(e, args); });\n\t        return _this;\n\t    }\n\t    StandaloneSearchInterface.prototype.handleRedirect = function (e, data) {\n\t        var dataToSendOnBeforeRedirect = {\n\t            searchPageUri: this.options.searchPageUri,\n\t            cancel: false\n\t        };\n\t        Dom_1.$$(this.root).trigger(StandaloneSearchInterfaceEvents_1.StandaloneSearchInterfaceEvents.beforeRedirect, dataToSendOnBeforeRedirect);\n\t        if (dataToSendOnBeforeRedirect.cancel) {\n\t            return;\n\t        }\n\t        data.cancel = true;\n\t        if (!this.searchboxIsEmpty() || this.options.redirectIfEmpty) {\n\t            this.redirectToSearchPage(dataToSendOnBeforeRedirect.searchPageUri);\n\t        }\n\t    };\n\t    StandaloneSearchInterface.prototype.redirectToSearchPage = function (searchPage) {\n\t        var _this = this;\n\t        var stateValues = this.queryStateModel.getAttributes();\n\t        var uaCausedBy = this.usageAnalytics.getCurrentEventCause();\n\t        if (uaCausedBy != null) {\n\t            // for legacy reason, searchbox submit were always logged a search from link in an external search box.\n\t            // transform them if that's what we hit.\n\t            if (uaCausedBy == AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit.name) {\n\t                uaCausedBy = AnalyticsActionListMeta_1.analyticsActionCauseList.searchFromLink.name;\n\t            }\n\t            stateValues['firstQueryCause'] = uaCausedBy;\n\t        }\n\t        var uaMeta = this.usageAnalytics.getCurrentEventMeta();\n\t        if (uaMeta != null) {\n\t            stateValues['firstQueryMeta'] = uaMeta;\n\t        }\n\t        var link = document.createElement('a');\n\t        link.href = searchPage;\n\t        link.href = link.href; // IE11 needs this to correctly fill the properties that are used below.\n\t        var pathname = link.pathname.indexOf('/') == 0 ? link.pathname : '/' + link.pathname; // IE11 does not add a leading slash to this property.\n\t        var hash = link.hash ? link.hash + '&' : '#';\n\t        // By using a setTimeout, we allow other possible code related to the search box / magic box time to complete.\n\t        // eg: onblur of the magic box.\n\t        setTimeout(function () {\n\t            _this._window.location.href = link.protocol + \"//\" + link.host + pathname + link.search + hash + HashUtils_1.HashUtils.encodeValues(stateValues);\n\t        }, 0);\n\t    };\n\t    StandaloneSearchInterface.prototype.searchboxIsEmpty = function () {\n\t        return Utils_1.Utils.isEmptyString(this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q));\n\t    };\n\t    return StandaloneSearchInterface;\n\t}(SearchInterface));\n\tStandaloneSearchInterface.ID = 'StandaloneSearchInterface';\n\tStandaloneSearchInterface.options = {\n\t    redirectIfEmpty: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\texports.StandaloneSearchInterface = StandaloneSearchInterface;\n\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar TemplateCache_1 = __webpack_require__(112);\n\tvar TemplateList_1 = __webpack_require__(120);\n\tvar UnderscoreTemplate_1 = __webpack_require__(116);\n\tvar HtmlTemplate_1 = __webpack_require__(119);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\t;\n\tvar ComponentOptionsType;\n\t(function (ComponentOptionsType) {\n\t    ComponentOptionsType[ComponentOptionsType[\"BOOLEAN\"] = 0] = \"BOOLEAN\";\n\t    ComponentOptionsType[ComponentOptionsType[\"NUMBER\"] = 1] = \"NUMBER\";\n\t    ComponentOptionsType[ComponentOptionsType[\"STRING\"] = 2] = \"STRING\";\n\t    ComponentOptionsType[ComponentOptionsType[\"LOCALIZED_STRING\"] = 3] = \"LOCALIZED_STRING\";\n\t    ComponentOptionsType[ComponentOptionsType[\"LIST\"] = 4] = \"LIST\";\n\t    ComponentOptionsType[ComponentOptionsType[\"SELECTOR\"] = 5] = \"SELECTOR\";\n\t    ComponentOptionsType[ComponentOptionsType[\"CHILD_HTML_ELEMENT\"] = 6] = \"CHILD_HTML_ELEMENT\";\n\t    ComponentOptionsType[ComponentOptionsType[\"TEMPLATE\"] = 7] = \"TEMPLATE\";\n\t    ComponentOptionsType[ComponentOptionsType[\"FIELD\"] = 8] = \"FIELD\";\n\t    ComponentOptionsType[ComponentOptionsType[\"FIELDS\"] = 9] = \"FIELDS\";\n\t    ComponentOptionsType[ComponentOptionsType[\"ICON\"] = 10] = \"ICON\";\n\t    ComponentOptionsType[ComponentOptionsType[\"COLOR\"] = 11] = \"COLOR\";\n\t    ComponentOptionsType[ComponentOptionsType[\"OBJECT\"] = 12] = \"OBJECT\";\n\t    ComponentOptionsType[ComponentOptionsType[\"QUERY\"] = 13] = \"QUERY\";\n\t    ComponentOptionsType[ComponentOptionsType[\"HELPER\"] = 14] = \"HELPER\";\n\t    ComponentOptionsType[ComponentOptionsType[\"LONG_STRING\"] = 15] = \"LONG_STRING\";\n\t    ComponentOptionsType[ComponentOptionsType[\"JSON\"] = 16] = \"JSON\";\n\t    ComponentOptionsType[ComponentOptionsType[\"JAVASCRIPT\"] = 17] = \"JAVASCRIPT\";\n\t    ComponentOptionsType[ComponentOptionsType[\"NONE\"] = 18] = \"NONE\";\n\t})(ComponentOptionsType = exports.ComponentOptionsType || (exports.ComponentOptionsType = {}));\n\tvar camelCaseToHyphenRegex = /([A-Z])|\\W+(\\w)/g;\n\tvar fieldsSeperator = /\\s*,\\s*/;\n\tvar localizer = /([a-zA-Z\\-]+)\\s*:\\s*(([^,]|,\\s*(?!([a-zA-Z\\-]+)\\s*:))+)/g;\n\t/**\n\t * This static class is used to initialize component options.\n\t *\n\t * Typically, each {@link Component} that exposes a set of options will contains a static `options` property,\n\t *\n\t * This property will \"build\" the options based on their type.\n\t */\n\tvar ComponentOptions = (function () {\n\t    function ComponentOptions() {\n\t    }\n\t    /**\n\t     * Build a boolean option.\n\t     *\n\t     * A boolean option can be \"true\" or \"false\" in the markup.\n\t     *\n\t     * `data-foo=\"true\"` or `data-foo=\"false\"`.\n\t     * @param optionArgs\n\t     * @returns {boolean}\n\t     */\n\t    ComponentOptions.buildBooleanOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.BOOLEAN, ComponentOptions.loadBooleanOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a number option.\n\t     *\n\t     * A number option can be an integer or a float in the markup.\n\t     *\n\t     * `data-foo=\"1\"` or `data-foo=\"1.5\"`.\n\t     */\n\t    ComponentOptions.buildNumberOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.NUMBER, ComponentOptions.loadNumberOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a string option.\n\t     *\n\t     * A string option can be any arbitrary string in the markup.\n\t     *\n\t     * `data-foo=\"bar\"`.\n\t     */\n\t    ComponentOptions.buildStringOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.STRING, ComponentOptions.loadStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build an icon option.\n\t     *\n\t     * Normally, this only means that it will build a string that matches a CSS class for an icon.\n\t     *\n\t     * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n\t     *\n\t     * `data-foo=\"coveo-sprites-user\"` or `data-foo=\"coveo-sprites-database\"`.\n\t     */\n\t    ComponentOptions.buildIconOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.ICON, ComponentOptions.loadStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a color option.\n\t     *\n\t     * Normally, this only means that it will build a string that matches a CSS color.\n\t     *\n\t     * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n\t     *\n\t     * `data-foo=\"coveo-sprites-user\"` or `data-foo=\"coveo-sprites-database\"`.\n\t     */\n\t    ComponentOptions.buildColorOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.COLOR, ComponentOptions.loadStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a helper option.\n\t     *\n\t     * Normally, this only means that it will build a string that matches the name of a template helper.\n\t     *\n\t     * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n\t     *\n\t     * `data-foo=\"date\"` or `data-foo=\"dateTime\"`.\n\t     */\n\t    ComponentOptions.buildHelperOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.HELPER, ComponentOptions.loadStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a JSON option.\n\t     *\n\t     * Normally, this only means that it will build a stringified JSON.\n\t     *\n\t     * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n\t     *\n\t     * `data-foo='{\"bar\" : \"baz\"}'`.\n\t     */\n\t    ComponentOptions.buildJsonOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.JSON, ComponentOptions.loadStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a localized string option.\n\t     *\n\t     * A localized string option can be any arbitrary string.\n\t     *\n\t     * The framework, when parsing the value, will try to load the localization for that word if it is available.\n\t     *\n\t     * If it is not available, it will return the non-localized option.\n\t     *\n\t     * This should be used for options that will be rendered directly to the end users.\n\t     *\n\t     * `data-foo=\"bar\"`.\n\t     */\n\t    ComponentOptions.buildLocalizedStringOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.LOCALIZED_STRING, ComponentOptions.loadLocalizedStringOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build a field option.\n\t     *\n\t     * A field option will validate that the field has a valid name. This means that the string has to start with @.\n\t     *\n\t     * `data-foo=\"@bar\"`.\n\t     */\n\t    ComponentOptions.buildFieldOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.FIELD, ComponentOptions.loadFieldOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build an array of field option.\n\t     *\n\t     * As with all options that expect an array, you should use commas to delimit the different values.\n\t     *\n\t     * `data-foo=\"@bar,@baz\"`.\n\t     */\n\t    ComponentOptions.buildFieldsOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.FIELDS, ComponentOptions.loadFieldsOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build an array of string option.\n\t     *\n\t     * As with all options that expect an array, you should use commas to delimit the different values.\n\t     *\n\t     * `data-foo=\"bar,baz\"`.\n\t     */\n\t    ComponentOptions.buildListOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.LIST, ComponentOptions.loadListOption, optionArgs);\n\t    };\n\t    /**\n\t     * Build an option that allow to select an HTMLElement.\n\t     *\n\t     * The option accept a CSS selector that will allow to find the required HTMLElement.\n\t     *\n\t     * It can be a class selector or an ID selector.\n\t     *\n\t     * `data-foo-selector=\".bar\" or data-foo-selector=\"#bar\"`.\n\t     */\n\t    ComponentOptions.buildSelectorOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.SELECTOR, ComponentOptions.loadSelectorOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildChildHtmlElementOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.CHILD_HTML_ELEMENT, ComponentOptions.loadChildHtmlElementOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildTemplateOption = function (optionArgs) {\n\t        return ComponentOptions.buildOption(ComponentOptionsType.TEMPLATE, ComponentOptions.loadTemplateOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildCustomOption = function (converter, optionArgs) {\n\t        var loadOption = function (element, name, option) {\n\t            var stringvalue = ComponentOptions.loadStringOption(element, name, option);\n\t            if (!Utils_1.Utils.isNullOrEmptyString(stringvalue)) {\n\t                return converter(stringvalue);\n\t            }\n\t        };\n\t        return ComponentOptions.buildOption(ComponentOptionsType.STRING, loadOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildCustomListOption = function (converter, optionArgs) {\n\t        var loadOption = function (element, name, option) {\n\t            var stringvalue = ComponentOptions.loadListOption(element, name, option);\n\t            return converter(stringvalue);\n\t        };\n\t        return ComponentOptions.buildOption(ComponentOptionsType.LIST, loadOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildObjectOption = function (optionArgs) {\n\t        var loadOption = function (element, name, option) {\n\t            var keys = _.keys(optionArgs.subOptions);\n\t            var scopedOptions = {};\n\t            var scopedValues = {};\n\t            for (var i = 0; i < keys.length; i++) {\n\t                var key = keys[i];\n\t                var scopedkey = ComponentOptions.mergeCamelCase(name, key);\n\t                scopedOptions[scopedkey] = optionArgs.subOptions[key];\n\t            }\n\t            ComponentOptions.initOptions(element, scopedOptions, scopedValues);\n\t            var resultValues = {};\n\t            var resultFound = false;\n\t            for (var i = 0; i < keys.length; i++) {\n\t                var key = keys[i];\n\t                var scopedkey = ComponentOptions.mergeCamelCase(name, key);\n\t                if (scopedValues[scopedkey] != null) {\n\t                    resultValues[key] = scopedValues[scopedkey];\n\t                    resultFound = true;\n\t                }\n\t            }\n\t            return resultFound ? resultValues : null;\n\t        };\n\t        return ComponentOptions.buildOption(ComponentOptionsType.OBJECT, loadOption, optionArgs);\n\t    };\n\t    ComponentOptions.buildOption = function (type, load, optionArg) {\n\t        if (optionArg === void 0) { optionArg = {}; }\n\t        var option = optionArg;\n\t        option.type = type;\n\t        option.load = load;\n\t        return option;\n\t    };\n\t    ComponentOptions.attrNameFromName = function (name, optionArgs) {\n\t        if (optionArgs && optionArgs.attrName) {\n\t            return optionArgs.attrName;\n\t        }\n\t        if (name) {\n\t            return 'data-' + ComponentOptions.camelCaseToHyphen(name);\n\t        }\n\t        return name;\n\t    };\n\t    ComponentOptions.camelCaseToHyphen = function (name) {\n\t        return name.replace(camelCaseToHyphenRegex, '-$1$2').toLowerCase();\n\t    };\n\t    ComponentOptions.mergeCamelCase = function (parent, name) {\n\t        return parent + name.substr(0, 1).toUpperCase() + name.substr(1);\n\t    };\n\t    /**\n\t     * The main function that will load and parse the options for the current given element.\n\t     *\n\t     * Every component will call this function in their constructor.\n\t     * @param element The element on which the options should be parsed\n\t     * @param component The component class for which the options should be parsed. For example : Searchbox, Facet, etc.\n\t     * @param values The optional options which should be merged with the options set in the markup.\n\t     */\n\t    ComponentOptions.initComponentOptions = function (element, component, values) {\n\t        return ComponentOptions.initOptions(element, component.options, values, component.ID);\n\t    };\n\t    ComponentOptions.initOptions = function (element, options, values, componentID) {\n\t        var logger = new Logger_1.Logger(this);\n\t        if (values == null) {\n\t            values = {};\n\t        }\n\t        var names = _.keys(options);\n\t        for (var i = 0; i < names.length; i++) {\n\t            var name_1 = names[i];\n\t            var optionDefinition = options[name_1];\n\t            var value = void 0;\n\t            var loadFromAttribute = optionDefinition.load;\n\t            if (loadFromAttribute != null) {\n\t                value = loadFromAttribute(element, name_1, optionDefinition);\n\t                if (value && optionDefinition.deprecated) {\n\t                    logger.warn(componentID + '.' + name_1 + ' : ' + optionDefinition.deprecated);\n\t                }\n\t            }\n\t            if (Utils_1.Utils.isNullOrUndefined(value) && values[name_1] != undefined) {\n\t                value = values[name_1];\n\t            }\n\t            if (value == null && values[name_1] == undefined) {\n\t                if (optionDefinition.defaultValue != null) {\n\t                    if (optionDefinition.type == ComponentOptionsType.LIST) {\n\t                        value = _.extend([], optionDefinition.defaultValue);\n\t                    }\n\t                    else if (optionDefinition.type == ComponentOptionsType.OBJECT) {\n\t                        value = _.extend({}, optionDefinition.defaultValue);\n\t                    }\n\t                    else {\n\t                        value = optionDefinition.defaultValue;\n\t                    }\n\t                }\n\t                else if (optionDefinition.defaultFunction != null) {\n\t                    value = optionDefinition.defaultFunction(element);\n\t                }\n\t            }\n\t            if (value != null) {\n\t                if (optionDefinition.validator) {\n\t                    var isValid = optionDefinition.validator(value);\n\t                    if (!isValid) {\n\t                        logger.warn(componentID + \" .\" + name_1 + \" has invalid value :  \" + value);\n\t                        if (optionDefinition.required) {\n\t                            logger.error(componentID + \" .\" + name_1 + \" is required and has an invalid value : \" + value + \". ***THIS COMPONENT WILL NOT WORK***\");\n\t                        }\n\t                        delete values[name_1];\n\t                        continue;\n\t                    }\n\t                }\n\t                if (optionDefinition.type == ComponentOptionsType.OBJECT && values[name_1] != null) {\n\t                    values[name_1] = _.extend(values[name_1], value);\n\t                }\n\t                else if (optionDefinition.type == ComponentOptionsType.LOCALIZED_STRING) {\n\t                    values[name_1] = Strings_1.l(value);\n\t                }\n\t                else {\n\t                    values[name_1] = value;\n\t                }\n\t            }\n\t        }\n\t        for (var i = 0; i < names.length; i++) {\n\t            var name_2 = names[i];\n\t            var optionDefinition = options[name_2];\n\t            if (optionDefinition.postProcessing) {\n\t                values[name_2] = optionDefinition.postProcessing(values[name_2], values);\n\t            }\n\t        }\n\t        return values;\n\t    };\n\t    ComponentOptions.loadStringOption = function (element, name, option) {\n\t        return element.getAttribute(ComponentOptions.attrNameFromName(name, option)) || ComponentOptions.getAttributeFromAlias(element, option);\n\t    };\n\t    ComponentOptions.loadFieldOption = function (element, name, option) {\n\t        var field = ComponentOptions.loadStringOption(element, name, option);\n\t        Assert_1.Assert.check(!Utils_1.Utils.isNonEmptyString(field) || Utils_1.Utils.isCoveoField(field), field + ' is not a valid field');\n\t        return field;\n\t    };\n\t    ComponentOptions.loadFieldsOption = function (element, name, option) {\n\t        var fieldsAttr = ComponentOptions.loadStringOption(element, name, option);\n\t        if (fieldsAttr == null) {\n\t            return null;\n\t        }\n\t        var fields = fieldsAttr.split(fieldsSeperator);\n\t        _.each(fields, function (field) {\n\t            Assert_1.Assert.check(Utils_1.Utils.isCoveoField(field), field + ' is not a valid field');\n\t        });\n\t        return fields;\n\t    };\n\t    ComponentOptions.loadLocalizedStringOption = function (element, name, option) {\n\t        var attributeValue = ComponentOptions.loadStringOption(element, name, option);\n\t        var locale = String['locale'] || String['defaultLocale'];\n\t        if (locale != null && attributeValue != null) {\n\t            var localeParts_1 = locale.toLowerCase().split('-');\n\t            var locales = _.map(localeParts_1, function (part, i) { return localeParts_1.slice(0, i + 1).join('-'); });\n\t            var localizers = attributeValue.match(localizer);\n\t            if (localizers != null) {\n\t                for (var i = 0; i < localizers.length; i++) {\n\t                    var groups = localizer.exec(localizers[i]);\n\t                    if (groups != null) {\n\t                        var lang = groups[1].toLowerCase();\n\t                        if (_.contains(locales, lang)) {\n\t                            return groups[2].replace(/^\\s+|\\s+$/g, '');\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t            return attributeValue != null ? attributeValue.toLocaleString() : null;\n\t        }\n\t        return attributeValue;\n\t    };\n\t    ComponentOptions.loadNumberOption = function (element, name, option) {\n\t        var attributeValue = ComponentOptions.loadStringOption(element, name, option);\n\t        if (attributeValue == null) {\n\t            return null;\n\t        }\n\t        var numberValue = option.float === true ? Utils_1.Utils.parseFloatIfNotUndefined(attributeValue) : Utils_1.Utils.parseIntIfNotUndefined(attributeValue);\n\t        if (option.min != null && option.min > numberValue) {\n\t            new Logger_1.Logger(element).info(\"Value for option \" + name + \" is less than the possible minimum (Value is \" + numberValue + \", minimum is \" + option.min + \"). It has been forced to it's minimum value.\", option);\n\t            numberValue = option.min;\n\t        }\n\t        if (option.max != null && option.max < numberValue) {\n\t            new Logger_1.Logger(element).info(\"Value for option \" + name + \" is higher than the possible maximum (Value is \" + numberValue + \", maximum is \" + option.max + \"). It has been forced to it's maximum value.\", option);\n\t            numberValue = option.max;\n\t        }\n\t        return numberValue;\n\t    };\n\t    ComponentOptions.loadBooleanOption = function (element, name, option) {\n\t        return Utils_1.Utils.parseBooleanIfNotUndefined(ComponentOptions.loadStringOption(element, name, option));\n\t    };\n\t    ComponentOptions.loadListOption = function (element, name, option) {\n\t        var separator = option.separator || /\\s*,\\s*/;\n\t        var attributeValue = ComponentOptions.loadStringOption(element, name, option);\n\t        return Utils_1.Utils.isNonEmptyString(attributeValue) ? attributeValue.split(separator) : null;\n\t    };\n\t    ComponentOptions.loadEnumOption = function (element, name, option, _enum) {\n\t        var enumAsString = ComponentOptions.loadStringOption(element, name, option);\n\t        return enumAsString != null ? _enum[enumAsString] : null;\n\t    };\n\t    ComponentOptions.loadSelectorOption = function (element, name, option, doc) {\n\t        if (doc === void 0) { doc = document; }\n\t        var attributeValue = ComponentOptions.loadStringOption(element, name, option);\n\t        return Utils_1.Utils.isNonEmptyString(attributeValue) ? doc.querySelector(attributeValue) : null;\n\t    };\n\t    ComponentOptions.loadChildHtmlElementOption = function (element, name, option, doc) {\n\t        if (doc === void 0) { doc = document; }\n\t        var htmlElement;\n\t        // Attribute: selector\n\t        var selectorAttr = option.selectorAttr || ComponentOptions.attrNameFromName(name, option) + '-selector';\n\t        var selector = element.getAttribute(selectorAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n\t        if (selector != null) {\n\t            htmlElement = doc.body.querySelector(selector);\n\t        }\n\t        // Child\n\t        if (htmlElement == null) {\n\t            var childSelector = option.childSelector;\n\t            if (childSelector == null) {\n\t                childSelector = '.' + name;\n\t            }\n\t            htmlElement = ComponentOptions.loadChildHtmlElementFromSelector(element, childSelector);\n\t        }\n\t        return htmlElement;\n\t    };\n\t    ComponentOptions.loadChildHtmlElementFromSelector = function (element, selector) {\n\t        Assert_1.Assert.isNonEmptyString(selector);\n\t        if (Dom_1.$$(element).is(selector)) {\n\t            return element;\n\t        }\n\t        return Dom_1.$$(element).find(selector);\n\t    };\n\t    ComponentOptions.loadChildrenHtmlElementFromSelector = function (element, selector) {\n\t        Assert_1.Assert.isNonEmptyString(selector);\n\t        return Dom_1.$$(element).findAll(selector);\n\t    };\n\t    ComponentOptions.loadTemplateOption = function (element, name, option, doc) {\n\t        if (doc === void 0) { doc = document; }\n\t        var template;\n\t        // Attribute: template selector\n\t        var selectorAttr = option.selectorAttr || ComponentOptions.attrNameFromName(name, option) + '-selector';\n\t        var selector = element.getAttribute(selectorAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n\t        if (selector != null) {\n\t            var templateElement = doc.querySelector(selector);\n\t            if (templateElement != null) {\n\t                template = ComponentOptions.createResultTemplateFromElement(templateElement);\n\t            }\n\t        }\n\t        // Attribute: template id\n\t        if (template == null) {\n\t            var idAttr = option.idAttr || ComponentOptions.attrNameFromName(name, option) + '-id';\n\t            var id = element.getAttribute(idAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n\t            if (id != null) {\n\t                template = ComponentOptions.loadResultTemplateFromId(id);\n\t            }\n\t        }\n\t        // Child\n\t        if (template == null) {\n\t            var childSelector = option.childSelector;\n\t            if (childSelector == null) {\n\t                childSelector = '.' + name.replace(/([A-Z])/g, '-$1').toLowerCase();\n\t            }\n\t            template = ComponentOptions.loadChildrenResultTemplateFromSelector(element, childSelector);\n\t        }\n\t        return template;\n\t    };\n\t    ComponentOptions.loadResultTemplateFromId = function (templateId) {\n\t        return Utils_1.Utils.isNonEmptyString(templateId) ? TemplateCache_1.TemplateCache.getTemplate(templateId) : null;\n\t    };\n\t    ComponentOptions.loadChildrenResultTemplateFromSelector = function (element, selector) {\n\t        var foundElements = ComponentOptions.loadChildrenHtmlElementFromSelector(element, selector);\n\t        if (foundElements.length > 0) {\n\t            return new TemplateList_1.TemplateList(_.compact(_.map(foundElements, function (element) { return ComponentOptions.createResultTemplateFromElement(element); })));\n\t        }\n\t        return null;\n\t    };\n\t    ComponentOptions.findParentScrolling = function (element, doc) {\n\t        if (doc === void 0) { doc = document; }\n\t        while (element != doc && element != null) {\n\t            if (ComponentOptions.isElementScrollable(element)) {\n\t                if (element.tagName.toLowerCase() !== 'body') {\n\t                    return element;\n\t                }\n\t                return window;\n\t            }\n\t            element = element.parentElement;\n\t        }\n\t        return window;\n\t    };\n\t    ComponentOptions.isElementScrollable = function (element) {\n\t        return Dom_1.$$(element).css('overflow-y') == 'scroll' || element.style.overflowY == 'scroll';\n\t    };\n\t    ComponentOptions.getAttributeFromAlias = function (element, option) {\n\t        if (option.alias) {\n\t            return element.getAttribute(ComponentOptions.attrNameFromName(option.alias));\n\t        }\n\t    };\n\t    ComponentOptions.createResultTemplateFromElement = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        var type = element.getAttribute('type');\n\t        var mimeTypes = 'You must specify the type of template. Valid values are :' +\n\t            ' ' + UnderscoreTemplate_1.UnderscoreTemplate.mimeTypes.toString() +\n\t            ' ' + HtmlTemplate_1.HtmlTemplate.mimeTypes.toString();\n\t        Assert_1.Assert.check(Utils_1.Utils.isNonEmptyString(type), mimeTypes);\n\t        if (_.indexOf(UnderscoreTemplate_1.UnderscoreTemplate.mimeTypes, type.toLowerCase()) != -1) {\n\t            return UnderscoreTemplate_1.UnderscoreTemplate.create(element);\n\t        }\n\t        else if (_.indexOf(HtmlTemplate_1.HtmlTemplate.mimeTypes, type.toLowerCase()) != -1) {\n\t            return new HtmlTemplate_1.HtmlTemplate(element);\n\t        }\n\t        else {\n\t            Assert_1.Assert.fail('Cannot guess template type from attribute: ' + type + '. Valid values are ' + mimeTypes);\n\t            return undefined;\n\t        }\n\t    };\n\t    return ComponentOptions;\n\t}());\n\texports.ComponentOptions = ComponentOptions;\n\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar UnderscoreTemplate_1 = __webpack_require__(116);\n\tvar HtmlTemplate_1 = __webpack_require__(119);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * Holds a reference to all template available in the framework\n\t */\n\tvar TemplateCache = (function () {\n\t    function TemplateCache() {\n\t    }\n\t    /**\n\t     * Register a new template in the framework, which will be available to render any results.\n\t     * @param name\n\t     * @param template\n\t     * @param publicTemplate\n\t     * @param defaultTemplate\n\t     * @param pageTemplate\n\t     */\n\t    TemplateCache.registerTemplate = function (name, template, publicTemplate, defaultTemplate, resultListTemplate) {\n\t        if (publicTemplate === void 0) { publicTemplate = true; }\n\t        if (defaultTemplate === void 0) { defaultTemplate = false; }\n\t        if (resultListTemplate === void 0) { resultListTemplate = false; }\n\t        Assert_1.Assert.isNonEmptyString(name);\n\t        Assert_1.Assert.exists(template);\n\t        if (!(template instanceof Template_1.Template)) {\n\t            template = new Template_1.Template(template);\n\t        }\n\t        if (template.name == null) {\n\t            template.name = name;\n\t        }\n\t        TemplateCache.templates[name] = template;\n\t        if (publicTemplate && !_.contains(TemplateCache.templateNames, name)) {\n\t            TemplateCache.templateNames.push(name);\n\t        }\n\t        if (resultListTemplate && !_.contains(TemplateCache.resultListTemplateNames, name)) {\n\t            TemplateCache.resultListTemplateNames.push(name);\n\t        }\n\t        if (defaultTemplate) {\n\t            TemplateCache.defaultTemplates[name] = template;\n\t        }\n\t    };\n\t    /**\n\t     * Remove the given template from the cache.\n\t     * @param name\n\t     * @param string\n\t     */\n\t    TemplateCache.unregisterTemplate = function (name) {\n\t        Assert_1.Assert.isNonEmptyString(name);\n\t        if (TemplateCache.templates[name] != undefined) {\n\t            delete TemplateCache.templates[name];\n\t        }\n\t        if (TemplateCache.defaultTemplates[name] != undefined) {\n\t            delete TemplateCache.defaultTemplates[name];\n\t        }\n\t    };\n\t    /**\n\t     * Return a template by its name/ID.\n\t     * @param name\n\t     * @returns {Template}\n\t     */\n\t    TemplateCache.getTemplate = function (name) {\n\t        // In some scenarios, the template we're trying to load might be somewhere in the page\n\t        // but we could not load it \"normally\" on page load (eg : UI was loaded with require js)\n\t        // Try a last ditch effort to scan the needed templates.\n\t        if (!TemplateCache.templates[name]) {\n\t            TemplateCache.scanAndRegisterTemplates();\n\t        }\n\t        Assert_1.Assert.exists(TemplateCache.templates[name]);\n\t        return TemplateCache.templates[name];\n\t    };\n\t    /**\n\t     * Get all templates currently registered in the framework.\n\t     * @returns {{}}\n\t     */\n\t    TemplateCache.getTemplates = function () {\n\t        return TemplateCache.templates;\n\t    };\n\t    /**\n\t     * Get all templates name currently registered in the framework.\n\t     * @returns {string[]}\n\t     */\n\t    TemplateCache.getTemplateNames = function () {\n\t        return TemplateCache.templateNames;\n\t    };\n\t    /**\n\t     * Get all page templates name currently registered in the framework.\n\t     * @returns {string[]}\n\t     */\n\t    TemplateCache.getResultListTemplateNames = function () {\n\t        return TemplateCache.resultListTemplateNames;\n\t    };\n\t    /**\n\t     * Get all the \"default\" templates in the framework.\n\t     * @returns {string[]}\n\t     */\n\t    TemplateCache.getDefaultTemplates = function () {\n\t        return _.keys(TemplateCache.defaultTemplates);\n\t    };\n\t    /**\n\t     * Get a default template by name.\n\t     * @param name The name of the queried template\n\t     */\n\t    TemplateCache.getDefaultTemplate = function (name) {\n\t        Assert_1.Assert.exists(TemplateCache.defaultTemplates[name]);\n\t        return TemplateCache.defaultTemplates[name];\n\t    };\n\t    TemplateCache.scanAndRegisterTemplates = function () {\n\t        // Here we take care not to scan for templates for which the base library\n\t        // is not available. Case in point: someone was using the JS UI on a page\n\t        // that was also using Handlebars, but our code was initialized before\n\t        // the Handlebars library (loaded through AMD).\n\t        if (UnderscoreTemplate_1.UnderscoreTemplate.isLibraryAvailable()) {\n\t            TemplateCache.scanAndRegisterUnderscoreTemplates();\n\t        }\n\t        TemplateCache.scanAndRegisterHtmlTemplates();\n\t    };\n\t    TemplateCache.scanAndRegisterUnderscoreTemplates = function () {\n\t        _.each(UnderscoreTemplate_1.UnderscoreTemplate.mimeTypes, function (type) {\n\t            var scriptList = document.querySelectorAll(\"script[id][type='\" + type + \"']\");\n\t            var i = scriptList.length;\n\t            var arr = new Array(i);\n\t            while (i--) {\n\t                arr[i] = scriptList.item(i);\n\t            }\n\t            _.each(arr, function (elem) {\n\t                var template = new UnderscoreTemplate_1.UnderscoreTemplate(elem);\n\t                TemplateCache.registerTemplate(elem.getAttribute('id'), template);\n\t            });\n\t        });\n\t    };\n\t    TemplateCache.scanAndRegisterHtmlTemplates = function () {\n\t        _.each(HtmlTemplate_1.HtmlTemplate.mimeTypes, function (type) {\n\t            var scriptList = document.querySelectorAll(\"script[id][type='\" + type + \"']\");\n\t            var i = scriptList.length;\n\t            var arr = new Array(i);\n\t            while (i--) {\n\t                arr[i] = scriptList.item(i);\n\t            }\n\t            _.each(arr, function (elem) {\n\t                var template = new HtmlTemplate_1.HtmlTemplate(elem);\n\t                TemplateCache.registerTemplate(elem.getAttribute('id'), template);\n\t            });\n\t        });\n\t    };\n\t    return TemplateCache;\n\t}());\n\tTemplateCache.templates = {};\n\tTemplateCache.templateNames = [];\n\tTemplateCache.resultListTemplateNames = [];\n\tTemplateCache.defaultTemplates = {};\n\texports.TemplateCache = TemplateCache;\n\tdocument.addEventListener('DOMContentLoaded', function () {\n\t    TemplateCache.scanAndRegisterTemplates();\n\t});\n\n\n/***/ },\n/* 113 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar TemplateConditionEvaluator_1 = __webpack_require__(114);\n\tvar TemplateFieldsEvaluator_1 = __webpack_require__(115);\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar _ = __webpack_require__(16);\n\tvar DefaultInstantiateTemplateOptions = (function () {\n\t    function DefaultInstantiateTemplateOptions() {\n\t        this.currentLayout = null;\n\t        this.checkCondition = true;\n\t        this.wrapInDiv = true;\n\t        this.responsiveComponents = new ResponsiveComponents_1.ResponsiveComponents();\n\t    }\n\t    DefaultInstantiateTemplateOptions.prototype.get = function () {\n\t        return {\n\t            currentLayout: this.currentLayout,\n\t            checkCondition: this.checkCondition,\n\t            wrapInDiv: this.wrapInDiv,\n\t            responsiveComponents: this.responsiveComponents\n\t        };\n\t    };\n\t    DefaultInstantiateTemplateOptions.prototype.merge = function (other) {\n\t        if (other) {\n\t            return _.extend(this.get(), other);\n\t        }\n\t        return this.get();\n\t    };\n\t    return DefaultInstantiateTemplateOptions;\n\t}());\n\texports.DefaultInstantiateTemplateOptions = DefaultInstantiateTemplateOptions;\n\tvar Template = (function () {\n\t    function Template(dataToString) {\n\t        this.dataToString = dataToString;\n\t        this.logger = new Logger_1.Logger(this);\n\t    }\n\t    Template.prototype.instantiateToString = function (object, instantiateOptions) {\n\t        if (instantiateOptions === void 0) { instantiateOptions = new DefaultInstantiateTemplateOptions(); }\n\t        if (this.dataToString) {\n\t            if (instantiateOptions.checkCondition === false) {\n\t                return this.dataToString(object);\n\t            }\n\t            // Should not happen but...\n\t            // Normally, top level call from sub-class will have already created a DefaultInstantiateTemplateOptions\n\t            // and merged down\n\t            if (instantiateOptions.responsiveComponents == null) {\n\t                instantiateOptions.responsiveComponents = new ResponsiveComponents_1.ResponsiveComponents();\n\t            }\n\t            // Mobile/tablet/desktop checks are only for \"hard\" set value (triple equal)\n\t            // If it's undefined, we skip those checks, and we assume the template works correctly for any given screen size\n\t            if (this.mobile === true && !instantiateOptions.responsiveComponents.isSmallScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is optimized for small screen width', this);\n\t                return null;\n\t            }\n\t            else if (this.mobile === false && instantiateOptions.responsiveComponents.isSmallScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is not optimized for small screen width', this);\n\t                return null;\n\t            }\n\t            if (this.tablet === true && !instantiateOptions.responsiveComponents.isMediumScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is optimized for medium screen width', this);\n\t                return null;\n\t            }\n\t            else if (this.tablet === false && instantiateOptions.responsiveComponents.isMediumScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is not optimized for medium screen width', this);\n\t                return null;\n\t            }\n\t            if (this.desktop === true && !instantiateOptions.responsiveComponents.isLargeScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is optimized for large screen width', this);\n\t                return null;\n\t            }\n\t            else if (this.desktop === false && instantiateOptions.responsiveComponents.isLargeScreenWidth()) {\n\t                this.logger.trace('Template was skipped because it is not optimized for large screen width', this);\n\t                return null;\n\t            }\n\t            if (this.layout != null && instantiateOptions.currentLayout != null && instantiateOptions.currentLayout !== this.layout) {\n\t                this.logger.trace('Template was skipped because layout does not match', this, this.layout);\n\t                return null;\n\t            }\n\t            this.logger.trace('Evaluating template ...');\n\t            // Condition (as a function) is eval'ed, first\n\t            if (this.condition != null && this.condition(object)) {\n\t                this.logger.trace('Template was loaded because condition was :', this.condition, object);\n\t                return this.dataToString(object);\n\t            }\n\t            // Condition (as a string) is parsed, if available.\n\t            if (this.conditionToParse != null && TemplateConditionEvaluator_1.TemplateConditionEvaluator.evaluateCondition(this.conditionToParse, object, instantiateOptions.responsiveComponents)) {\n\t                this.logger.trace('Template was loaded because condition was :', this.conditionToParse, object);\n\t                return this.dataToString(object);\n\t            }\n\t            // fieldsToMatch is yet another fallback that allows to specify if a template should be loaded.\n\t            if (this.fieldsToMatch != null && TemplateFieldsEvaluator_1.TemplateFieldsEvaluator.evaluateFieldsToMatch(this.fieldsToMatch, object)) {\n\t                this.logger.trace('Template was loaded because condition was :', this.fieldsToMatch, object);\n\t                return this.dataToString(object);\n\t            }\n\t            // If there is no condition at all, this means \"true\"\n\t            if (this.condition == null && this.conditionToParse == null && this.fieldsToMatch == null) {\n\t                this.logger.trace('Template was loaded because there was *NO* condition', this.condition, object);\n\t                return this.dataToString(object);\n\t            }\n\t        }\n\t        this.logger.trace('Template was skipped because it did not match any condition', this);\n\t        return null;\n\t    };\n\t    Template.prototype.instantiateToElement = function (object, instantiateTemplateOptions) {\n\t        if (instantiateTemplateOptions === void 0) { instantiateTemplateOptions = {}; }\n\t        var merged = new DefaultInstantiateTemplateOptions().merge(instantiateTemplateOptions);\n\t        var html = this.instantiateToString(object, merged);\n\t        if (html != null) {\n\t            var element = Dom_1.$$('div', {}, html).el;\n\t            if (!merged.wrapInDiv && element.children.length === 1) {\n\t                element = element.children.item(0);\n\t            }\n\t            if (this.layout) {\n\t                Dom_1.$$(element).addClass(\"coveo-\" + this.layout + \"-layout\");\n\t            }\n\t            this.logger.trace('Instantiated result template', object, element);\n\t            element['template'] = this;\n\t            return element;\n\t        }\n\t        return null;\n\t    };\n\t    Template.prototype.toHtmlElement = function () {\n\t        return null;\n\t    };\n\t    Template.prototype.getFields = function () {\n\t        return this.fields || [];\n\t    };\n\t    Template.prototype.getType = function () {\n\t        return 'Template';\n\t    };\n\t    Template.prototype.setConditionWithFallback = function (condition) {\n\t        // In some circumstances (eg: locker service in SF), with strict Content-Security-Policy, eval / new Function are not allowed by the browser.\n\t        // Try to use the eval method, if possible. Otherwise fallback to a mechanism where we will try to parse/evaluate the condition as a simple string.\n\t        try {\n\t            this.condition = new Function('obj', 'with(obj||{}){return ' + condition + '}');\n\t        }\n\t        catch (e) {\n\t            this.conditionToParse = condition;\n\t        }\n\t    };\n\t    return Template;\n\t}());\n\texports.Template = Template;\n\n\n/***/ },\n/* 114 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar _ = __webpack_require__(16);\n\tvar TemplateConditionEvaluator = (function () {\n\t    function TemplateConditionEvaluator() {\n\t    }\n\t    TemplateConditionEvaluator.getFieldFromString = function (text) {\n\t        var fields = _.map(StringUtils_1.StringUtils.match(text, /(?:(?!\\b@)@([a-z0-9]+(?:\\.[a-z0-9]+)*\\b))|\\braw.([a-z0-9]+)|\\braw\\['([^']+)'\\]|\\braw\\[\"([^\"]+)\"\\]/gi), function (field) {\n\t            return field[1] || field[2] || field[3] || field[4] || null;\n\t        });\n\t        _.each(Initialization_1.Initialization.getListOfRegisteredComponents(), function (componentId) {\n\t            var componentFields = Initialization_1.Initialization.getRegisteredComponent(componentId).fields;\n\t            if (componentFields != null && text.indexOf(BaseComponent_1.BaseComponent.computeCssClassNameForType(componentId)) != -1) {\n\t                fields = fields.concat(componentFields);\n\t            }\n\t        });\n\t        return fields;\n\t    };\n\t    TemplateConditionEvaluator.evaluateCondition = function (condition, result, responsiveComponents) {\n\t        if (responsiveComponents === void 0) { responsiveComponents = new ResponsiveComponents_1.ResponsiveComponents(); }\n\t        var templateShouldBeLoaded = true;\n\t        var fieldsInCondition = TemplateConditionEvaluator.getFieldFromString(condition);\n\t        _.each(fieldsInCondition, function (fieldInCondition) {\n\t            var matchingFieldValues = TemplateConditionEvaluator.evaluateMatchingFieldValues(fieldInCondition, condition);\n\t            var fieldShouldNotBeNull = matchingFieldValues.length != 0 || TemplateConditionEvaluator.evaluateFieldShouldNotBeNull(fieldInCondition, condition);\n\t            if (fieldShouldNotBeNull) {\n\t                templateShouldBeLoaded = templateShouldBeLoaded && result.raw[fieldInCondition] != null;\n\t            }\n\t            if (templateShouldBeLoaded) {\n\t                _.each(matchingFieldValues, function (fieldValue) {\n\t                    templateShouldBeLoaded = templateShouldBeLoaded && result.raw[fieldInCondition].toLowerCase() == fieldValue.toLowerCase();\n\t                });\n\t            }\n\t        });\n\t        if (templateShouldBeLoaded) {\n\t            if (TemplateConditionEvaluator.evaluateShouldUseSmallScreen(condition)) {\n\t                templateShouldBeLoaded = templateShouldBeLoaded && responsiveComponents.isSmallScreenWidth();\n\t            }\n\t        }\n\t        return templateShouldBeLoaded;\n\t    };\n\t    TemplateConditionEvaluator.evaluateMatchingFieldValues = function (field, condition) {\n\t        var foundForCurrentField = [];\n\t        // try to get the field value in the format raw.filetype == \"YouTubeVideo\"\n\t        var firstRegexToGetValue = new RegExp(\"raw.\" + field + \"\\\\s*=+\\\\s*[\\\"|']([a-zA-Z]+)[\\\"|']\", 'gi');\n\t        // try to get the field value in the format raw['filetype'] == \"YouTubeVideo\"\n\t        var secondRegexToGetValue = new RegExp(\"raw[[\\\"|']\" + field + \"[\\\"|']]\\\\s*=+\\\\s*[\\\"|']([a-zA-Z]+)[\\\"|']\", 'gi');\n\t        var matches = StringUtils_1.StringUtils.match(condition, firstRegexToGetValue).concat(StringUtils_1.StringUtils.match(condition, secondRegexToGetValue));\n\t        matches.forEach(function (match) {\n\t            foundForCurrentField = foundForCurrentField.concat(match[1]);\n\t        });\n\t        return _.unique(foundForCurrentField);\n\t    };\n\t    TemplateConditionEvaluator.evaluateFieldShouldNotBeNull = function (field, condition) {\n\t        var firstRegexToMatchNonNull = new RegExp(\"raw.\" + field + \"\\\\s*!=\\\\s*(?=null|undefined)\", 'gi');\n\t        var secondRegexToMatchNonNull = new RegExp(\"raw[[\\\"|']\" + field + \"[\\\"|']]\\\\s*!=\\\\s*(?=null|undefined)\", 'gi');\n\t        return condition.match(firstRegexToMatchNonNull) != null || condition.match(secondRegexToMatchNonNull) != null;\n\t    };\n\t    TemplateConditionEvaluator.evaluateShouldUseSmallScreen = function (condition) {\n\t        return condition.match(/Coveo\\.DeviceUtils\\.isSmallScreenWidth/gi);\n\t    };\n\t    return TemplateConditionEvaluator;\n\t}());\n\texports.TemplateConditionEvaluator = TemplateConditionEvaluator;\n\n\n/***/ },\n/* 115 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar TemplateFieldsEvaluator = (function () {\n\t    function TemplateFieldsEvaluator() {\n\t    }\n\t    TemplateFieldsEvaluator.evaluateFieldsToMatch = function (toMatches, result) {\n\t        var templateShouldBeLoaded = true;\n\t        _.each(toMatches, function (toMatch) {\n\t            var matchAtLeastOnce = false;\n\t            if (!toMatch.values) {\n\t                matchAtLeastOnce = result.raw[toMatch.field] != null;\n\t            }\n\t            else {\n\t                _.each(toMatch.values, function (value) {\n\t                    if (!matchAtLeastOnce) {\n\t                        matchAtLeastOnce = result.raw[toMatch.field] && result.raw[toMatch.field].toLowerCase() == value.toLowerCase();\n\t                    }\n\t                });\n\t            }\n\t            templateShouldBeLoaded = templateShouldBeLoaded && matchAtLeastOnce;\n\t        });\n\t        return templateShouldBeLoaded;\n\t    };\n\t    return TemplateFieldsEvaluator;\n\t}());\n\texports.TemplateFieldsEvaluator = TemplateFieldsEvaluator;\n\n\n/***/ },\n/* 116 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar TemplateFromAScriptTag_1 = __webpack_require__(117);\n\tvar DefaultResultTemplate_1 = __webpack_require__(118);\n\tvar _ = __webpack_require__(16);\n\t_.templateSettings = {\n\t    evaluate: /(?:<%|{{)([\\s\\S]+?)(?:%>|}})/g,\n\t    interpolate: /(?:<%|{{)=([\\s\\S]+?)(?:%>|}})/g,\n\t    escape: /(?:<%|{{)-([\\s\\S]+?)(?:%>|}})/g\n\t};\n\tvar UnderscoreTemplate = (function (_super) {\n\t    __extends(UnderscoreTemplate, _super);\n\t    function UnderscoreTemplate(element) {\n\t        var _this = _super.call(this) || this;\n\t        _this.element = element;\n\t        Assert_1.Assert.exists(element);\n\t        var templateString = element.innerHTML;\n\t        try {\n\t            _this.template = _.template(templateString);\n\t        }\n\t        catch (e) {\n\t            new Logger_1.Logger(_this).error('Cannot instantiate underscore template. Might be caused by strict Content-Security-Policy. Will fallback on a default template...', e);\n\t        }\n\t        _this.templateFromAScriptTag = new TemplateFromAScriptTag_1.TemplateFromAScriptTag(_this, _this.element);\n\t        _this.dataToString = function (object) {\n\t            var extended = _.extend({}, object, UnderscoreTemplate.templateHelpers);\n\t            if (_this.template) {\n\t                return _this.template(extended);\n\t            }\n\t            else {\n\t                return new DefaultResultTemplate_1.DefaultResultTemplate().getFallbackTemplate();\n\t            }\n\t        };\n\t        return _this;\n\t    }\n\t    UnderscoreTemplate.prototype.toHtmlElement = function () {\n\t        var script = this.templateFromAScriptTag.toHtmlElement();\n\t        script.setAttribute('type', _.first(UnderscoreTemplate.mimeTypes));\n\t        return script;\n\t    };\n\t    UnderscoreTemplate.prototype.getType = function () {\n\t        return 'UnderscoreTemplate';\n\t    };\n\t    UnderscoreTemplate.prototype.getFields = function () {\n\t        return this.fields;\n\t    };\n\t    UnderscoreTemplate.registerTemplateHelper = function (helperName, helper) {\n\t        UnderscoreTemplate.templateHelpers[helperName] = helper;\n\t    };\n\t    UnderscoreTemplate.isLibraryAvailable = function () {\n\t        return Utils_1.Utils.exists(window['_']);\n\t    };\n\t    UnderscoreTemplate.fromString = function (template, properties) {\n\t        var script = TemplateFromAScriptTag_1.TemplateFromAScriptTag.fromString(template, properties);\n\t        script.setAttribute('type', UnderscoreTemplate.mimeTypes[0]);\n\t        return new UnderscoreTemplate(script);\n\t    };\n\t    UnderscoreTemplate.create = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        return new UnderscoreTemplate(element);\n\t    };\n\t    return UnderscoreTemplate;\n\t}(Template_1.Template));\n\tUnderscoreTemplate.templateHelpers = {};\n\tUnderscoreTemplate.mimeTypes = [\n\t    'text/underscore',\n\t    'text/underscore-template',\n\t    'text/x-underscore',\n\t    'text/x-underscore-template'\n\t];\n\texports.UnderscoreTemplate = UnderscoreTemplate;\n\n\n/***/ },\n/* 117 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Utils_1 = __webpack_require__(15);\n\tvar TemplateConditionEvaluator_1 = __webpack_require__(114);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar TemplateFromAScriptTag = (function () {\n\t    function TemplateFromAScriptTag(template, scriptTag) {\n\t        this.template = template;\n\t        this.scriptTag = scriptTag;\n\t        var condition = scriptTag.getAttribute('data-condition');\n\t        if (condition != null) {\n\t            // Allows to add quotes in data-condition on the templates\n\t            condition = condition.toString().replace(/&quot;/g, '\"');\n\t            template.setConditionWithFallback(condition);\n\t        }\n\t        else {\n\t            var parsedFieldsAttributes = this.parseFieldsAttributes();\n\t            if (parsedFieldsAttributes && Utils_1.Utils.isNonEmptyArray(parsedFieldsAttributes)) {\n\t                this.template.fieldsToMatch = parsedFieldsAttributes;\n\t            }\n\t        }\n\t        this.template.layout = this.parseLayout();\n\t        this.template.mobile = this.parseScreenSize('data-mobile');\n\t        this.template.tablet = this.parseScreenSize('data-tablet');\n\t        this.template.desktop = this.parseScreenSize('data-desktop');\n\t        this.template.fields = TemplateConditionEvaluator_1.TemplateConditionEvaluator.getFieldFromString(scriptTag.innerHTML + \" \" + (condition ? condition : ''));\n\t        var additionalFields = ComponentOptions_1.ComponentOptions.loadFieldsOption(scriptTag, 'fields', { includeInResults: true });\n\t        if (additionalFields != null) {\n\t            // remove the @\n\t            this.template.fields = this.template.fields.concat(_.map(additionalFields, function (field) { return field.substr(1); }));\n\t        }\n\t        this.template.fields = this.template.fields.concat(_.map(this.template.fieldsToMatch, function (toMatch) {\n\t            return toMatch.field;\n\t        }));\n\t    }\n\t    TemplateFromAScriptTag.prototype.toHtmlElement = function () {\n\t        var script = Dom_1.$$('code');\n\t        var condition = Dom_1.$$(this.scriptTag).getAttribute('data-condition');\n\t        if (condition) {\n\t            script.setAttribute('data-condition', condition);\n\t        }\n\t        script.setHtml(this.scriptTag.innerHTML);\n\t        return script.el;\n\t    };\n\t    TemplateFromAScriptTag.prototype.parseFieldsAttributes = function () {\n\t        var dataSet = this.scriptTag.dataset;\n\t        return _.chain(dataSet)\n\t            .map(function (value, key) {\n\t            var match = key.match(/field([a-z0-9]*)/i);\n\t            if (match) {\n\t                var values = void 0;\n\t                if (value != null && value != 'null' && value != '') {\n\t                    values = value.split(',');\n\t                }\n\t                return {\n\t                    field: match[1].toLowerCase(),\n\t                    values: values\n\t                };\n\t            }\n\t            else {\n\t                return undefined;\n\t            }\n\t        })\n\t            .compact()\n\t            .value();\n\t    };\n\t    TemplateFromAScriptTag.prototype.parseScreenSize = function (attribute) {\n\t        return Utils_1.Utils.parseBooleanIfNotUndefined(this.scriptTag.getAttribute(attribute));\n\t    };\n\t    TemplateFromAScriptTag.prototype.parseLayout = function () {\n\t        var layout = this.scriptTag.getAttribute('data-layout');\n\t        return layout;\n\t    };\n\t    TemplateFromAScriptTag.fromString = function (template, properties) {\n\t        if (properties === void 0) { properties = {}; }\n\t        var script = document.createElement('code');\n\t        script.innerHTML = template;\n\t        if (properties.condition != null) {\n\t            script.setAttribute('data-condition', properties.condition);\n\t        }\n\t        if (properties.layout != null) {\n\t            script.setAttribute('data-layout', properties.layout);\n\t        }\n\t        else {\n\t            script.setAttribute('data-layout', 'list');\n\t        }\n\t        if (properties.mobile != null) {\n\t            script.setAttribute('data-mobile', properties.mobile.toString());\n\t        }\n\t        if (properties.tablet != null) {\n\t            script.setAttribute('data-tablet', properties.tablet.toString());\n\t        }\n\t        if (properties.desktop != null) {\n\t            script.setAttribute('data-desktop', properties.desktop.toString());\n\t        }\n\t        if (properties.fieldsToMatch != null) {\n\t            _.each(properties.fieldsToMatch, function (fieldToMatch) {\n\t                if (fieldToMatch.values) {\n\t                    script.setAttribute(\"data-field-\" + fieldToMatch.field.toLowerCase(), fieldToMatch.values.join(','));\n\t                }\n\t                else {\n\t                    script.setAttribute(\"data-field-\" + fieldToMatch.field.toLowerCase(), null);\n\t                }\n\t            });\n\t        }\n\t        return script;\n\t    };\n\t    return TemplateFromAScriptTag;\n\t}());\n\texports.TemplateFromAScriptTag = TemplateFromAScriptTag;\n\n\n/***/ },\n/* 118 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar UnderscoreTemplate_1 = __webpack_require__(116);\n\tvar TemplateCache_1 = __webpack_require__(112);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/*\n\t * This renders the appropriate result template, found in TemplateCache,\n\t * according to its condition.\n\t *\n\t * For example, a result with a filetype of `YoutubeVideo` will get rendered\n\t * with the `YoutubeVideo` template, because the latter is registered with a\n\t * `condition` of `raw.filetype == 'YoutubeVideo'`.\n\t */\n\tvar DefaultResultTemplate = (function (_super) {\n\t    __extends(DefaultResultTemplate, _super);\n\t    function DefaultResultTemplate() {\n\t        return _super.call(this) || this;\n\t    }\n\t    DefaultResultTemplate.prototype.instantiateToString = function (queryResult, instantiateOptions) {\n\t        if (instantiateOptions === void 0) { instantiateOptions = {}; }\n\t        Assert_1.Assert.exists(queryResult);\n\t        var merged = new Template_1.DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n\t        queryResult = _.extend({}, queryResult, UnderscoreTemplate_1.UnderscoreTemplate.templateHelpers);\n\t        // Put templates with conditions first\n\t        var templates = _.chain(TemplateCache_1.TemplateCache.getDefaultTemplates())\n\t            .map(function (name) { return TemplateCache_1.TemplateCache.getTemplate(name); })\n\t            .sortBy(function (template) { return template.condition == null; })\n\t            .sortBy(function (template) { return template.fieldsToMatch == null; })\n\t            .value();\n\t        // For the DefaultResultTemplate, we want to display card only in mobile\n\t        // The default list template are not adapted to mobile.\n\t        if (merged.responsiveComponents.isSmallScreenWidth()) {\n\t            templates = _.filter(templates, function (tmpl) { return tmpl.layout == 'card'; });\n\t            merged.currentLayout = 'card';\n\t            this.layout = 'card';\n\t        }\n\t        else {\n\t            this.layout = merged.currentLayout;\n\t        }\n\t        for (var i = 0; i < templates.length; i++) {\n\t            var result = templates[i].instantiateToString(queryResult, merged);\n\t            if (result != null) {\n\t                return result;\n\t            }\n\t        }\n\t        return this.getFallbackTemplate();\n\t    };\n\t    DefaultResultTemplate.prototype.getFields = function () {\n\t        var defaultTemplates = _.map(TemplateCache_1.TemplateCache.getDefaultTemplates(), function (name) { return TemplateCache_1.TemplateCache.getTemplate(name); });\n\t        return _.flatten(_.map(defaultTemplates, function (template) { return template.getFields(); }));\n\t    };\n\t    DefaultResultTemplate.prototype.getType = function () {\n\t        return 'DefaultResultTemplate';\n\t    };\n\t    DefaultResultTemplate.prototype.getFallbackTemplate = function () {\n\t        var titleContainer = Dom_1.$$('div', {\n\t            className: 'coveo-title'\n\t        });\n\t        var resultLink = Dom_1.$$('a', {\n\t            className: 'CoveoResultLink'\n\t        });\n\t        titleContainer.append(resultLink.el);\n\t        var excerpt = Dom_1.$$('div', {\n\t            className: 'CoveoExcerpt'\n\t        });\n\t        var resultContainer = Dom_1.$$('div');\n\t        resultContainer.append(titleContainer.el);\n\t        resultContainer.append(excerpt.el);\n\t        return resultContainer.el.outerHTML;\n\t    };\n\t    return DefaultResultTemplate;\n\t}(Template_1.Template));\n\texports.DefaultResultTemplate = DefaultResultTemplate;\n\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar TemplateFromAScriptTag_1 = __webpack_require__(117);\n\tvar HtmlTemplate = (function (_super) {\n\t    __extends(HtmlTemplate, _super);\n\t    function HtmlTemplate(element) {\n\t        var _this = _super.call(this, function () { return element.innerHTML; }) || this;\n\t        _this.element = element;\n\t        _this.templateFromAScriptTag = new TemplateFromAScriptTag_1.TemplateFromAScriptTag(_this, _this.element);\n\t        return _this;\n\t    }\n\t    HtmlTemplate.prototype.toHtmlElement = function () {\n\t        var script = this.templateFromAScriptTag.toHtmlElement();\n\t        // We don't set the type attribute for 2 reasons:\n\t        // 1) LockerService doesn't like when we set it.\n\t        // 2) The HTML Template is the default one.\n\t        return script;\n\t    };\n\t    HtmlTemplate.prototype.getType = function () {\n\t        return 'HtmlTemplate';\n\t    };\n\t    HtmlTemplate.prototype.getFields = function () {\n\t        return this.fields;\n\t    };\n\t    HtmlTemplate.create = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        return new HtmlTemplate(element);\n\t    };\n\t    HtmlTemplate.fromString = function (template, properties) {\n\t        var script = TemplateFromAScriptTag_1.TemplateFromAScriptTag.fromString(template, properties);\n\t        // We don't set the type attribute for 2 reasons:\n\t        // 1) LockerService doesn't like when we set it.\n\t        // 2) The HTML Template is the default one.\n\t        return new HtmlTemplate(script);\n\t    };\n\t    return HtmlTemplate;\n\t}(Template_1.Template));\n\tHtmlTemplate.mimeTypes = [\n\t    'text/html',\n\t    'text/HTML'\n\t];\n\texports.HtmlTemplate = HtmlTemplate;\n\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar DefaultResultTemplate_1 = __webpack_require__(118);\n\tvar _ = __webpack_require__(16);\n\tvar TemplateList = (function (_super) {\n\t    __extends(TemplateList, _super);\n\t    function TemplateList(templates) {\n\t        var _this = _super.call(this) || this;\n\t        _this.templates = templates;\n\t        return _this;\n\t    }\n\t    TemplateList.prototype.instantiateToString = function (object, instantiateOptions) {\n\t        if (instantiateOptions === void 0) { instantiateOptions = {}; }\n\t        var merged = new Template_1.DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n\t        for (var i = 0; i < this.templates.length; i++) {\n\t            var result = this.templates[i].instantiateToString(object, merged);\n\t            if (result != null) {\n\t                return result;\n\t            }\n\t        }\n\t        return new DefaultResultTemplate_1.DefaultResultTemplate().instantiateToString(object, instantiateOptions);\n\t    };\n\t    TemplateList.prototype.instantiateToElement = function (object, instantiateOptions) {\n\t        if (instantiateOptions === void 0) { instantiateOptions = {}; }\n\t        var merged = new Template_1.DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n\t        for (var i = 0; i < this.templates.length; i++) {\n\t            var element = this.templates[i].instantiateToElement(object, merged);\n\t            if (element != null) {\n\t                return element;\n\t            }\n\t        }\n\t        return new DefaultResultTemplate_1.DefaultResultTemplate().instantiateToElement(object, merged);\n\t    };\n\t    TemplateList.prototype.getFields = function () {\n\t        return _.reduce(this.templates, function (fields, template) { return fields.concat(template.getFields()); }, []);\n\t    };\n\t    TemplateList.prototype.getType = function () {\n\t        return 'TemplateList';\n\t    };\n\t    return TemplateList;\n\t}(Template_1.Template));\n\texports.TemplateList = TemplateList;\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar NoopAnalyticsClient = (function () {\n\t    function NoopAnalyticsClient() {\n\t        this.isContextual = false;\n\t    }\n\t    NoopAnalyticsClient.prototype.isActivated = function () {\n\t        return false;\n\t    };\n\t    NoopAnalyticsClient.prototype.getCurrentEventCause = function () {\n\t        return this.currentEventCause;\n\t    };\n\t    NoopAnalyticsClient.prototype.getCurrentEventMeta = function () {\n\t        return this.currentEventMeta;\n\t    };\n\t    NoopAnalyticsClient.prototype.logSearchEvent = function (actionCause, meta) {\n\t        this.setNoopCauseAndMeta(actionCause.name, meta);\n\t    };\n\t    NoopAnalyticsClient.prototype.logSearchAsYouType = function (actionCause, meta) {\n\t        this.setNoopCauseAndMeta(actionCause.name, meta);\n\t    };\n\t    NoopAnalyticsClient.prototype.logClickEvent = function (actionCause, meta, result, element) {\n\t        this.setNoopCauseAndMeta(actionCause.name, meta);\n\t        return Promise.resolve(null);\n\t    };\n\t    NoopAnalyticsClient.prototype.logCustomEvent = function (actionCause, meta, element) {\n\t        this.setNoopCauseAndMeta(actionCause.name, meta);\n\t        return Promise.resolve(null);\n\t    };\n\t    NoopAnalyticsClient.prototype.getTopQueries = function (params) {\n\t        return new Promise(function (resolve, reject) {\n\t            resolve([]);\n\t        });\n\t    };\n\t    NoopAnalyticsClient.prototype.getCurrentVisitIdPromise = function () {\n\t        return new Promise(function (resolve, reject) {\n\t            resolve(null);\n\t        });\n\t    };\n\t    NoopAnalyticsClient.prototype.getCurrentVisitId = function () {\n\t        return null;\n\t    };\n\t    NoopAnalyticsClient.prototype.sendAllPendingEvents = function () {\n\t    };\n\t    NoopAnalyticsClient.prototype.cancelAllPendingEvents = function () {\n\t    };\n\t    NoopAnalyticsClient.prototype.warnAboutSearchEvent = function () {\n\t    };\n\t    NoopAnalyticsClient.prototype.getPendingSearchEvent = function () {\n\t        return null;\n\t    };\n\t    NoopAnalyticsClient.prototype.setOriginContext = function (originContext) {\n\t    };\n\t    NoopAnalyticsClient.prototype.setNoopCauseAndMeta = function (cause, meta) {\n\t        this.currentEventCause = cause;\n\t        this.currentEventMeta = meta;\n\t    };\n\t    return NoopAnalyticsClient;\n\t}());\n\texports.NoopAnalyticsClient = NoopAnalyticsClient;\n\n\n/***/ },\n/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar DebugEvents_1 = __webpack_require__(45);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\tvar Template_1 = __webpack_require__(113);\n\tvar RootComponent_1 = __webpack_require__(77);\n\tvar BaseComponent_1 = __webpack_require__(78);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar Globalize = __webpack_require__(30);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar _ = __webpack_require__(16);\n\tvar Debug = (function (_super) {\n\t    __extends(Debug, _super);\n\t    function Debug(element, queryController, options, modalBox) {\n\t        if (modalBox === void 0) { modalBox = ExternalModulesShim_1.ModalBox; }\n\t        var _this = _super.call(this, element, Debug.ID) || this;\n\t        _this.element = element;\n\t        _this.queryController = queryController;\n\t        _this.options = options;\n\t        _this.modalBox = modalBox;\n\t        _this.debug = false;\n\t        _this.highlightRecommendation = false;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Debug, options);\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.buildingQuery, function (e, args) {\n\t            args.queryBuilder.enableDebug = _this.debug || args.queryBuilder.enableDebug;\n\t        });\n\t        Dom_1.$$(_this.element).on(ResultListEvents_1.ResultListEvents.newResultDisplayed, function (e, args) { return _this.handleNewResultDisplayed(args); });\n\t        Dom_1.$$(_this.element).on(DebugEvents_1.DebugEvents.showDebugPanel, function (e, args) {\n\t            _this.handleShowDebugPanel(args);\n\t        });\n\t        Dom_1.$$(_this.element).on(InitializationEvents_1.InitializationEvents.nuke, function () {\n\t            _this.unbindEscapeEvent();\n\t        });\n\t        _this.localStorageDebug = new LocalStorageUtils_1.LocalStorageUtils('DebugPanel');\n\t        _this.collapsedSections = _this.localStorageDebug.load() || [];\n\t        return _this;\n\t    }\n\t    Debug.prototype.buildFieldsSection = function (result) {\n\t        return this.fetchFields()\n\t            .then(function (fieldDescriptions) {\n\t            var fields = {};\n\t            _.each(result.raw, function (value, key) {\n\t                var fieldDescription = fieldDescriptions['@' + key];\n\t                if (fieldDescription == null && key.match(/^sys/)) {\n\t                    fieldDescription = fieldDescriptions['@' + key.substr(3)];\n\t                }\n\t                if (fieldDescription == null) {\n\t                    fields['@' + key] = value;\n\t                }\n\t                else if (fieldDescription.fieldType == 'Date') {\n\t                    fields['@' + key] = new Date(value);\n\t                }\n\t                else if (fieldDescription.splitGroupByField && _.isString(value)) {\n\t                    fields['@' + key] = value.split(/\\s*;\\s*/);\n\t                }\n\t                else {\n\t                    fields['@' + key] = value;\n\t                }\n\t            });\n\t            return fields;\n\t        });\n\t    };\n\t    Debug.prototype.parseRankingInfo = function (value) {\n\t        var _this = this;\n\t        var rankingInfo = {};\n\t        if (value) {\n\t            var documentWeights = /Document weights:\\n((?:.)*?)\\n+/g.exec(value);\n\t            var termsWeight = /Terms weights:\\n((?:.|\\n)*)\\n+/g.exec(value);\n\t            var totalWeight = /Total weight: ([0-9]+)/g.exec(value);\n\t            if (documentWeights && documentWeights[1]) {\n\t                rankingInfo['Document weights'] = this.parseWeights(documentWeights[1]);\n\t            }\n\t            if (totalWeight && totalWeight[1]) {\n\t                rankingInfo['Total weight'] = Number(totalWeight[1]);\n\t            }\n\t            if (termsWeight && termsWeight[1]) {\n\t                var terms = StringUtils_1.StringUtils.match(termsWeight[1], /((?:[^:]+: [0-9]+, [0-9]+; )+)\\n((?:\\w+: [0-9]+; )+)/g);\n\t                rankingInfo['Terms weights'] = _.object(_.map(terms, function (term) {\n\t                    var words = _.object(_.map(StringUtils_1.StringUtils.match(term[1], /([^:]+): ([0-9]+), ([0-9]+); /g), function (word) {\n\t                        return [\n\t                            word[1],\n\t                            {\n\t                                Correlation: Number(word[2]),\n\t                                'TF-IDF': Number(word[3]),\n\t                            }\n\t                        ];\n\t                    }));\n\t                    var weights = _this.parseWeights(term[2]);\n\t                    return [\n\t                        _.keys(words).join(', '),\n\t                        {\n\t                            terms: words,\n\t                            Weights: weights\n\t                        }\n\t                    ];\n\t                }));\n\t            }\n\t        }\n\t        return rankingInfo;\n\t    };\n\t    Debug.prototype.buildStackPanel = function (stackDebug, results) {\n\t        var _this = this;\n\t        var body = Dom_1.Dom.createElement('div', { className: 'coveo-debug' });\n\t        var keys = _.pairs(_.keys(stackDebug));\n\t        keys = keys.sort(function (a, b) {\n\t            var indexA = _.indexOf(Debug.customOrder, a[1]);\n\t            var indexB = _.indexOf(Debug.customOrder, b[1]);\n\t            if (indexA != -1 && indexB != -1) {\n\t                return indexA - indexB;\n\t            }\n\t            if (indexA != -1) {\n\t                return -1;\n\t            }\n\t            if (indexB != -1) {\n\t                return 1;\n\t            }\n\t            return a[0] - b[0];\n\t        });\n\t        var json = {};\n\t        _.forEach(keys, function (key) {\n\t            var section = _this.buildSection(key[1]);\n\t            var build = _this.buildStackPanelSection(stackDebug[key[1]], results);\n\t            section.container.appendChild(build.section);\n\t            if (build.json != null) {\n\t                json[key[1]] = build.json;\n\t            }\n\t            body.appendChild(section.dom);\n\t        });\n\t        return { body: body, json: json };\n\t    };\n\t    Debug.prototype.debugInfo = function () {\n\t        return null;\n\t    };\n\t    Debug.prototype.showDebugPanel = function (builder) {\n\t        var _this = this;\n\t        var build = builder();\n\t        var modalbox = this.modalBox.open(build.body, {\n\t            title: '',\n\t            className: 'coveo-debug',\n\t            titleClose: true,\n\t            overlayClose: true,\n\t            validation: function () {\n\t                _this.unbindEscapeEvent();\n\t                return true;\n\t            }\n\t        });\n\t        this.bindEscapeEvent();\n\t        var title = Dom_1.$$(modalbox.wrapper).find('.coveo-title');\n\t        var search = this.buildSearchBox(build.body);\n\t        var downloadLink = Dom_1.$$('a', { download: 'debug.json', 'href': this.downloadHref(build.json) }, 'Download');\n\t        var bodyBuilder = function (results) {\n\t            var build = builder(results);\n\t            downloadLink.el.setAttribute('href', _this.downloadHref(build.json));\n\t            return build.body;\n\t        };\n\t        title.appendChild(this.buildEnabledHighlightRecommendation());\n\t        title.appendChild(this.buildEnableDebugCheckbox(build.body, search, bodyBuilder));\n\t        title.appendChild(search);\n\t        title.appendChild(downloadLink.el);\n\t    };\n\t    Debug.prototype.handleEscapeEvent = function (e) {\n\t        if (e.keyCode == KeyboardUtils_1.KEYBOARD.ESCAPE) {\n\t            if (this.modalBox) {\n\t                this.modalBox.close();\n\t            }\n\t        }\n\t    };\n\t    Debug.prototype.bindEscapeEvent = function () {\n\t        this.boundEscapeKey = this.handleEscapeEvent.bind(this);\n\t        Dom_1.$$(document.body).on('keyup', this.boundEscapeKey);\n\t    };\n\t    Debug.prototype.unbindEscapeEvent = function () {\n\t        if (this.boundEscapeKey) {\n\t            Dom_1.$$(document.body).off('keyup', this.boundEscapeKey);\n\t        }\n\t        this.boundEscapeKey = null;\n\t    };\n\t    Debug.prototype.handleShowDebugPanel = function (info) {\n\t        var _this = this;\n\t        if (this.stackDebug == null) {\n\t            setTimeout(function () {\n\t                var stackDebug = _this.stackDebug;\n\t                _this.showDebugPanel(function (results) { return _this.buildStackPanel(stackDebug, results); });\n\t                _this.stackDebug = null;\n\t            });\n\t            this.stackDebug = {};\n\t        }\n\t        _.extend(this.stackDebug, info);\n\t    };\n\t    Debug.prototype.handleNewResultDisplayed = function (args) {\n\t        var _this = this;\n\t        if (args.item != null) {\n\t            if (this.highlightRecommendation && args.result.isRecommendation) {\n\t                Dom_1.$$(args.item).addClass('coveo-is-recommendation');\n\t            }\n\t            Dom_1.$$(args.item).on('dblclick', function (e) {\n\t                _this.handleResultDoubleClick(e, args);\n\t            });\n\t        }\n\t    };\n\t    Debug.prototype.handleResultDoubleClick = function (e, args) {\n\t        var _this = this;\n\t        if (e.altKey) {\n\t            var index_1 = args.result.index;\n\t            var findResult_1 = function (results) { return results != null ? _.find(results.results, function (result) { return result.index == index_1; }) : args.result; };\n\t            var template = args.item['template'];\n\t            var debugPanel = {\n\t                result: findResult_1,\n\t                fields: function (results) { return _this.buildFieldsSection(findResult_1(results)); },\n\t                rankingInfo: function (results) { return _this.buildRankingInfoSection(findResult_1(results)); },\n\t                template: this.templateToJson(template),\n\t            };\n\t            this.handleShowDebugPanel(debugPanel);\n\t        }\n\t    };\n\t    Debug.prototype.downloadHref = function (info) {\n\t        return 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(info));\n\t    };\n\t    Debug.prototype.buildStackPanelSection = function (value, results) {\n\t        if (value instanceof HTMLElement) {\n\t            return { section: value };\n\t        }\n\t        else if (_.isFunction(value)) {\n\t            return this.buildStackPanelSection(value(results), results);\n\t        }\n\t        var json = this.toJson(value);\n\t        return { section: this.buildProperty(json), json: json };\n\t    };\n\t    Debug.prototype.buildSearchBox = function (body) {\n\t        var _this = this;\n\t        var dom = Dom_1.Dom.createElement('div', { className: 'coveo-debug-search' }, '<input type=\\'text\\'/>');\n\t        dom.onclick = function (e) {\n\t            e.stopPropagation();\n\t        };\n\t        var lastSearch = '';\n\t        var input = dom.querySelector('input');\n\t        input.setAttribute('placeholder', 'Search in debug');\n\t        input.onkeyup = function (e) {\n\t            if (e == null || e.keyCode == 13) {\n\t                var value = input.value.toLowerCase();\n\t                if (lastSearch != value) {\n\t                    lastSearch = value;\n\t                    _this.search(value, body);\n\t                }\n\t            }\n\t        };\n\t        input.onchange = function () {\n\t            var value = input.value.toLowerCase();\n\t            if (lastSearch != value) {\n\t                lastSearch = value;\n\t                _this.search(value, body);\n\t            }\n\t        };\n\t        return dom;\n\t    };\n\t    Debug.prototype.search = function (value, body) {\n\t        var _this = this;\n\t        if (_.isEmpty(value)) {\n\t            Dom_1.$$(body).findAll('.coveo-search-match, .coveo-search-submatch').forEach(function (el) {\n\t                Dom_1.$$(el).removeClass('coveo-search-match, coveo-search-submatch');\n\t            });\n\t            Dom_1.$$(body).removeClass('coveo-searching');\n\t        }\n\t        else {\n\t            Dom_1.$$(body).addClass('coveo-searching-loading');\n\t            setTimeout(function () {\n\t                var rootProperties = Dom_1.$$(body).findAll('.coveo-section .coveo-section-container > .coveo-property');\n\t                _.each(rootProperties, function (element) {\n\t                    _this.findInProperty(element, value);\n\t                });\n\t                Dom_1.$$(body).addClass('coveo-searching');\n\t                Dom_1.$$(body).removeClass('coveo-searching-loading');\n\t            });\n\t        }\n\t    };\n\t    Debug.prototype.findInProperty = function (element, value) {\n\t        var _this = this;\n\t        var jElement = Dom_1.$$(element);\n\t        var match = element['label'].indexOf(value) != -1;\n\t        if (match) {\n\t            this.highlightSearch(element['labelDom'], value);\n\t        }\n\t        else {\n\t            this.removeHighlightSearch(element['labelDom']);\n\t        }\n\t        if (jElement.hasClass('coveo-property-object')) {\n\t            jElement.toggleClass('coveo-search-match', match);\n\t            var children = element['buildKeys']();\n\t            var submatch_1 = false;\n\t            _.each(children, function (child) {\n\t                submatch_1 = _this.findInProperty(child, value) || submatch_1;\n\t            });\n\t            jElement.toggleClass('coveo-search-submatch', submatch_1);\n\t            return match || submatch_1;\n\t        }\n\t        else {\n\t            if (element['values'].indexOf(value) != -1) {\n\t                this.highlightSearch(element['valueDom'], value);\n\t                match = true;\n\t            }\n\t            else {\n\t                this.removeHighlightSearch(element['valueDom']);\n\t            }\n\t            jElement.toggleClass('coveo-search-match', match);\n\t        }\n\t        return match;\n\t    };\n\t    Debug.prototype.buildEnableDebugCheckbox = function (body, search, bodyBuilder) {\n\t        var _this = this;\n\t        var dom = Dom_1.Dom.createElement('div', { className: 'coveo-enabled-debug' }, '<label>Enable query debug <input type=\\'checkbox\\'/></label>');\n\t        Dom_1.$$(dom).on('click', function (e) {\n\t            e.stopPropagation();\n\t        });\n\t        var checkbox = Dom_1.$$(dom).find('input');\n\t        if (this.debug) {\n\t            checkbox.setAttribute('checked', 'checked');\n\t        }\n\t        checkbox.onchange = function () {\n\t            _this.debug = !_this.debug;\n\t            Dom_1.$$(_this.element).one([QueryEvents_1.QueryEvents.querySuccess, QueryEvents_1.QueryEvents.queryError], function (e, args) {\n\t                Dom_1.$$(body).removeClass('coveo-debug-loading');\n\t                Dom_1.$$(body).empty();\n\t                Dom_1.$$(bodyBuilder(args.results)).children().forEach(function (child) {\n\t                    body.appendChild(child);\n\t                });\n\t            });\n\t            _this.queryController.executeQuery({ closeModalBox: false });\n\t            Dom_1.$$(body).addClass('coveo-debug-loading');\n\t            var input = search.querySelector('input');\n\t            input.value = '';\n\t            input.onkeyup(null);\n\t        };\n\t        return dom;\n\t    };\n\t    Debug.prototype.buildEnabledHighlightRecommendation = function () {\n\t        var _this = this;\n\t        var dom = Dom_1.Dom.createElement('div', { className: 'coveo-enabled-highlight-recommendation' }, '<label>Highlight recommendation <input type=\\'checkbox\\'/></label>');\n\t        dom.onclick = function (e) {\n\t            e.stopPropagation();\n\t        };\n\t        var checkbox = Dom_1.$$(dom).find('input');\n\t        if (this.highlightRecommendation) {\n\t            checkbox.setAttribute('checked', 'checked');\n\t        }\n\t        checkbox.onchange = function () {\n\t            _this.highlightRecommendation = !_this.highlightRecommendation;\n\t            _this.queryController.executeQuery({ closeModalBox: false });\n\t        };\n\t        return dom;\n\t    };\n\t    Debug.prototype.buildSection = function (id) {\n\t        var _this = this;\n\t        var dom = Dom_1.Dom.createElement('div', { className: 'coveo-section coveo-' + id + '-section' });\n\t        var header = Dom_1.Dom.createElement('div', { className: 'coveo-section-header' });\n\t        Dom_1.$$(header).text(id);\n\t        dom.appendChild(header);\n\t        var container = Dom_1.Dom.createElement('div', { className: 'coveo-section-container' });\n\t        dom.appendChild(container);\n\t        if (_.contains(this.collapsedSections, id)) {\n\t            Dom_1.$$(dom).addClass('coveo-debug-collapsed');\n\t        }\n\t        header.onclick = function () {\n\t            Dom_1.$$(dom).toggleClass('coveo-debug-collapsed');\n\t            if (_.contains(_this.collapsedSections, id)) {\n\t                _this.collapsedSections = _.without(_this.collapsedSections, id);\n\t            }\n\t            else {\n\t                _this.collapsedSections.push(id);\n\t            }\n\t            _this.localStorageDebug.save(_this.collapsedSections);\n\t        };\n\t        return {\n\t            dom: dom,\n\t            header: header,\n\t            container: container\n\t        };\n\t    };\n\t    Debug.prototype.fetchFields = function () {\n\t        var _this = this;\n\t        if (this.fields == null) {\n\t            return this.queryController.getEndpoint().listFields().then(function (fields) {\n\t                _this.fields = {};\n\t                fields.forEach(function (field) {\n\t                    _this.fields[field.name] = field;\n\t                });\n\t                return _this.fields;\n\t            });\n\t        }\n\t        else {\n\t            return Promise.resolve(this.fields);\n\t        }\n\t    };\n\t    Debug.prototype.buildRankingInfoSection = function (result) {\n\t        return result.rankingInfo && this.parseRankingInfo(result.rankingInfo);\n\t    };\n\t    Debug.prototype.parseWeights = function (value) {\n\t        var listOfWeight = value.match(/(\\w+(?:\\s\\w+)*): ([-0-9]+)/g);\n\t        return _.object(_.map(listOfWeight, function (weight) {\n\t            var weightGroup = weight.match(/^(\\w+(?:\\s\\w+)*): ([-0-9]+)$/);\n\t            return [weightGroup[1], Number(weightGroup[2])];\n\t        }));\n\t    };\n\t    Debug.prototype.buildProperty = function (value, label) {\n\t        if (value instanceof Promise) {\n\t            return this.buildPromise(value, label);\n\t        }\n\t        else if ((_.isArray(value) || (_.isObject(value))) && !_.isString(value)) {\n\t            return this.buildObjectProperty(value, label);\n\t        }\n\t        else {\n\t            return this.buildBasicProperty(value, label);\n\t        }\n\t    };\n\t    Debug.prototype.buildPromise = function (promise, label) {\n\t        var _this = this;\n\t        var dom = document.createElement('div');\n\t        dom.className = 'coveo-property coveo-property-promise';\n\t        promise.then(function (value) {\n\t            var resolvedDom = _this.buildProperty(value, label);\n\t            Dom_1.$$(dom).replaceWith(resolvedDom);\n\t        });\n\t        return dom;\n\t    };\n\t    Debug.prototype.buildObjectProperty = function (object, label) {\n\t        var _this = this;\n\t        var dom = document.createElement('div');\n\t        dom.className = 'coveo-property coveo-property-object';\n\t        var valueContainer = document.createElement('div');\n\t        valueContainer.className = 'coveo-property-value';\n\t        var keys = _.keys(object);\n\t        if (!_.isArray(object)) {\n\t            keys.sort();\n\t        }\n\t        var children;\n\t        var buildKeys = function () {\n\t            if (children == null) {\n\t                children = [];\n\t                _.each(keys, function (key) {\n\t                    var property = _this.buildProperty(object[key], key);\n\t                    if (property != null) {\n\t                        children.push(property);\n\t                        valueContainer.appendChild(property);\n\t                    }\n\t                });\n\t            }\n\t            return children;\n\t        };\n\t        dom['buildKeys'] = buildKeys;\n\t        if (label != null) {\n\t            var labelDom = document.createElement('div');\n\t            labelDom.className = 'coveo-property-label';\n\t            labelDom.appendChild(document.createTextNode(label));\n\t            dom['labelDom'] = labelDom;\n\t            dom.appendChild(labelDom);\n\t            if (keys.length != 0) {\n\t                dom.className += ' coveo-collapsible';\n\t                labelDom.onclick = function () {\n\t                    buildKeys();\n\t                    var className = dom.className.split(/\\s+/);\n\t                    if (_.contains(className, 'coveo-expanded')) {\n\t                        className = _.without(className, 'coveo-expanded');\n\t                    }\n\t                    else {\n\t                        className.push('coveo-expanded');\n\t                    }\n\t                    dom.className = className.join(' ');\n\t                };\n\t            }\n\t        }\n\t        else {\n\t            buildKeys();\n\t        }\n\t        if (keys.length == 0) {\n\t            var className = _.without(dom.className.split(/\\s+/), 'coveo-property-object');\n\t            className.push('coveo-property-basic');\n\t            dom.className = className.join(' ');\n\t            if (_.isArray(object)) {\n\t                valueContainer.innerHTML = '[]';\n\t            }\n\t            else {\n\t                valueContainer.innerHTML = '{}';\n\t            }\n\t            dom['values'] = '';\n\t        }\n\t        dom['label'] = label != null ? label.toLowerCase() : '';\n\t        dom.appendChild(valueContainer);\n\t        return dom;\n\t    };\n\t    Debug.prototype.buildBasicProperty = function (value, label) {\n\t        var _this = this;\n\t        var dom = document.createElement('div');\n\t        dom.className = 'coveo-property coveo-property-basic';\n\t        if (label != null) {\n\t            var labelDom = document.createElement('div');\n\t            labelDom.className = 'coveo-property-label';\n\t            labelDom.appendChild(document.createTextNode(label));\n\t            dom.appendChild(labelDom);\n\t            dom['labelDom'] = labelDom;\n\t        }\n\t        var stringValue = value != null ? value.toString() : String(value);\n\t        if (value != null && value['ref'] != null) {\n\t            value = value['ref'];\n\t        }\n\t        var valueDom = document.createElement('div');\n\t        valueDom.appendChild(document.createTextNode(stringValue));\n\t        valueDom.ondblclick = function () {\n\t            _this.selectElementText(valueDom);\n\t        };\n\t        dom.appendChild(valueDom);\n\t        dom['valueDom'] = valueDom;\n\t        var className = ['coveo-property-value'];\n\t        if (_.isString(value)) {\n\t            className.push('coveo-property-value-string');\n\t        }\n\t        if (_.isNull(value) || _.isUndefined(value)) {\n\t            className.push('coveo-property-value-null');\n\t        }\n\t        if (_.isNumber(value)) {\n\t            className.push('coveo-property-value-number');\n\t        }\n\t        if (_.isBoolean(value)) {\n\t            className.push('coveo-property-value-boolean');\n\t        }\n\t        if (_.isDate(value)) {\n\t            className.push('coveo-property-value-date');\n\t        }\n\t        if (_.isObject(value)) {\n\t            className.push('coveo-property-value-object');\n\t        }\n\t        if (_.isArray(value)) {\n\t            className.push('coveo-property-value-array');\n\t        }\n\t        valueDom.className = className.join(' ');\n\t        dom['label'] = label != null ? label.toLowerCase() : '';\n\t        dom['values'] = stringValue.toLowerCase();\n\t        return dom;\n\t    };\n\t    Debug.prototype.toJson = function (value, depth, done) {\n\t        var _this = this;\n\t        if (depth === void 0) { depth = 0; }\n\t        if (done === void 0) { done = []; }\n\t        if (value instanceof BaseComponent_1.BaseComponent || value instanceof SearchEndpoint_1.SearchEndpoint) {\n\t            return this.componentToJson(value, depth);\n\t        }\n\t        if (value instanceof HTMLElement) {\n\t            return this.htmlToJson(value);\n\t        }\n\t        if (value instanceof Template_1.Template) {\n\t            return this.templateToJson(value);\n\t        }\n\t        if (value instanceof Promise) {\n\t            return value.then(function (value) {\n\t                return _this.toJson(value, depth, done);\n\t            });\n\t        }\n\t        if (value == window) {\n\t            return this.toJsonRef(value);\n\t        }\n\t        if (_.isArray(value) || _.isObject(value)) {\n\t            if (_.contains(done, value)) {\n\t                return this.toJsonRef(value, '< RECURSIVE >');\n\t            }\n\t            else if (depth >= Debug.maxDepth) {\n\t                return this.toJsonRef(value);\n\t            }\n\t            else if (_.isArray(value)) {\n\t                return _.map(value, function (subValue, key) { return _this.toJson(subValue, depth + 1, done.concat([value])); });\n\t            }\n\t            else if (_.isDate(value)) {\n\t                return this.toJsonRef(value, Globalize.format(value, 'F'));\n\t            }\n\t            else {\n\t                var result_1 = {};\n\t                _.each(value, function (subValue, key) {\n\t                    result_1[key] = _this.toJson(subValue, depth + 1, done.concat([value]));\n\t                });\n\t                result_1['ref'];\n\t                return result_1;\n\t            }\n\t        }\n\t        return value;\n\t    };\n\t    Debug.prototype.toJsonRef = function (value, stringValue) {\n\t        stringValue = new String(stringValue || value);\n\t        stringValue['ref'] = value;\n\t        return stringValue;\n\t    };\n\t    Debug.prototype.componentToJson = function (value, depth) {\n\t        if (depth === void 0) { depth = 0; }\n\t        var options = _.keys(value['options']);\n\t        if (options.length > 0) {\n\t            return this.toJson(value['options'], depth);\n\t        }\n\t        else {\n\t            return this.toJsonRef(value['options'], new String('No options'));\n\t        }\n\t    };\n\t    Debug.prototype.htmlToJson = function (value) {\n\t        if (value == null) {\n\t            return undefined;\n\t        }\n\t        return {\n\t            tagName: value.tagName,\n\t            id: value.id,\n\t            classList: value.className.split(/\\s+/)\n\t        };\n\t    };\n\t    Debug.prototype.templateToJson = function (template) {\n\t        if (template == null) {\n\t            return null;\n\t        }\n\t        var element = template['element'];\n\t        var templateObject = {\n\t            type: template.getType(),\n\t        };\n\t        if (element != null) {\n\t            templateObject.id = element.id;\n\t            templateObject.condition = element.attributes['data-condition'];\n\t            templateObject.content = element.innerText;\n\t        }\n\t        return templateObject;\n\t    };\n\t    Debug.prototype.selectElementText = function (el) {\n\t        if (window.getSelection && document.createRange) {\n\t            var selection = window.getSelection();\n\t            var range = document.createRange();\n\t            range.selectNodeContents(el);\n\t            selection.removeAllRanges();\n\t            selection.addRange(range);\n\t        }\n\t        else if ('createTextRange' in document.body) {\n\t            var textRange = document.body['createTextRange']();\n\t            textRange.moveToElementText(el);\n\t            textRange.select();\n\t        }\n\t    };\n\t    Debug.prototype.highlightSearch = function (element, search) {\n\t        if (element != null) {\n\t            var match = element.innerText.split(new RegExp('(?=' + StringUtils_1.StringUtils.regexEncode(search) + ')', 'gi'));\n\t            element.innerHTML = '';\n\t            match.forEach(function (value) {\n\t                var regex = new RegExp('(' + StringUtils_1.StringUtils.regexEncode(search) + ')', 'i');\n\t                var group = value.match(regex);\n\t                var span;\n\t                if (group != null) {\n\t                    span = Dom_1.Dom.createElement('span', { className: 'coveo-debug-highlight' });\n\t                    span.appendChild(document.createTextNode(group[1]));\n\t                    element.appendChild(span);\n\t                    span = Dom_1.Dom.createElement('span');\n\t                    span.appendChild(document.createTextNode(value.substr(group[1].length)));\n\t                    element.appendChild(span);\n\t                }\n\t                else {\n\t                    span = Dom_1.Dom.createElement('span');\n\t                    span.appendChild(document.createTextNode(value));\n\t                    element.appendChild(span);\n\t                }\n\t            });\n\t        }\n\t    };\n\t    Debug.prototype.removeHighlightSearch = function (element) {\n\t        if (element != null) {\n\t            element.innerHTML = element.innerText;\n\t        }\n\t    };\n\t    return Debug;\n\t}(RootComponent_1.RootComponent));\n\tDebug.ID = 'Debug';\n\tDebug.options = {\n\t    enableDebug: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false })\n\t};\n\tDebug.customOrder = ['error', 'queryDuration', 'result', 'fields', 'rankingInfo', 'template', 'query', 'results', 'state'];\n\tDebug.durationKeys = ['indexDuration', 'proxyDuration', 'clientDuration', 'duration'];\n\tDebug.maxDepth = 10;\n\texports.Debug = Debug;\n\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;;(function () {\n\t\t'use strict';\n\t\n\t\t/**\n\t\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t\t *\n\t\t * @codingstandard ftlabs-jsv2\n\t\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t\t * @license MIT License (see LICENSE.txt)\n\t\t */\n\t\n\t\t/*jslint browser:true, node:true*/\n\t\t/*global define, Event, Node*/\n\t\n\t\n\t\t/**\n\t\t * Instantiate fast-clicking listeners on the specified layer.\n\t\t *\n\t\t * @constructor\n\t\t * @param {Element} layer The layer to listen on\n\t\t * @param {Object} [options={}] The options to override the defaults\n\t\t */\n\t\tfunction FastClick(layer, options) {\n\t\t\tvar oldOnClick;\n\t\n\t\t\toptions = options || {};\n\t\n\t\t\t/**\n\t\t\t * Whether a click is currently being tracked.\n\t\t\t *\n\t\t\t * @type boolean\n\t\t\t */\n\t\t\tthis.trackingClick = false;\n\t\n\t\n\t\t\t/**\n\t\t\t * Timestamp for when click tracking started.\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.trackingClickStart = 0;\n\t\n\t\n\t\t\t/**\n\t\t\t * The element being tracked for a click.\n\t\t\t *\n\t\t\t * @type EventTarget\n\t\t\t */\n\t\t\tthis.targetElement = null;\n\t\n\t\n\t\t\t/**\n\t\t\t * X-coordinate of touch start event.\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.touchStartX = 0;\n\t\n\t\n\t\t\t/**\n\t\t\t * Y-coordinate of touch start event.\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.touchStartY = 0;\n\t\n\t\n\t\t\t/**\n\t\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.lastTouchIdentifier = 0;\n\t\n\t\n\t\t\t/**\n\t\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.touchBoundary = options.touchBoundary || 10;\n\t\n\t\n\t\t\t/**\n\t\t\t * The FastClick layer.\n\t\t\t *\n\t\t\t * @type Element\n\t\t\t */\n\t\t\tthis.layer = layer;\n\t\n\t\t\t/**\n\t\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.tapDelay = options.tapDelay || 200;\n\t\n\t\t\t/**\n\t\t\t * The maximum time for a tap\n\t\t\t *\n\t\t\t * @type number\n\t\t\t */\n\t\t\tthis.tapTimeout = options.tapTimeout || 700;\n\t\n\t\t\tif (FastClick.notNeeded(layer)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\t\tfunction bind(method, context) {\n\t\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t\t}\n\t\n\t\n\t\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\t\tvar context = this;\n\t\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t\t}\n\t\n\t\t\t// Set up event handlers as required\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t\t}\n\t\n\t\t\tlayer.addEventListener('click', this.onClick, true);\n\t\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\t\n\t\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t\t// layer when they are cancelled.\n\t\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}), capture);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\n\t\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t\t// adding it as listener.\n\t\t\tif (typeof layer.onclick === 'function') {\n\t\n\t\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\t\toldOnClick = layer.onclick;\n\t\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\t\toldOnClick(event);\n\t\t\t\t}, false);\n\t\t\t\tlayer.onclick = null;\n\t\t\t}\n\t\t}\n\t\n\t\t/**\n\t\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t\t*\n\t\t* @type boolean\n\t\t*/\n\t\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\t\n\t\t/**\n\t\t * Android requires exceptions.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\t\n\t\n\t\t/**\n\t\t * iOS requires exceptions.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\t\n\t\n\t\t/**\n\t\t * iOS 4 requires an exception for select elements.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\t\n\t\n\t\t/**\n\t\t * iOS 6.0-7.* requires the target element to be manually derived\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\t\n\t\t/**\n\t\t * BlackBerry requires exceptions.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\t\n\t\t/**\n\t\t * Determine whether a given element requires a native click.\n\t\t *\n\t\t * @param {EventTarget|Element} target Target DOM element\n\t\t * @returns {boolean} Returns true if the element needs a native click\n\t\t */\n\t\tFastClick.prototype.needsClick = function(target) {\n\t\t\tswitch (target.nodeName.toLowerCase()) {\n\t\n\t\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\t\tcase 'button':\n\t\t\tcase 'select':\n\t\t\tcase 'textarea':\n\t\t\t\tif (target.disabled) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\n\t\t\t\tbreak;\n\t\t\tcase 'input':\n\t\n\t\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\n\t\t\t\tbreak;\n\t\t\tcase 'label':\n\t\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\t\tcase 'video':\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t\t *\n\t\t * @param {EventTarget|Element} target Target DOM element\n\t\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t\t */\n\t\tFastClick.prototype.needsFocus = function(target) {\n\t\t\tswitch (target.nodeName.toLowerCase()) {\n\t\t\tcase 'textarea':\n\t\t\t\treturn true;\n\t\t\tcase 'select':\n\t\t\t\treturn !deviceIsAndroid;\n\t\t\tcase 'input':\n\t\t\t\tswitch (target.type) {\n\t\t\t\tcase 'button':\n\t\t\t\tcase 'checkbox':\n\t\t\t\tcase 'file':\n\t\t\t\tcase 'image':\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\n\t\t\t\t// No point in attempting to focus disabled inputs\n\t\t\t\treturn !target.disabled && !target.readOnly;\n\t\t\tdefault:\n\t\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t\t}\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Send a click event to the specified element.\n\t\t *\n\t\t * @param {EventTarget|Element} targetElement\n\t\t * @param {Event} event\n\t\t */\n\t\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\t\tvar clickEvent, touch;\n\t\n\t\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\n\t\t\ttouch = event.changedTouches[0];\n\t\n\t\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\t\tclickEvent = document.createEvent('MouseEvents');\n\t\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\t\tclickEvent.forwardedTouchEvent = true;\n\t\t\ttargetElement.dispatchEvent(clickEvent);\n\t\t};\n\t\n\t\tFastClick.prototype.determineEventType = function(targetElement) {\n\t\n\t\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\t\treturn 'mousedown';\n\t\t\t}\n\t\n\t\t\treturn 'click';\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * @param {EventTarget|Element} targetElement\n\t\t */\n\t\tFastClick.prototype.focus = function(targetElement) {\n\t\t\tvar length;\n\t\n\t\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\t\tlength = targetElement.value.length;\n\t\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t\t} else {\n\t\t\t\ttargetElement.focus();\n\t\t\t}\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t\t *\n\t\t * @param {EventTarget|Element} targetElement\n\t\t */\n\t\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\t\tvar scrollParent, parentElement;\n\t\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\n\t\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t\t// target element was moved to another parent.\n\t\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\t\tparentElement = targetElement;\n\t\t\t\tdo {\n\t\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t\t} while (parentElement);\n\t\t\t}\n\t\n\t\t\t// Always update the scroll top tracker if possible.\n\t\t\tif (scrollParent) {\n\t\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t\t}\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * @param {EventTarget} targetElement\n\t\t * @returns {Element|EventTarget}\n\t\t */\n\t\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\t\n\t\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\t\treturn eventTarget.parentNode;\n\t\t\t}\n\t\n\t\t\treturn eventTarget;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * On touch start, record the position and scroll offset.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.onTouchStart = function(event) {\n\t\t\tvar targetElement, touch, selection;\n\t\n\t\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\t\tif (event.targetTouches.length > 1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\t\ttouch = event.targetTouches[0];\n\t\n\t\t\tif (deviceIsIOS) {\n\t\n\t\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\n\t\t\t\tif (!deviceIsIOS4) {\n\t\n\t\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\t\n\t\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tthis.trackingClick = true;\n\t\t\tthis.trackingClickStart = event.timeStamp;\n\t\t\tthis.targetElement = targetElement;\n\t\n\t\t\tthis.touchStartX = touch.pageX;\n\t\t\tthis.touchStartY = touch.pageY;\n\t\n\t\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.touchHasMoved = function(event) {\n\t\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\t\n\t\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\treturn false;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Update the last position.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.onTouchMove = function(event) {\n\t\t\tif (!this.trackingClick) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// If the touch has moved, cancel the click tracking\n\t\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\t\tthis.trackingClick = false;\n\t\t\t\tthis.targetElement = null;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Attempt to find the labelled control for the given label element.\n\t\t *\n\t\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t\t * @returns {Element|null}\n\t\t */\n\t\tFastClick.prototype.findControl = function(labelElement) {\n\t\n\t\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\t\tif (labelElement.control !== undefined) {\n\t\t\t\treturn labelElement.control;\n\t\t\t}\n\t\n\t\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\t\tif (labelElement.htmlFor) {\n\t\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t\t}\n\t\n\t\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * On touch end, determine whether to send a click event at once.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.onTouchEnd = function(event) {\n\t\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\t\n\t\t\tif (!this.trackingClick) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\t\tthis.cancelNextClick = true;\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\t\tthis.cancelNextClick = false;\n\t\n\t\t\tthis.lastClickTime = event.timeStamp;\n\t\n\t\t\ttrackingClickStart = this.trackingClickStart;\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.trackingClickStart = 0;\n\t\n\t\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t\t// See issue #57; also filed as rdar://13048589 .\n\t\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\t\ttouch = event.changedTouches[0];\n\t\n\t\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t\t}\n\t\n\t\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\t\tif (targetTagName === 'label') {\n\t\t\t\tforElement = this.findControl(targetElement);\n\t\t\t\tif (forElement) {\n\t\t\t\t\tthis.focus(targetElement);\n\t\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttargetElement = forElement;\n\t\t\t\t}\n\t\t\t} else if (this.needsFocus(targetElement)) {\n\t\n\t\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\t\tthis.targetElement = null;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tthis.sendClick(targetElement, event);\n\t\n\t\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\t\tthis.targetElement = null;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\t\n\t\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\t\tif (!this.needsClick(targetElement)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.sendClick(targetElement, event);\n\t\t\t}\n\t\n\t\t\treturn false;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * On touch cancel, stop tracking the click.\n\t\t *\n\t\t * @returns {void}\n\t\t */\n\t\tFastClick.prototype.onTouchCancel = function() {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Determine mouse events which should be permitted.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.onMouse = function(event) {\n\t\n\t\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\t\tif (!this.targetElement) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\tif (event.forwardedTouchEvent) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\t\tif (!event.cancelable) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t\t// to prevent ghost/doubleclicks.\n\t\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\t\n\t\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t} else {\n\t\n\t\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\t\tevent.propagationStopped = true;\n\t\t\t\t}\n\t\n\t\t\t\t// Cancel the event\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\t\treturn true;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t\t * an actual click which should be permitted.\n\t\t *\n\t\t * @param {Event} event\n\t\t * @returns {boolean}\n\t\t */\n\t\tFastClick.prototype.onClick = function(event) {\n\t\t\tvar permitted;\n\t\n\t\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\t\tif (this.trackingClick) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tthis.trackingClick = false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\tpermitted = this.onMouse(event);\n\t\n\t\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\t\tif (!permitted) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t}\n\t\n\t\t\t// If clicks are permitted, return true for the action to go through.\n\t\t\treturn permitted;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Remove all FastClick's event listeners.\n\t\t *\n\t\t * @returns {void}\n\t\t */\n\t\tFastClick.prototype.destroy = function() {\n\t\t\tvar layer = this.layer;\n\t\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t\t}\n\t\n\t\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Check whether FastClick is needed.\n\t\t *\n\t\t * @param {Element} layer The layer to listen on\n\t\t */\n\t\tFastClick.notNeeded = function(layer) {\n\t\t\tvar metaViewport;\n\t\t\tvar chromeVersion;\n\t\t\tvar blackberryVersion;\n\t\t\tvar firefoxVersion;\n\t\n\t\t\t// Devices that don't support touch don't need FastClick\n\t\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Chrome version - zero for other browsers\n\t\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\t\n\t\t\tif (chromeVersion) {\n\t\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\n\t\t\t\t\tif (metaViewport) {\n\t\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t\t} else {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (deviceIsBlackBerry10) {\n\t\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\t\n\t\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\n\t\t\t\t\tif (metaViewport) {\n\t\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\t// Firefox version - zero for other browsers\n\t\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\t\n\t\t\tif (firefoxVersion >= 27) {\n\t\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\t\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\n\t\t\treturn false;\n\t\t};\n\t\n\t\n\t\t/**\n\t\t * Factory method for creating a FastClick object\n\t\t *\n\t\t * @param {Element} layer The layer to listen on\n\t\t * @param {Object} [options={}] The options to override the defaults\n\t\t */\n\t\tFastClick.attach = function(layer, options) {\n\t\t\treturn new FastClick(layer, options);\n\t\t};\n\t\n\t\n\t\tif (true) {\n\t\n\t\t\t// AMD. Register as an anonymous module.\n\t\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t\t\t\treturn FastClick;\n\t\t\t}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = FastClick.attach;\n\t\t\tmodule.exports.FastClick = FastClick;\n\t\t} else {\n\t\t\twindow.FastClick = FastClick;\n\t\t}\n\t}());\n\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root) {/*global exports, Intl*/\n\t/**\n\t * This script gives you the zone info key representing your device's time zone setting.\n\t *\n\t * @name jsTimezoneDetect\n\t * @version 1.0.6\n\t * @author Jon Nylander\n\t * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt\n\t *\n\t * For usage and examples, visit:\n\t * http://pellepim.bitbucket.org/jstz/\n\t *\n\t * Copyright (c) Jon Nylander\n\t */\n\t\n\t\n\t/**\n\t * Namespace to hold all the code for timezone detection.\n\t */\n\tvar jstz = (function () {\n\t    'use strict';\n\t    var HEMISPHERE_SOUTH = 's',\n\t\n\t        consts = {\n\t            DAY: 86400000,\n\t            HOUR: 3600000,\n\t            MINUTE: 60000,\n\t            SECOND: 1000,\n\t            BASELINE_YEAR: 2014,\n\t            MAX_SCORE: 864000000, // 10 days\n\t            AMBIGUITIES: {\n\t                'America/Denver':       ['America/Mazatlan'],\n\t                'Europe/London':        ['Africa/Casablanca'],\n\t                'America/Chicago':      ['America/Mexico_City'],\n\t                'America/Asuncion':     ['America/Campo_Grande', 'America/Santiago'],\n\t                'America/Montevideo':   ['America/Sao_Paulo', 'America/Santiago'],\n\t                // Europe/Minsk should not be in this list... but Windows.\n\t                'Asia/Beirut':          ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'],\n\t                'Pacific/Auckland':     ['Pacific/Fiji'],\n\t                'America/Los_Angeles':  ['America/Santa_Isabel'],\n\t                'America/New_York':     ['America/Havana'],\n\t                'America/Halifax':      ['America/Goose_Bay'],\n\t                'America/Godthab':      ['America/Miquelon'],\n\t                'Asia/Dubai':           ['Asia/Yerevan'],\n\t                'Asia/Jakarta':         ['Asia/Krasnoyarsk'],\n\t                'Asia/Shanghai':        ['Asia/Irkutsk', 'Australia/Perth'],\n\t                'Australia/Sydney':     ['Australia/Lord_Howe'],\n\t                'Asia/Tokyo':           ['Asia/Yakutsk'],\n\t                'Asia/Dhaka':           ['Asia/Omsk'],\n\t                // In the real world Yerevan is not ambigous for Baku... but Windows.\n\t                'Asia/Baku':            ['Asia/Yerevan'],\n\t                'Australia/Brisbane':   ['Asia/Vladivostok'],\n\t                'Pacific/Noumea':       ['Asia/Vladivostok'],\n\t                'Pacific/Majuro':       ['Asia/Kamchatka', 'Pacific/Fiji'],\n\t                'Pacific/Tongatapu':    ['Pacific/Apia'],\n\t                'Asia/Baghdad':         ['Europe/Minsk', 'Europe/Moscow'],\n\t                'Asia/Karachi':         ['Asia/Yekaterinburg'],\n\t                'Africa/Johannesburg':  ['Asia/Gaza', 'Africa/Cairo']\n\t            }\n\t        },\n\t\n\t        /**\n\t         * Gets the offset in minutes from UTC for a certain date.\n\t         * @param {Date} date\n\t         * @returns {Number}\n\t         */\n\t        get_date_offset = function get_date_offset(date) {\n\t            var offset = -date.getTimezoneOffset();\n\t            return (offset !== null ? offset : 0);\n\t        },\n\t\n\t        /**\n\t         * This function does some basic calculations to create information about\n\t         * the user's timezone. It uses REFERENCE_YEAR as a solid year for which\n\t         * the script has been tested rather than depend on the year set by the\n\t         * client device.\n\t         *\n\t         * Returns a key that can be used to do lookups in jstz.olson.timezones.\n\t         * eg: \"720,1,2\".\n\t         *\n\t         * @returns {String}\n\t         */\n\t        lookup_key = function lookup_key() {\n\t            var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)),\n\t                june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)),\n\t                diff = january_offset - june_offset;\n\t\n\t            if (diff < 0) {\n\t                return january_offset + \",1\";\n\t            } else if (diff > 0) {\n\t                return june_offset + \",1,\" + HEMISPHERE_SOUTH;\n\t            }\n\t\n\t            return january_offset + \",0\";\n\t        },\n\t\n\t\n\t        /**\n\t         * Tries to get the time zone key directly from the operating system for those\n\t         * environments that support the ECMAScript Internationalization API.\n\t         */\n\t        get_from_internationalization_api = function get_from_internationalization_api() {\n\t            var format, timezone;\n\t            if (typeof Intl === \"undefined\" || typeof Intl.DateTimeFormat === \"undefined\") {\n\t                return;\n\t            }\n\t\n\t            format = Intl.DateTimeFormat();\n\t\n\t            if (typeof format === \"undefined\" || typeof format.resolvedOptions === \"undefined\") {\n\t                return;\n\t            }\n\t\n\t            timezone = format.resolvedOptions().timeZone;\n\t\n\t            if (timezone && (timezone.indexOf(\"/\") > -1 || timezone === 'UTC')) {\n\t                return timezone;\n\t            }\n\t\n\t        },\n\t\n\t        /**\n\t         * Starting point for getting all the DST rules for a specific year\n\t         * for the current timezone (as described by the client system).\n\t         *\n\t         * Returns an object with start and end attributes, or false if no\n\t         * DST rules were found for the year.\n\t         *\n\t         * @param year\n\t         * @returns {Object} || {Boolean}\n\t         */\n\t        dst_dates = function dst_dates(year) {\n\t            var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime();\n\t            var yearend = new Date(year, 12, 31, 23, 59, 59).getTime();\n\t            var current = yearstart;\n\t            var offset = (new Date(current)).getTimezoneOffset();\n\t            var dst_start = null;\n\t            var dst_end = null;\n\t\n\t            while (current < yearend - 86400000) {\n\t                var dateToCheck = new Date(current);\n\t                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\t\n\t                if (dateToCheckOffset !== offset) {\n\t                    if (dateToCheckOffset < offset) {\n\t                        dst_start = dateToCheck;\n\t                    }\n\t                    if (dateToCheckOffset > offset) {\n\t                        dst_end = dateToCheck;\n\t                    }\n\t                    offset = dateToCheckOffset;\n\t                }\n\t\n\t                current += 86400000;\n\t            }\n\t\n\t            if (dst_start && dst_end) {\n\t                return {\n\t                    s: find_dst_fold(dst_start).getTime(),\n\t                    e: find_dst_fold(dst_end).getTime()\n\t                };\n\t            }\n\t\n\t            return false;\n\t        },\n\t\n\t        /**\n\t         * Probably completely unnecessary function that recursively finds the\n\t         * exact (to the second) time when a DST rule was changed.\n\t         *\n\t         * @param a_date - The candidate Date.\n\t         * @param padding - integer specifying the padding to allow around the candidate\n\t         *                  date for finding the fold.\n\t         * @param iterator - integer specifying how many milliseconds to iterate while\n\t         *                   searching for the fold.\n\t         *\n\t         * @returns {Date}\n\t         */\n\t        find_dst_fold = function find_dst_fold(a_date, padding, iterator) {\n\t            if (typeof padding === 'undefined') {\n\t                padding = consts.DAY;\n\t                iterator = consts.HOUR;\n\t            }\n\t\n\t            var date_start = new Date(a_date.getTime() - padding).getTime();\n\t            var date_end = a_date.getTime() + padding;\n\t            var offset = new Date(date_start).getTimezoneOffset();\n\t\n\t            var current = date_start;\n\t\n\t            var dst_change = null;\n\t            while (current < date_end - iterator) {\n\t                var dateToCheck = new Date(current);\n\t                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\t\n\t                if (dateToCheckOffset !== offset) {\n\t                    dst_change = dateToCheck;\n\t                    break;\n\t                }\n\t                current += iterator;\n\t            }\n\t\n\t            if (padding === consts.DAY) {\n\t                return find_dst_fold(dst_change, consts.HOUR, consts.MINUTE);\n\t            }\n\t\n\t            if (padding === consts.HOUR) {\n\t                return find_dst_fold(dst_change, consts.MINUTE, consts.SECOND);\n\t            }\n\t\n\t            return dst_change;\n\t        },\n\t\n\t        windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) {\n\t            if (score !== 'N/A') {\n\t                return score;\n\t            }\n\t            if (preliminary_timezone === 'Asia/Beirut') {\n\t                if (sample.name === 'Africa/Cairo') {\n\t                    if (rule_list[6].s === 1398376800000 && rule_list[6].e === 1411678800000) {\n\t                        return 0;\n\t                    }\n\t                }\n\t                if (sample.name === 'Asia/Jerusalem') {\n\t                    if (rule_list[6].s === 1395964800000 && rule_list[6].e === 1411858800000) {\n\t                        return 0;\n\t                }\n\t            }\n\t            } else if (preliminary_timezone === 'America/Santiago') {\n\t                if (sample.name === 'America/Asuncion') {\n\t                    if (rule_list[6].s === 1412481600000 && rule_list[6].e === 1397358000000) {\n\t                        return 0;\n\t                    }\n\t                }\n\t                if (sample.name === 'America/Campo_Grande') {\n\t                    if (rule_list[6].s === 1413691200000 && rule_list[6].e === 1392519600000) {\n\t                        return 0;\n\t                    }\n\t                }\n\t            } else if (preliminary_timezone === 'America/Montevideo') {\n\t                if (sample.name === 'America/Sao_Paulo') {\n\t                    if (rule_list[6].s === 1413687600000 && rule_list[6].e === 1392516000000) {\n\t                        return 0;\n\t                    }\n\t                }\n\t            } else if (preliminary_timezone === 'Pacific/Auckland') {\n\t                if (sample.name === 'Pacific/Fiji') {\n\t                    if (rule_list[6].s === 1414245600000 && rule_list[6].e === 1396101600000) {\n\t                        return 0;\n\t                    }\n\t                }\n\t            }\n\t\n\t            return score;\n\t        },\n\t\n\t        /**\n\t         * Takes the DST rules for the current timezone, and proceeds to find matches\n\t         * in the jstz.olson.dst_rules.zones array.\n\t         *\n\t         * Compares samples to the current timezone on a scoring basis.\n\t         *\n\t         * Candidates are ruled immediately if either the candidate or the current zone\n\t         * has a DST rule where the other does not.\n\t         *\n\t         * Candidates are ruled out immediately if the current zone has a rule that is\n\t         * outside the DST scope of the candidate.\n\t         *\n\t         * Candidates are included for scoring if the current zones rules fall within the\n\t         * span of the samples rules.\n\t         *\n\t         * Low score is best, the score is calculated by summing up the differences in DST\n\t         * rules and if the consts.MAX_SCORE is overreached the candidate is ruled out.\n\t         *\n\t         * Yah follow? :)\n\t         *\n\t         * @param rule_list\n\t         * @param preliminary_timezone\n\t         * @returns {*}\n\t         */\n\t        best_dst_match = function best_dst_match(rule_list, preliminary_timezone) {\n\t            var score_sample = function score_sample(sample) {\n\t                var score = 0;\n\t\n\t                for (var j = 0; j < rule_list.length; j++) {\n\t\n\t                    // Both sample and current time zone report DST during the year.\n\t                    if (!!sample.rules[j] && !!rule_list[j]) {\n\t\n\t                        // The current time zone's DST rules are inside the sample's. Include.\n\t                        if (rule_list[j].s >= sample.rules[j].s && rule_list[j].e <= sample.rules[j].e) {\n\t                            score = 0;\n\t                            score += Math.abs(rule_list[j].s - sample.rules[j].s);\n\t                            score += Math.abs(sample.rules[j].e - rule_list[j].e);\n\t\n\t                        // The current time zone's DST rules are outside the sample's. Discard.\n\t                        } else {\n\t                            score = 'N/A';\n\t                            break;\n\t                        }\n\t\n\t                        // The max score has been reached. Discard.\n\t                        if (score > consts.MAX_SCORE) {\n\t                            score = 'N/A';\n\t                            break;\n\t                        }\n\t                    }\n\t                }\n\t\n\t                score = windows7_adaptations(rule_list, preliminary_timezone, score, sample);\n\t\n\t                return score;\n\t            };\n\t            var scoreboard = {};\n\t            var dst_zones = jstz.olson.dst_rules.zones;\n\t            var dst_zones_length = dst_zones.length;\n\t            var ambiguities = consts.AMBIGUITIES[preliminary_timezone];\n\t\n\t            for (var i = 0; i < dst_zones_length; i++) {\n\t                var sample = dst_zones[i];\n\t                var score = score_sample(dst_zones[i]);\n\t\n\t                if (score !== 'N/A') {\n\t                    scoreboard[sample.name] = score;\n\t                }\n\t            }\n\t\n\t            for (var tz in scoreboard) {\n\t                if (scoreboard.hasOwnProperty(tz)) {\n\t                    for (var j = 0; j < ambiguities.length; j++) {\n\t                        if (ambiguities[j] === tz) {\n\t                            return tz;\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t\n\t            return preliminary_timezone;\n\t        },\n\t\n\t        /**\n\t         * Takes the preliminary_timezone as detected by lookup_key().\n\t         *\n\t         * Builds up the current timezones DST rules for the years defined\n\t         * in the jstz.olson.dst_rules.years array.\n\t         *\n\t         * If there are no DST occurences for those years, immediately returns\n\t         * the preliminary timezone. Otherwise proceeds and tries to solve\n\t         * ambiguities.\n\t         *\n\t         * @param preliminary_timezone\n\t         * @returns {String} timezone_name\n\t         */\n\t        get_by_dst = function get_by_dst(preliminary_timezone) {\n\t            var get_rules = function get_rules() {\n\t                var rule_list = [];\n\t                for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) {\n\t                    var year_rules = dst_dates(jstz.olson.dst_rules.years[i]);\n\t                    rule_list.push(year_rules);\n\t                }\n\t                return rule_list;\n\t            };\n\t            var check_has_dst = function check_has_dst(rules) {\n\t                for (var i = 0; i < rules.length; i++) {\n\t                    if (rules[i] !== false) {\n\t                        return true;\n\t                    }\n\t                }\n\t                return false;\n\t            };\n\t            var rules = get_rules();\n\t            var has_dst = check_has_dst(rules);\n\t\n\t            if (has_dst) {\n\t                return best_dst_match(rules, preliminary_timezone);\n\t            }\n\t\n\t            return preliminary_timezone;\n\t        },\n\t\n\t        /**\n\t         * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.\n\t         *\n\t         * Returns an object with one function \".name()\"\n\t         *\n\t         * @returns Object\n\t         */\n\t        determine = function determine() {\n\t            var preliminary_tz = get_from_internationalization_api();\n\t\n\t            if (!preliminary_tz) {\n\t                preliminary_tz = jstz.olson.timezones[lookup_key()];\n\t\n\t                if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') {\n\t                    preliminary_tz = get_by_dst(preliminary_tz);\n\t                }\n\t            }\n\t\n\t            return {\n\t                name: function () {\n\t                    return preliminary_tz;\n\t                }\n\t            };\n\t        };\n\t\n\t    return {\n\t        determine: determine\n\t    };\n\t}());\n\t\n\t\n\tjstz.olson = jstz.olson || {};\n\t\n\t/**\n\t * The keys in this dictionary are comma separated as such:\n\t *\n\t * First the offset compared to UTC time in minutes.\n\t *\n\t * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it\n\t * does.\n\t *\n\t * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,\n\t * only interesting for timezones with DST.\n\t *\n\t * The mapped arrays is used for constructing the jstz.TimeZone object from within\n\t * jstz.determine();\n\t */\n\tjstz.olson.timezones = {\n\t    '-720,0': 'Etc/GMT+12',\n\t    '-660,0': 'Pacific/Pago_Pago',\n\t    '-660,1,s': 'Pacific/Apia', // Why? Because windows... cry!\n\t    '-600,1': 'America/Adak',\n\t    '-600,0': 'Pacific/Honolulu',\n\t    '-570,0': 'Pacific/Marquesas',\n\t    '-540,0': 'Pacific/Gambier',\n\t    '-540,1': 'America/Anchorage',\n\t    '-480,1': 'America/Los_Angeles',\n\t    '-480,0': 'Pacific/Pitcairn',\n\t    '-420,0': 'America/Phoenix',\n\t    '-420,1': 'America/Denver',\n\t    '-360,0': 'America/Guatemala',\n\t    '-360,1': 'America/Chicago',\n\t    '-360,1,s': 'Pacific/Easter',\n\t    '-300,0': 'America/Bogota',\n\t    '-300,1': 'America/New_York',\n\t    '-270,0': 'America/Caracas',\n\t    '-240,1': 'America/Halifax',\n\t    '-240,0': 'America/Santo_Domingo',\n\t    '-240,1,s': 'America/Asuncion',\n\t    '-210,1': 'America/St_Johns',\n\t    '-180,1': 'America/Godthab',\n\t    '-180,0': 'America/Argentina/Buenos_Aires',\n\t    '-180,1,s': 'America/Montevideo',\n\t    '-120,0': 'America/Noronha',\n\t    '-120,1': 'America/Noronha',\n\t    '-60,1': 'Atlantic/Azores',\n\t    '-60,0': 'Atlantic/Cape_Verde',\n\t    '0,0': 'UTC',\n\t    '0,1': 'Europe/London',\n\t    '60,1': 'Europe/Berlin',\n\t    '60,0': 'Africa/Lagos',\n\t    '60,1,s': 'Africa/Windhoek',\n\t    '120,1': 'Asia/Beirut',\n\t    '120,0': 'Africa/Johannesburg',\n\t    '180,0': 'Asia/Baghdad',\n\t    '180,1': 'Europe/Moscow',\n\t    '210,1': 'Asia/Tehran',\n\t    '240,0': 'Asia/Dubai',\n\t    '240,1': 'Asia/Baku',\n\t    '270,0': 'Asia/Kabul',\n\t    '300,1': 'Asia/Yekaterinburg',\n\t    '300,0': 'Asia/Karachi',\n\t    '330,0': 'Asia/Kolkata',\n\t    '345,0': 'Asia/Kathmandu',\n\t    '360,0': 'Asia/Dhaka',\n\t    '360,1': 'Asia/Omsk',\n\t    '390,0': 'Asia/Rangoon',\n\t    '420,1': 'Asia/Krasnoyarsk',\n\t    '420,0': 'Asia/Jakarta',\n\t    '480,0': 'Asia/Shanghai',\n\t    '480,1': 'Asia/Irkutsk',\n\t    '525,0': 'Australia/Eucla',\n\t    '525,1,s': 'Australia/Eucla',\n\t    '540,1': 'Asia/Yakutsk',\n\t    '540,0': 'Asia/Tokyo',\n\t    '570,0': 'Australia/Darwin',\n\t    '570,1,s': 'Australia/Adelaide',\n\t    '600,0': 'Australia/Brisbane',\n\t    '600,1': 'Asia/Vladivostok',\n\t    '600,1,s': 'Australia/Sydney',\n\t    '630,1,s': 'Australia/Lord_Howe',\n\t    '660,1': 'Asia/Kamchatka',\n\t    '660,0': 'Pacific/Noumea',\n\t    '690,0': 'Pacific/Norfolk',\n\t    '720,1,s': 'Pacific/Auckland',\n\t    '720,0': 'Pacific/Majuro',\n\t    '765,1,s': 'Pacific/Chatham',\n\t    '780,0': 'Pacific/Tongatapu',\n\t    '780,1,s': 'Pacific/Apia',\n\t    '840,0': 'Pacific/Kiritimati'\n\t};\n\t\n\t/* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */\n\tjstz.olson.dst_rules = {\n\t    \"years\": [\n\t        2008,\n\t        2009,\n\t        2010,\n\t        2011,\n\t        2012,\n\t        2013,\n\t        2014\n\t    ],\n\t    \"zones\": [\n\t        {\n\t            \"name\": \"Africa/Cairo\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1219957200000,\n\t                    \"s\": 1209074400000\n\t                },\n\t                {\n\t                    \"e\": 1250802000000,\n\t                    \"s\": 1240524000000\n\t                },\n\t                {\n\t                    \"e\": 1285880400000,\n\t                    \"s\": 1284069600000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                {\n\t                    \"e\": 1411678800000,\n\t                    \"s\": 1406844000000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Africa/Casablanca\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1220223600000,\n\t                    \"s\": 1212278400000\n\t                },\n\t                {\n\t                    \"e\": 1250809200000,\n\t                    \"s\": 1243814400000\n\t                },\n\t                {\n\t                    \"e\": 1281222000000,\n\t                    \"s\": 1272758400000\n\t                },\n\t                {\n\t                    \"e\": 1312066800000,\n\t                    \"s\": 1301788800000\n\t                },\n\t                {\n\t                    \"e\": 1348970400000,\n\t                    \"s\": 1345428000000\n\t                },\n\t                {\n\t                    \"e\": 1382839200000,\n\t                    \"s\": 1376100000000\n\t                },\n\t                {\n\t                    \"e\": 1414288800000,\n\t                    \"s\": 1406944800000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Asuncion\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1205031600000,\n\t                    \"s\": 1224388800000\n\t                },\n\t                {\n\t                    \"e\": 1236481200000,\n\t                    \"s\": 1255838400000\n\t                },\n\t                {\n\t                    \"e\": 1270954800000,\n\t                    \"s\": 1286078400000\n\t                },\n\t                {\n\t                    \"e\": 1302404400000,\n\t                    \"s\": 1317528000000\n\t                },\n\t                {\n\t                    \"e\": 1333854000000,\n\t                    \"s\": 1349582400000\n\t                },\n\t                {\n\t                    \"e\": 1364094000000,\n\t                    \"s\": 1381032000000\n\t                },\n\t                {\n\t                    \"e\": 1395543600000,\n\t                    \"s\": 1412481600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Campo_Grande\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1203217200000,\n\t                    \"s\": 1224388800000\n\t                },\n\t                {\n\t                    \"e\": 1234666800000,\n\t                    \"s\": 1255838400000\n\t                },\n\t                {\n\t                    \"e\": 1266721200000,\n\t                    \"s\": 1287288000000\n\t                },\n\t                {\n\t                    \"e\": 1298170800000,\n\t                    \"s\": 1318737600000\n\t                },\n\t                {\n\t                    \"e\": 1330225200000,\n\t                    \"s\": 1350792000000\n\t                },\n\t                {\n\t                    \"e\": 1361070000000,\n\t                    \"s\": 1382241600000\n\t                },\n\t                {\n\t                    \"e\": 1392519600000,\n\t                    \"s\": 1413691200000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Goose_Bay\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225594860000,\n\t                    \"s\": 1205035260000\n\t                },\n\t                {\n\t                    \"e\": 1257044460000,\n\t                    \"s\": 1236484860000\n\t                },\n\t                {\n\t                    \"e\": 1289098860000,\n\t                    \"s\": 1268539260000\n\t                },\n\t                {\n\t                    \"e\": 1320555600000,\n\t                    \"s\": 1299988860000\n\t                },\n\t                {\n\t                    \"e\": 1352005200000,\n\t                    \"s\": 1331445600000\n\t                },\n\t                {\n\t                    \"e\": 1383454800000,\n\t                    \"s\": 1362895200000\n\t                },\n\t                {\n\t                    \"e\": 1414904400000,\n\t                    \"s\": 1394344800000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Havana\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224997200000,\n\t                    \"s\": 1205643600000\n\t                },\n\t                {\n\t                    \"e\": 1256446800000,\n\t                    \"s\": 1236488400000\n\t                },\n\t                {\n\t                    \"e\": 1288501200000,\n\t                    \"s\": 1268542800000\n\t                },\n\t                {\n\t                    \"e\": 1321160400000,\n\t                    \"s\": 1300597200000\n\t                },\n\t                {\n\t                    \"e\": 1352005200000,\n\t                    \"s\": 1333256400000\n\t                },\n\t                {\n\t                    \"e\": 1383454800000,\n\t                    \"s\": 1362891600000\n\t                },\n\t                {\n\t                    \"e\": 1414904400000,\n\t                    \"s\": 1394341200000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Mazatlan\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225008000000,\n\t                    \"s\": 1207472400000\n\t                },\n\t                {\n\t                    \"e\": 1256457600000,\n\t                    \"s\": 1238922000000\n\t                },\n\t                {\n\t                    \"e\": 1288512000000,\n\t                    \"s\": 1270371600000\n\t                },\n\t                {\n\t                    \"e\": 1319961600000,\n\t                    \"s\": 1301821200000\n\t                },\n\t                {\n\t                    \"e\": 1351411200000,\n\t                    \"s\": 1333270800000\n\t                },\n\t                {\n\t                    \"e\": 1382860800000,\n\t                    \"s\": 1365325200000\n\t                },\n\t                {\n\t                    \"e\": 1414310400000,\n\t                    \"s\": 1396774800000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Mexico_City\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225004400000,\n\t                    \"s\": 1207468800000\n\t                },\n\t                {\n\t                    \"e\": 1256454000000,\n\t                    \"s\": 1238918400000\n\t                },\n\t                {\n\t                    \"e\": 1288508400000,\n\t                    \"s\": 1270368000000\n\t                },\n\t                {\n\t                    \"e\": 1319958000000,\n\t                    \"s\": 1301817600000\n\t                },\n\t                {\n\t                    \"e\": 1351407600000,\n\t                    \"s\": 1333267200000\n\t                },\n\t                {\n\t                    \"e\": 1382857200000,\n\t                    \"s\": 1365321600000\n\t                },\n\t                {\n\t                    \"e\": 1414306800000,\n\t                    \"s\": 1396771200000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Miquelon\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225598400000,\n\t                    \"s\": 1205038800000\n\t                },\n\t                {\n\t                    \"e\": 1257048000000,\n\t                    \"s\": 1236488400000\n\t                },\n\t                {\n\t                    \"e\": 1289102400000,\n\t                    \"s\": 1268542800000\n\t                },\n\t                {\n\t                    \"e\": 1320552000000,\n\t                    \"s\": 1299992400000\n\t                },\n\t                {\n\t                    \"e\": 1352001600000,\n\t                    \"s\": 1331442000000\n\t                },\n\t                {\n\t                    \"e\": 1383451200000,\n\t                    \"s\": 1362891600000\n\t                },\n\t                {\n\t                    \"e\": 1414900800000,\n\t                    \"s\": 1394341200000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Santa_Isabel\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225011600000,\n\t                    \"s\": 1207476000000\n\t                },\n\t                {\n\t                    \"e\": 1256461200000,\n\t                    \"s\": 1238925600000\n\t                },\n\t                {\n\t                    \"e\": 1288515600000,\n\t                    \"s\": 1270375200000\n\t                },\n\t                {\n\t                    \"e\": 1319965200000,\n\t                    \"s\": 1301824800000\n\t                },\n\t                {\n\t                    \"e\": 1351414800000,\n\t                    \"s\": 1333274400000\n\t                },\n\t                {\n\t                    \"e\": 1382864400000,\n\t                    \"s\": 1365328800000\n\t                },\n\t                {\n\t                    \"e\": 1414314000000,\n\t                    \"s\": 1396778400000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Santiago\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1206846000000,\n\t                    \"s\": 1223784000000\n\t                },\n\t                {\n\t                    \"e\": 1237086000000,\n\t                    \"s\": 1255233600000\n\t                },\n\t                {\n\t                    \"e\": 1270350000000,\n\t                    \"s\": 1286683200000\n\t                },\n\t                {\n\t                    \"e\": 1304823600000,\n\t                    \"s\": 1313899200000\n\t                },\n\t                {\n\t                    \"e\": 1335668400000,\n\t                    \"s\": 1346558400000\n\t                },\n\t                {\n\t                    \"e\": 1367118000000,\n\t                    \"s\": 1378612800000\n\t                },\n\t                {\n\t                    \"e\": 1398567600000,\n\t                    \"s\": 1410062400000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"America/Sao_Paulo\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1203213600000,\n\t                    \"s\": 1224385200000\n\t                },\n\t                {\n\t                    \"e\": 1234663200000,\n\t                    \"s\": 1255834800000\n\t                },\n\t                {\n\t                    \"e\": 1266717600000,\n\t                    \"s\": 1287284400000\n\t                },\n\t                {\n\t                    \"e\": 1298167200000,\n\t                    \"s\": 1318734000000\n\t                },\n\t                {\n\t                    \"e\": 1330221600000,\n\t                    \"s\": 1350788400000\n\t                },\n\t                {\n\t                    \"e\": 1361066400000,\n\t                    \"s\": 1382238000000\n\t                },\n\t                {\n\t                    \"e\": 1392516000000,\n\t                    \"s\": 1413687600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Amman\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225404000000,\n\t                    \"s\": 1206655200000\n\t                },\n\t                {\n\t                    \"e\": 1256853600000,\n\t                    \"s\": 1238104800000\n\t                },\n\t                {\n\t                    \"e\": 1288303200000,\n\t                    \"s\": 1269554400000\n\t                },\n\t                {\n\t                    \"e\": 1319752800000,\n\t                    \"s\": 1301608800000\n\t                },\n\t                false,\n\t                false,\n\t                {\n\t                    \"e\": 1414706400000,\n\t                    \"s\": 1395957600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Damascus\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1225486800000,\n\t                    \"s\": 1207260000000\n\t                },\n\t                {\n\t                    \"e\": 1256850000000,\n\t                    \"s\": 1238104800000\n\t                },\n\t                {\n\t                    \"e\": 1288299600000,\n\t                    \"s\": 1270159200000\n\t                },\n\t                {\n\t                    \"e\": 1319749200000,\n\t                    \"s\": 1301608800000\n\t                },\n\t                {\n\t                    \"e\": 1351198800000,\n\t                    \"s\": 1333058400000\n\t                },\n\t                {\n\t                    \"e\": 1382648400000,\n\t                    \"s\": 1364508000000\n\t                },\n\t                {\n\t                    \"e\": 1414702800000,\n\t                    \"s\": 1395957600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Dubai\",\n\t            \"rules\": [\n\t                false,\n\t                false,\n\t                false,\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Gaza\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1219957200000,\n\t                    \"s\": 1206655200000\n\t                },\n\t                {\n\t                    \"e\": 1252015200000,\n\t                    \"s\": 1238104800000\n\t                },\n\t                {\n\t                    \"e\": 1281474000000,\n\t                    \"s\": 1269640860000\n\t                },\n\t                {\n\t                    \"e\": 1312146000000,\n\t                    \"s\": 1301608860000\n\t                },\n\t                {\n\t                    \"e\": 1348178400000,\n\t                    \"s\": 1333058400000\n\t                },\n\t                {\n\t                    \"e\": 1380229200000,\n\t                    \"s\": 1364508000000\n\t                },\n\t                {\n\t                    \"e\": 1414098000000,\n\t                    \"s\": 1395957600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Irkutsk\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224957600000,\n\t                    \"s\": 1206813600000\n\t                },\n\t                {\n\t                    \"e\": 1256407200000,\n\t                    \"s\": 1238263200000\n\t                },\n\t                {\n\t                    \"e\": 1288461600000,\n\t                    \"s\": 1269712800000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Jerusalem\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1223161200000,\n\t                    \"s\": 1206662400000\n\t                },\n\t                {\n\t                    \"e\": 1254006000000,\n\t                    \"s\": 1238112000000\n\t                },\n\t                {\n\t                    \"e\": 1284246000000,\n\t                    \"s\": 1269561600000\n\t                },\n\t                {\n\t                    \"e\": 1317510000000,\n\t                    \"s\": 1301616000000\n\t                },\n\t                {\n\t                    \"e\": 1348354800000,\n\t                    \"s\": 1333065600000\n\t                },\n\t                {\n\t                    \"e\": 1382828400000,\n\t                    \"s\": 1364515200000\n\t                },\n\t                {\n\t                    \"e\": 1414278000000,\n\t                    \"s\": 1395964800000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Kamchatka\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224943200000,\n\t                    \"s\": 1206799200000\n\t                },\n\t                {\n\t                    \"e\": 1256392800000,\n\t                    \"s\": 1238248800000\n\t                },\n\t                {\n\t                    \"e\": 1288450800000,\n\t                    \"s\": 1269698400000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Krasnoyarsk\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224961200000,\n\t                    \"s\": 1206817200000\n\t                },\n\t                {\n\t                    \"e\": 1256410800000,\n\t                    \"s\": 1238266800000\n\t                },\n\t                {\n\t                    \"e\": 1288465200000,\n\t                    \"s\": 1269716400000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Omsk\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224964800000,\n\t                    \"s\": 1206820800000\n\t                },\n\t                {\n\t                    \"e\": 1256414400000,\n\t                    \"s\": 1238270400000\n\t                },\n\t                {\n\t                    \"e\": 1288468800000,\n\t                    \"s\": 1269720000000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Vladivostok\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224950400000,\n\t                    \"s\": 1206806400000\n\t                },\n\t                {\n\t                    \"e\": 1256400000000,\n\t                    \"s\": 1238256000000\n\t                },\n\t                {\n\t                    \"e\": 1288454400000,\n\t                    \"s\": 1269705600000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Yakutsk\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224954000000,\n\t                    \"s\": 1206810000000\n\t                },\n\t                {\n\t                    \"e\": 1256403600000,\n\t                    \"s\": 1238259600000\n\t                },\n\t                {\n\t                    \"e\": 1288458000000,\n\t                    \"s\": 1269709200000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Yekaterinburg\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224968400000,\n\t                    \"s\": 1206824400000\n\t                },\n\t                {\n\t                    \"e\": 1256418000000,\n\t                    \"s\": 1238274000000\n\t                },\n\t                {\n\t                    \"e\": 1288472400000,\n\t                    \"s\": 1269723600000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Asia/Yerevan\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224972000000,\n\t                    \"s\": 1206828000000\n\t                },\n\t                {\n\t                    \"e\": 1256421600000,\n\t                    \"s\": 1238277600000\n\t                },\n\t                {\n\t                    \"e\": 1288476000000,\n\t                    \"s\": 1269727200000\n\t                },\n\t                {\n\t                    \"e\": 1319925600000,\n\t                    \"s\": 1301176800000\n\t                },\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Australia/Lord_Howe\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1207407600000,\n\t                    \"s\": 1223134200000\n\t                },\n\t                {\n\t                    \"e\": 1238857200000,\n\t                    \"s\": 1254583800000\n\t                },\n\t                {\n\t                    \"e\": 1270306800000,\n\t                    \"s\": 1286033400000\n\t                },\n\t                {\n\t                    \"e\": 1301756400000,\n\t                    \"s\": 1317483000000\n\t                },\n\t                {\n\t                    \"e\": 1333206000000,\n\t                    \"s\": 1349537400000\n\t                },\n\t                {\n\t                    \"e\": 1365260400000,\n\t                    \"s\": 1380987000000\n\t                },\n\t                {\n\t                    \"e\": 1396710000000,\n\t                    \"s\": 1412436600000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Australia/Perth\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1206813600000,\n\t                    \"s\": 1224957600000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Europe/Helsinki\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224982800000,\n\t                    \"s\": 1206838800000\n\t                },\n\t                {\n\t                    \"e\": 1256432400000,\n\t                    \"s\": 1238288400000\n\t                },\n\t                {\n\t                    \"e\": 1288486800000,\n\t                    \"s\": 1269738000000\n\t                },\n\t                {\n\t                    \"e\": 1319936400000,\n\t                    \"s\": 1301187600000\n\t                },\n\t                {\n\t                    \"e\": 1351386000000,\n\t                    \"s\": 1332637200000\n\t                },\n\t                {\n\t                    \"e\": 1382835600000,\n\t                    \"s\": 1364691600000\n\t                },\n\t                {\n\t                    \"e\": 1414285200000,\n\t                    \"s\": 1396141200000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Europe/Minsk\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224979200000,\n\t                    \"s\": 1206835200000\n\t                },\n\t                {\n\t                    \"e\": 1256428800000,\n\t                    \"s\": 1238284800000\n\t                },\n\t                {\n\t                    \"e\": 1288483200000,\n\t                    \"s\": 1269734400000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Europe/Moscow\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224975600000,\n\t                    \"s\": 1206831600000\n\t                },\n\t                {\n\t                    \"e\": 1256425200000,\n\t                    \"s\": 1238281200000\n\t                },\n\t                {\n\t                    \"e\": 1288479600000,\n\t                    \"s\": 1269730800000\n\t                },\n\t                false,\n\t                false,\n\t                false,\n\t                false\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Pacific/Apia\",\n\t            \"rules\": [\n\t                false,\n\t                false,\n\t                false,\n\t                {\n\t                    \"e\": 1301752800000,\n\t                    \"s\": 1316872800000\n\t                },\n\t                {\n\t                    \"e\": 1333202400000,\n\t                    \"s\": 1348927200000\n\t                },\n\t                {\n\t                    \"e\": 1365256800000,\n\t                    \"s\": 1380376800000\n\t                },\n\t                {\n\t                    \"e\": 1396706400000,\n\t                    \"s\": 1411826400000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Pacific/Fiji\",\n\t            \"rules\": [\n\t                false,\n\t                false,\n\t                {\n\t                    \"e\": 1269698400000,\n\t                    \"s\": 1287842400000\n\t                },\n\t                {\n\t                    \"e\": 1327154400000,\n\t                    \"s\": 1319292000000\n\t                },\n\t                {\n\t                    \"e\": 1358604000000,\n\t                    \"s\": 1350741600000\n\t                },\n\t                {\n\t                    \"e\": 1390050000000,\n\t                    \"s\": 1382796000000\n\t                },\n\t                {\n\t                    \"e\": 1421503200000,\n\t                    \"s\": 1414850400000\n\t                }\n\t            ]\n\t        },\n\t        {\n\t            \"name\": \"Europe/London\",\n\t            \"rules\": [\n\t                {\n\t                    \"e\": 1224982800000,\n\t                    \"s\": 1206838800000\n\t                },\n\t                {\n\t                    \"e\": 1256432400000,\n\t                    \"s\": 1238288400000\n\t                },\n\t                {\n\t                    \"e\": 1288486800000,\n\t                    \"s\": 1269738000000\n\t                },\n\t                {\n\t                    \"e\": 1319936400000,\n\t                    \"s\": 1301187600000\n\t                },\n\t                {\n\t                    \"e\": 1351386000000,\n\t                    \"s\": 1332637200000\n\t                },\n\t                {\n\t                    \"e\": 1382835600000,\n\t                    \"s\": 1364691600000\n\t                },\n\t                {\n\t                    \"e\": 1414285200000,\n\t                    \"s\": 1396141200000\n\t                }\n\t            ]\n\t        }\n\t    ]\n\t};\n\tif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n\t    module.exports = jstz;\n\t} else if ((\"function\" !== 'undefined' && __webpack_require__(6) !== null) && (__webpack_require__(125) != null)) {\n\t    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\t        return jstz;\n\t    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\t    if (typeof root === 'undefined') {\n\t        window.jstz = jstz;\n\t    } else {\n\t        root.jstz = jstz;\n\t    }\n\t}\n\t}());\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;\r\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ },\n/* 126 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Logger_1 = __webpack_require__(13);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar _ = __webpack_require__(16);\n\tvar SentryLogger = (function () {\n\t    function SentryLogger(queryController, windoh) {\n\t        if (windoh === void 0) { windoh = window; }\n\t        this.queryController = queryController;\n\t        this.windoh = windoh;\n\t        this.logger = new Logger_1.Logger(this);\n\t        this.bindErrorHandler();\n\t    }\n\t    SentryLogger.prototype.bindErrorHandler = function () {\n\t        var _this = this;\n\t        // take care of not overriding any existing onerror handler that might be already present in the page.\n\t        var oldHandler = this.windoh.onerror;\n\t        if (_.isFunction(oldHandler)) {\n\t            this.windoh.onerror = function () {\n\t                var args = [];\n\t                for (var _i = 0; _i < arguments.length; _i++) {\n\t                    args[_i] = arguments[_i];\n\t                }\n\t                oldHandler.apply(oldHandler, args);\n\t                _this.handleError.apply(_this, args);\n\t            };\n\t        }\n\t        else {\n\t            this.windoh.onerror = this.handleError.bind(this);\n\t        }\n\t    };\n\t    SentryLogger.prototype.handleError = function (message, filename, lineno, colno, error) {\n\t        // try not to log irrelevant errors ...\n\t        if (!filename.toLowerCase().match(/coveo/) || this.windoh.location.host.toLowerCase().match(/localhost/)) {\n\t            return;\n\t        }\n\t        var errorInfo = {\n\t            message: message,\n\t            filename: filename,\n\t            line: lineno,\n\t            column: colno,\n\t            error: error.toString(),\n\t            errorStack: error['stack'],\n\t            device: DeviceUtils_1.DeviceUtils.getDeviceName()\n\t        };\n\t        var sentryLog = {\n\t            level: 'DEBUG',\n\t            title: this.windoh.location.href,\n\t            message: JSON.stringify(errorInfo)\n\t        };\n\t        this.queryController.getEndpoint().logError(sentryLog);\n\t    };\n\t    return SentryLogger;\n\t}());\n\texports.SentryLogger = SentryLogger;\n\n\n/***/ },\n/* 127 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.analyticsActionCauseList = {\n\t    interfaceLoad: {\n\t        name: 'interfaceLoad',\n\t        type: 'interface'\n\t    },\n\t    interfaceChange: {\n\t        name: 'interfaceChange',\n\t        type: 'interface',\n\t        metaMap: { interfaceChangeTo: 1 }\n\t    },\n\t    contextRemove: {\n\t        name: 'contextRemove',\n\t        type: 'misc',\n\t        metaMap: { contextName: 1 }\n\t    },\n\t    didyoumeanAutomatic: {\n\t        name: 'didyoumeanAutomatic',\n\t        type: 'misc'\n\t    },\n\t    didyoumeanClick: {\n\t        name: 'didyoumeanClick',\n\t        type: 'misc'\n\t    },\n\t    resultsSort: {\n\t        name: 'resultsSort',\n\t        type: 'misc',\n\t        metaMap: { resultsSortBy: 1 }\n\t    },\n\t    searchboxSubmit: {\n\t        name: 'searchboxSubmit',\n\t        type: 'search box'\n\t    },\n\t    searchboxClear: {\n\t        name: 'searchboxClear',\n\t        type: 'search box'\n\t    },\n\t    searchboxAsYouType: {\n\t        name: 'searchboxAsYouType',\n\t        type: 'search box'\n\t    },\n\t    breadcrumbFacet: {\n\t        name: 'breadcrumbFacet',\n\t        type: 'breadcrumb',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    breadcrumbResetAll: {\n\t        name: 'breadcrumbResetAll',\n\t        type: 'breadcrumb',\n\t    },\n\t    documentTag: {\n\t        name: 'documentTag',\n\t        type: 'document',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    documentField: {\n\t        name: 'documentField',\n\t        type: 'document',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    documentQuickview: {\n\t        name: 'documentQuickview',\n\t        type: 'document',\n\t        metaMap: { documentTitle: 1, documentURL: 2 }\n\t    },\n\t    documentOpen: {\n\t        name: 'documentOpen',\n\t        type: 'document',\n\t        metaMap: { documentTitle: 1, documentURL: 2 }\n\t    },\n\t    omniboxFacetSelect: {\n\t        name: 'omniboxFacetSelect',\n\t        type: 'omnibox',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    omniboxFacetExclude: {\n\t        name: 'omniboxFacetExclude',\n\t        type: 'omnibox',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    omniboxFacetDeselect: {\n\t        name: 'omniboxFacetDeselect',\n\t        type: 'omnibox',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    omniboxFacetUnexclude: {\n\t        name: 'omniboxFacetUnexclude',\n\t        type: 'omnibox',\n\t        metaMap: { faceId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    omniboxAnalytics: {\n\t        name: 'omniboxAnalytics',\n\t        type: 'omnibox',\n\t        metaMap: {\n\t            partialQuery: 1,\n\t            suggestionRanking: 2,\n\t            partialQueries: 3,\n\t            suggestions: 4\n\t        }\n\t    },\n\t    omniboxFromLink: {\n\t        name: 'omniboxFromLink',\n\t        type: 'omnibox',\n\t        metaMap: {\n\t            partialQuery: 1,\n\t            suggestionRanking: 2,\n\t            partialQueries: 3,\n\t            suggestions: 4\n\t        }\n\t    },\n\t    omniboxField: {\n\t        name: 'omniboxField',\n\t        type: 'omnibox'\n\t    },\n\t    facetClearAll: {\n\t        name: 'facetClearAll',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1 }\n\t    },\n\t    facetSearch: {\n\t        name: 'facetSearch',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1 }\n\t    },\n\t    facetToggle: {\n\t        name: 'facetToggle',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetOperatorBefore: 2, facetOperatorAfter: 3 }\n\t    },\n\t    facetRangeSlider: {\n\t        name: 'facetRangeSlider',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetRangeStart: 2, facetRangeEnd: 3 }\n\t    },\n\t    facetRangeGraph: {\n\t        name: 'facetRangeGraph',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetRangeStart: 2, facetRangeEnd: 3 }\n\t    },\n\t    facetSelect: {\n\t        name: 'facetSelect',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    facetSelectAll: {\n\t        name: 'facetSelectAll',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    facetDeselect: {\n\t        name: 'facetDeselect',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    facetExclude: {\n\t        name: 'facetExclude',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    facetUnexclude: {\n\t        name: 'facetUnexclude',\n\t        type: 'facet',\n\t        metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n\t    },\n\t    errorBack: {\n\t        name: 'errorBack',\n\t        type: 'errors'\n\t    },\n\t    errorClearQuery: {\n\t        name: 'errorClearQuery',\n\t        type: 'errors'\n\t    },\n\t    errorRetry: {\n\t        name: 'errorRetry',\n\t        type: 'errors'\n\t    },\n\t    noResultsBack: {\n\t        name: 'noResultsBack',\n\t        type: 'noResults'\n\t    },\n\t    expandToFullUI: {\n\t        name: 'expandToFullUI',\n\t        type: 'interface'\n\t    },\n\t    caseCreationInputChange: {\n\t        name: 'inputChange',\n\t        type: 'caseCreation'\n\t    },\n\t    caseCreationSubmitButton: {\n\t        name: 'submitButton',\n\t        type: 'caseCreation'\n\t    },\n\t    caseCreationCancelButton: {\n\t        name: 'cancelButton',\n\t        type: 'caseCreation'\n\t    },\n\t    caseCreationUnloadPage: {\n\t        name: 'unloadPage',\n\t        type: 'caseCreation'\n\t    },\n\t    casecontextAdd: {\n\t        name: 'casecontextAdd',\n\t        type: 'casecontext',\n\t        metaMap: { caseID: 5 }\n\t    },\n\t    casecontextRemove: {\n\t        name: 'casecontextRemove',\n\t        type: 'casecontext',\n\t        metaMap: { caseID: 5 }\n\t    },\n\t    preferencesChange: {\n\t        name: 'preferencesChange',\n\t        type: 'preferences',\n\t        metaMap: { preferenceName: 1, preferenceType: 2 }\n\t    },\n\t    getUserHistory: {\n\t        name: 'getUserHistory',\n\t        type: 'userHistory'\n\t    },\n\t    userActionDocumentClick: {\n\t        name: 'userActionDocumentClick',\n\t        type: 'userHistory'\n\t    },\n\t    caseAttach: {\n\t        name: 'caseAttach',\n\t        type: 'case',\n\t        metaMap: { documentTitle: 1, resultUriHash: 3, articleID: 4, caseID: 5 }\n\t    },\n\t    caseDetach: {\n\t        name: 'caseDetach',\n\t        type: 'case',\n\t        metaMap: { documentTitle: 1, resultUriHash: 3, articleID: 4, caseID: 5 }\n\t    },\n\t    customfiltersChange: {\n\t        name: 'customfiltersChange',\n\t        type: 'customfilters',\n\t        metaMap: { customFilterName: 1, customFilterType: 2, customFilterExpression: 3 }\n\t    },\n\t    pagerNumber: {\n\t        name: 'pagerNumber',\n\t        type: 'getMoreResults',\n\t        metaMap: { 'pagerNumber': 1 }\n\t    },\n\t    pagerNext: {\n\t        name: 'pagerNext',\n\t        type: 'getMoreResults',\n\t        metaMap: { 'pagerNumber': 1 }\n\t    },\n\t    pagerPrevious: {\n\t        name: 'pagerPrevious',\n\t        type: 'getMoreResults',\n\t        metaMap: { 'pagerNumber': 1 }\n\t    },\n\t    pagerScrolling: {\n\t        name: 'pagerScrolling',\n\t        type: 'getMoreResults'\n\t    },\n\t    pagerResize: {\n\t        name: 'pagerResize',\n\t        type: 'getMoreResults'\n\t    },\n\t    searchFromLink: {\n\t        name: 'searchFromLink',\n\t        type: 'interface'\n\t    },\n\t    triggerNotify: {\n\t        name: 'notify',\n\t        type: 'queryPipelineTriggers'\n\t    },\n\t    triggerExecute: {\n\t        name: 'execute',\n\t        type: 'queryPipelineTriggers'\n\t    },\n\t    triggerQuery: {\n\t        name: 'query',\n\t        type: 'queryPipelineTriggers'\n\t    },\n\t    triggerRedirect: {\n\t        name: 'redirect',\n\t        type: 'queryPipelineTriggers'\n\t    },\n\t    queryError: {\n\t        name: 'query',\n\t        type: 'errors',\n\t        metaMap: { 'query': 1, 'aq': 2, 'cq': 3, 'dq': 4, 'errorType': 5, 'errorMessage': 6 }\n\t    },\n\t    exportToExcel: {\n\t        name: 'exportToExcel',\n\t        type: 'misc'\n\t    },\n\t    recommendation: {\n\t        name: 'recommendation',\n\t        type: 'recommendation'\n\t    },\n\t    recommendationInterfaceLoad: {\n\t        name: 'recommendationInterfaceLoad',\n\t        type: 'recommendation'\n\t    },\n\t    recommendationOpen: {\n\t        name: 'recommendationOpen',\n\t        type: 'recommendation'\n\t    },\n\t    advancedSearch: {\n\t        name: 'advancedSearch',\n\t        type: 'advancedSearch'\n\t    },\n\t    searchAlertsFollowDocument: {\n\t        name: 'followDocument',\n\t        type: 'searchAlerts'\n\t    },\n\t    searchAlertsFollowQuery: {\n\t        name: 'followQuery',\n\t        type: 'searchAlerts'\n\t    },\n\t    searchAlertsUpdateSubscription: {\n\t        name: 'updateSubscription',\n\t        type: 'searchAlerts'\n\t    },\n\t    searchAlertsDeleteSubscription: {\n\t        name: 'deleteSubscription',\n\t        type: 'searchAlerts'\n\t    },\n\t    searchAlertsUnfollowDocument: {\n\t        name: 'unfollowDocument',\n\t        type: 'searchAlerts'\n\t    },\n\t    searchAlertsUnfollowQuery: {\n\t        name: 'unfollowQuery',\n\t        type: 'searchAlerts'\n\t    },\n\t    resultsLayoutChange: {\n\t        name: 'changeResultsLayout',\n\t        type: 'resultsLayout'\n\t    }\n\t};\n\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar AnalyticsEndpoint_1 = __webpack_require__(39);\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Model_1 = __webpack_require__(100);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar NoopAnalyticsClient_1 = __webpack_require__(121);\n\tvar LiveAnalyticsClient_1 = __webpack_require__(129);\n\tvar MultiAnalyticsClient_1 = __webpack_require__(133);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Recommendation_1 = __webpack_require__(134);\n\tvar RecommendationAnalyticsClient_1 = __webpack_require__(174);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Analytics component logs user actions performed in the search interface and sends them to a REST web service\n\t * exposed through the Coveo Cloud Platform.\n\t *\n\t * You can use analytics data to evaluate how users are interacting with your search interface, improve relevance and\n\t * produce analytics dashboards within the Coveo Cloud Platform.\n\t *\n\t * See [Step 7 - Usage Analytics](https://developers.coveo.com/x/EYskAg) of the Getting Started with the JavaScript\n\t * Search Framework V1 tutorial for an introduction to usage analytics.\n\t *\n\t * See also [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ) for more advanced use cases.\n\t */\n\tvar Analytics = (function (_super) {\n\t    __extends(Analytics, _super);\n\t    /**\n\t     * Creates a new Analytics component. Creates the {@link IAnalyticsClient}.\n\t     * @param element The HTMLElement on which the component will be instantiated.\n\t     * @param options The options for the Analytics component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Analytics(element, options, bindings) {\n\t        if (options === void 0) { options = {}; }\n\t        var _this = _super.call(this, element, Analytics.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Analytics, options);\n\t        _this.retrieveInfoFromDefaultSearchEndpoint();\n\t        _this.initializeAnalyticsClient();\n\t        Assert_1.Assert.exists(_this.client);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (data) { return _this.handleBuildingQuery(data); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (data) { return _this.handleQueryError(data); });\n\t        // Analytics component is a bit special: It can be higher in the dom tree than the search interface\n\t        // Need to resolve down to find the componentOptionsModel if we need to.\n\t        if (!_this.componentOptionsModel) {\n\t            var cmpOptionElement = Dom_1.$$(element).find('.' + Component_1.Component.computeCssClassName(ComponentOptionsModel_1.ComponentOptionsModel));\n\t            if (cmpOptionElement) {\n\t                _this.componentOptionsModel = cmpOptionElement[Component_1.Component.computeCssClassName(ComponentOptionsModel_1.ComponentOptionsModel)];\n\t            }\n\t        }\n\t        if (_this.componentOptionsModel) {\n\t            _this.componentOptionsModel.set(ComponentOptionsModel_1.ComponentOptionsModel.attributesEnum.searchHub, _this.options.searchHub);\n\t            var event_1 = _this.componentOptionsModel.getEventName(Model_1.Model.eventTypes.changeOne + ComponentOptionsModel_1.ComponentOptionsModel.attributesEnum.searchHub);\n\t            _this.bind.onRootElement(event_1, function (args) { return _this.handleSearchHubChanged(args); });\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Logs a Search event on the service, using an [AnalyticsActionCause]({@link IAnalyticsActionCause}) and a meta\n\t     * object.\n\t     *\n\t     * Note that the search event is only sent to the service when the query successfully returns, not immediately after\n\t     * calling this method. Therefore, it is important to call this method before executing the query. Otherwise the\n\t     * service will log no Search event and you will get a warning message in the console.\n\t     *\n\t     * See [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ).\n\t     *\n\t     * @param actionCause Describes the cause of the event.\n\t     * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n\t     * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n\t     * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n\t     * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n\t     * ( `{}` ).\n\t     */\n\t    Analytics.prototype.logSearchEvent = function (actionCause, meta) {\n\t        this.client.logSearchEvent(actionCause, meta);\n\t    };\n\t    /**\n\t     * Logs a SearchAsYouType event on the service, using an {@link IAnalyticsActionCause} and a meta object.\n\t     *\n\t     * This method is very similar to the {@link logSearchEvent} method, except that logSearchAsYouType is, by definition,\n\t     * more frequently called.\n\t     *\n\t     * The `PendingSearchAsYouTypeEvent` takes care of logging only the \"relevant\" last event: an event that occurs after\n\t     * 5 seconds elapse without any event being logged, or an event that occurs after another part of the interface\n\t     * triggers a search event. This avoids logging every single partial query, which would make the reporting very\n\t     * confusing.\n\t     *\n\t     * It is important to call this method before executing the query. Otherwise the service will log no SearchAsYouType\n\t     * event and you will get a warning message in the console.\n\t     *\n\t     * See [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ).\n\t     *\n\t     * @param actionCause Describes the cause of the event.\n\t     * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n\t     * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n\t     * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n\t     * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n\t     * ( `{}` ).\n\t     */\n\t    Analytics.prototype.logSearchAsYouType = function (actionCause, meta) {\n\t        this.client.logSearchAsYouType(actionCause, meta);\n\t    };\n\t    /**\n\t     * Logs a Custom event on the service. You can use custom events to create custom reports, or to track events\n\t     * that are not queries or document views.\n\t     *\n\t     * @param actionCause Describes the cause of the event.\n\t     * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n\t     * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n\t     * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n\t     * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n\t     * ( `{}` ).\n\t     * @param element The HTMLElement that the user has interacted with for this custom event.\n\t     */\n\t    Analytics.prototype.logCustomEvent = function (actionCause, meta, element) {\n\t        if (element === void 0) { element = this.element; }\n\t        this.client.logCustomEvent(actionCause, meta, element);\n\t    };\n\t    /**\n\t     * Logs a Click event. You can understand click events as document views (e.g., clicking on a {@link ResultLink} or\n\t     * opening a {@link Quickview}).\n\t     *\n\t     * This event is logged immediately on the service.\n\t     *\n\t     * @param actionCause Describes the cause of the event.\n\t     * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n\t     * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n\t     * API automatically converts uppercase characters to lowercase characters in key names. Each value must be a simple\n\t     * string. You do not have to pass an {@link IAnalyticsDocumentViewMeta} as meta when logging a custom Click event.\n\t     * You can actually send any arbitrary meta. If you do not need to log metadata, you can simply pass an empty JSON\n\t     * ( `{}` ).\n\t     * @param result The result that the user has clicked.\n\t     * @param element The HTMLElement that the user has clicked in the interface.\n\t     */\n\t    Analytics.prototype.logClickEvent = function (actionCause, meta, result, element) {\n\t        if (element === void 0) { element = this.element; }\n\t        this.client.logClickEvent(actionCause, meta, result, element);\n\t    };\n\t    /**\n\t     * Sets the Origin Context dimension on the analytic events.\n\t     *\n\t     * You can use this dimension to specify the context of your application.\n\t     * Suggested values are \"Search\", \"InternalSearch\" and \"CommunitySearch\"\n\t     *\n\t     * Default value is `Search`.\n\t     *\n\t     * @param originContext The origin context value\n\t     */\n\t    Analytics.prototype.setOriginContext = function (originContext) {\n\t        this.client.setOriginContext(originContext);\n\t    };\n\t    Analytics.prototype.initializeAnalyticsEndpoint = function () {\n\t        return new AnalyticsEndpoint_1.AnalyticsEndpoint({\n\t            token: this.options.token,\n\t            serviceUrl: this.options.endpoint,\n\t            organization: this.options.organization\n\t        });\n\t    };\n\t    Analytics.prototype.initializeAnalyticsClient = function () {\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.endpoint)) {\n\t            var endpoint = this.initializeAnalyticsEndpoint();\n\t            var elementToInitializeClient = void 0;\n\t            if (this.root && this.element) {\n\t                if (this.root.contains(this.element)) {\n\t                    elementToInitializeClient = this.root;\n\t                }\n\t                else {\n\t                    elementToInitializeClient = this.element;\n\t                }\n\t            }\n\t            var isRecommendation = Dom_1.$$(this.root).hasClass(Component_1.Component.computeCssClassName(Recommendation_1.Recommendation));\n\t            this.instantiateAnalyticsClient(endpoint, elementToInitializeClient, isRecommendation);\n\t        }\n\t        else {\n\t            this.client = new NoopAnalyticsClient_1.NoopAnalyticsClient();\n\t        }\n\t    };\n\t    Analytics.prototype.instantiateAnalyticsClient = function (endpoint, elementToInitializeClient, isRecommendation) {\n\t        if (isRecommendation) {\n\t            this.client = new RecommendationAnalyticsClient_1.RecommendationAnalyticsClient(endpoint, elementToInitializeClient, this.options.user, this.options.userDisplayName, this.options.anonymous, this.options.splitTestRunName, this.options.splitTestRunVersion, this.options.searchHub, this.options.sendToCloud, this.getBindings());\n\t        }\n\t        else {\n\t            this.client = new LiveAnalyticsClient_1.LiveAnalyticsClient(endpoint, elementToInitializeClient, this.options.user, this.options.userDisplayName, this.options.anonymous, this.options.splitTestRunName, this.options.splitTestRunVersion, this.options.searchHub, this.options.sendToCloud);\n\t        }\n\t    };\n\t    Analytics.prototype.retrieveInfoFromDefaultSearchEndpoint = function () {\n\t        var defaultEndpoint = SearchEndpoint_1.SearchEndpoint.endpoints['default'];\n\t        if (this.options.token == null && defaultEndpoint) {\n\t            this.options.token = defaultEndpoint.options.accessToken;\n\t        }\n\t        if (!this.options.organization && defaultEndpoint) {\n\t            this.options.organization = defaultEndpoint.options.queryStringArguments['workgroup'];\n\t        }\n\t    };\n\t    Analytics.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        data.queryBuilder.searchHub = this.options.searchHub;\n\t    };\n\t    Analytics.prototype.handleSearchHubChanged = function (data) {\n\t        this.options.searchHub = data.value;\n\t    };\n\t    Analytics.prototype.handleQueryError = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        this.client.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.queryError, {\n\t            query: data.query.q,\n\t            aq: data.query.aq,\n\t            cq: data.query.cq,\n\t            dq: data.query.dq,\n\t            errorType: data.error.type,\n\t            errorMessage: data.error.message\n\t        }, this.element);\n\t    };\n\t    Analytics.create = function (element, options, bindings) {\n\t        var selector = Component_1.Component.computeSelectorForType(Analytics.ID);\n\t        var found = [];\n\t        found = found.concat(Dom_1.$$(element).findAll(selector));\n\t        if (!(Component_1.Component.get(element, SearchInterface_1.SearchInterface) instanceof Recommendation_1.Recommendation)) {\n\t            found = this.ignoreElementsInsideRecommendationInterface(found);\n\t        }\n\t        found.push(Dom_1.$$(element).closest(Component_1.Component.computeCssClassName(Analytics)));\n\t        if (Dom_1.$$(element).is(selector)) {\n\t            found.push(element);\n\t        }\n\t        found = _.compact(found);\n\t        if (found.length == 1) {\n\t            return Analytics.getClient(found[0], options, bindings);\n\t        }\n\t        else if (found.length > 1) {\n\t            return new MultiAnalyticsClient_1.MultiAnalyticsClient(_.map(found, function (el) { return Analytics.getClient(el, options, bindings); }));\n\t        }\n\t        else {\n\t            return new NoopAnalyticsClient_1.NoopAnalyticsClient();\n\t        }\n\t    };\n\t    Analytics.ignoreElementsInsideRecommendationInterface = function (found) {\n\t        return _.filter(found, function (element) {\n\t            return Dom_1.$$(element).closest(Component_1.Component.computeCssClassName(Recommendation_1.Recommendation)) === undefined;\n\t        });\n\t    };\n\t    Analytics.getClient = function (element, options, bindings) {\n\t        // This check if an element is already initialized as an analytics component.\n\t        // If that's the case, return the client on that element.\n\t        // Otherwise, init and return.\n\t        var foundOnElement = Component_1.Component.get(element, Analytics, true);\n\t        if (foundOnElement instanceof Analytics) {\n\t            return foundOnElement.client;\n\t        }\n\t        else {\n\t            return new Analytics(element, options, bindings).client;\n\t        }\n\t    };\n\t    return Analytics;\n\t}(Component_1.Component));\n\tAnalytics.ID = 'Analytics';\n\t// NOTE: The default values for some of those options (`organization`, `endpoint`, `searchHub`) can be\n\t// overridden by generated code when using hosted search pages.\n\t/**\n\t * Options for the component\n\t * @componentOptions\n\t */\n\tAnalytics.options = {\n\t    /**\n\t     * Specifies the name of the user for the usage analytics logs.\n\t     *\n\t     * Default value is `undefined`\n\t     */\n\t    user: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the user display name for the usage analytics logs.\n\t     *\n\t     * Default value is `undefined`\n\t     */\n\t    userDisplayName: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the token to use to access the usage analytics endpoint.\n\t     *\n\t     * Default value is `undefined`, and the component uses the search token.\n\t     */\n\t    token: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the URL of the usage analytics logger to cover exceptional cases in which this location could differ\n\t     * from the default Coveo Cloud Usage Analytics endpoint (https://usageanalytics.coveo.com).\n\t     *\n\t     * Default value is `https://usageanalytics.coveo.com`.\n\t     */\n\t    endpoint: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: AnalyticsEndpoint_1.AnalyticsEndpoint.DEFAULT_ANALYTICS_URI }),\n\t    /**\n\t     * Specifies whether to convert search user identities to unique hash when logging analytics data, so that\n\t     * analytics reviewers and managers will not be able to clearly identify which user is performing which query.\n\t     *\n\t     * When this option is `true`, the Coveo Usage Analytics Platform can still properly differentiate sessions\n\t     * made by anonymous users from sessions made by users authenticated in some way on the site containing the search\n\t     * page.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    anonymous: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Sets the Search Hub dimension on the search events.\n\t     *\n\t     * The Search Hub dimension is typically a name that refers to a specific search page. For example, you could use\n\t     * the `CommunitySite` value to refer to a search page on a company's public community site.\n\t     *\n\t     * Default value is `default`.\n\t     */\n\t    searchHub: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'default' }),\n\t    /**\n\t     * Specifies the name of the split test run that the search page is part of.\n\t     *\n\t     * You can use this dimension to perform A/B testing using different search page layouts and features inside the\n\t     * Coveo Query pipeline.\n\t     *\n\t     * Default value is `undefined` and no split test run name is reported to the Coveo Usage Analytics Platform.\n\t     */\n\t    splitTestRunName: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the version name for the page when a split test run is active.\n\t     *\n\t     * When reporting on A/B testing analytics data, this value specifies the test run version name that was\n\t     * presented to the user.\n\t     *\n\t     * Default value is `undefined`\n\t     */\n\t    splitTestRunVersion: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    sendToCloud: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the organization bound to the access token. This is necessary when using an access token, because a\n\t     * single access token can be associated to more than one organization.\n\t     *\n\t     * Default value is `undefined`, and the value of this parameter will fallback to the organization used for the\n\t     * search endpoint.\n\t     */\n\t    organization: ComponentOptions_1.ComponentOptions.buildStringOption()\n\t};\n\texports.Analytics = Analytics;\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar PendingSearchEvent_1 = __webpack_require__(130);\n\tvar PendingSearchAsYouTypeSearchEvent_1 = __webpack_require__(132);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsEvents_1 = __webpack_require__(43);\n\tvar APIAnalyticsBuilder_1 = __webpack_require__(131);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Version_1 = __webpack_require__(10);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar _ = __webpack_require__(16);\n\tvar LiveAnalyticsClient = (function () {\n\t    function LiveAnalyticsClient(endpoint, rootElement, userId, userDisplayName, anonymous, splitTestRunName, splitTestRunVersion, originLevel1, sendToCloud) {\n\t        this.endpoint = endpoint;\n\t        this.rootElement = rootElement;\n\t        this.userId = userId;\n\t        this.userDisplayName = userDisplayName;\n\t        this.anonymous = anonymous;\n\t        this.splitTestRunName = splitTestRunName;\n\t        this.splitTestRunVersion = splitTestRunVersion;\n\t        this.originLevel1 = originLevel1;\n\t        this.sendToCloud = sendToCloud;\n\t        this.isContextual = false;\n\t        this.originContext = 'Search';\n\t        this.language = String['locale'];\n\t        this.device = DeviceUtils_1.DeviceUtils.getDeviceName();\n\t        this.mobile = DeviceUtils_1.DeviceUtils.isMobileDevice();\n\t        Assert_1.Assert.exists(endpoint);\n\t        Assert_1.Assert.exists(rootElement);\n\t        Assert_1.Assert.isNonEmptyString(this.language);\n\t        Assert_1.Assert.isNonEmptyString(this.device);\n\t        Assert_1.Assert.isNonEmptyString(this.originLevel1);\n\t        this.logger = new Logger_1.Logger(this);\n\t    }\n\t    LiveAnalyticsClient.prototype.isActivated = function () {\n\t        return true;\n\t    };\n\t    LiveAnalyticsClient.prototype.getCurrentVisitId = function () {\n\t        return this.endpoint.getCurrentVisitId();\n\t    };\n\t    LiveAnalyticsClient.prototype.getCurrentVisitIdPromise = function () {\n\t        return this.endpoint.getCurrentVisitIdPromise();\n\t    };\n\t    LiveAnalyticsClient.prototype.getCurrentEventCause = function () {\n\t        if (this.pendingSearchEvent != null) {\n\t            return this.pendingSearchEvent.getEventCause();\n\t        }\n\t        if (this.pendingSearchAsYouTypeSearchEvent != null) {\n\t            return this.pendingSearchAsYouTypeSearchEvent.getEventCause();\n\t        }\n\t        return null;\n\t    };\n\t    LiveAnalyticsClient.prototype.getCurrentEventMeta = function () {\n\t        if (this.pendingSearchEvent != null) {\n\t            return this.pendingSearchEvent.getEventMeta();\n\t        }\n\t        if (this.pendingSearchAsYouTypeSearchEvent != null) {\n\t            return this.pendingSearchAsYouTypeSearchEvent.getEventMeta();\n\t        }\n\t        return null;\n\t    };\n\t    LiveAnalyticsClient.prototype.logSearchEvent = function (actionCause, meta) {\n\t        var metaObject = this.buildMetaObject(meta);\n\t        this.pushSearchEvent(actionCause, metaObject);\n\t    };\n\t    LiveAnalyticsClient.prototype.logSearchAsYouType = function (actionCause, meta) {\n\t        var metaObject = this.buildMetaObject(meta);\n\t        this.pushSearchAsYouTypeEvent(actionCause, metaObject);\n\t    };\n\t    LiveAnalyticsClient.prototype.logClickEvent = function (actionCause, meta, result, element) {\n\t        var metaObject = this.buildMetaObject(meta, result);\n\t        return this.pushClickEvent(actionCause, metaObject, result, element);\n\t    };\n\t    LiveAnalyticsClient.prototype.logCustomEvent = function (actionCause, meta, element) {\n\t        var metaObject = this.buildMetaObject(meta);\n\t        return this.pushCustomEvent(actionCause, metaObject, element);\n\t    };\n\t    LiveAnalyticsClient.prototype.getTopQueries = function (params) {\n\t        return this.endpoint.getTopQueries(params);\n\t    };\n\t    LiveAnalyticsClient.prototype.sendAllPendingEvents = function () {\n\t        if (this.pendingSearchAsYouTypeSearchEvent) {\n\t            this.pendingSearchAsYouTypeSearchEvent.sendRightNow();\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.cancelAllPendingEvents = function () {\n\t        if (this.pendingSearchAsYouTypeSearchEvent) {\n\t            this.pendingSearchAsYouTypeSearchEvent.cancel();\n\t            this.pendingSearchAsYouTypeSearchEvent = null;\n\t        }\n\t        if (this.pendingSearchEvent) {\n\t            this.pendingSearchEvent.cancel();\n\t            this.pendingSearchEvent = null;\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.getPendingSearchEvent = function () {\n\t        if (this.pendingSearchEvent) {\n\t            return this.pendingSearchEvent;\n\t        }\n\t        else if (this.pendingSearchAsYouTypeSearchEvent) {\n\t            return this.pendingSearchAsYouTypeSearchEvent;\n\t        }\n\t        return null;\n\t    };\n\t    LiveAnalyticsClient.prototype.warnAboutSearchEvent = function () {\n\t        if (_.isUndefined(this.pendingSearchEvent) && _.isUndefined(this.pendingSearchAsYouTypeSearchEvent)) {\n\t            this.logger.warn('A search was triggered, but no analytics event was logged. If you wish to have consistent analytics data, consider logging a search event using the methods provided by the framework', 'https://developers.coveo.com/x/TwA5');\n\t            if (window['console'] && console.trace) {\n\t                console.trace();\n\t            }\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.setOriginContext = function (originContext) {\n\t        this.originContext = originContext;\n\t    };\n\t    LiveAnalyticsClient.prototype.pushCustomEvent = function (actionCause, metaObject, element) {\n\t        var customEvent = this.buildCustomEvent(actionCause, metaObject, element);\n\t        this.triggerChangeAnalyticsCustomData('CustomEvent', metaObject, customEvent);\n\t        this.checkToSendAnyPendingSearchAsYouType(actionCause);\n\t        Dom_1.$$(this.rootElement).trigger(AnalyticsEvents_1.AnalyticsEvents.customEvent, { customEvent: APIAnalyticsBuilder_1.APIAnalyticsBuilder.convertCustomEventToAPI(customEvent) });\n\t        return this.sendToCloud ? this.endpoint.sendCustomEvent(customEvent) : Promise.resolve(null);\n\t    };\n\t    LiveAnalyticsClient.prototype.pushSearchEvent = function (actionCause, metaObject) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(actionCause);\n\t        if (this.pendingSearchEvent && this.pendingSearchEvent.getEventCause() !== actionCause.name) {\n\t            this.pendingSearchEvent.stopRecording();\n\t            this.pendingSearchEvent = null;\n\t        }\n\t        this.checkToSendAnyPendingSearchAsYouType(actionCause);\n\t        if (!this.pendingSearchEvent) {\n\t            var searchEvent = this.buildSearchEvent(actionCause, metaObject);\n\t            this.triggerChangeAnalyticsCustomData('SearchEvent', metaObject, searchEvent);\n\t            var pendingSearchEvent = this.pendingSearchEvent = new PendingSearchEvent_1.PendingSearchEvent(this.rootElement, this.endpoint, searchEvent, this.sendToCloud);\n\t            Defer_1.Defer.defer(function () {\n\t                // At this point all `duringQuery` events should have been fired, so we can forget\n\t                // about the pending search event. It will finish processing automatically when\n\t                // all the deferred that were caught terminate.\n\t                _this.pendingSearchEvent = undefined;\n\t                pendingSearchEvent.stopRecording();\n\t            });\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.checkToSendAnyPendingSearchAsYouType = function (actionCause) {\n\t        if (this.eventIsNotRelatedToSearchbox(actionCause.name)) {\n\t            this.sendAllPendingEvents();\n\t        }\n\t        else {\n\t            this.cancelAnyPendingSearchAsYouTypeEvent();\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.pushSearchAsYouTypeEvent = function (actionCause, metaObject) {\n\t        this.cancelAnyPendingSearchAsYouTypeEvent();\n\t        var searchEvent = this.buildSearchEvent(actionCause, metaObject);\n\t        this.triggerChangeAnalyticsCustomData('SearchEvent', metaObject, searchEvent);\n\t        this.pendingSearchAsYouTypeSearchEvent = new PendingSearchAsYouTypeSearchEvent_1.PendingSearchAsYouTypeSearchEvent(this.rootElement, this.endpoint, searchEvent, this.sendToCloud);\n\t    };\n\t    LiveAnalyticsClient.prototype.pushClickEvent = function (actionCause, metaObject, result, element) {\n\t        var event = this.buildClickEvent(actionCause, metaObject, result, element);\n\t        this.checkToSendAnyPendingSearchAsYouType(actionCause);\n\t        this.triggerChangeAnalyticsCustomData('ClickEvent', metaObject, event, { resultData: result });\n\t        Assert_1.Assert.isNonEmptyString(event.searchQueryUid);\n\t        Assert_1.Assert.isNonEmptyString(event.collectionName);\n\t        Assert_1.Assert.isNonEmptyString(event.sourceName);\n\t        Assert_1.Assert.isNumber(event.documentPosition);\n\t        Dom_1.$$(this.rootElement).trigger(AnalyticsEvents_1.AnalyticsEvents.documentViewEvent, {\n\t            documentViewEvent: APIAnalyticsBuilder_1.APIAnalyticsBuilder.convertDocumentViewToAPI(event)\n\t        });\n\t        return this.sendToCloud ? this.endpoint.sendDocumentViewEvent(event) : Promise.resolve(null);\n\t    };\n\t    LiveAnalyticsClient.prototype.buildAnalyticsEvent = function (actionCause, metaObject) {\n\t        return {\n\t            actionCause: actionCause.name,\n\t            actionType: actionCause.type,\n\t            username: this.userId,\n\t            userDisplayName: this.userDisplayName,\n\t            anonymous: this.anonymous,\n\t            device: this.device,\n\t            mobile: this.mobile,\n\t            language: this.language,\n\t            responseTime: undefined,\n\t            originLevel1: this.originLevel1,\n\t            originLevel2: this.getOriginLevel2(this.rootElement),\n\t            originLevel3: document.referrer,\n\t            originContext: this.originContext,\n\t            customData: _.keys(metaObject).length > 0 ? metaObject : undefined,\n\t            userAgent: navigator.userAgent\n\t        };\n\t    };\n\t    LiveAnalyticsClient.prototype.buildSearchEvent = function (actionCause, metaObject) {\n\t        return this.merge(this.buildAnalyticsEvent(actionCause, metaObject), {\n\t            searchQueryUid: undefined,\n\t            pipeline: undefined,\n\t            splitTestRunName: this.splitTestRunName,\n\t            splitTestRunVersion: this.splitTestRunVersion,\n\t            queryText: undefined,\n\t            advancedQuery: undefined,\n\t            results: undefined,\n\t            resultsPerPage: undefined,\n\t            pageNumber: undefined,\n\t            didYouMean: undefined,\n\t            facets: undefined,\n\t            contextual: this.isContextual\n\t        });\n\t    };\n\t    LiveAnalyticsClient.prototype.buildClickEvent = function (actionCause, metaObject, result, element) {\n\t        return this.merge(this.buildAnalyticsEvent(actionCause, metaObject), {\n\t            searchQueryUid: result.queryUid,\n\t            queryPipeline: result.pipeline,\n\t            splitTestRunName: this.splitTestRunName || result.splitTestRun,\n\t            splitTestRunVersion: this.splitTestRunVersion || (result.splitTestRun != undefined ? result.pipeline : undefined),\n\t            documentUri: result.uri,\n\t            documentUriHash: QueryUtils_1.QueryUtils.getUriHash(result),\n\t            documentUrl: result.clickUri,\n\t            documentTitle: result.title,\n\t            documentCategory: QueryUtils_1.QueryUtils.getObjectType(result),\n\t            originLevel2: this.getOriginLevel2(element),\n\t            collectionName: QueryUtils_1.QueryUtils.getCollection(result),\n\t            sourceName: QueryUtils_1.QueryUtils.getSource(result),\n\t            documentPosition: result.index + 1,\n\t            responseTime: 0,\n\t            viewMethod: actionCause.name,\n\t            rankingModifier: result.rankingModifier\n\t        });\n\t    };\n\t    LiveAnalyticsClient.prototype.buildCustomEvent = function (actionCause, metaObject, element) {\n\t        return this.merge(this.buildAnalyticsEvent(actionCause, metaObject), {\n\t            eventType: actionCause.type,\n\t            eventValue: actionCause.name,\n\t            originLevel2: this.getOriginLevel2(element),\n\t            responseTime: 0\n\t        });\n\t    };\n\t    LiveAnalyticsClient.prototype.getOriginLevel2 = function (element) {\n\t        return this.resolveActiveTabFromElement(element) || 'default';\n\t    };\n\t    LiveAnalyticsClient.prototype.buildMetaObject = function (meta, result) {\n\t        var modifiedMeta = _.extend({}, meta);\n\t        modifiedMeta['JSUIVersion'] = Version_1.version.lib + ';' + Version_1.version.product;\n\t        if (result) {\n\t            var uniqueId = QueryUtils_1.QueryUtils.getPermanentId(result);\n\t            modifiedMeta['contentIDKey'] = uniqueId.fieldUsed;\n\t            modifiedMeta['contentIDValue'] = uniqueId.fieldValue;\n\t        }\n\t        return modifiedMeta;\n\t    };\n\t    LiveAnalyticsClient.prototype.cancelAnyPendingSearchAsYouTypeEvent = function () {\n\t        if (this.pendingSearchAsYouTypeSearchEvent) {\n\t            this.pendingSearchAsYouTypeSearchEvent.cancel();\n\t            this.pendingSearchAsYouTypeSearchEvent = undefined;\n\t        }\n\t    };\n\t    LiveAnalyticsClient.prototype.resolveActiveTabFromElement = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        var queryStateModel = this.resolveQueryStateModel(element);\n\t        return (queryStateModel && queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t));\n\t    };\n\t    LiveAnalyticsClient.prototype.resolveQueryStateModel = function (rootElement) {\n\t        return Component_1.Component.resolveBinding(rootElement, QueryStateModel_1.QueryStateModel);\n\t    };\n\t    LiveAnalyticsClient.prototype.eventIsNotRelatedToSearchbox = function (event) {\n\t        return event !== AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit.name && event !== AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxClear.name;\n\t    };\n\t    LiveAnalyticsClient.prototype.triggerChangeAnalyticsCustomData = function (type, metaObject, event, data) {\n\t        // This is for backward compatibility. Before the analytics were using either numbered\n\t        // metas in `metaDataAsNumber` of later on named metas in `metaDataAsString`. Thus we still\n\t        // provide those properties in a deprecated way. Below we are moving any data that put\n\t        // in them to the root.\n\t        metaObject['metaDataAsString'] = {};\n\t        metaObject['metaDataAsNumber'] = {};\n\t        var changeableAnalyticsDataObject = {\n\t            language: event.language,\n\t            originLevel1: event.originLevel1,\n\t            originLevel2: event.originLevel2,\n\t            originLevel3: event.originLevel3,\n\t            metaObject: metaObject\n\t        };\n\t        var args = _.extend({}, {\n\t            type: type,\n\t            actionType: event.actionType,\n\t            actionCause: event.actionCause\n\t        }, changeableAnalyticsDataObject, data);\n\t        Dom_1.$$(this.rootElement).trigger(AnalyticsEvents_1.AnalyticsEvents.changeAnalyticsCustomData, args);\n\t        event.language = args.language;\n\t        event.originLevel1 = args.originLevel1;\n\t        event.originLevel2 = args.originLevel2;\n\t        event.originLevel3 = args.originLevel3;\n\t        event.customData = metaObject;\n\t        // This is for backward compatibility. Before the analytics were using either numbered\n\t        // metas in `metaDataAsNumber` of later on named metas in `metaDataAsString`. We are now putting\n\t        // them all at the root, and if I encounter the older properties I move them to the top\n\t        // level after issuing a warning.\n\t        var metaDataAsString = event.customData['metaDataAsString'];\n\t        if (_.keys(metaDataAsString).length > 0) {\n\t            this.logger.warn('Using deprecated \\'metaDataAsString\\' key to log custom analytics data. Custom meta should now be put at the root of the object.');\n\t            _.extend(event.customData, metaDataAsString);\n\t        }\n\t        delete event.customData['metaDataAsString'];\n\t        var metaDataAsNumber = event.customData['metaDataAsNumber'];\n\t        if (_.keys(metaDataAsNumber).length > 0) {\n\t            this.logger.warn('Using deprecated \\'metaDataAsNumber\\' key to log custom analytics data. Custom meta should now be put at the root of the object.');\n\t            _.extend(event.customData, metaDataAsNumber);\n\t        }\n\t        delete event.customData['metaDataAsNumber'];\n\t    };\n\t    LiveAnalyticsClient.prototype.merge = function (first, second) {\n\t        return _.extend({}, first, second);\n\t    };\n\t    return LiveAnalyticsClient;\n\t}());\n\texports.LiveAnalyticsClient = LiveAnalyticsClient;\n\n\n/***/ },\n/* 130 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Component_1 = __webpack_require__(109);\n\tvar QueryController_1 = __webpack_require__(76);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar APIAnalyticsBuilder_1 = __webpack_require__(131);\n\tvar AnalyticsEvents_1 = __webpack_require__(43);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar _ = __webpack_require__(16);\n\tvar PendingSearchEvent = (function () {\n\t    function PendingSearchEvent(root, endpoint, templateSearchEvent, sendToCloud) {\n\t        var _this = this;\n\t        this.root = root;\n\t        this.endpoint = endpoint;\n\t        this.templateSearchEvent = templateSearchEvent;\n\t        this.sendToCloud = sendToCloud;\n\t        this.searchPromises = [];\n\t        this.results = [];\n\t        this.cancelled = false;\n\t        this.finished = false;\n\t        this.searchEvents = [];\n\t        Assert_1.Assert.exists(root);\n\t        Assert_1.Assert.exists(endpoint);\n\t        Assert_1.Assert.exists(templateSearchEvent);\n\t        this.handler = function (evt, arg) {\n\t            _this.handleDuringQuery(evt, arg);\n\t        };\n\t        Dom_1.$$(root).on(QueryEvents_1.QueryEvents.duringQuery, this.handler);\n\t    }\n\t    PendingSearchEvent.prototype.getEventCause = function () {\n\t        return this.templateSearchEvent.actionCause;\n\t    };\n\t    PendingSearchEvent.prototype.getEventMeta = function () {\n\t        return this.templateSearchEvent.customData;\n\t    };\n\t    PendingSearchEvent.prototype.cancel = function () {\n\t        this.stopRecording();\n\t        this.cancelled = true;\n\t    };\n\t    PendingSearchEvent.prototype.handleDuringQuery = function (evt, args, queryBoxContentToUse) {\n\t        var _this = this;\n\t        Assert_1.Assert.check(!this.finished);\n\t        Assert_1.Assert.check(!this.cancelled);\n\t        // When synchronizing multiple search interfaces under a single search event\n\t        // (think Salesforce boxes), we need to collect all search events and send them\n\t        // in one single batch. So we gather all events until we idle out and then we\n\t        // monitor those before sending the data.\n\t        this.searchPromises.push(args.promise);\n\t        var eventTarget = evt.target;\n\t        var searchInterface = Component_1.Component.get(eventTarget, SearchInterface_1.SearchInterface);\n\t        Assert_1.Assert.exists(searchInterface);\n\t        // We try to grab ahead of time the content of the search box before the query returns\n\t        // This is because it's possible that the content of the search box gets modified when the query returns (for example : DidYouMean)\n\t        if (!queryBoxContentToUse) {\n\t            queryBoxContentToUse = searchInterface.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q);\n\t        }\n\t        var queryController = Component_1.Component.get(eventTarget, QueryController_1.QueryController);\n\t        Assert_1.Assert.exists(queryController);\n\t        args.promise.then(function (queryResults) {\n\t            Assert_1.Assert.exists(queryResults);\n\t            Assert_1.Assert.check(!_this.finished);\n\t            if (queryResults._reusedSearchUid !== true || _this.templateSearchEvent.actionCause == AnalyticsActionListMeta_1.analyticsActionCauseList.recommendation.name) {\n\t                var searchEvent = _.extend({}, _this.templateSearchEvent);\n\t                _this.fillSearchEvent(searchEvent, searchInterface, args.query, queryResults, queryBoxContentToUse);\n\t                _this.searchEvents.push(searchEvent);\n\t                _this.results.push(queryResults);\n\t                return queryResults;\n\t            }\n\t        }).finally(function () {\n\t            var index = _.indexOf(_this.searchPromises, args.promise);\n\t            _this.searchPromises.splice(index, 1);\n\t            if (_this.searchPromises.length == 0) {\n\t                _this.flush();\n\t            }\n\t        });\n\t    };\n\t    PendingSearchEvent.prototype.stopRecording = function () {\n\t        if (this.handler) {\n\t            Dom_1.$$(this.root).off(QueryEvents_1.QueryEvents.duringQuery, this.handler);\n\t            Dom_1.$$(this.root).off(QueryEvents_1.QueryEvents.duringFetchMoreQuery, this.handler);\n\t            this.handler = null;\n\t        }\n\t    };\n\t    PendingSearchEvent.prototype.flush = function () {\n\t        var _this = this;\n\t        if (!this.cancelled) {\n\t            this.stopRecording();\n\t            this.finished = true;\n\t            Assert_1.Assert.check(this.searchEvents.length == this.results.length);\n\t            Defer_1.Defer.defer(function () {\n\t                if (_this.sendToCloud) {\n\t                    _this.endpoint.sendSearchEvents(_this.searchEvents);\n\t                }\n\t                var apiSearchEvents = _.map(_this.searchEvents, function (searchEvent) {\n\t                    return APIAnalyticsBuilder_1.APIAnalyticsBuilder.convertSearchEventToAPI(searchEvent);\n\t                });\n\t                Dom_1.$$(_this.root).trigger(AnalyticsEvents_1.AnalyticsEvents.searchEvent, { searchEvents: apiSearchEvents });\n\t            });\n\t        }\n\t    };\n\t    PendingSearchEvent.prototype.fillSearchEvent = function (searchEvent, searchInterface, query, queryResults, queryBoxContentToUse) {\n\t        Assert_1.Assert.exists(searchEvent);\n\t        Assert_1.Assert.exists(searchInterface);\n\t        Assert_1.Assert.exists(query);\n\t        Assert_1.Assert.exists(queryResults);\n\t        var currentQuery = searchInterface.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q);\n\t        searchEvent.queryPipeline = queryResults.pipeline;\n\t        searchEvent.splitTestRunName = searchEvent.splitTestRunName || queryResults.splitTestRun;\n\t        searchEvent.splitTestRunVersion = searchEvent.splitTestRunVersion || (queryResults.splitTestRun != undefined ? queryResults.pipeline : undefined);\n\t        searchEvent.originLevel2 = searchEvent.originLevel2 || searchInterface.queryStateModel.get('t') || 'default';\n\t        searchEvent.queryText = queryBoxContentToUse || currentQuery || query.q || ''; // do not log the query sent to the server if possible; it may contain added syntax depending on options\n\t        searchEvent.advancedQuery = query.aq || '';\n\t        searchEvent.didYouMean = query.enableDidYouMean;\n\t        searchEvent.numberOfResults = queryResults.totalCount;\n\t        searchEvent.responseTime = queryResults.duration;\n\t        searchEvent.pageNumber = (query.firstResult / query.numberOfResults);\n\t        searchEvent.resultsPerPage = query.numberOfResults;\n\t        searchEvent.searchQueryUid = queryResults.searchUid;\n\t        searchEvent.queryPipeline = queryResults.pipeline;\n\t        // The context_${key} format is important for the Analytics backend\n\t        // This is what they use to recognize a custom data that will be used internally by other coveo's service.\n\t        // In this case, Reveal will be the consumer of this information.\n\t        if (query.context != undefined) {\n\t            _.each(query.context, function (value, key) {\n\t                searchEvent.customData[\"context_\" + key] = value;\n\t            });\n\t        }\n\t        // The refinedKeywords field is important for Reveal in order to learn properly on query\n\t        // made based on the long query.\n\t        if (queryResults.refinedKeywords != undefined && queryResults.refinedKeywords.length != 0) {\n\t            searchEvent.customData['refinedKeywords'] = queryResults.refinedKeywords;\n\t        }\n\t    };\n\t    return PendingSearchEvent;\n\t}());\n\texports.PendingSearchEvent = PendingSearchEvent;\n\n\n/***/ },\n/* 131 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar APIAnalyticsBuilder = (function () {\n\t    function APIAnalyticsBuilder() {\n\t    }\n\t    APIAnalyticsBuilder.convertSearchEventToAPI = function (searchEvent) {\n\t        var apiSearchEvent = {\n\t            advancedQuery: searchEvent.advancedQuery,\n\t            customMetadatas: searchEvent.customData,\n\t            device: searchEvent.device,\n\t            didYouMean: searchEvent.didYouMean,\n\t            language: searchEvent.language,\n\t            pageNumber: searchEvent.pageNumber,\n\t            queryText: searchEvent.queryText,\n\t            responseTime: searchEvent.responseTime,\n\t            numberOfResults: searchEvent.numberOfResults,\n\t            resultsPerPage: searchEvent.resultsPerPage,\n\t            searchHub: searchEvent.originLevel1,\n\t            searchInterface: searchEvent.originLevel2,\n\t            searchQueryUid: searchEvent.searchQueryUid,\n\t            type: searchEvent.actionType,\n\t            actionCause: searchEvent.actionCause,\n\t            queryPipeline: searchEvent.queryPipeline,\n\t            splitTestRunName: searchEvent.splitTestRunName,\n\t            splitTestRunVersion: searchEvent.splitTestRunVersion\n\t        };\n\t        return apiSearchEvent;\n\t    };\n\t    APIAnalyticsBuilder.convertDocumentViewToAPI = function (documentView) {\n\t        var apiDocumentView = {\n\t            collectionName: documentView.collectionName,\n\t            device: documentView.device,\n\t            documentPosition: documentView.documentPosition,\n\t            title: documentView.documentTitle,\n\t            documentUrl: documentView.documentUrl,\n\t            documentUri: documentView.documentUri,\n\t            documentUriHash: documentView.documentUriHash,\n\t            language: documentView.language,\n\t            responseTime: documentView.responseTime,\n\t            searchHub: documentView.originLevel1,\n\t            searchInterface: documentView.originLevel2,\n\t            searchQueryUid: documentView.searchQueryUid,\n\t            sourceName: documentView.sourceName,\n\t            viewMethod: documentView.viewMethod,\n\t            customMetadatas: documentView.customData,\n\t            actionCause: documentView.actionCause,\n\t            queryPipeline: documentView.queryPipeline,\n\t            splitTestRunName: documentView.splitTestRunName,\n\t            splitTestRunVersion: documentView.splitTestRunVersion\n\t        };\n\t        return apiDocumentView;\n\t    };\n\t    APIAnalyticsBuilder.convertCustomEventToAPI = function (customEvent) {\n\t        var apiCustomEvent = {\n\t            actionCause: customEvent.actionCause,\n\t            actionType: customEvent.actionType,\n\t            device: customEvent.device,\n\t            language: customEvent.language,\n\t            responseTime: customEvent.responseTime,\n\t            searchHub: customEvent.originLevel1,\n\t            searchInterface: customEvent.originLevel2,\n\t            customMetadatas: customEvent.customData\n\t        };\n\t        return apiCustomEvent;\n\t    };\n\t    return APIAnalyticsBuilder;\n\t}());\n\texports.APIAnalyticsBuilder = APIAnalyticsBuilder;\n\n\n/***/ },\n/* 132 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar PendingSearchEvent_1 = __webpack_require__(130);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Component_1 = __webpack_require__(109);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar _ = __webpack_require__(16);\n\tvar PendingSearchAsYouTypeSearchEvent = (function (_super) {\n\t    __extends(PendingSearchAsYouTypeSearchEvent, _super);\n\t    function PendingSearchAsYouTypeSearchEvent(root, endpoint, templateSearchEvent, sendToCloud) {\n\t        var _this = _super.call(this, root, endpoint, templateSearchEvent, sendToCloud) || this;\n\t        _this.root = root;\n\t        _this.endpoint = endpoint;\n\t        _this.templateSearchEvent = templateSearchEvent;\n\t        _this.sendToCloud = sendToCloud;\n\t        _this.delayBeforeSending = 5000;\n\t        _this.armBatchDelay = 50;\n\t        _this.beforeUnloadHandler = function () {\n\t            _this.onWindowUnload();\n\t        };\n\t        window.addEventListener('beforeunload', _this.beforeUnloadHandler);\n\t        Dom_1.$$(root).on(InitializationEvents_1.InitializationEvents.nuke, function () { return _this.handleNuke(); });\n\t        return _this;\n\t    }\n\t    PendingSearchAsYouTypeSearchEvent.prototype.handleDuringQuery = function (e, args) {\n\t        var _this = this;\n\t        var event = _.clone(e);\n\t        // We need to \"snapshot\" the current query before the delay is applied\n\t        // Otherwise, this means that after 5 second, the original query is possibly modified\n\t        // For example, DidYouMean would be wrong in that case.\n\t        var eventTarget = e.target;\n\t        var searchInterface = Component_1.Component.get(eventTarget, SearchInterface_1.SearchInterface);\n\t        var currentQueryBeforeDelay = searchInterface.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q);\n\t        this.beforeResolve = new Promise(function (resolve) {\n\t            _this.toSendRightNow = function () {\n\t                if (!_this.isCancelledOrFinished()) {\n\t                    resolve(_this);\n\t                    _super.prototype.handleDuringQuery.call(_this, event, args, currentQueryBeforeDelay);\n\t                }\n\t            };\n\t            _.delay(function () {\n\t                _this.toSendRightNow();\n\t            }, _this.delayBeforeSending);\n\t        });\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.sendRightNow = function () {\n\t        if (this.toSendRightNow) {\n\t            this.toSendRightNow();\n\t        }\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.modifyCustomData = function (key, newData) {\n\t        _.each(this.searchEvents, function (searchEvent) {\n\t            searchEvent.customData[key] = newData;\n\t        });\n\t        if (!this.templateSearchEvent.customData) {\n\t            this.templateSearchEvent.customData = {};\n\t        }\n\t        this.templateSearchEvent.customData[key] = newData;\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.modifyEventCause = function (newCause) {\n\t        _.each(this.searchEvents, function (searchEvent) {\n\t            searchEvent.actionCause = newCause.name;\n\t            searchEvent.actionType = newCause.type;\n\t        });\n\t        this.templateSearchEvent.actionCause = newCause.name;\n\t        this.templateSearchEvent.actionType = newCause.type;\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.stopRecording = function () {\n\t        _super.prototype.stopRecording.call(this);\n\t        if (this.beforeUnloadHandler) {\n\t            window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n\t            this.beforeUnloadHandler = undefined;\n\t        }\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.handleNuke = function () {\n\t        window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.onWindowUnload = function () {\n\t        if (!this.isCancelledOrFinished()) {\n\t            this.armBatchDelay = 0;\n\t            this.sendRightNow();\n\t        }\n\t    };\n\t    PendingSearchAsYouTypeSearchEvent.prototype.isCancelledOrFinished = function () {\n\t        if (!this.cancelled) {\n\t            if (this.finished) {\n\t                this.cancel();\n\t                return true;\n\t            }\n\t            else {\n\t                return false;\n\t            }\n\t        }\n\t        else {\n\t            return true;\n\t        }\n\t    };\n\t    return PendingSearchAsYouTypeSearchEvent;\n\t}(PendingSearchEvent_1.PendingSearchEvent));\n\texports.PendingSearchAsYouTypeSearchEvent = PendingSearchAsYouTypeSearchEvent;\n\n\n/***/ },\n/* 133 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar MultiAnalyticsClient = (function () {\n\t    function MultiAnalyticsClient(analyticsClients) {\n\t        if (analyticsClients === void 0) { analyticsClients = []; }\n\t        this.analyticsClients = analyticsClients;\n\t        this.isContextual = false;\n\t    }\n\t    MultiAnalyticsClient.prototype.isActivated = function () {\n\t        return _.some(this.analyticsClients, function (analyticsClient) { return analyticsClient.isActivated(); });\n\t    };\n\t    MultiAnalyticsClient.prototype.getCurrentEventCause = function () {\n\t        return _.find(_.map(this.analyticsClients, function (analyticsClient) { return analyticsClient.getCurrentEventCause(); }), function (currentEventCause) { return currentEventCause != null; });\n\t    };\n\t    MultiAnalyticsClient.prototype.getCurrentEventMeta = function () {\n\t        return _.find(_.map(this.analyticsClients, function (analyticsClient) { return analyticsClient.getCurrentEventMeta(); }), function (currentEventMeta) { return currentEventMeta != null; });\n\t    };\n\t    MultiAnalyticsClient.prototype.logSearchEvent = function (actionCause, meta) {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.logSearchEvent(actionCause, meta); });\n\t    };\n\t    MultiAnalyticsClient.prototype.logSearchAsYouType = function (actionCause, meta) {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.logSearchEvent(actionCause, meta); });\n\t    };\n\t    MultiAnalyticsClient.prototype.logClickEvent = function (actionCause, meta, result, element) {\n\t        return Promise.all(_.map(this.analyticsClients, function (analyticsClient) {\n\t            return analyticsClient.logClickEvent(actionCause, meta, result, element);\n\t        }));\n\t    };\n\t    MultiAnalyticsClient.prototype.logCustomEvent = function (actionCause, meta, element) {\n\t        return Promise.all(_.map(this.analyticsClients, function (analyticsClient) {\n\t            return analyticsClient.logCustomEvent(actionCause, meta, element);\n\t        }));\n\t    };\n\t    MultiAnalyticsClient.prototype.getTopQueries = function (params) {\n\t        var _this = this;\n\t        return Promise.all(_.map(this.analyticsClients, function (client) {\n\t            return client.getTopQueries(params);\n\t        }))\n\t            .then(function (values) {\n\t            return _this.mergeTopQueries(values, params.pageSize);\n\t        });\n\t    };\n\t    MultiAnalyticsClient.prototype.getCurrentVisitIdPromise = function () {\n\t        return _.first(this.analyticsClients).getCurrentVisitIdPromise();\n\t    };\n\t    MultiAnalyticsClient.prototype.getCurrentVisitId = function () {\n\t        return _.first(this.analyticsClients).getCurrentVisitId();\n\t    };\n\t    MultiAnalyticsClient.prototype.sendAllPendingEvents = function () {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.sendAllPendingEvents(); });\n\t    };\n\t    MultiAnalyticsClient.prototype.warnAboutSearchEvent = function () {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.warnAboutSearchEvent(); });\n\t    };\n\t    MultiAnalyticsClient.prototype.cancelAllPendingEvents = function () {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.cancelAllPendingEvents(); });\n\t    };\n\t    MultiAnalyticsClient.prototype.getPendingSearchEvent = function () {\n\t        return _.first(this.analyticsClients).getPendingSearchEvent();\n\t    };\n\t    MultiAnalyticsClient.prototype.setOriginContext = function (originContext) {\n\t        _.each(this.analyticsClients, function (analyticsClient) { return analyticsClient.setOriginContext(originContext); });\n\t    };\n\t    MultiAnalyticsClient.prototype.mergeTopQueries = function (values, pageSize) {\n\t        if (pageSize === void 0) { pageSize = 5; }\n\t        return _.chain(values)\n\t            .flatten()\n\t            .first(pageSize)\n\t            .value();\n\t    };\n\t    return MultiAnalyticsClient;\n\t}());\n\texports.MultiAnalyticsClient = MultiAnalyticsClient;\n\n\n/***/ },\n/* 134 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar PreferencesPanelEvents_1 = __webpack_require__(49);\n\tvar AnalyticsEvents_1 = __webpack_require__(43);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar QuickviewEvents_1 = __webpack_require__(135);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Model_1 = __webpack_require__(100);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ResponsiveRecommendation_1 = __webpack_require__(136);\n\tvar coveo_analytics_1 = __webpack_require__(82);\n\tvar RegisteredNamedMethods_1 = __webpack_require__(107);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Recommendation component is a {@link SearchInterface} that displays recommendations typically based on user\n\t * history.\n\t *\n\t * This component usually listens to the main SearchInterface. When the main SearchInterface generates a query, the\n\t * Recommendation component generates another query to get the recommendations at the same time.\n\t *\n\t * To get history-based recommendations, you will likely want to include the `pageview` script in your page (see\n\t * [coveo.analytics.js](https://github.com/coveo/coveo.analytics.js)). However, including this script is not mandatory.\n\t * For instance, you could use the Recommendation component without the Coveo Machine Learning service to create a\n\t * simple \"recommended people\" interface.\n\t *\n\t * It is possible to include this component inside another SearchInterface, but it is also possible to instantiate it as\n\t * a \"standalone\" search interface, without even instantiating a main SearchInterface component. In any case, a\n\t * Recommendation component always acts as a full-fledged search interface. Therefore, you can include any component\n\t * inside the Recommendation component (Searchbox, Facet, Sort, etc.), just as you would inside the main SearchInterface\n\t * component.\n\t */\n\tvar Recommendation = (function (_super) {\n\t    __extends(Recommendation, _super);\n\t    /**\n\t     * Creates a new Recommendation component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Recommendation component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time)\n\t     * @param _window\n\t     */\n\t    function Recommendation(element, options, analyticsOptions, _window) {\n\t        if (options === void 0) { options = {}; }\n\t        if (analyticsOptions === void 0) { analyticsOptions = {}; }\n\t        if (_window === void 0) { _window = window; }\n\t        var _this = _super.call(this, element, ComponentOptions_1.ComponentOptions.initComponentOptions(element, Recommendation, options), analyticsOptions, _window) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.analyticsOptions = analyticsOptions;\n\t        if (!_this.options.id) {\n\t            _this.generateDefaultId();\n\t        }\n\t        // This is done to allow the component to be included in another search interface without triggering the parent events.\n\t        _this.preventEventPropagation();\n\t        if (_this.options.mainSearchInterface) {\n\t            _this.bindToMainSearchInterface();\n\t        }\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.buildingQuery, function (e, args) { return _this.handleRecommendationBuildingQuery(args); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.querySuccess, function (e, args) { return _this.handleRecommendationQuerySuccess(args); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.noResults, function (e, args) { return _this.handleRecommendationNoResults(); });\n\t        Dom_1.$$(_this.element).on(QueryEvents_1.QueryEvents.queryError, function (e, args) { return _this.handleRecommendationQueryError(); });\n\t        _this.historyStore = new coveo_analytics_1.history.HistoryStore();\n\t        if (!_this.options.mainSearchInterface) {\n\t            // When the recommendation component is \"standalone\", we add additional safeguard against bad config.\n\t            _this.ensureCurrentPageViewExistsInStore();\n\t        }\n\t        ResponsiveRecommendation_1.ResponsiveRecommendation.init(_this.root, _this, options);\n\t        if (_this.options.hideIfNoResults) {\n\t            _this.hide();\n\t        }\n\t        return _this;\n\t    }\n\t    Recommendation.prototype.getId = function () {\n\t        return this.options.id;\n\t    };\n\t    Recommendation.prototype.enable = function () {\n\t        _super.prototype.enable.call(this);\n\t        this.show();\n\t    };\n\t    Recommendation.prototype.disable = function () {\n\t        _super.prototype.disable.call(this);\n\t        this.hide();\n\t    };\n\t    Recommendation.prototype.hide = function () {\n\t        if (!this.displayStyle) {\n\t            this.displayStyle = this.element.style.display;\n\t        }\n\t        Dom_1.$$(this.element).hide();\n\t    };\n\t    Recommendation.prototype.show = function () {\n\t        if (!this.displayStyle) {\n\t            this.displayStyle = this.element.style.display;\n\t        }\n\t        this.element.style.display = this.displayStyle;\n\t    };\n\t    Recommendation.prototype.ensureCurrentPageViewExistsInStore = function () {\n\t        // It's not 100% sure that the element will actually be added in the store.\n\t        // It's possible that an external script configured by the end user to log the page view already did that.\n\t        // So we *could* end up with duplicate values in the store :\n\t        // We rely on the fact that the coveo.analytics lib has defensive code against consecutive page view that are identical.\n\t        // This is mainly done if the recommendation component is being initialized before the page view could be logged correctly by the coveo.analytics externa lib.\n\t        var historyElement = {\n\t            name: 'PageView',\n\t            value: document.location.toString(),\n\t            time: JSON.stringify(new Date()),\n\t            title: document.title\n\t        };\n\t        this.historyStore.addElement(historyElement);\n\t    };\n\t    Recommendation.prototype.bindToMainSearchInterface = function () {\n\t        this.bindComponentOptionsModelToMainSearchInterface();\n\t        this.bindQueryEventsToMainSearchInterface();\n\t    };\n\t    Recommendation.prototype.bindComponentOptionsModelToMainSearchInterface = function () {\n\t        var _this = this;\n\t        // Try to fetch the componentOptions from the main search interface.\n\t        // Since we do not know which interface is init first (recommendation or full search interface)\n\t        // add a mechanism that waits for the full search interface to be correctly initialized\n\t        // then, set the needed values on the component options model.\n\t        var searchInterfaceComponent = RegisteredNamedMethods_1.get(this.options.mainSearchInterface, SearchInterface_1.SearchInterface);\n\t        var alreadyInitialized = searchInterfaceComponent != null;\n\t        var onceInitialized = function () {\n\t            var mainSearchInterfaceOptionsModel = searchInterfaceComponent.getBindings().componentOptionsModel;\n\t            _this.componentOptionsModel.setMultiple(mainSearchInterfaceOptionsModel.getAttributes());\n\t            Dom_1.$$(_this.options.mainSearchInterface).on(_this.componentOptionsModel.getEventName(Model_1.MODEL_EVENTS.ALL), function () {\n\t                _this.componentOptionsModel.setMultiple(mainSearchInterfaceOptionsModel.getAttributes());\n\t            });\n\t        };\n\t        if (alreadyInitialized) {\n\t            onceInitialized();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.options.mainSearchInterface).on(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () {\n\t                searchInterfaceComponent = RegisteredNamedMethods_1.get(_this.options.mainSearchInterface, SearchInterface_1.SearchInterface);\n\t                onceInitialized();\n\t            });\n\t        }\n\t    };\n\t    Recommendation.prototype.bindQueryEventsToMainSearchInterface = function () {\n\t        var _this = this;\n\t        // Whenever a query sucessfully returns on the full search interface, refresh the recommendation component.\n\t        Dom_1.$$(this.options.mainSearchInterface).on(QueryEvents_1.QueryEvents.querySuccess, function (e, args) {\n\t            _this.mainInterfaceQuery = args;\n\t            _this.mainQuerySearchUID = args.results.searchUid;\n\t            _this.mainQueryPipeline = args.results.pipeline;\n\t            _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.recommendation, {});\n\t            _this.queryController.executeQuery();\n\t        });\n\t    };\n\t    Recommendation.prototype.handleRecommendationBuildingQuery = function (data) {\n\t        if (!this.disabled) {\n\t            this.modifyQueryForRecommendation(data);\n\t            this.addRecommendationInfoInQuery(data);\n\t        }\n\t    };\n\t    Recommendation.prototype.handleRecommendationQuerySuccess = function (data) {\n\t        if (!this.disabled) {\n\t            if (this.options.hideIfNoResults) {\n\t                if (data.results.totalCount === 0) {\n\t                    this.hide();\n\t                }\n\t                else {\n\t                    this.show();\n\t                }\n\t            }\n\t        }\n\t    };\n\t    Recommendation.prototype.handleRecommendationNoResults = function () {\n\t        if (!this.disabled) {\n\t            if (this.options.hideIfNoResults) {\n\t                this.hide();\n\t            }\n\t        }\n\t    };\n\t    Recommendation.prototype.handleRecommendationQueryError = function () {\n\t        if (!this.disabled) {\n\t            this.hide();\n\t        }\n\t    };\n\t    Recommendation.prototype.modifyQueryForRecommendation = function (data) {\n\t        if (this.mainInterfaceQuery) {\n\t            Utils_1.Utils.copyObjectAttributes(data.queryBuilder, this.mainInterfaceQuery.queryBuilder, this.options.optionsToUse);\n\t        }\n\t    };\n\t    Recommendation.prototype.addRecommendationInfoInQuery = function (data) {\n\t        if (!_.isEmpty(this.options.userContext)) {\n\t            data.queryBuilder.addContext(JSON.parse(this.options.userContext));\n\t        }\n\t        if (this.options.sendActionsHistory) {\n\t            data.queryBuilder.actionsHistory = this.getHistory();\n\t        }\n\t        data.queryBuilder.recommendation = this.options.id;\n\t    };\n\t    Recommendation.prototype.getHistory = function () {\n\t        var historyFromStore = this.historyStore.getHistory();\n\t        if (historyFromStore == null) {\n\t            historyFromStore = [];\n\t        }\n\t        return JSON.stringify(historyFromStore);\n\t    };\n\t    Recommendation.prototype.preventEventPropagation = function () {\n\t        this.preventEventPropagationOn(QueryEvents_1.QueryEvents);\n\t        this.preventEventPropagationOn(OmniboxEvents_1.OmniboxEvents);\n\t        this.preventEventPropagationOn(ResultListEvents_1.ResultListEvents);\n\t        this.preventEventPropagationOn(SettingsEvents_1.SettingsEvents);\n\t        this.preventEventPropagationOn(PreferencesPanelEvents_1.PreferencesPanelEvents);\n\t        this.preventEventPropagationOn(AnalyticsEvents_1.AnalyticsEvents);\n\t        this.preventEventPropagationOn(BreadcrumbEvents_1.BreadcrumbEvents);\n\t        this.preventEventPropagationOn(QuickviewEvents_1.QuickviewEvents);\n\t        this.preventEventPropagationOn(InitializationEvents_1.InitializationEvents);\n\t        this.preventEventPropagationOn(this.getAllModelEvents());\n\t    };\n\t    Recommendation.prototype.preventEventPropagationOn = function (eventType, eventName) {\n\t        if (eventName === void 0) { eventName = function (event) { return event; }; }\n\t        for (var event_1 in eventType) {\n\t            Dom_1.$$(this.root).on(eventName(event_1), function (e) { return e.stopPropagation(); });\n\t        }\n\t    };\n\t    Recommendation.prototype.getAllModelEvents = function () {\n\t        var _this = this;\n\t        var events = {};\n\t        _.each(_.values(Model_1.Model.eventTypes), function (event) {\n\t            _.each(_.values(QueryStateModel_1.QUERY_STATE_ATTRIBUTES), function (attribute) {\n\t                var eventName = _this.getBindings().queryStateModel.getEventName(event + attribute);\n\t                events[eventName] = eventName;\n\t            });\n\t        });\n\t        return events;\n\t    };\n\t    Recommendation.prototype.generateDefaultId = function () {\n\t        var id = 'Recommendation';\n\t        if (Recommendation.NEXT_ID !== 1) {\n\t            this.logger.warn('Generating another recommendation default id', 'Consider configuring a human friendly / meaningful id for this interface');\n\t            id = id + '_' + Recommendation.NEXT_ID;\n\t        }\n\t        Recommendation.NEXT_ID++;\n\t        this.options.id = id;\n\t    };\n\t    return Recommendation;\n\t}(SearchInterface_1.SearchInterface));\n\tRecommendation.ID = 'Recommendation';\n\tRecommendation.NEXT_ID = 1;\n\t/**\n\t * The options for the recommendation component\n\t * @componentOptions\n\t */\n\tRecommendation.options = {\n\t    /**\n\t     * Specifies the main {@link SearchInterface} to listen to.\n\t     */\n\t    mainSearchInterface: ComponentOptions_1.ComponentOptions.buildSelectorOption(),\n\t    /**\n\t     * Specifies the user context to send to Coveo usage analytics.\n\t     * The component sends this information with the query alongside the user history to get the recommendations.\n\t     */\n\t    userContext: ComponentOptions_1.ComponentOptions.buildJsonOption(),\n\t    /**\n\t     * Specifies the ID of the interface.\n\t     * The usage analytics use the interface ID to know which recommendation interface was selected.\n\t     *\n\t     * Default value is `Recommendation` for the first one and `Recommendation_{number}`, where {number} depends on the\n\t     * number of Recommendation interfaces with default IDs in the page for the others.\n\t     */\n\t    id: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies which options from the main {@link QueryBuilder} to use in the triggered query.\n\t     *\n\t     * Possible values are:\n\t     * - `expression`\n\t     * - `advancedExpression`\n\t     * - `constantExpression`\n\t     * - `disjunctionExpression`\n\t     *\n\t     * **Example:**\n\t     *\n\t     * Adding the expression (`q`) and the advanced expression (`aq`) parts of the main query in the triggered query:\n\t     *\n\t     * `data-options-to-use=\"expression,advancedExpression\"`\n\t     *\n\t     * Default value is `expression`.\n\t     */\n\t    optionsToUse: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: ['expression'] }),\n\t    /**\n\t     * Specifies whether to send the actions history along with the triggered query.\n\t     *\n\t     * Setting this option to `false` makes it impossible for this component to get Coveo Machine Learning\n\t     * recommendations.\n\t     *\n\t     * However, setting this option to `false` can be useful to display side results in a search page.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    sendActionsHistory: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to hide the Recommendations component if no result or recommendation is available.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    hideIfNoResults: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    autoTriggerQuery: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n\t        postProcessing: function (value, options) {\n\t            if (options.mainSearchInterface) {\n\t                return false;\n\t            }\n\t            return value;\n\t        }\n\t    }),\n\t    /**\n\t     * Specifies whether to enable *responsive mode* for Recommendation components. Setting this options to `false` on\n\t     * any Recommendation component in a search interface disables responsive mode for all other Recommendation\n\t     * components in the search interface.\n\t     *\n\t     * Responsive mode displays all Recommendation components under a single dropdown button whenever the width of the\n\t     * HTML element which the search interface is bound to reaches or falls behind a certain threshold (see\n\t     * {@link Recommendation.options.responsiveBreakpoint}).\n\t     *\n\t     * See also {@link Recommendation.options.dropdownHeaderLabel}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link Recommendation.options.enableResponsiveMode} is `true` for all Recommendation components, specifies the\n\t     * width threshold (in pixels) of the search interface at which Recommendation components go in responsive mode.\n\t     *\n\t     * Recommendation components go in responsive mode when the width of the search interface is equal to or lower than\n\t     * this value.\n\t     *\n\t     * The `search interface` corresponds to the HTML element with the class `CoveoSearchInterface`.\n\t     *\n\t     * If more than one Recommendation component in the search interface specifies a value for this option, then the\n\t     * framework uses the last occurrence of the option.\n\t     *\n\t     * Default value is `1000`.\n\t     */\n\t    responsiveBreakpoint: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 1000 }),\n\t    /**\n\t     * If {@link Recommendation.options.enableResponsiveMode} is `true` for all Recommendation components, specifies the\n\t     * label of the dropdown button that allows to display the Recommendation components when in responsive mode.\n\t     *\n\t     * If more than one Recommendation component in the search interface specifies a value for this option, then the\n\t     * framework uses the first occurrence of the option.\n\t     *\n\t     * Default value is `Recommendations`.\n\t     */\n\t    dropdownHeaderLabel: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Recommendations' })\n\t};\n\texports.Recommendation = Recommendation;\n\t// We do not register the Recommendation component since it is done with .coveo('initRecommendation')\n\n\n/***/ },\n/* 135 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar QuickviewEvents = (function () {\n\t    function QuickviewEvents() {\n\t    }\n\t    return QuickviewEvents;\n\t}());\n\tQuickviewEvents.quickviewLoaded = 'quickviewLoaded';\n\tQuickviewEvents.openQuickview = 'openQuickview';\n\texports.QuickviewEvents = QuickviewEvents;\n\n\n/***/ },\n/* 136 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar ResponsiveComponentsUtils_1 = __webpack_require__(141);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Recommendation_1 = __webpack_require__(134);\n\tvar RecommendationDropdownContent_1 = __webpack_require__(142);\n\tvar ResponsiveDropdownHeader_1 = __webpack_require__(144);\n\tvar ResponsiveDropdown_1 = __webpack_require__(145);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar FacetSlider_1 = __webpack_require__(146);\n\tvar Facet_1 = __webpack_require__(158);\n\tvar Component_1 = __webpack_require__(109);\n\tvar RegisteredNamedMethods_1 = __webpack_require__(107);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar _ = __webpack_require__(16);\n\tvar ResponsiveRecommendation = (function () {\n\t    function ResponsiveRecommendation(coveoRoot, ID, options, responsiveDropdown) {\n\t        this.coveoRoot = coveoRoot;\n\t        this.ID = ID;\n\t        this.responsiveDropdown = responsiveDropdown;\n\t        this.recommendationRoot = this.getRecommendationRoot();\n\t        this.dropdownHeaderLabel = options.dropdownHeaderLabel;\n\t        this.breakpoint = this.defineResponsiveBreakpoint(options);\n\t        this.logger = new Logger_1.Logger(this);\n\t        this.dropdown = this.buildDropdown(responsiveDropdown);\n\t        this.facets = this.getFacets();\n\t        this.facetSliders = this.getFacetSliders();\n\t        this.registerOnOpenHandler();\n\t        this.registerOnCloseHandler();\n\t        this.registerQueryEvents();\n\t        this.dropdownContainer = Dom_1.$$('div', { className: ResponsiveRecommendation.DROPDOWN_CONTAINER_CSS_CLASS_NAME });\n\t    }\n\t    ResponsiveRecommendation.init = function (root, component, options) {\n\t        var logger = new Logger_1.Logger('ResponsiveRecommendation');\n\t        var coveoRoot = this.findParentRootOfRecommendationComponent(root);\n\t        if (!coveoRoot) {\n\t            logger.info('Recommendation component has no parent interface. Disabling responsive mode for this component.');\n\t            return;\n\t        }\n\t        if (!Dom_1.$$(coveoRoot).find('.coveo-results-column')) {\n\t            logger.info('Cannot find element with class coveo-results-column. Disabling responsive mode for this component.');\n\t            return;\n\t        }\n\t        ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveRecommendation, Dom_1.$$(coveoRoot), Recommendation_1.Recommendation.ID, component, options);\n\t    };\n\t    ResponsiveRecommendation.findParentRootOfRecommendationComponent = function (root) {\n\t        var coveoRoot = Dom_1.$$(root).parents(Component_1.Component.computeCssClassName(SearchInterface_1.SearchInterface));\n\t        if (coveoRoot[0]) {\n\t            return Dom_1.$$(coveoRoot[0]);\n\t        }\n\t        return null;\n\t    };\n\t    ResponsiveRecommendation.prototype.handleResizeEvent = function () {\n\t        if (this.needSmallMode() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallRecommendationActivated(this.coveoRoot)) {\n\t            this.changeToSmallMode();\n\t        }\n\t        else if (!this.needSmallMode() && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallRecommendationActivated(this.coveoRoot)) {\n\t            this.changeToLargeMode();\n\t        }\n\t        if (this.dropdown.isOpened) {\n\t            this.dropdown.dropdownContent.positionDropdown();\n\t        }\n\t    };\n\t    ResponsiveRecommendation.prototype.needDropdownWrapper = function () {\n\t        return this.needSmallMode();\n\t    };\n\t    ResponsiveRecommendation.prototype.needSmallMode = function () {\n\t        return this.coveoRoot.width() <= this.breakpoint;\n\t    };\n\t    ResponsiveRecommendation.prototype.changeToSmallMode = function () {\n\t        this.dropdown.close();\n\t        Dom_1.$$(this.coveoRoot.find(\".\" + ResponsiveComponentsManager_1.ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS)).el.appendChild(this.dropdown.dropdownHeader.element.el);\n\t        this.disableFacetPreservePosition();\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallRecommendation(this.coveoRoot);\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallRecommendation(this.recommendationRoot);\n\t    };\n\t    ResponsiveRecommendation.prototype.changeToLargeMode = function () {\n\t        this.enableFacetPreservePosition();\n\t        this.dropdown.cleanUp();\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallRecommendation(this.coveoRoot);\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallRecommendation(this.recommendationRoot);\n\t    };\n\t    ResponsiveRecommendation.prototype.buildDropdown = function (responsiveDropdown) {\n\t        var dropdownContent = this.buildDropdownContent();\n\t        var dropdownHeader = this.buildDropdownHeader();\n\t        var dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown_1.ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n\t        dropdown.disablePopupBackground();\n\t        return dropdown;\n\t    };\n\t    ResponsiveRecommendation.prototype.buildDropdownHeader = function () {\n\t        var dropdownHeaderElement = Dom_1.$$('a');\n\t        var content = Dom_1.$$('p');\n\t        content.text(Strings_1.l(this.dropdownHeaderLabel));\n\t        dropdownHeaderElement.el.appendChild(content.el);\n\t        var dropdownHeader = new ResponsiveDropdownHeader_1.ResponsiveDropdownHeader('recommendation', dropdownHeaderElement);\n\t        return dropdownHeader;\n\t    };\n\t    ResponsiveRecommendation.prototype.buildDropdownContent = function () {\n\t        var dropdownContentElement;\n\t        var recommendationColumn = this.coveoRoot.find('.coveo-recommendation-column');\n\t        if (recommendationColumn) {\n\t            dropdownContentElement = Dom_1.$$(recommendationColumn);\n\t        }\n\t        else {\n\t            dropdownContentElement = Dom_1.$$(this.coveoRoot.find('.' + Component_1.Component.computeCssClassName(Recommendation_1.Recommendation)));\n\t        }\n\t        var dropdownContent = new RecommendationDropdownContent_1.RecommendationDropdownContent('recommendation', dropdownContentElement, this.coveoRoot);\n\t        return dropdownContent;\n\t    };\n\t    ResponsiveRecommendation.prototype.defineResponsiveBreakpoint = function (options) {\n\t        var breakpoint;\n\t        if (Utils_1.Utils.isNullOrUndefined(options.responsiveBreakpoint)) {\n\t            breakpoint = ResponsiveRecommendation.RESPONSIVE_BREAKPOINT;\n\t        }\n\t        else {\n\t            breakpoint = options.responsiveBreakpoint;\n\t        }\n\t        return breakpoint;\n\t    };\n\t    ResponsiveRecommendation.prototype.getFacetSliders = function () {\n\t        var facetSliders = [];\n\t        _.each(this.coveoRoot.findAll('.' + Component_1.Component.computeCssClassName(FacetSlider_1.FacetSlider)), function (facetSliderElement) {\n\t            var facetSlider = Component_1.Component.get(facetSliderElement, FacetSlider_1.FacetSlider);\n\t            if (facetSlider instanceof FacetSlider_1.FacetSlider) {\n\t                facetSliders.push(facetSlider);\n\t            }\n\t        });\n\t        return facetSliders;\n\t    };\n\t    ResponsiveRecommendation.prototype.getFacets = function () {\n\t        var facets = [];\n\t        _.each(this.coveoRoot.findAll('.' + Component_1.Component.computeCssClassName(Facet_1.Facet)), function (facetElement) {\n\t            var facet = Component_1.Component.get(facetElement, Facet_1.Facet);\n\t            if (facet instanceof Facet_1.Facet) {\n\t                facets.push(facet);\n\t            }\n\t        });\n\t        return facets;\n\t    };\n\t    ResponsiveRecommendation.prototype.dismissFacetSearches = function () {\n\t        _.each(this.facets, function (facet) {\n\t            if (facet.facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n\t                facet.facetSearch.completelyDismissSearch();\n\t            }\n\t        });\n\t    };\n\t    ResponsiveRecommendation.prototype.enableFacetPreservePosition = function () {\n\t        _.each(this.facets, function (facet) { return facet.options.preservePosition = true; });\n\t    };\n\t    ResponsiveRecommendation.prototype.disableFacetPreservePosition = function () {\n\t        _.each(this.facets, function (facet) { return facet.options.preservePosition = false; });\n\t    };\n\t    ResponsiveRecommendation.prototype.drawFacetSliderGraphs = function () {\n\t        _.each(this.facetSliders, function (facetSlider) { return facetSlider.drawDelayedGraphData(); });\n\t    };\n\t    ResponsiveRecommendation.prototype.registerOnOpenHandler = function () {\n\t        this.dropdown.registerOnOpenHandler(this.drawFacetSliderGraphs, this);\n\t    };\n\t    ResponsiveRecommendation.prototype.registerOnCloseHandler = function () {\n\t        this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n\t    };\n\t    ResponsiveRecommendation.prototype.getRecommendationRoot = function () {\n\t        return Dom_1.$$(this.coveoRoot.find('.' + Component_1.Component.computeCssClassName(Recommendation_1.Recommendation)));\n\t    };\n\t    ResponsiveRecommendation.prototype.registerQueryEvents = function () {\n\t        var _this = this;\n\t        var recommendationInstance = RegisteredNamedMethods_1.get(this.recommendationRoot.el, SearchInterface_1.SearchInterface);\n\t        if (recommendationInstance && recommendationInstance.options.hideIfNoResults) {\n\t            this.coveoRoot.on(QueryEvents_1.QueryEvents.querySuccess, function (e, data) { return _this.handleRecommnendationQuerySucess(data); });\n\t            this.coveoRoot.on(QueryEvents_1.QueryEvents.noResults, function (e, data) { return _this.handleRecommendationNoResults(); });\n\t        }\n\t        this.coveoRoot.on(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleRecommendationQueryError(); });\n\t    };\n\t    ResponsiveRecommendation.prototype.handleRecommnendationQuerySucess = function (data) {\n\t        if (data.results.totalCount === 0) {\n\t            this.dropdown.close();\n\t            this.dropdown.dropdownHeader.hide();\n\t        }\n\t        else {\n\t            this.dropdown.dropdownHeader.show();\n\t        }\n\t    };\n\t    ResponsiveRecommendation.prototype.handleRecommendationNoResults = function () {\n\t        this.dropdown.close();\n\t        this.dropdown.dropdownHeader.hide();\n\t    };\n\t    ResponsiveRecommendation.prototype.handleRecommendationQueryError = function () {\n\t        this.dropdown.close();\n\t        this.dropdown.dropdownHeader.hide();\n\t    };\n\t    return ResponsiveRecommendation;\n\t}());\n\tResponsiveRecommendation.DROPDOWN_CONTAINER_CSS_CLASS_NAME = 'coveo-recommendation-dropdown-container';\n\tResponsiveRecommendation.RESPONSIVE_BREAKPOINT = 1000;\n\texports.ResponsiveRecommendation = ResponsiveRecommendation;\n\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Component_1 = __webpack_require__(109);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Tab_1 = __webpack_require__(138);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar _ = __webpack_require__(16);\n\tvar Index_1 = __webpack_require__(1);\n\tvar ResponsiveComponentsManager = (function () {\n\t    function ResponsiveComponentsManager(root) {\n\t        var _this = this;\n\t        this.disabledComponents = [];\n\t        this.responsiveComponents = [];\n\t        this.coveoRoot = root;\n\t        this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n\t        this.dropdownHeadersWrapper = Dom_1.$$('div', { className: ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS });\n\t        this.searchBoxElement = this.getSearchBoxElement();\n\t        this.logger = new Logger_1.Logger(this);\n\t        this.resizeListener = _.debounce(function () {\n\t            if (_this.coveoRoot.width() != 0) {\n\t                _this.addDropdownHeaderWrapperIfNeeded();\n\t                if (_this.shouldSwitchToSmallMode()) {\n\t                    _this.coveoRoot.addClass('coveo-small-interface');\n\t                }\n\t                else if (!_this.shouldSwitchToSmallMode()) {\n\t                    _this.coveoRoot.removeClass('coveo-small-interface');\n\t                }\n\t                _.each(_this.responsiveComponents, function (responsiveComponent) {\n\t                    responsiveComponent.handleResizeEvent();\n\t                });\n\t            }\n\t            else {\n\t                _this.logger.warn(\"The width of the search interface is 0, cannot dispatch resize events to responsive components. This means that the tabs will not\\n        automatically fit in the tab section. Also, the facet and recommendation component will not hide in a menu. Could the search\\n        interface display property be none? Could its visibility property be set to hidden? Also, if either of these scenarios happen during\\n        loading, it could be the cause of this issue.\");\n\t            }\n\t        }, ResponsiveComponentsManager.RESIZE_DEBOUNCE_DELAY);\n\t        if (!Index_1.DeviceUtils.isMobileDevice()) {\n\t            window.addEventListener('resize', this.resizeListener);\n\t        }\n\t        this.bindNukeEvents();\n\t    }\n\t    // Register takes a class and will instantiate it after framework initialization has completed.\n\t    ResponsiveComponentsManager.register = function (responsiveComponentConstructor, root, ID, component, options) {\n\t        var _this = this;\n\t        root.on(InitializationEvents_1.InitializationEvents.afterInitialization, function () {\n\t            if (_this.shouldEnableResponsiveMode(root)) {\n\t                var responsiveComponentsManager = _.find(_this.componentManagers, function (componentManager) { return root.el == componentManager.coveoRoot.el; });\n\t                if (!responsiveComponentsManager) {\n\t                    responsiveComponentsManager = new ResponsiveComponentsManager(root);\n\t                    _this.componentManagers.push(responsiveComponentsManager);\n\t                }\n\t                if (!Utils_1.Utils.isNullOrUndefined(options.enableResponsiveMode) && !options.enableResponsiveMode) {\n\t                    responsiveComponentsManager.disableComponent(ID);\n\t                    return;\n\t                }\n\t                _this.componentInitializations.push({\n\t                    responsiveComponentsManager: responsiveComponentsManager,\n\t                    arguments: [responsiveComponentConstructor, root, ID, component, options]\n\t                });\n\t            }\n\t            _this.remainingComponentInitializations--;\n\t            if (_this.remainingComponentInitializations == 0) {\n\t                _this.instantiateResponsiveComponents(); // necessary to verify if all components are disabled before they are initialized.\n\t                if (root.width() == 0) {\n\t                    var logger = new Logger_1.Logger('ResponsiveComponentsManager');\n\t                    logger.info(\"Search interface width is 0, cannot dispatch resize events to responsive components. Will try again after first\\n          query success.\");\n\t                    root.one(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t                        _this.resizeAllComponentsManager();\n\t                    });\n\t                }\n\t                else {\n\t                    _this.resizeAllComponentsManager();\n\t                }\n\t            }\n\t        });\n\t        this.remainingComponentInitializations++;\n\t    };\n\t    ResponsiveComponentsManager.shouldEnableResponsiveMode = function (root) {\n\t        var searchInterface = Component_1.Component.get(root.el, SearchInterface_1.SearchInterface, true);\n\t        return searchInterface instanceof SearchInterface_1.SearchInterface && searchInterface.options.enableAutomaticResponsiveMode && searchInterface.isNewDesign();\n\t    };\n\t    ResponsiveComponentsManager.instantiateResponsiveComponents = function () {\n\t        _.each(this.componentInitializations, function (componentInitialization) {\n\t            var responsiveComponentsManager = componentInitialization.responsiveComponentsManager;\n\t            responsiveComponentsManager.register.apply(responsiveComponentsManager, componentInitialization.arguments);\n\t        });\n\t    };\n\t    ResponsiveComponentsManager.resizeAllComponentsManager = function () {\n\t        _.each(this.componentManagers, function (componentManager) {\n\t            componentManager.resizeListener();\n\t        });\n\t    };\n\t    ResponsiveComponentsManager.prototype.register = function (responsiveComponentConstructor, root, ID, component, options) {\n\t        if (this.isDisabled(ID)) {\n\t            return;\n\t        }\n\t        if (!this.isActivated(ID)) {\n\t            var responsiveComponent = new responsiveComponentConstructor(root, ID, options);\n\t            if (this.isTabs(ID)) {\n\t                this.responsiveComponents.push(responsiveComponent);\n\t            }\n\t            else {\n\t                // Tabs need to be rendered last, so any dropdown header(eg: facet) is already there when the responsive tabs check for overflow.\n\t                this.responsiveComponents.unshift(responsiveComponent);\n\t            }\n\t        }\n\t        _.each(this.responsiveComponents, function (responsiveComponent) {\n\t            if (responsiveComponent.registerComponent != null) {\n\t                responsiveComponent.registerComponent(component);\n\t            }\n\t        });\n\t    };\n\t    ResponsiveComponentsManager.prototype.disableComponent = function (ID) {\n\t        this.disabledComponents.push(ID);\n\t    };\n\t    ResponsiveComponentsManager.prototype.isDisabled = function (ID) {\n\t        return _.indexOf(this.disabledComponents, ID) != -1;\n\t    };\n\t    ResponsiveComponentsManager.prototype.shouldSwitchToSmallMode = function () {\n\t        var aComponentNeedsTabSection = this.needDropdownWrapper();\n\t        var reachedBreakpoint = this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getMediumScreenWidth();\n\t        return aComponentNeedsTabSection || reachedBreakpoint;\n\t    };\n\t    ResponsiveComponentsManager.prototype.needDropdownWrapper = function () {\n\t        for (var i = 0; i < this.responsiveComponents.length; i++) {\n\t            var responsiveComponent = this.responsiveComponents[i];\n\t            if (responsiveComponent.needDropdownWrapper && responsiveComponent.needDropdownWrapper()) {\n\t                return true;\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    ResponsiveComponentsManager.prototype.addDropdownHeaderWrapperIfNeeded = function () {\n\t        if (this.needDropdownWrapper()) {\n\t            var tabSection = Dom_1.$$(this.coveoRoot).find('.coveo-tab-section');\n\t            if (this.searchBoxElement) {\n\t                this.dropdownHeadersWrapper.insertAfter(this.searchBoxElement);\n\t            }\n\t            else if (tabSection) {\n\t                this.dropdownHeadersWrapper.insertAfter(tabSection);\n\t            }\n\t            else {\n\t                this.coveoRoot.prepend(this.dropdownHeadersWrapper.el);\n\t            }\n\t        }\n\t    };\n\t    ResponsiveComponentsManager.prototype.isTabs = function (ID) {\n\t        return ID == Tab_1.Tab.ID;\n\t    };\n\t    ResponsiveComponentsManager.prototype.isActivated = function (ID) {\n\t        return _.find(this.responsiveComponents, function (current) { return current.ID == ID; }) != undefined;\n\t    };\n\t    ResponsiveComponentsManager.prototype.getSearchBoxElement = function () {\n\t        var searchBoxElement = this.coveoRoot.find('.coveo-search-section');\n\t        if (searchBoxElement) {\n\t            return searchBoxElement;\n\t        }\n\t        else {\n\t            return this.coveoRoot.find('.CoveoSearchbox');\n\t        }\n\t    };\n\t    ResponsiveComponentsManager.prototype.bindNukeEvents = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.coveoRoot).on(InitializationEvents_1.InitializationEvents.nuke, function () {\n\t            window.removeEventListener('resize', _this.resizeListener);\n\t        });\n\t    };\n\t    return ResponsiveComponentsManager;\n\t}());\n\tResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS = 'coveo-dropdown-header-wrapper';\n\tResponsiveComponentsManager.RESIZE_DEBOUNCE_DELAY = 200;\n\tResponsiveComponentsManager.componentManagers = [];\n\tResponsiveComponentsManager.remainingComponentInitializations = 0;\n\tResponsiveComponentsManager.componentInitializations = [];\n\texports.ResponsiveComponentsManager = ResponsiveComponentsManager;\n\n\n/***/ },\n/* 138 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveTabs_ts_1 = __webpack_require__(139);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Tab component renders a bar that allows the end user to select a specific search interface.\n\t *\n\t * This component attaches itself to a `div` element. It is in charge of adding an advanced expression to the outgoing\n\t * query in order to refine the results.\n\t *\n\t * The Tab component can also hide and show different parts of the UI. For each individual component in the UI, you can\n\t * specify whether you wish to include or exclude that component when the user selects a certain Tab.\n\t *\n\t * **Including and Excluding Other HTML Components:**\n\t *\n\t * You can hide or show a specific HTML component based on the currently selected Tab by adding one of the following\n\t * attributes to its tag:\n\t *\n\t * - `<div data-tab=\"foobar\">`: Only include this element in the Tab with `foobar` as its `data-id`.\n\t * - `<div data-tab-not=\"foobar\">`: Do not include this element in the Tab with `foobar` as its `data-id`.\n\t * - `<div data-tab=\"foobar,somethingelse\">`: Only include this element in the Tab with `foobar` as its `data-id` and in\n\t * the Tab with `somethingelse` as its `data-id`.\n\t *\n\t * **Setting a New Endpoint for a Tab:**\n\t *\n\t * A Tab can use a custom endpoint when performing a query. Of course, you need to make sure that the endpoint exists in\n\t * the array of Coveo.SearchEndpoint.endpoints (see {@link SearchEndpoint.endpoints}).\n\t *\n\t * ```\n\t * Coveo.SearchEndpoint.endpoints[\"specialEndpoint\"] = new Coveo.SearchEndpoint({\n\t *     restUri : 'https://somewhere.com/rest/search'\n\t * })\n\t *\n\t * [ ... ]\n\t *\n\t * <div class='CoveoTab' data-endpoint='specialEndpoint'></div>\n\t *\n\t * ```\n\t */\n\tvar Tab = (function (_super) {\n\t    __extends(Tab, _super);\n\t    /**\n\t     * Creates a new Tab. Binds on buildingQuery event as well as an event on click of the element.\n\t     * @param element The HTMLElement on which to instantiate the component. Normally a `div`.\n\t     * @param options The options for the Tab component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Tab(element, options, bindings) {\n\t        var _this = _super.call(this, element, Tab.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.isFirstQuery = true;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Tab, options);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.T, function (args) { return _this.handleQueryStateChanged(args); });\n\t        var clickAction = function () { return _this.handleClick(); };\n\t        _this.bind.on(element, 'click', clickAction);\n\t        _this.bind.on(element, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clickAction));\n\t        _this.render();\n\t        ResponsiveTabs_ts_1.ResponsiveTabs.init(_this.root, _this, _this.options);\n\t        return _this;\n\t    }\n\t    /**\n\t     * Selects the current Tab.\n\t     *\n\t     * Also logs the `interfaceChange` event in the usage analytics with the new current {@link Tab.options.id} as metada\n\t     * and triggers a new query.\n\t     */\n\t    Tab.prototype.select = function () {\n\t        if (!this.disabled) {\n\t            var currentLayout = this.queryStateModel.get(QueryStateModel_1.QUERY_STATE_ATTRIBUTES.LAYOUT);\n\t            this.queryStateModel.setMultiple({\n\t                t: this.options.id,\n\t                sort: this.options.sort || QueryStateModel_1.QueryStateModel.defaultAttributes.sort,\n\t                layout: this.options.layout || currentLayout || QueryStateModel_1.QueryStateModel.defaultAttributes.layout\n\t            });\n\t            this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.interfaceChange, { interfaceChangeTo: this.options.id });\n\t            this.queryController.executeQuery();\n\t        }\n\t    };\n\t    /**\n\t     * Indicates whether the HTMLElement argument is included in the Tab. *Included* elements are shown when the Tab is\n\t     * selected, whereas *excluded* elements are not.\n\t     * @param element The HTMLElement to verify.\n\t     * @returns {boolean} `true` if the HTMLElement is included in the Tab; `false` if it is excluded.\n\t     */\n\t    Tab.prototype.isElementIncludedInTab = function (element) {\n\t        Assert_1.Assert.exists(element);\n\t        var includedTabs = this.splitListOfTabs(element.getAttribute('data-tab'));\n\t        var excludedTabs = this.splitListOfTabs(element.getAttribute('data-tab-not'));\n\t        Assert_1.Assert.check(!(includedTabs.length != 0 && excludedTabs.length != 0), 'You cannot both explicitly include and exclude an element from tabs.');\n\t        return (includedTabs.length != 0 && _.indexOf(includedTabs, this.options.id) != -1) ||\n\t            (excludedTabs.length != 0 && _.indexOf(excludedTabs, this.options.id) == -1) ||\n\t            (includedTabs.length == 0 && excludedTabs.length == 0);\n\t    };\n\t    Tab.prototype.handleClick = function () {\n\t        this.select();\n\t    };\n\t    Tab.prototype.render = function () {\n\t        var icon = this.options.icon;\n\t        if (Utils_1.Utils.isNonEmptyString(icon)) {\n\t            var iconSpan = Dom_1.$$('span').el;\n\t            Dom_1.$$(iconSpan).addClass(['coveo-icon', icon]);\n\t            this.element.insertBefore(iconSpan, this.element.firstChild);\n\t        }\n\t        var caption = this.options.caption;\n\t        if (Utils_1.Utils.isNonEmptyString(caption)) {\n\t            var captionP = document.createElement('p');\n\t            Dom_1.$$(captionP).text(caption);\n\t            this.element.appendChild(captionP);\n\t        }\n\t        this.element.setAttribute('tabindex', '0');\n\t    };\n\t    Tab.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        this.isFirstQuery = false;\n\t        if (!this.disabled && this.isSelected()) {\n\t            data.queryBuilder.tab = this.options.id;\n\t            if (Utils_1.Utils.isNonEmptyString(this.options.expression)) {\n\t                if (this.options.constant) {\n\t                    data.queryBuilder.constantExpression.add(this.options.expression);\n\t                }\n\t                else {\n\t                    data.queryBuilder.advancedExpression.add(this.options.expression);\n\t                }\n\t            }\n\t            if (this.options.enableDuplicateFiltering) {\n\t                data.queryBuilder.enableDuplicateFiltering = true;\n\t            }\n\t            if (this.options.pipeline != null) {\n\t                data.queryBuilder.pipeline = this.options.pipeline;\n\t            }\n\t            if (this.options.maximumAge != null) {\n\t                data.queryBuilder.maximumAge = this.options.maximumAge;\n\t            }\n\t        }\n\t    };\n\t    Tab.prototype.handleQueryStateChanged = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        if (!this.disabled && this.isSelected()) {\n\t            Dom_1.$$(this.element).addClass('coveo-selected');\n\t            this.queryController.setEndpoint(this.options.endpoint);\n\t            this.showAndHideAppropriateElements();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).removeClass('coveo-selected');\n\t        }\n\t    };\n\t    Tab.prototype.isSelected = function () {\n\t        var activeTab = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t);\n\t        return activeTab == this.options.id;\n\t    };\n\t    Tab.prototype.showAndHideAppropriateElements = function () {\n\t        var _this = this;\n\t        var showElements = [];\n\t        var hideElements = [];\n\t        _.each(Dom_1.$$(this.root).findAll('[data-tab],[data-tab-not]'), function (element) {\n\t            if (_this.isElementIncludedInTab(element)) {\n\t                _this.toggleAllComponentsUnder(element, true);\n\t                showElements.push(element);\n\t            }\n\t            else {\n\t                _this.toggleAllComponentsUnder(element, false);\n\t                hideElements.push(element);\n\t            }\n\t        });\n\t        Dom_1.$$(this.root).one(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t            _.each(showElements, function (elem) { return Dom_1.$$(elem).removeClass('coveo-tab-disabled'); });\n\t            _.each(hideElements, function (elem) { return Dom_1.$$(elem).addClass('coveo-tab-disabled'); });\n\t        });\n\t    };\n\t    Tab.prototype.splitListOfTabs = function (value) {\n\t        if (Utils_1.Utils.exists(value)) {\n\t            return _.map(value.split(','), function (tab) { return Utils_1.Utils.trim(tab); });\n\t        }\n\t        else {\n\t            return [];\n\t        }\n\t    };\n\t    Tab.prototype.toggleAllComponentsUnder = function (element, enable) {\n\t        Assert_1.Assert.exists(element);\n\t        var togglePossibleComponent = function (possibleComponent) {\n\t            var possibleCmp = Component_1.Component.get(possibleComponent, undefined, true);\n\t            if (possibleCmp) {\n\t                if (enable) {\n\t                    possibleCmp.enable();\n\t                }\n\t                else {\n\t                    possibleCmp.disable();\n\t                }\n\t            }\n\t        };\n\t        togglePossibleComponent(element);\n\t        _.each(Dom_1.$$(element).findAll('*'), function (el) {\n\t            togglePossibleComponent(el);\n\t        });\n\t    };\n\t    Tab.prototype.enable = function () {\n\t        _super.prototype.enable.call(this);\n\t        this.element.style.display = '';\n\t    };\n\t    Tab.prototype.disable = function () {\n\t        _super.prototype.disable.call(this);\n\t        this.element.style.display = 'none';\n\t    };\n\t    return Tab;\n\t}(Component_1.Component));\n\tTab.ID = 'Tab';\n\t/**\n\t * The options for a Tab\n\t * @componentOptions\n\t */\n\tTab.options = {\n\t    /**\n\t     * Specifies a unique ID for the Tab.\n\t     *\n\t     * Specifying a value for this option is necessary for this component to work.\n\t     */\n\t    id: ComponentOptions_1.ComponentOptions.buildStringOption({ required: true }),\n\t    /**\n\t     * Specifies the caption of the Tab.\n\t     *\n\t     * Specifying a value for this option is necessary for this component to work.\n\t     */\n\t    caption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ required: true }),\n\t    /**\n\t     * Specifies an icon to use for the Tab.\n\t     *\n\t     * @deprecated This options is mostly kept for legacy reasons. If possible, you should avoid using it.\n\t     */\n\t    icon: ComponentOptions_1.ComponentOptions.buildIconOption(),\n\t    /**\n\t     * Specifies an advanced expression or filter that the Tab should add to any outgoing query.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * `@objecttype==Message`\n\t     *\n\t     * Default value is `undefined` and the Tab applies no additional expression or filter to the query.\n\t     */\n\t    expression: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the {@link SearchEndpoint} to point to when performing queries from within the Tab.\n\t     *\n\t     * By default, the Tab uses the \"default\" endpoint.\n\t     */\n\t    endpoint: ComponentOptions_1.ComponentOptions.buildCustomOption(function (endpoint) { return endpoint != null ? SearchEndpoint_1.SearchEndpoint.endpoints[endpoint] : null; }),\n\t    /**\n\t     * Specifies the default sort criteria to use when selecting the Tab. A {@link Sort} component with the same\n\t     * parameter needs to be present in the search interface in order for this option to function properly.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - `data-sort='relevancy'`\n\t     * - `data-sort='date descending'`\n\t     *\n\t     * Default value is `undefined` and the normal {@link Sort} component behavior applies.\n\t     */\n\t    sort: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the default layout to display when the user selects the Tab (see {@link ResultList.options.layout} and\n\t     * {@link ResultLayout}).\n\t     *\n\t     * See the {@link ValidLayout} type for the list of possible values.\n\t     *\n\t     * If not specified, it will default to 'list'.\n\t     *\n\t     * See also [Result Layouts](https://developers.coveo.com/x/yQUvAg).\n\t     *\n\t     * Default value is `undefined` and the component selects the first available layout.\n\t     */\n\t    layout: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies whether to include the {@link Tab.options.expression} in the constant part of the query.\n\t     *\n\t     * The index specially optimizes the constant part of the query to execute faster. However, you must be careful not\n\t     * to include dynamic query expressions, otherwise the cache will lose its efficiency.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    constant: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to filter duplicates in the search results when the user selects the Tab.\n\t     *\n\t     * Setting this option to `true` forces duplicates to not appear in the search results. However, {@link Facet}\n\t     * counts still include duplicates, which can be confusing for the end user. This is a limitation of the index.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * > The end user narrows a query down to one document that has a duplicate. If this options is `true` and the user\n\t     * > selects the Tab, only one document appears in the search results while the Facet count is still 2.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It is also possible to enable duplicate filtering for the entire {@link SearchInterface} rather than for a\n\t     * > single Tab (see {@link SearchInterface.options.enableDuplicateFiltering}).\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableDuplicateFiltering: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the name of the query pipeline to use for the queries when the Tab is selected.\n\t     *\n\t     * You can specify a value for this option if your index is in a Coveo Cloud organization in which pipelines have\n\t     * been created (see [Managing Query Pipelines](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=128)).\n\t     *\n\t     * Default value is `undefined`, which means that pipeline selection conditions defined in the Coveo Cloud\n\t     * organization apply.\n\t     */\n\t    pipeline: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the maximum age (in milliseconds) that cached query results can have to still be usable as results\n\t     * instead of performing a new query on the index from within the Tab. The cache is located in the Coveo Search API\n\t     * (which resides between the index and the search interface).\n\t     *\n\t     * If cached results that are older than the age you specify in this option are available, a new query will be\n\t     * performed on the index anyhow.\n\t     *\n\t     * On high-volume public web sites, specifying a higher value for this option can greatly improve query response\n\t     * time at the cost of result freshness.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > It is also possible to set a maximum cache age for the entire {@link SearchInterface} rather than for a single\n\t     * > Tab (see {@link SearchInterface.options.maximumAge}).\n\t     *\n\t     * Default value is `undefined` and the Coveo Search API determines the maximum cache age. This is typically\n\t     * equivalent to 30 minutes (see [Query Parameters - maximumAge](https://developers.coveo.com/display/SearchREST/Query+Parameters#QueryParameters-maximumAge)).\n\t     */\n\t    maximumAge: ComponentOptions_1.ComponentOptions.buildNumberOption(),\n\t    /**\n\t     * Specifies whether to enable responsive mode for tabs. Responsive mode makes overflowing tabs disappear, instead\n\t     * making them available using a dropdown button. Responsive tabs are enabled either when tabs overflow or when the\n\t     * width of the search interface becomes too small.\n\t     *\n\t     * Disabling responsive mode for one Tab also disables it for all tabs. Therefore, you only need to set this option\n\t     * to `false` on one Tab to disable responsive mode.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the label of the button that allows to show the hidden tabs when in responsive mode.\n\t     *\n\t     * If more than one Tab in the search interface specifies a value for this option, then the framework uses the first\n\t     * occurrence of the option.\n\t     *\n\t     * The default value is `\"More\"`.\n\t     */\n\t    dropdownHeaderLabel: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\texports.Tab = Tab;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Tab);\n\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar EventsUtils_1 = __webpack_require__(140);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Component_1 = __webpack_require__(109);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar Tab_1 = __webpack_require__(138);\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar ResponsiveComponentsUtils_1 = __webpack_require__(141);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar _ = __webpack_require__(16);\n\tvar ResponsiveTabs = (function () {\n\t    function ResponsiveTabs(coveoRoot, ID) {\n\t        this.coveoRoot = coveoRoot;\n\t        this.ID = ID;\n\t        this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n\t        this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n\t        this.searchBoxElement = this.getSearchBoxElement();\n\t        this.dropdownContent = this.buildDropdownContent();\n\t        this.dropdownHeader = this.buildDropdownHeader();\n\t        this.bindDropdownContentEvents();\n\t        this.bindDropdownHeaderEvents();\n\t        this.tabSection = Dom_1.$$(this.coveoRoot.find('.coveo-tab-section'));\n\t        this.manageTabSwapping();\n\t        this.saveTabsPosition();\n\t        this.bindNukeEvents();\n\t    }\n\t    ResponsiveTabs.init = function (root, component, options) {\n\t        this.logger = new Logger_1.Logger('ResponsiveTabs');\n\t        if (!Dom_1.$$(root).find('.coveo-tab-section')) {\n\t            this.logger.info('No element with class coveo-tab-section. Responsive tabs cannot be enabled.');\n\t            return;\n\t        }\n\t        ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveTabs, Dom_1.$$(root), Tab_1.Tab.ID, component, options);\n\t    };\n\t    ResponsiveTabs.prototype.handleResizeEvent = function () {\n\t        if (this.needSmallMode() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n\t            this.changeToSmallMode();\n\t        }\n\t        else if (!this.needSmallMode() && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n\t            this.changeToLargeMode();\n\t        }\n\t        var tabs = this.getTabsInTabSection();\n\t        if (this.shouldAddTabsToDropdown()) {\n\t            this.addTabsToDropdown(tabs);\n\t        }\n\t        else if (this.shouldRemoveTabsFromDropdown()) {\n\t            this.removeTabsFromDropdown(tabs);\n\t        }\n\t        if (this.dropdownHeader.hasClass('coveo-dropdown-header-active')) {\n\t            this.positionPopup();\n\t        }\n\t    };\n\t    ;\n\t    ResponsiveTabs.prototype.needSmallMode = function () {\n\t        var mediumWidth = this.searchInterface ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : new ResponsiveComponents_1.ResponsiveComponents().getMediumScreenWidth();\n\t        if (this.coveoRoot.width() <= mediumWidth) {\n\t            return true;\n\t        }\n\t        else if (!ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n\t            return this.isOverflowing(this.tabSection.el);\n\t        }\n\t        else {\n\t            return this.isLargeFormatOverflowing();\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.changeToSmallMode = function () {\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallTabs(this.coveoRoot);\n\t    };\n\t    ResponsiveTabs.prototype.changeToLargeMode = function () {\n\t        this.emptyDropdown();\n\t        this.cleanUpDropdown();\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallTabs(this.coveoRoot);\n\t    };\n\t    ResponsiveTabs.prototype.shouldAddTabsToDropdown = function () {\n\t        return this.isOverflowing(this.tabSection.el) && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot);\n\t    };\n\t    ResponsiveTabs.prototype.addTabsToDropdown = function (tabs) {\n\t        var currentTab;\n\t        if (!this.tabSection.find('.coveo-tab-dropdown-header')) {\n\t            var facetDropdownHeader = this.tabSection.find('.coveo-facet-dropdown-header');\n\t            if (facetDropdownHeader) {\n\t                this.dropdownHeader.insertBefore(facetDropdownHeader);\n\t            }\n\t            else {\n\t                this.tabSection.el.appendChild(this.dropdownHeader.el);\n\t            }\n\t        }\n\t        for (var i = tabs.length - 1; i >= 0; i--) {\n\t            currentTab = tabs[i];\n\t            if (Dom_1.$$(currentTab).hasClass('coveo-selected') && i > 0) {\n\t                currentTab = tabs[--i];\n\t            }\n\t            this.addToDropdown(currentTab);\n\t            if (!this.isOverflowing(this.tabSection.el)) {\n\t                break;\n\t            }\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.shouldRemoveTabsFromDropdown = function () {\n\t        return !this.isOverflowing(this.tabSection.el) && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot) && !this.isDropdownEmpty();\n\t    };\n\t    ResponsiveTabs.prototype.removeTabsFromDropdown = function (tabs) {\n\t        var dropdownTabs = this.dropdownContent.findAll('.coveo-tab-dropdown');\n\t        var lastTabInSection, current;\n\t        if (tabs) {\n\t            lastTabInSection = tabs.pop();\n\t        }\n\t        while (!this.isOverflowing(this.tabSection.el) && !this.isDropdownEmpty()) {\n\t            current = dropdownTabs.shift();\n\t            this.removeFromDropdown(current);\n\t            this.fromDropdownToTabSection(Dom_1.$$(current), lastTabInSection);\n\t            lastTabInSection = _.clone(current);\n\t        }\n\t        if (this.isOverflowing(this.tabSection.el)) {\n\t            var tabs_1 = this.getTabsInTabSection();\n\t            this.addToDropdown(tabs_1.pop());\n\t        }\n\t        if (this.isDropdownEmpty()) {\n\t            this.cleanUpDropdown();\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.emptyDropdown = function () {\n\t        if (!this.isDropdownEmpty()) {\n\t            var dropdownTabs = this.dropdownContent.findAll('.coveo-tab-dropdown');\n\t            var tabs = this.getTabsInTabSection();\n\t            var lastTabInSection = void 0;\n\t            if (tabs) {\n\t                lastTabInSection = tabs.pop();\n\t            }\n\t            while (!this.isDropdownEmpty()) {\n\t                var current = dropdownTabs.shift();\n\t                this.removeFromDropdown(current);\n\t                Dom_1.$$(current).insertBefore(this.dropdownHeader.el);\n\t                this.fromDropdownToTabSection(Dom_1.$$(current), lastTabInSection);\n\t                lastTabInSection = _.clone(current);\n\t            }\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.isLargeFormatOverflowing = function () {\n\t        var virtualTabSection = Dom_1.$$(this.tabSection.el.cloneNode(true));\n\t        var dropdownHeader = virtualTabSection.find('.coveo-tab-dropdown-header');\n\t        if (dropdownHeader) {\n\t            virtualTabSection.el.removeChild(dropdownHeader);\n\t        }\n\t        virtualTabSection.el.style.position = 'absolute';\n\t        virtualTabSection.el.style.visibility = 'hidden';\n\t        if (!this.isDropdownEmpty()) {\n\t            _.each(this.dropdownContent.findAll('.CoveoTab'), function (tab) {\n\t                virtualTabSection.el.appendChild(tab.cloneNode(true));\n\t            });\n\t        }\n\t        virtualTabSection.insertBefore(this.tabSection.el);\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallTabs(this.coveoRoot);\n\t        var isOverflowing = this.isOverflowing(virtualTabSection.el);\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallTabs(this.coveoRoot);\n\t        virtualTabSection.detach();\n\t        return isOverflowing;\n\t    };\n\t    ResponsiveTabs.prototype.isOverflowing = function (el) {\n\t        return el.clientWidth < el.scrollWidth;\n\t    };\n\t    ResponsiveTabs.prototype.buildDropdownHeader = function () {\n\t        var dropdownHeader = Dom_1.$$('a', { className: 'coveo-dropdown-header coveo-tab-dropdown-header' });\n\t        var content = Dom_1.$$('p');\n\t        content.text(this.dropdownHeaderLabel);\n\t        content.el.appendChild(Dom_1.$$('span', { className: 'coveo-sprites-more-tabs' }).el);\n\t        dropdownHeader.el.appendChild(content.el);\n\t        return dropdownHeader;\n\t    };\n\t    ResponsiveTabs.prototype.bindDropdownHeaderEvents = function () {\n\t        var _this = this;\n\t        this.dropdownHeader.on('click', function () {\n\t            if (!_this.dropdownHeader.hasClass('coveo-dropdown-header-active')) {\n\t                _this.positionPopup();\n\t                _this.dropdownHeader.addClass('coveo-dropdown-header-active');\n\t            }\n\t            else {\n\t                _this.closeDropdown();\n\t            }\n\t        });\n\t    };\n\t    ResponsiveTabs.prototype.buildDropdownContent = function () {\n\t        var dropdownContent = Dom_1.$$('div', { className: 'coveo-tab-list-container ' + SearchInterface_1.SearchInterface.SMALL_INTERFACE_CLASS_NAME });\n\t        var contentList = Dom_1.$$('ol', { className: 'coveo-tab-list' });\n\t        dropdownContent.el.appendChild(contentList.el);\n\t        return dropdownContent;\n\t    };\n\t    ResponsiveTabs.prototype.bindDropdownContentEvents = function () {\n\t        var _this = this;\n\t        this.documentClickListener = function (event) {\n\t            if (Utils_1.Utils.isHtmlElement(event.target)) {\n\t                var eventTarget = Dom_1.$$(event.target);\n\t                if (!eventTarget.closest('coveo-tab-list-container') && !eventTarget.closest('coveo-tab-dropdown-header') && !eventTarget.closest('coveo-tab-dropdown')) {\n\t                    _this.closeDropdown();\n\t                }\n\t            }\n\t        };\n\t        Dom_1.$$(document.documentElement).on('click', this.documentClickListener);\n\t    };\n\t    ResponsiveTabs.prototype.closeDropdown = function () {\n\t        this.dropdownContent.detach();\n\t        this.dropdownHeader.removeClass('coveo-dropdown-header-active');\n\t    };\n\t    ResponsiveTabs.prototype.addToDropdown = function (el) {\n\t        if (this.dropdownContent) {\n\t            Dom_1.$$(el).addClass('coveo-tab-dropdown');\n\t            var list = this.dropdownContent.find('ol');\n\t            var listElement = Dom_1.$$('li');\n\t            listElement.el.appendChild(el);\n\t            Dom_1.$$(list).prepend(listElement.el);\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.removeFromDropdown = function (el) {\n\t        if (this.dropdownContent) {\n\t            Dom_1.$$(el).removeClass('coveo-tab-dropdown');\n\t            Dom_1.$$(el.parentElement).detach();\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.cleanUpDropdown = function () {\n\t        this.dropdownHeader.removeClass('coveo-dropdown-header-active');\n\t        this.dropdownHeader.detach();\n\t        this.dropdownContent.detach();\n\t    };\n\t    ResponsiveTabs.prototype.isDropdownEmpty = function () {\n\t        if (this.dropdownContent) {\n\t            var tabs = this.dropdownContent.findAll('.CoveoTab');\n\t            return tabs.length == 0;\n\t        }\n\t        return false;\n\t    };\n\t    ResponsiveTabs.prototype.manageTabSwapping = function () {\n\t        var _this = this;\n\t        _.each(this.coveoRoot.findAll('.' + Component_1.Component.computeCssClassNameForType(this.ID)), function (tabElement) {\n\t            var tab = Dom_1.$$(tabElement);\n\t            var fadeOutFadeIn = function (event) {\n\t                var tabsInSection = _this.getTabsInTabSection();\n\t                var lastTabInSection = tabsInSection.pop();\n\t                var lastTabSectionSibling = lastTabInSection.previousSibling;\n\t                if (event.propertyName == 'opacity') {\n\t                    if (tab.el.style.opacity == '0') {\n\t                        Dom_1.$$(lastTabInSection).addClass('coveo-tab-dropdown');\n\t                        tab.replaceWith(lastTabInSection);\n\t                        tab.removeClass('coveo-tab-dropdown');\n\t                        _this.fromDropdownToTabSection(tab, lastTabSectionSibling);\n\t                        // Because of the DOM manipulation, sometimes the animation will not trigger. Accessing the computed styles makes sure\n\t                        // the animation will happen.\n\t                        window.getComputedStyle(tab.el).opacity;\n\t                        window.getComputedStyle(lastTabInSection).opacity;\n\t                        tab.el.style.opacity = lastTabInSection.style.opacity = '1';\n\t                    }\n\t                    else if (tab.el.style.opacity == '1') {\n\t                        _this.closeDropdown();\n\t                        EventsUtils_1.EventsUtils.removePrefixedEvent(tab.el, 'TransitionEnd', fadeOutFadeIn);\n\t                        _this.handleResizeEvent();\n\t                    }\n\t                }\n\t            };\n\t            tab.on('click', function () {\n\t                if (tab.hasClass('coveo-tab-dropdown')) {\n\t                    var tabsInSection = _this.getTabsInTabSection();\n\t                    var lastTabInSection = tabsInSection.pop();\n\t                    if (lastTabInSection) {\n\t                        EventsUtils_1.EventsUtils.addPrefixedEvent(tab.el, 'TransitionEnd', fadeOutFadeIn);\n\t                        tab.el.style.opacity = lastTabInSection.style.opacity = '0';\n\t                    }\n\t                }\n\t            });\n\t        });\n\t    };\n\t    ResponsiveTabs.prototype.getSearchBoxElement = function () {\n\t        var searchBoxElement = this.coveoRoot.find('.coveo-search-section');\n\t        if (searchBoxElement) {\n\t            return searchBoxElement;\n\t        }\n\t        else {\n\t            return this.coveoRoot.find('.CoveoSearchbox');\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.saveTabsPosition = function () {\n\t        this.previousSibling = this.tabSection.el.previousSibling ? Dom_1.$$(this.tabSection.el.previousSibling) : null;\n\t        this.parent = Dom_1.$$(this.tabSection.el.parentElement);\n\t    };\n\t    ResponsiveTabs.prototype.bindNukeEvents = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.coveoRoot).on(InitializationEvents_1.InitializationEvents.nuke, function () {\n\t            Dom_1.$$(document.documentElement).off('click', _this.documentClickListener);\n\t        });\n\t    };\n\t    ResponsiveTabs.prototype.positionPopup = function () {\n\t        PopupUtils_1.PopupUtils.positionPopup(this.dropdownContent.el, this.dropdownHeader.el, this.coveoRoot.el, { horizontal: PopupUtils_1.HorizontalAlignment.INNERRIGHT, vertical: PopupUtils_1.VerticalAlignment.BOTTOM }, this.coveoRoot.el);\n\t    };\n\t    ResponsiveTabs.prototype.getTabsInTabSection = function () {\n\t        var _this = this;\n\t        var tabsInSection = [];\n\t        _.each(this.tabSection.el.children, function (childElement) {\n\t            if (Utils_1.Utils.isHtmlElement(childElement)) {\n\t                var child = Dom_1.$$(childElement);\n\t                if (!child.hasClass('coveo-tab-dropdown') && child.hasClass(Component_1.Component.computeCssClassNameForType(_this.ID))) {\n\t                    tabsInSection.push(child.el);\n\t                }\n\t            }\n\t        });\n\t        return tabsInSection;\n\t    };\n\t    ResponsiveTabs.prototype.fromDropdownToTabSection = function (tab, lastTabInTabSection) {\n\t        if (lastTabInTabSection) {\n\t            tab.insertAfter(lastTabInTabSection);\n\t        }\n\t        else {\n\t            this.tabSection.prepend(tab.el);\n\t        }\n\t    };\n\t    ResponsiveTabs.prototype.getDropdownHeaderLabel = function () {\n\t        var dropdownHeaderLabel;\n\t        _.each(Dom_1.$$(this.coveoRoot.find('.coveo-tab-section')).findAll('.' + Component_1.Component.computeCssClassName(Tab_1.Tab)), function (tabElement) {\n\t            var tab = Component_1.Component.get(tabElement, Tab_1.Tab);\n\t            if (!dropdownHeaderLabel && tab.options.dropdownHeaderLabel) {\n\t                dropdownHeaderLabel = tab.options.dropdownHeaderLabel;\n\t            }\n\t        });\n\t        if (!dropdownHeaderLabel) {\n\t            dropdownHeaderLabel = Strings_1.l(ResponsiveTabs.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n\t        }\n\t        return dropdownHeaderLabel;\n\t    };\n\t    return ResponsiveTabs;\n\t}());\n\tResponsiveTabs.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'More';\n\texports.ResponsiveTabs = ResponsiveTabs;\n\n\n/***/ },\n/* 140 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar EventsUtils = (function () {\n\t    function EventsUtils() {\n\t    }\n\t    // eventName must be in PascalCase\n\t    EventsUtils.addPrefixedEvent = function (element, pascalCaseEventName, callback) {\n\t        _.each(this.prefixes, function (prefix) {\n\t            if (prefix == '') {\n\t                pascalCaseEventName = pascalCaseEventName.toLowerCase();\n\t            }\n\t            element.addEventListener(prefix + pascalCaseEventName, callback, false);\n\t        });\n\t    };\n\t    // eventName must be in PascalCase\n\t    EventsUtils.removePrefixedEvent = function (element, pascalCaseEventName, callback) {\n\t        _.each(this.prefixes, function (prefix) {\n\t            if (prefix == '') {\n\t                pascalCaseEventName = pascalCaseEventName.toLowerCase();\n\t            }\n\t            element.removeEventListener(prefix + pascalCaseEventName, callback, false);\n\t        });\n\t    };\n\t    return EventsUtils;\n\t}());\n\tEventsUtils.prefixes = ['webkit', 'moz', 'MS', 'o', ''];\n\texports.EventsUtils = EventsUtils;\n\n\n/***/ },\n/* 141 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveComponentsUtils = (function () {\n\t    function ResponsiveComponentsUtils() {\n\t    }\n\t    ResponsiveComponentsUtils.shouldDrawFacetSlider = function (root) {\n\t        return !this.isSmallFacetActivated(root) && !this.isSmallRecommendationActivated(root);\n\t    };\n\t    ResponsiveComponentsUtils.isSmallTabsActivated = function (root) {\n\t        return root.hasClass(this.smallTabsClassName);\n\t    };\n\t    ResponsiveComponentsUtils.isSmallFacetActivated = function (root) {\n\t        return root.hasClass(this.smallFacetClassName);\n\t    };\n\t    ResponsiveComponentsUtils.isSmallRecommendationActivated = function (root) {\n\t        return root.hasClass(this.smallRecommendationClassName);\n\t    };\n\t    ResponsiveComponentsUtils.activateSmallTabs = function (root) {\n\t        root.addClass(this.smallTabsClassName);\n\t    };\n\t    ResponsiveComponentsUtils.deactivateSmallTabs = function (root) {\n\t        root.removeClass(this.smallTabsClassName);\n\t    };\n\t    ResponsiveComponentsUtils.activateSmallFacet = function (root) {\n\t        root.addClass(this.smallFacetClassName);\n\t    };\n\t    ResponsiveComponentsUtils.deactivateSmallFacet = function (root) {\n\t        root.removeClass(this.smallFacetClassName);\n\t    };\n\t    ResponsiveComponentsUtils.activateSmallRecommendation = function (root) {\n\t        root.addClass(this.smallRecommendationClassName);\n\t    };\n\t    ResponsiveComponentsUtils.deactivateSmallRecommendation = function (root) {\n\t        root.removeClass(this.smallRecommendationClassName);\n\t    };\n\t    return ResponsiveComponentsUtils;\n\t}());\n\tResponsiveComponentsUtils.smallTabsClassName = 'coveo-small-tabs';\n\tResponsiveComponentsUtils.smallFacetClassName = 'coveo-small-facets';\n\tResponsiveComponentsUtils.smallRecommendationClassName = 'coveo-small-recommendation';\n\texports.ResponsiveComponentsUtils = ResponsiveComponentsUtils;\n\n\n/***/ },\n/* 142 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveDropdownContent_1 = __webpack_require__(143);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar RecommendationDropdownContent = (function () {\n\t    function RecommendationDropdownContent(componentName, element, coveoRoot) {\n\t        this.element = element;\n\t        this.coveoRoot = coveoRoot;\n\t        this.cssClassName = \"coveo-\" + componentName + \"-dropdown-content\";\n\t        this.element.addClass(this.cssClassName);\n\t        this.element.addClass(ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t    }\n\t    RecommendationDropdownContent.prototype.positionDropdown = function () {\n\t        this.element.el.style.display = '';\n\t        var dropdownContentWrapper = this.coveoRoot.find('.coveo-results-column');\n\t        Dom_1.$$(dropdownContentWrapper).prepend(this.element.el);\n\t        this.element.addClass(ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t        this.element.addClass(this.cssClassName);\n\t        // forces the browser to reflow the element, so that the transition is applied.\n\t        window.getComputedStyle(this.element.el).maxHeight;\n\t        this.element.addClass(RecommendationDropdownContent.OPENED_DROPDOWN_CSS_CLASS_NAME);\n\t    };\n\t    RecommendationDropdownContent.prototype.hideDropdown = function () {\n\t        this.element.addClass(ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t        this.element.addClass(this.cssClassName);\n\t        this.element.removeClass(RecommendationDropdownContent.OPENED_DROPDOWN_CSS_CLASS_NAME);\n\t    };\n\t    RecommendationDropdownContent.prototype.cleanUp = function () {\n\t        this.element.removeClass(this.cssClassName);\n\t        this.element.removeClass(ResponsiveDropdownContent_1.ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t    };\n\t    return RecommendationDropdownContent;\n\t}());\n\tRecommendationDropdownContent.OPENED_DROPDOWN_CSS_CLASS_NAME = 'coveo-open-dropdown-content';\n\texports.RecommendationDropdownContent = RecommendationDropdownContent;\n\n\n/***/ },\n/* 143 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar ResponsiveDropdownContent = (function () {\n\t    function ResponsiveDropdownContent(componentName, element, coveoRoot, minWidth, widthRatio) {\n\t        this.element = element;\n\t        this.cssClassName = \"coveo-\" + componentName + \"-dropdown-content\";\n\t        this.coveoRoot = coveoRoot;\n\t        this.widthRatio = widthRatio;\n\t        this.minWidth = minWidth;\n\t    }\n\t    ResponsiveDropdownContent.prototype.positionDropdown = function () {\n\t        this.element.addClass(this.cssClassName);\n\t        this.element.addClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t        this.element.el.style.display = '';\n\t        var width = this.widthRatio * this.coveoRoot.width();\n\t        if (width <= this.minWidth) {\n\t            width = this.minWidth;\n\t        }\n\t        this.element.el.style.width = width.toString() + 'px';\n\t        PopupUtils_1.PopupUtils.positionPopup(this.element.el, Dom_1.$$(this.coveoRoot.find(\".\" + ResponsiveComponentsManager_1.ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS)).el, this.coveoRoot.el, { horizontal: PopupUtils_1.HorizontalAlignment.INNERRIGHT, vertical: PopupUtils_1.VerticalAlignment.BOTTOM, verticalOffset: 15 }, this.coveoRoot.el);\n\t    };\n\t    ResponsiveDropdownContent.prototype.hideDropdown = function () {\n\t        this.element.el.style.display = 'none';\n\t        this.element.removeClass(this.cssClassName);\n\t        this.element.removeClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n\t    };\n\t    ResponsiveDropdownContent.prototype.cleanUp = function () {\n\t        this.element.el.removeAttribute('style');\n\t    };\n\t    return ResponsiveDropdownContent;\n\t}());\n\tResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME = 'coveo-dropdown-content';\n\texports.ResponsiveDropdownContent = ResponsiveDropdownContent;\n\n\n/***/ },\n/* 144 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ResponsiveDropdownHeader = (function () {\n\t    function ResponsiveDropdownHeader(componentName, element) {\n\t        this.element = element;\n\t        this.element.addClass(\"coveo-\" + componentName + \"-dropdown-header\");\n\t        this.element.addClass(ResponsiveDropdownHeader.DEFAULT_CSS_CLASS_NAME);\n\t    }\n\t    ResponsiveDropdownHeader.prototype.open = function () {\n\t        this.element.addClass(ResponsiveDropdownHeader.ACTIVE_HEADER_CSS_CLASS_NAME);\n\t    };\n\t    ResponsiveDropdownHeader.prototype.close = function () {\n\t        this.element.removeClass(ResponsiveDropdownHeader.ACTIVE_HEADER_CSS_CLASS_NAME);\n\t    };\n\t    ResponsiveDropdownHeader.prototype.cleanUp = function () {\n\t        this.element.detach();\n\t    };\n\t    ResponsiveDropdownHeader.prototype.hide = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-hidden');\n\t    };\n\t    ResponsiveDropdownHeader.prototype.show = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-hidden');\n\t    };\n\t    return ResponsiveDropdownHeader;\n\t}());\n\tResponsiveDropdownHeader.DEFAULT_CSS_CLASS_NAME = 'coveo-dropdown-header';\n\tResponsiveDropdownHeader.ACTIVE_HEADER_CSS_CLASS_NAME = 'coveo-dropdown-header-active';\n\texports.ResponsiveDropdownHeader = ResponsiveDropdownHeader;\n\n\n/***/ },\n/* 145 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar EventsUtils_1 = __webpack_require__(140);\n\tvar _ = __webpack_require__(16);\n\tvar ResponsiveDropdown = (function () {\n\t    function ResponsiveDropdown(dropdownContent, dropdownHeader, coveoRoot) {\n\t        this.dropdownContent = dropdownContent;\n\t        this.dropdownHeader = dropdownHeader;\n\t        this.coveoRoot = coveoRoot;\n\t        this.isOpened = false;\n\t        this.onOpenHandlers = [];\n\t        this.onCloseHandlers = [];\n\t        this.popupBackgroundIsEnabled = true;\n\t        this.popupBackground = this.buildPopupBackground();\n\t        this.bindOnClickDropdownHeaderEvent();\n\t        this.saveContentPosition();\n\t    }\n\t    ResponsiveDropdown.prototype.registerOnOpenHandler = function (handler, context) {\n\t        this.onOpenHandlers.push({ handler: handler, context: context });\n\t    };\n\t    ResponsiveDropdown.prototype.registerOnCloseHandler = function (handler, context) {\n\t        this.onCloseHandlers.push({ handler: handler, context: context });\n\t    };\n\t    ResponsiveDropdown.prototype.cleanUp = function () {\n\t        this.close();\n\t        this.dropdownHeader.cleanUp();\n\t        this.dropdownContent.cleanUp();\n\t        this.restoreContentPosition();\n\t    };\n\t    ResponsiveDropdown.prototype.open = function () {\n\t        this.isOpened = true;\n\t        this.dropdownHeader.open();\n\t        this.dropdownContent.positionDropdown();\n\t        _.each(this.onOpenHandlers, function (handlerCall) {\n\t            handlerCall.handler.apply(handlerCall.context);\n\t        });\n\t        this.showPopupBackground();\n\t    };\n\t    ResponsiveDropdown.prototype.close = function () {\n\t        this.isOpened = false;\n\t        _.each(this.onCloseHandlers, function (handlerCall) {\n\t            handlerCall.handler.apply(handlerCall.context);\n\t        });\n\t        this.dropdownHeader.close();\n\t        this.dropdownContent.hideDropdown();\n\t        this.hidePopupBackground();\n\t    };\n\t    ResponsiveDropdown.prototype.disablePopupBackground = function () {\n\t        this.popupBackgroundIsEnabled = false;\n\t    };\n\t    ResponsiveDropdown.prototype.bindOnClickDropdownHeaderEvent = function () {\n\t        var _this = this;\n\t        this.dropdownHeader.element.on('click', function () {\n\t            if (_this.isOpened) {\n\t                _this.close();\n\t            }\n\t            else {\n\t                _this.open();\n\t            }\n\t        });\n\t    };\n\t    ResponsiveDropdown.prototype.showPopupBackground = function () {\n\t        if (this.popupBackgroundIsEnabled) {\n\t            this.coveoRoot.el.appendChild(this.popupBackground.el);\n\t            window.getComputedStyle(this.popupBackground.el).opacity;\n\t            this.popupBackground.el.style.opacity = ResponsiveDropdown.TRANSPARENT_BACKGROUND_OPACITY;\n\t        }\n\t    };\n\t    ResponsiveDropdown.prototype.hidePopupBackground = function () {\n\t        if (this.popupBackgroundIsEnabled) {\n\t            // forces the browser to reflow the element, so that the transition is applied.\n\t            window.getComputedStyle(this.popupBackground.el).opacity;\n\t            this.popupBackground.el.style.opacity = '0';\n\t        }\n\t    };\n\t    ResponsiveDropdown.prototype.buildPopupBackground = function () {\n\t        var _this = this;\n\t        var popupBackground = Dom_1.$$('div', { className: ResponsiveDropdown.DROPDOWN_BACKGROUND_CSS_CLASS_NAME });\n\t        EventsUtils_1.EventsUtils.addPrefixedEvent(popupBackground.el, 'TransitionEnd', function () {\n\t            if (popupBackground.el.style.opacity == '0') {\n\t                popupBackground.detach();\n\t            }\n\t        });\n\t        popupBackground.on('click', function () { return _this.close(); });\n\t        return popupBackground;\n\t    };\n\t    ResponsiveDropdown.prototype.saveContentPosition = function () {\n\t        var dropdownContentPreviousSibling = this.dropdownContent.element.el.previousSibling;\n\t        var dropdownContentParent = this.dropdownContent.element.el.parentElement;\n\t        this.previousSibling = dropdownContentPreviousSibling ? Dom_1.$$(dropdownContentPreviousSibling) : null;\n\t        this.parent = Dom_1.$$(dropdownContentParent);\n\t    };\n\t    ResponsiveDropdown.prototype.restoreContentPosition = function () {\n\t        if (this.previousSibling) {\n\t            this.dropdownContent.element.insertAfter(this.previousSibling.el);\n\t        }\n\t        else {\n\t            this.parent.prepend(this.dropdownContent.element.el);\n\t        }\n\t    };\n\t    return ResponsiveDropdown;\n\t}());\n\tResponsiveDropdown.TRANSPARENT_BACKGROUND_OPACITY = '0.9';\n\tResponsiveDropdown.DROPDOWN_BACKGROUND_CSS_CLASS_NAME = 'coveo-dropdown-background';\n\texports.ResponsiveDropdown = ResponsiveDropdown;\n\n\n/***/ },\n/* 146 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../Facet/FacetHeader.ts\" />\n\t/// <reference path=\"../../controllers/FacetSliderQueryController.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Slider_1 = __webpack_require__(147);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ResponsiveFacets_1 = __webpack_require__(157);\n\tvar FacetHeader_1 = __webpack_require__(168);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar FacetSliderQueryController_1 = __webpack_require__(97);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar Model_1 = __webpack_require__(100);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar SliderEvents_1 = __webpack_require__(55);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar ResponsiveComponentsUtils_1 = __webpack_require__(141);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar d3 = __webpack_require__(156);\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The FacetSlider component creates a facet containing a slider widget that allows the end user to filter results based\n\t * on a range of numerical values, rather than a \"classic\" multi-select {@link Facet} with a label and a count for each\n\t * value.\n\t *\n\t * Note that this component does not inherit from the Facet component, and thus does not offer the same configuration\n\t * options. Also, some of the FacetSlider options cannot be set as a HTML attributes on the component and must rather be\n\t * configured in the {@link init} call of the search interface.\n\t *\n\t * **Examples:**\n\t *\n\t * Specifying the FacetSlider configuration using a JSON inside the init call. Note that the JSON follows the\n\t * FacetSlider options:\n\t *\n\t * ```javascript\n\t * // You can call the init script using \"pure\" JavaScript:\n\t * Coveo.init(document.querySelector('#search'), {\n\t *    FacetSlider: {\n\t *      field: \"@size\",\n\t *      start: 1000,\n\t *      end: 5000,\n\t *      rangeSlider: true,\n\t *      graph: {\n\t *        steps: 10\n\t *      }\n\t *    }\n\t * })\n\t *\n\t * // Or you can call the init script using the jQuery extension:\n\t * $('#search').coveo('init', {\n\t *    FacetSlider: {\n\t *      field: \"@size\",\n\t *      start: 1000,\n\t *      end: 5000,\n\t *      rangeSlider: true,\n\t *      graph: {\n\t *        steps: 10\n\t *      }\n\t *    }\n\t * })\n\t * ```\n\t *\n\t * Specifying the same FacetSlider configuration by setting the corresponding HTML attributes directly in the markup:\n\t *\n\t * ```html\n\t * <div class='CoveoFacetSlider' data-field='@size' data-start='1000' data-end='5000' data-range-slider='true' data-graph-steps='10'></div>\n\t * ```\n\t */\n\tvar FacetSlider = (function (_super) {\n\t    __extends(FacetSlider, _super);\n\t    /**\n\t     * Creates a new FacetSlider component. Binds multiple query events as well.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FacetSlider component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param slider\n\t     */\n\t    function FacetSlider(element, options, bindings, slider) {\n\t        var _this = _super.call(this, element, FacetSlider.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.slider = slider;\n\t        _this.isEmpty = false;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, FacetSlider, options);\n\t        ResponsiveFacets_1.ResponsiveFacets.init(_this.root, _this, _this.options);\n\t        if (_this.options.excludeOuterBounds == null) {\n\t            _this.options.excludeOuterBounds = false;\n\t        }\n\t        if (_this.options.start) {\n\t            _this.options.start = _this.options.dateField ? new Date(_this.options.start.replace(/-/g, '/')).getTime() : Number(_this.options.start);\n\t        }\n\t        if (_this.options.end) {\n\t            _this.options.end = _this.options.dateField ? new Date(_this.options.end.replace(/-/g, '/')).getTime() : Number(_this.options.end);\n\t        }\n\t        if (_this.hasAGraph() && typeof d3 == 'undefined') {\n\t            _this.options.graph = undefined;\n\t            _this.logger.info('Cannot find the required dependencies d3.js. Cannot add graphic to your facet range', _this);\n\t        }\n\t        _this.facetQueryController = new FacetSliderQueryController_1.FacetSliderQueryController(_this);\n\t        _this.initQueryStateEvents();\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, function () { return _this.handleNewQuery(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.noResults, function () { return _this.handleNoresults(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function (args) { return _this.handleDeferredQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (args) { return _this.handleDoneBuildingQuery(args); });\n\t        _this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) { return _this.handlePopulateBreadcrumb(args); });\n\t        _this.bind.onRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsPopulateMessage, function (args) { return _this.handlePopulateSearchAlerts(args); });\n\t        _this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function () { return _this.reset(); });\n\t        _this.onResize = _.debounce(function () {\n\t            if (ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.shouldDrawFacetSlider(Dom_1.$$(_this.root)) && _this.slider && !_this.isEmpty) {\n\t                _this.slider.drawGraph();\n\t            }\n\t        }, FacetSlider.DEBOUNCED_RESIZE_DELAY);\n\t        window.addEventListener('resize', _this.onResize);\n\t        // This is used inside SF integration\n\t        _this.bind.onRootElement('onPopupOpen', _this.onResize);\n\t        Dom_1.$$(_this.root).on(InitializationEvents_1.InitializationEvents.nuke, _this.handleNuke);\n\t        return _this;\n\t    }\n\t    FacetSlider.prototype.createDom = function () {\n\t        this.facetHeader = new FacetHeader_1.FacetHeader({\n\t            field: this.options.field,\n\t            facetElement: this.element,\n\t            title: this.options.title,\n\t            enableClearElement: true,\n\t            enableCollapseElement: true,\n\t            isNewDesign: this.getBindings().searchInterface.isNewDesign(),\n\t            facetSlider: this\n\t        });\n\t        this.element.appendChild(this.facetHeader.build());\n\t    };\n\t    FacetSlider.prototype.disable = function () {\n\t        _super.prototype.disable.call(this);\n\t        Dom_1.$$(this.element).addClass('coveo-disabled-empty');\n\t    };\n\t    /**\n\t     * Resets the FacetSlider (meaning that you need to set the range value as inactive).\n\t     */\n\t    FacetSlider.prototype.reset = function () {\n\t        if (this.slider) {\n\t            this.slider.initializeState();\n\t            this.updateQueryState();\n\t            this.updateAppearanceDependingOnState();\n\t        }\n\t    };\n\t    /**\n\t     * Gets the current selection in the FacetSlider.\n\t     *\n\t     * **Note:**\n\t     * > This method returns an array of number for selected date values. These numbers represent a number of milliseconds\n\t     * > before or after January 1, 1970. Therefore, you can use these numbers to instantiate standard JavaScript Date\n\t     * > objects.\n\t     *\n\t     * @returns {any} An array of number containing the first and last selected values, if possible. An array containing\n\t     * two `undefined` values otherwise.\n\t     */\n\t    FacetSlider.prototype.getSelectedValues = function () {\n\t        if (this.startOfSlider != undefined && this.endOfSlider != undefined) {\n\t            return [this.startOfSlider, this.endOfSlider];\n\t        }\n\t        else {\n\t            return [undefined, undefined];\n\t        }\n\t    };\n\t    /**\n\t     * Sets the selected values in the slider.\n\t     *\n\t     * **Note:**\n\t     * > You must set date values with numbers representing a number of milliseconds before or after January 1, 1970. You\n\t     * > can easily extract such numbers from standard JavaScript Date objects.\n\t     *\n\t     * @param values [start, end] An array containing the first and last values to select in the slider.\n\t     */\n\t    FacetSlider.prototype.setSelectedValues = function (values) {\n\t        this.setupSliderIfNeeded(undefined);\n\t        this.startOfSlider = values[0];\n\t        this.endOfSlider = values[1];\n\t        this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n\t        this.updateAppearanceDependingOnState();\n\t    };\n\t    /**\n\t     * Indicates whether the FacetSlider is active. An active FacetSlider outputs an expression in the query when a search\n\t     * is performed.\n\t     * @returns {boolean} `true` if the FacetSlider is active; `false` otherwise.\n\t     */\n\t    FacetSlider.prototype.isActive = function () {\n\t        return !isNaN(this.startOfSlider)\n\t            && !isNaN(this.endOfSlider)\n\t            && !isNaN(this.initialStartOfSlider)\n\t            && !isNaN(this.initialEndOfSlider)\n\t            && (this.startOfSlider != this.initialStartOfSlider || this.endOfSlider != this.initialEndOfSlider);\n\t    };\n\t    FacetSlider.prototype.getSliderBoundaryForQuery = function () {\n\t        var needToReturnABoundary = false;\n\t        if (!this.slider) {\n\t            needToReturnABoundary = true;\n\t        }\n\t        else if (this.slider && this.isActive()) {\n\t            needToReturnABoundary = true;\n\t        }\n\t        if (needToReturnABoundary) {\n\t            return this.generateBoundary();\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    // There is delayed graph data if at the time the facet slider tried to draw, the facet was hidden in the\n\t    // facet dropdown. This method will draw delayed graph data if it exists.\n\t    FacetSlider.prototype.drawDelayedGraphData = function () {\n\t        if (this.delayedGraphData != undefined && !this.isEmpty) {\n\t            this.slider.drawGraph(this.delayedGraphData);\n\t        }\n\t    };\n\t    FacetSlider.prototype.isSimpleSliderConfig = function () {\n\t        return this.options.start != null && this.options.end != null;\n\t    };\n\t    FacetSlider.prototype.hasAGraph = function () {\n\t        return this.options.graph != undefined;\n\t    };\n\t    FacetSlider.prototype.handleNoresults = function () {\n\t        this.isEmpty = true;\n\t        this.updateAppearanceDependingOnState();\n\t    };\n\t    FacetSlider.prototype.handleNewQuery = function () {\n\t        this.isEmpty = false;\n\t    };\n\t    FacetSlider.prototype.handleRangeQueryStateChanged = function (args) {\n\t        this.setupSliderIfNeeded(args);\n\t        this.startOfSlider = args.value[0] == undefined ? this.startOfSlider : args.value[0];\n\t        this.endOfSlider = args.value[1] == undefined ? this.endOfSlider : args.value[1];\n\t        this.setSelectedValues([this.startOfSlider, this.endOfSlider]);\n\t    };\n\t    FacetSlider.prototype.handlePopulateBreadcrumb = function (args) {\n\t        var _this = this;\n\t        var populateBreadcrumb = function () {\n\t            if (_this.isActive()) {\n\t                args.breadcrumbs.push({\n\t                    element: _this.buildBreadcrumbFacetSlider()\n\t                });\n\t            }\n\t        };\n\t        if (this.slider) {\n\t            populateBreadcrumb();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.root).one(QueryEvents_1.QueryEvents.deferredQuerySuccess, function () {\n\t                populateBreadcrumb();\n\t                Dom_1.$$(_this.root).trigger(BreadcrumbEvents_1.BreadcrumbEvents.redrawBreadcrumb);\n\t            });\n\t        }\n\t    };\n\t    FacetSlider.prototype.handlePopulateSearchAlerts = function (args) {\n\t        if (this.isActive()) {\n\t            args.text.push(Dom_1.$$(this.buildBreadcrumbFacetSlider()).text());\n\t        }\n\t    };\n\t    FacetSlider.prototype.buildBreadcrumbFacetSlider = function () {\n\t        var _this = this;\n\t        var elem = Dom_1.$$('div', {\n\t            className: 'coveo-facet-slider-breadcrumb'\n\t        }).el;\n\t        var title = Dom_1.$$('span', {\n\t            className: 'coveo-facet-slider-breadcrumb-title'\n\t        });\n\t        title.text(this.options.title + ': ');\n\t        elem.appendChild(title.el);\n\t        var values = Dom_1.$$('span', {\n\t            className: 'coveo-facet-slider-breadcrumb-values'\n\t        });\n\t        elem.appendChild(values.el);\n\t        var value = Dom_1.$$('span', {\n\t            className: 'coveo-facet-slider-breadcrumb-value'\n\t        });\n\t        value.text(this.slider.getCaption());\n\t        values.el.appendChild(value.el);\n\t        var clear = Dom_1.$$('span', {\n\t            className: 'coveo-facet-slider-breadcrumb-clear'\n\t        });\n\t        value.el.appendChild(clear.el);\n\t        value.on('click', function () {\n\t            _this.reset();\n\t            _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetClearAll, {\n\t                facetId: _this.options.id,\n\t                facetTitle: _this.options.title\n\t            });\n\t            _this.queryController.executeQuery();\n\t        });\n\t        return elem;\n\t    };\n\t    FacetSlider.prototype.initSlider = function () {\n\t        this.buildSlider();\n\t        this.slider.initializeState([this.startOfSlider, this.endOfSlider]);\n\t        this.updateAppearanceDependingOnState();\n\t    };\n\t    FacetSlider.prototype.initQueryStateEvents = function () {\n\t        var _this = this;\n\t        this.rangeQueryStateAttribute = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id) + ':range';\n\t        this.queryStateModel.registerNewAttribute(this.rangeQueryStateAttribute, [undefined, undefined]);\n\t        var eventName = this.queryStateModel.getEventName(Model_1.Model.eventTypes.changeOne + this.rangeQueryStateAttribute);\n\t        this.bind.onRootElement(eventName, function (args) {\n\t            _this.slider ? _this.handleRangeQueryStateChanged(args) : _this.setRangeStateSliderStillNotCreated(args);\n\t        });\n\t    };\n\t    FacetSlider.prototype.setRangeStateSliderStillNotCreated = function (args) {\n\t        this.rangeFromUrlState = this.copyValues(args.value);\n\t    };\n\t    FacetSlider.prototype.buildSlider = function () {\n\t        var _this = this;\n\t        var sliderContainer = Dom_1.$$('div', {\n\t            className: 'coveo-facet-values coveo-slider-container'\n\t        }).el;\n\t        if (this.hasAGraph()) {\n\t            Dom_1.$$(sliderContainer).addClass('coveo-with-graph');\n\t        }\n\t        var sliderDiv = Dom_1.$$('div').el;\n\t        this.slider = this.slider ? this.slider : new Slider_1.Slider(sliderDiv, _.extend({}, this.options, { dateField: this.options.dateField }), this.root);\n\t        Dom_1.$$(sliderDiv).on(SliderEvents_1.SliderEvents.endSlide, function (e, args) {\n\t            _this.handleEndSlide(args);\n\t        });\n\t        Dom_1.$$(sliderDiv).on(SliderEvents_1.SliderEvents.duringSlide, function (e, args) {\n\t            _this.handleDuringSlide(args);\n\t        });\n\t        if (this.hasAGraph()) {\n\t            Dom_1.$$(sliderDiv).on(SliderEvents_1.SliderEvents.graphValueSelected, function (e, args) {\n\t                _this.handleGraphValueSelected(args);\n\t            });\n\t        }\n\t        sliderContainer.appendChild(sliderDiv);\n\t        this.element.appendChild(sliderContainer);\n\t        this.updateAppearanceDependingOnState();\n\t    };\n\t    FacetSlider.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.queryBuilder);\n\t        var boundary = this.getSliderBoundaryForQuery();\n\t        if (boundary != undefined) {\n\t            this.facetQueryController.prepareForNewQuery();\n\t            var expression = this.facetQueryController.computeOurFilterExpression(boundary);\n\t            if (Utils_1.Utils.isNonEmptyString(expression)) {\n\t                this.logger.trace('Putting filter in query', expression);\n\t                data.queryBuilder.advancedExpression.add(expression);\n\t            }\n\t        }\n\t    };\n\t    FacetSlider.prototype.handleDoneBuildingQuery = function (data) {\n\t        var queryBuilder = data.queryBuilder;\n\t        this.facetQueryController.putGroupByIntoQueryBuilder(queryBuilder);\n\t    };\n\t    FacetSlider.prototype.handleDeferredQuerySuccess = function (data) {\n\t        this.ensureDom();\n\t        this.setupSliderIfNeeded(data);\n\t        var groupByResults = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n\t        this.isEmpty = this.isFacetEmpty(groupByResults, data);\n\t        this.updateAppearanceDependingOnState();\n\t        if (this.hasAGraph()) {\n\t            this.renderToSliderGraph(data);\n\t        }\n\t    };\n\t    FacetSlider.prototype.handleEndSlide = function (args) {\n\t        var values = args.slider.getValues();\n\t        this.startOfSlider = values[0];\n\t        this.endOfSlider = values[1];\n\t        if (this.updateQueryState(values)) {\n\t            this.updateAppearanceDependingOnState();\n\t            this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetRangeSlider, {\n\t                facetId: this.options.id,\n\t                facetRangeStart: this.startOfSlider.toString(),\n\t                facetRangeEnd: this.endOfSlider.toString()\n\t            });\n\t            this.queryController.executeQuery();\n\t        }\n\t    };\n\t    FacetSlider.prototype.handleDuringSlide = function (args) {\n\t        var values = args.slider.getValues();\n\t        this.startOfSlider = values[0];\n\t        this.endOfSlider = values[1];\n\t        this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n\t        this.updateAppearanceDependingOnState(true);\n\t    };\n\t    FacetSlider.prototype.handleGraphValueSelected = function (args) {\n\t        if ((this.options.rangeSlider && this.startOfSlider != args.start) || this.endOfSlider != args.end) {\n\t            if (this.options.rangeSlider) {\n\t                this.startOfSlider = args.start;\n\t            }\n\t            this.endOfSlider = args.end;\n\t            this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n\t            this.updateQueryState();\n\t            this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetRangeGraph, {\n\t                facetId: this.options.id,\n\t                facetRangeStart: this.startOfSlider.toString(),\n\t                facetRangeEnd: this.endOfSlider.toString()\n\t            });\n\t            this.queryController.executeQuery();\n\t        }\n\t    };\n\t    FacetSlider.prototype.updateQueryState = function (values, silent) {\n\t        if (values === void 0) { values = this.slider.getValues(); }\n\t        if (silent === void 0) { silent = false; }\n\t        var copyOfValues = this.copyValues(values);\n\t        var start = values[0] + 0.0;\n\t        var end = values[1] + 0.0;\n\t        var model = this.queryStateModel.get(this.rangeQueryStateAttribute);\n\t        if (model == null || copyOfValues[0] != model[0] || copyOfValues[1] != model[1]) {\n\t            copyOfValues[0] = start;\n\t            copyOfValues[1] = end;\n\t            this.queryStateModel.set(this.rangeQueryStateAttribute, copyOfValues, { silent: silent });\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    FacetSlider.prototype.copyValues = function (values) {\n\t        // Creating a copy of the values prevents an unwanted automatic update of the state while sliding\n\t        // That's the cleanest way I found to copy that array correctly\n\t        var copyOfValues = [];\n\t        copyOfValues[0] = Number(values[0]) + 0.0;\n\t        copyOfValues[1] = Number(values[1]) + 0.0;\n\t        return copyOfValues;\n\t    };\n\t    FacetSlider.prototype.renderToSliderGraph = function (data) {\n\t        var _this = this;\n\t        var rawGroupByResults = data.results.groupByResults[this.facetQueryController.graphGroupByQueriesIndex];\n\t        var graphData;\n\t        var totalGraphResults = 0;\n\t        if (rawGroupByResults) {\n\t            graphData = _.map(rawGroupByResults.values, function (value) {\n\t                totalGraphResults += value.numberOfResults;\n\t                var start = value.value.split('..')[0];\n\t                var end = value.value.split('..')[1];\n\t                if (!_this.options.dateField) {\n\t                    start = Number(start);\n\t                    end = Number(end);\n\t                }\n\t                else {\n\t                    start = new Date(start.split('@')[0]).getTime();\n\t                    end = new Date(end.split('@')[0]).getTime();\n\t                }\n\t                var y = value.numberOfResults;\n\t                return {\n\t                    start: start,\n\t                    y: y,\n\t                    end: end,\n\t                    isDate: _this.options.dateField\n\t                };\n\t            });\n\t        }\n\t        if (totalGraphResults == 0) {\n\t            this.isEmpty = true;\n\t            this.updateAppearanceDependingOnState();\n\t        }\n\t        else if (graphData != undefined && !this.isDropdownHidden()) {\n\t            this.slider.drawGraph(graphData);\n\t        }\n\t        else if (graphData != undefined && this.isDropdownHidden()) {\n\t            this.delayedGraphData = graphData;\n\t        }\n\t    };\n\t    FacetSlider.prototype.isDropdownHidden = function () {\n\t        var facetDropdown = this.root.querySelector('.coveo-facet-column');\n\t        if (facetDropdown) {\n\t            return Dom_1.$$(facetDropdown).css('display') == 'none';\n\t        }\n\t        if (Dom_1.$$(this.root).hasClass('CoveoRecommendation')) {\n\t            var recommendationDropdown = Dom_1.$$(this.root).parents('.coveo-recommendation-column')[0] || this.root;\n\t            return Dom_1.$$(recommendationDropdown).css('display') == 'none';\n\t        }\n\t        return false;\n\t    };\n\t    FacetSlider.prototype.generateBoundary = function () {\n\t        if (!this.slider) {\n\t            // If the slider is not initialized, the only boundary we can get is from the state.\n\t            return this.generateBoundaryFromState();\n\t        }\n\t        else {\n\t            // Else, try to get one from the slider itself. If we cant, try to return one from the state.\n\t            var boundary = this.generateBoundaryFromSlider();\n\t            if (boundary[0] == undefined && boundary[1] == undefined) {\n\t                return this.generateBoundaryFromState();\n\t            }\n\t            else {\n\t                return boundary;\n\t            }\n\t        }\n\t    };\n\t    FacetSlider.prototype.generateBoundaryFromSlider = function () {\n\t        var start, end;\n\t        if (this.startOfSlider != undefined) {\n\t            start = this.startOfSlider;\n\t        }\n\t        if (this.endOfSlider != undefined) {\n\t            end = this.endOfSlider;\n\t        }\n\t        return [start, end];\n\t    };\n\t    FacetSlider.prototype.generateBoundaryFromState = function () {\n\t        var start, end;\n\t        var startFromState = this.queryStateModel.get(this.rangeQueryStateAttribute)[0];\n\t        if (startFromState != undefined) {\n\t            start = startFromState;\n\t        }\n\t        var endFromState = this.queryStateModel.get(this.rangeQueryStateAttribute)[1];\n\t        if (endFromState != undefined) {\n\t            end = endFromState;\n\t        }\n\t        if (start != this.queryStateModel.getDefault(this.rangeQueryStateAttribute)[0] || end != this.queryStateModel.getDefault(this.rangeQueryStateAttribute)[1]) {\n\t            return [start, end];\n\t        }\n\t        else {\n\t            return [undefined, undefined];\n\t        }\n\t    };\n\t    FacetSlider.prototype.setupSliderIfNeeded = function (data) {\n\t        this.ensureDom();\n\t        if (Utils_1.Utils.isNullOrUndefined(this.slider)) {\n\t            if (!this.alreadySetBoundary()) {\n\t                this.trySetSliderBoundaryFromOptions();\n\t            }\n\t            if (!this.alreadySetBoundary() && data != undefined) {\n\t                this.trySetSliderBoundaryFromQueryResult(data);\n\t            }\n\t            this.trySetSliderBoundaryFromState();\n\t            this.setupSliderStateVariables();\n\t            var isInError = this.verifySetup();\n\t            if (isInError) {\n\t                this.logger.warn('Unable to initialize slider with current values', this);\n\t            }\n\t            else {\n\t                this.initSlider();\n\t                this.updateQueryState();\n\t            }\n\t        }\n\t    };\n\t    FacetSlider.prototype.verifySetup = function () {\n\t        var isInError = 0;\n\t        isInError += this.initialStartOfSlider == undefined ? 1 : 0;\n\t        isInError += isNaN(this.initialStartOfSlider) ? 1 : 0;\n\t        isInError += this.initialEndOfSlider == undefined ? 1 : 0;\n\t        isInError += isNaN(this.initialEndOfSlider) ? 1 : 0;\n\t        return isInError;\n\t    };\n\t    FacetSlider.prototype.setupSliderStateVariables = function () {\n\t        if (isNaN(this.initialStartOfSlider) || isNaN(this.initialEndOfSlider)) {\n\t            this.logger.warn('Cannnot initialize slider with those values : start: ' + this.initialStartOfSlider + ' end: ' + this.initialEndOfSlider);\n\t        }\n\t        else {\n\t            this.initialStartOfSlider = Number(this.initialStartOfSlider);\n\t            this.initialEndOfSlider = Number(this.initialEndOfSlider);\n\t            this.startOfSlider = this.startOfSlider != undefined ? Number(this.startOfSlider) : this.initialStartOfSlider;\n\t            this.endOfSlider = this.endOfSlider != undefined ? Number(this.endOfSlider) : this.initialEndOfSlider;\n\t            this.options.start = this.initialStartOfSlider;\n\t            this.options.end = this.initialEndOfSlider;\n\t            this.queryStateModel.setNewDefault(this.rangeQueryStateAttribute, [this.initialStartOfSlider, this.initialEndOfSlider]);\n\t        }\n\t    };\n\t    FacetSlider.prototype.alreadySetBoundary = function () {\n\t        return this.startOfSlider != undefined && this.endOfSlider != undefined;\n\t    };\n\t    FacetSlider.prototype.trySetSliderBoundaryFromOptions = function () {\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.start)) {\n\t            this.setupInitialSliderStateStart(this.options.start);\n\t        }\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.options.end)) {\n\t            this.setupInitialSliderStateEnd(this.options.end);\n\t        }\n\t    };\n\t    FacetSlider.prototype.trySetSliderBoundaryFromState = function () {\n\t        var stateValues = this.rangeFromUrlState || this.queryStateModel.get(this.rangeQueryStateAttribute);\n\t        if (stateValues && stateValues[0] != undefined && stateValues[1] != undefined) {\n\t            stateValues[0] = Number(stateValues[0]);\n\t            stateValues[1] = Number(stateValues[1]);\n\t            this.setupInitialSliderStateStart(stateValues[0]);\n\t            this.setupInitialSliderStateEnd(stateValues[1]);\n\t            this.startOfSlider = stateValues[0];\n\t            this.endOfSlider = stateValues[1];\n\t        }\n\t    };\n\t    FacetSlider.prototype.trySetSliderBoundaryFromQueryResult = function (data) {\n\t        var groupByResults = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n\t        if (groupByResults && groupByResults.values.length > 0) {\n\t            this.setupInitialSliderStateStart(groupByResults.values[0].value.split('..')[0]);\n\t            this.setupInitialSliderStateEnd(groupByResults.values[groupByResults.values.length - 1].value.split('..')[1]);\n\t        }\n\t    };\n\t    FacetSlider.prototype.setupInitialSliderStateStart = function (value) {\n\t        if (this.initialStartOfSlider == undefined) {\n\t            this.initialStartOfSlider = value;\n\t            if (this.options.dateField && isNaN(value)) {\n\t                this.initialStartOfSlider = new Date(value.replace('@', ' ')).getTime();\n\t            }\n\t        }\n\t    };\n\t    FacetSlider.prototype.setupInitialSliderStateEnd = function (value) {\n\t        if (this.initialEndOfSlider == undefined) {\n\t            this.initialEndOfSlider = value;\n\t            if (this.options.dateField && isNaN((value))) {\n\t                this.initialEndOfSlider = new Date(value.replace('@', ' ')).getTime();\n\t            }\n\t        }\n\t    };\n\t    FacetSlider.prototype.updateAppearanceDependingOnState = function (sliding) {\n\t        if (sliding === void 0) { sliding = false; }\n\t        if (this.isEmpty && !this.isActive() && !sliding) {\n\t            Dom_1.$$(this.element).addClass('coveo-disabled-empty');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).removeClass('coveo-disabled-empty');\n\t            Dom_1.$$(this.facetHeader.eraserElement).toggle(this.isActive());\n\t        }\n\t        if (!this.isActive() && !sliding) {\n\t            Dom_1.$$(this.element).addClass('coveo-disabled');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).removeClass('coveo-disabled');\n\t        }\n\t        if (this.isActive() && this.slider) {\n\t            this.slider.onMoving();\n\t        }\n\t    };\n\t    FacetSlider.prototype.handleNuke = function () {\n\t        window.removeEventListener('resize', this.onResize);\n\t    };\n\t    FacetSlider.prototype.isFacetEmpty = function (groupByResults, data) {\n\t        return groupByResults == null || groupByResults.values[0] == null || groupByResults.values[0].numberOfResults == 0 || data.results.results.length == 0;\n\t    };\n\t    return FacetSlider;\n\t}(Component_1.Component));\n\t/**\n\t * The component options\n\t * @componentOptions\n\t */\n\tFacetSlider.options = {\n\t    /**\n\t     * Specifies the title to display on top of the FacetSlider component.\n\t     *\n\t     * Default value is the localized string for `\"NoTitle\"`.\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: Strings_1.l('NoTitle') }),\n\t    /**\n\t     * Specifies whether the field for which you are requesting a range is a date field. This allows the FacetSlider to\n\t     * correctly build the outgoing [GroupByRequest]{@link IGroupByRequest} and render itself properly.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    dateField: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the index field whose values the FacetSlider should use.\n\t     *\n\t     * This requires the given field to be configured correctly in the index as a Facet field (see\n\t     * [Adding Fields to a Source](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=137)).\n\t     *\n\t     * Specifying a value for this option is required for the FacetSlider component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ groupByField: true, required: true }),\n\t    /**\n\t     * Specifies a unique identifier for the FacetSlider. Among other things, this identifier serves the purpose of\n\t     * saving the facet state in the URL hash.\n\t     *\n\t     * If you have two facets with the same field on the same page, you should specify a unique id value for at least\n\t     * one of those two facets. This id must be unique in the page.\n\t     *\n\t     * Default value is the {@link FacetSlider.options.field} option value.\n\t     */\n\t    id: ComponentOptions_1.ComponentOptions.buildStringOption({\n\t        postProcessing: function (value, options) { return value || options.field; }\n\t    }),\n\t    /**\n\t     * Specifies the format to use to display values if they are dates.\n\t     *\n\t     * Default value is `\"MMM dd, yyyy\"`.\n\t     */\n\t    dateFormat: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the query to filter automatic minimum and maximum range of the slider.\n\t     *\n\t     * This is especially useful for date ranges where the index may contain values which are not set, and thus the\n\t     * automatic range returns values from the year 1400 (earliest date from the boost C++ library).\n\t     *\n\t     * This option can be useful to do something like `queryOverride : @date>2000/01/01` or some arbitrary date which\n\t     * will filter out unwanted values.\n\t     */\n\t    queryOverride: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the starting boundary of the slider.\n\t     *\n\t     * Date values are rounded to the nearest year when {@link FacetSlider.options.dateField} is `true`.\n\t     *\n\t     * Default value is the lowest available field value in the index.\n\t     */\n\t    start: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the ending boundary of the slider.\n\t     *\n\t     * Date values are rounded to the nearest year when {@link FacetSlider.options.dateField} is `true`.\n\t     *\n\t     * Default value is the highest available field value in the index.\n\t     */\n\t    end: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies whether to exclude the outer bounds of the slider in the generated query when they are not active.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    excludeOuterBounds: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the number of decimal places to round the displayed numerical values to.\n\t     *\n\t     * Default (and minimum) value is `0`.\n\t     */\n\t    rounded: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t    /**\n\t     * Specifies the number of steps to split the slider into.\n\t     *\n\t     * For example, if your range is [ 0 , 100 ] and you specify 10 steps, then the end user can move the slider only to\n\t     * the values [ 0, 10, 20, 30 ... , 100 ].\n\t     *\n\t     * For performance reasons, the maximum value for option is 1\n\t     *\n\t     * Default value is `undefined`, and the slider allows all values. Minimum value is `2`.\n\t     */\n\t    steps: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 2 }),\n\t    /**\n\t     * Specifies whether you want a slider with two buttons instead of a slider with a single button.\n\t     *\n\t     * By default, only one button appears in the slider.\n\t     */\n\t    rangeSlider: ComponentOptions_1.ComponentOptions.buildBooleanOption(),\n\t    /**\n\t     * Specifies the caption options to use to display the field values.\n\t     *\n\t     * Available options are:\n\t     * - enable (`data-display-as-value-enable`): boolean; specifies whether to display the caption as a value. Default\n\t     * value is `true`.\n\t     * - unitSign (`data-display-as-value-unit-sign`): string; specifies the unit sign for this value (e.g., `\"$\"`).\n\t     * Default value is `undefined`.\n\t     * - separator (`data-display-as-value-separator`): string; specifies the character(s) to use as a separator in the\n\t     * caption. Default value is `\"-\"`.\n\t     */\n\t    displayAsValue: ComponentOptions_1.ComponentOptions.buildObjectOption({\n\t        subOptions: {\n\t            enable: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t            unitSign: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t            separator: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '-' })\n\t        }\n\t    }),\n\t    /**\n\t     * Specifies the percentage caption options to use to display the field values.\n\t     *\n\t     * Available options are:\n\t     * - enable (`data-display-as-percent-enable`): boolean; specifies whether to display the caption as a percentage.\n\t     * Default value is `false`.\n\t     * separator (`data-display-as-percent-separator`): string; specifies the character(s) to use as a separator in the\n\t     * caption. Default value is `\"-\"`.\n\t     */\n\t    displayAsPercent: ComponentOptions_1.ComponentOptions.buildObjectOption({\n\t        subOptions: {\n\t            enable: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t            separator: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '-' })\n\t        }\n\t    }),\n\t    /**\n\t     * Specifies whether to display a small graph on top of the slider.\n\t     *\n\t     * Available options are:\n\t     * - steps (`data-graph-steps`): number; specifies the number of steps/columns to display in your graph. Default\n\t     * value is `10`. Minimum value is `2`.\n\t     */\n\t    graph: ComponentOptions_1.ComponentOptions.buildObjectOption({\n\t        subOptions: {\n\t            steps: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 2 }),\n\t            animationDuration: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t            margin: ComponentOptions_1.ComponentOptions.buildObjectOption({\n\t                subOptions: {\n\t                    top: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t                    bottom: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t                    left: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t                    right: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 })\n\t                }\n\t            })\n\t        }\n\t    }),\n\t    /**\n\t     * Specifies a function to generate the steps for the FacetSlider (see {@link FacetSlider.options.steps}. This\n\t     * function receives the FacetSlider boundaries (see {@link FacetSlider.options.start} and\n\t     * {@link FacetSlider.options.end}) and must return an array of numbers (the steps).\n\t     *\n\t     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * // You can call the init script using \"pure\" JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    FacetSlider: {\n\t     *      field: \"@size\",\n\t     *      getSteps: function(start, end) {\n\t     *        return [0,2,4,6,8,10];\n\t     *      }\n\t     *    }\n\t     * })\n\t     *\n\t     * // Or you can call the init script using the jQuery extension:\n\t     * $('#search').coveo('init', {\n\t     *    FacetSlider: {\n\t     *        field: \"@size\",\n\t     *        getSteps: function(start, end) {\n\t     *            return [0,2,4,6,8,10];\n\t     *        }\n\t     *    }\n\t     * })\n\t     * ```\n\t     */\n\t    getSteps: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    }),\n\t    /**\n\t     * Specifies a function to generate the caption for the FacetSlider. Receives the current slider values\n\t     * (number[]) and must return the caption (string).\n\t     *\n\t     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * // You can call the init script using \"pure\" JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    FacetSlider: {\n\t     *      field: \"@size\",\n\t     *      valueCaption: function(values) {\n\t     *        return values[0] + \" hello\" + \", \" + values[1] + \" world\";\n\t     *      }\n\t     *    }\n\t     * })\n\t     *\n\t     * // Or you can call the init script using the jQuery extension:\n\t     * $('#search').coveo('init', {\n\t     *    FacetSlider: {\n\t     *      field: \"@size\",\n\t     *      valueCaption: function(values) {\n\t     *        return values[0] + \" hello\" + \", \" + values[1] + \" world\";\n\t     *      }\n\t     *    }\n\t     * })\n\t     * ```\n\t     */\n\t    valueCaption: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    }),\n\t    /**\n\t     * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any {@link Facet} or\n\t     * {@link FacetSlider} in a search interface disables responsive mode for all other facets in the search interface.\n\t     *\n\t     * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n\t     * the search interface is bound to reaches or falls behind a certain threshold (see\n\t     * {@link SearchInterface.responsiveComponents}).\n\t     *\n\t     * See also {@link FacetSlider.options.dropdownHeaderLabel}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the label of the button that allows to show the facets when in responsive mode. If it is specified more than once, the\n\t     * first occurence of the option will be used.\n\t     * The default value is \"Filters\".\n\t     */\n\t    dropdownHeaderLabel: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\tFacetSlider.ID = 'FacetSlider';\n\tFacetSlider.DEBOUNCED_RESIZE_DELAY = 250;\n\texports.FacetSlider = FacetSlider;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FacetSlider);\n\n\n/***/ },\n/* 147 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar SliderEvents_1 = __webpack_require__(55);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar d3Scale = __webpack_require__(148);\n\tvar d3 = __webpack_require__(156);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\tvar Logger_1 = __webpack_require__(13);\n\texports.MAX_NUMBER_OF_STEPS = 100;\n\tvar Slider = (function () {\n\t    function Slider(element, options, root) {\n\t        var _this = this;\n\t        this.element = element;\n\t        this.options = options;\n\t        this.root = root;\n\t        this.steps = [];\n\t        if (this.options.dateField) {\n\t            this.options.start = new Date(this.options.start).getTime();\n\t            this.options.end = new Date(this.options.end).getTime();\n\t        }\n\t        if (this.options.rounded == undefined) {\n\t            this.options.rounded = 0;\n\t        }\n\t        if (this.options.steps || this.options.getSteps) {\n\t            this.buildSteps();\n\t        }\n\t        if (this.options.graph) {\n\t            this.sliderGraph = new SliderGraph(this);\n\t        }\n\t        this.sliderLine = new SliderLine(this);\n\t        _.each(this.sliderLine.build(), function (e) {\n\t            _this.element.appendChild(e);\n\t        });\n\t        if (this.options.rangeSlider) {\n\t            this.sliderRange = new SliderRange(this);\n\t            _.each(this.sliderRange.build(), function (e) {\n\t                _this.element.appendChild(e);\n\t            });\n\t        }\n\t        else {\n\t            this.sliderButton = new SliderButton(this, 1);\n\t            var btnEl = this.sliderButton.build();\n\t            Dom_1.$$(btnEl).addClass('coveo-no-range-button');\n\t            this.element.appendChild(btnEl);\n\t            this.sliderLine.setActiveWidth(this.sliderButton);\n\t        }\n\t        this.sliderCaption = new SliderCaption(this);\n\t        this.element.appendChild(this.sliderCaption.build());\n\t    }\n\t    Slider.prototype.onMoving = function () {\n\t        if (this.options.rangeSlider) {\n\t            this.sliderRange.setBoundary();\n\t            this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n\t        }\n\t        else {\n\t            this.setButtonBoundary();\n\t            this.sliderLine.setActiveWidth(this.sliderButton);\n\t        }\n\t        if (this.options.graph) {\n\t            this.sliderGraph.draw();\n\t        }\n\t        this.displayCaption();\n\t    };\n\t    Slider.prototype.initializeState = function (values) {\n\t        if (values === void 0) { values = [this.options.start, this.options.end]; }\n\t        this.currentValues = values;\n\t        if (this.options.rangeSlider) {\n\t            this.sliderRange.initializeSliderRangeState(values);\n\t            this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n\t        }\n\t        else {\n\t            if (values == undefined) {\n\t                this.sliderButton.toEnd();\n\t            }\n\t            else {\n\t                this.sliderButton.setValue(values[1]);\n\t            }\n\t            this.setButtonBoundary();\n\t            this.sliderLine.setActiveWidth(this.sliderButton);\n\t        }\n\t        this.displayCaption();\n\t    };\n\t    Slider.prototype.getPosition = function () {\n\t        if (this.options.rangeSlider) {\n\t            return this.sliderRange.getPosition();\n\t        }\n\t        else {\n\t            return [0, this.sliderButton.getPosition()];\n\t        }\n\t    };\n\t    Slider.prototype.getPercentPosition = function () {\n\t        if (this.options.rangeSlider) {\n\t            return this.sliderRange.getPercentPosition();\n\t        }\n\t        else {\n\t            return [0, this.sliderButton.getPercent()];\n\t        }\n\t    };\n\t    Slider.prototype.getValues = function () {\n\t        if (this.currentValues != undefined) {\n\t            return this.currentValues;\n\t        }\n\t        else {\n\t            if (this.options.rangeSlider) {\n\t                return this.sliderRange.getValue();\n\t            }\n\t            else {\n\t                return [this.options.start, this.sliderButton.getValue()];\n\t            }\n\t        }\n\t    };\n\t    Slider.prototype.getCaptionFromValue = function (values) {\n\t        return this.sliderCaption.getCaptionFromValues(values);\n\t    };\n\t    Slider.prototype.getCaption = function () {\n\t        return this.sliderCaption.getCaption();\n\t    };\n\t    Slider.prototype.setValues = function (values) {\n\t        if (values != undefined) {\n\t            values[0] = Math.max(values[0], this.options.start);\n\t            values[1] = Math.min(values[1], this.options.end);\n\t        }\n\t        this.currentValues = values;\n\t        if (this.options.rangeSlider) {\n\t            this.sliderRange.setValue(values);\n\t            this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n\t        }\n\t        else {\n\t            this.sliderButton.setValue(values[1]);\n\t            this.sliderLine.setActiveWidth(this.sliderButton);\n\t        }\n\t        this.displayCaption();\n\t    };\n\t    Slider.prototype.drawGraph = function (data) {\n\t        if (this.sliderGraph) {\n\t            this.sliderGraph.draw(data);\n\t        }\n\t    };\n\t    Slider.prototype.setButtonBoundary = function () {\n\t        this.sliderButton.leftBoundary = 0;\n\t        this.sliderButton.rightBoundary = this.element.clientWidth;\n\t    };\n\t    Slider.prototype.displayCaption = function () {\n\t        if (this.options.valueCaption != undefined) {\n\t            this.sliderCaption.setFromString(this.options.valueCaption(this.getValues()));\n\t        }\n\t        else if (this.options.percentCaption != undefined) {\n\t            this.sliderCaption.setFromString(this.options.percentCaption(this.getPercentPosition()));\n\t        }\n\t        else if (this.options.displayAsPercent != undefined && this.options.displayAsPercent.separator != undefined && this.options.displayAsPercent.enable) {\n\t            this.sliderCaption.setAsPercent();\n\t        }\n\t        else {\n\t            this.sliderCaption.setAsValue();\n\t        }\n\t    };\n\t    Slider.prototype.buildSteps = function () {\n\t        if (this.options.getSteps) {\n\t            this.steps = this.options.getSteps(this.options.start, this.options.end);\n\t        }\n\t        else {\n\t            if (this.options.steps > exports.MAX_NUMBER_OF_STEPS) {\n\t                new Logger_1.Logger(this).warn(\"Maximum number of steps for slider is \" + exports.MAX_NUMBER_OF_STEPS + \" for performance reason\");\n\t                this.options.steps = exports.MAX_NUMBER_OF_STEPS;\n\t            }\n\t            var oneStep = (this.options.end - this.options.start) / Math.max(1, this.options.steps);\n\t            if (oneStep > 0) {\n\t                var currentStep = this.options.start;\n\t                var currentNumberOfSteps = 0;\n\t                while (currentStep <= this.options.end && currentNumberOfSteps <= exports.MAX_NUMBER_OF_STEPS) {\n\t                    this.steps.push(currentStep);\n\t                    currentStep += oneStep;\n\t                    currentNumberOfSteps++;\n\t                }\n\t            }\n\t            else {\n\t                this.steps.push(this.options.start);\n\t                this.steps.push(this.options.end);\n\t            }\n\t        }\n\t    };\n\t    return Slider;\n\t}());\n\texports.Slider = Slider;\n\tvar SliderLine = (function () {\n\t    function SliderLine(slider) {\n\t        this.slider = slider;\n\t    }\n\t    SliderLine.prototype.build = function () {\n\t        this.backGround = Dom_1.$$('div', {\n\t            className: 'coveo-slider-line coveo-background'\n\t        }).el;\n\t        this.activePart = Dom_1.$$('div', {\n\t            className: 'coveo-slider-line coveo-active'\n\t        }).el;\n\t        return [this.backGround, this.activePart];\n\t    };\n\t    SliderLine.prototype.setActiveWidth = function (buttonOne, buttonTwo) {\n\t        if (this.slider.options.rangeSlider) {\n\t            var width = (buttonTwo.getPercent() - buttonOne.getPercent()) * 100;\n\t            this.activePart.style.width = width + '%';\n\t            this.activePart.style.left = buttonOne.getPercent() * 100 + '%';\n\t            this.activePart.style.right = buttonTwo.getPercent() * 100 + '%';\n\t        }\n\t        else {\n\t            var width = buttonOne.getPercent() * 100;\n\t            this.activePart.style.width = width + '%';\n\t        }\n\t    };\n\t    return SliderLine;\n\t}());\n\t// This component relies heavily on mouse interaction, really difficult to test inside a UT context.\n\t// Ignore it\n\t/* istanbul ignore next */\n\tvar SliderButton = (function () {\n\t    function SliderButton(slider, which) {\n\t        this.slider = slider;\n\t        this.which = which;\n\t        this.eventMouseDown = DeviceUtils_1.DeviceUtils.isMobileDevice() ? 'touchstart' : 'mousedown';\n\t        this.eventMouseMove = DeviceUtils_1.DeviceUtils.isMobileDevice() ? 'touchmove' : 'mousemove';\n\t        this.eventMouseUp = DeviceUtils_1.DeviceUtils.isMobileDevice() ? 'touchend' : 'mouseup';\n\t    }\n\t    SliderButton.prototype.build = function () {\n\t        this.element = Dom_1.$$('div', {\n\t            className: 'coveo-slider-button'\n\t        }).el;\n\t        this.bindEvents();\n\t        this.element['CoveoSliderButton'] = this;\n\t        return this.element;\n\t    };\n\t    SliderButton.prototype.toBeginning = function () {\n\t        this.element.style.left = '0%';\n\t    };\n\t    SliderButton.prototype.toEnd = function () {\n\t        this.element.style.left = '100%';\n\t    };\n\t    SliderButton.prototype.setValue = function (value) {\n\t        var percent = this.fromValueToPercent(value);\n\t        this.element.style.left = Math.round(percent * 100) + '%';\n\t    };\n\t    SliderButton.prototype.getPosition = function () {\n\t        var left = this.element.style.left;\n\t        if (left.indexOf('%') != -1) {\n\t            return (parseFloat(left) / 100) * this.slider.element.clientWidth;\n\t        }\n\t        else {\n\t            return parseFloat(left);\n\t        }\n\t    };\n\t    SliderButton.prototype.getPercent = function (position) {\n\t        if (position === void 0) { position = this.getPosition(); }\n\t        if (this.slider.element.clientWidth == 0) {\n\t            return 0;\n\t        }\n\t        return +(position / this.slider.element.clientWidth).toFixed(2);\n\t    };\n\t    SliderButton.prototype.getValue = function () {\n\t        var value = this.getPercent() * (this.slider.options.end - this.slider.options.start) + this.slider.options.start;\n\t        return value;\n\t    };\n\t    SliderButton.prototype.fromValueToPercent = function (value) {\n\t        return 1 - ((this.slider.options.end - value) / (this.slider.options.end - this.slider.options.start));\n\t    };\n\t    SliderButton.prototype.fromPositionToValue = function (position) {\n\t        var percent = this.getPercent(position);\n\t        return this.slider.options.start + (percent * (this.slider.options.end - this.slider.options.start));\n\t    };\n\t    SliderButton.prototype.fromValueToPosition = function (value) {\n\t        var percent = this.fromValueToPercent(value);\n\t        return this.slider.element.clientWidth * percent;\n\t    };\n\t    SliderButton.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.element).on(this.eventMouseDown, function (e) {\n\t            _this.handleStartSlide(e);\n\t        });\n\t        var doc = this.slider.options.document || document;\n\t        doc.addEventListener(this.eventMouseMove, function (e) {\n\t            if (_this.eventMouseMove == 'touchmove' && _this.isMouseDown) {\n\t                e.preventDefault();\n\t            }\n\t            _this.handleMoving(e);\n\t        });\n\t        doc.addEventListener(this.eventMouseUp, function () {\n\t            _this.handleEndSlide();\n\t        });\n\t    };\n\t    SliderButton.prototype.getUserSelect = function () {\n\t        if (document.body.style.msUserSelect !== undefined) {\n\t            return 'msUserSelect';\n\t        }\n\t        if (document.body.style.webkitUserSelect !== undefined) {\n\t            return 'webkitUserSelect';\n\t        }\n\t        if (document.body.style['MozUserSelect'] !== undefined) {\n\t            return 'MozUserSelect';\n\t        }\n\t        return 'userSelect';\n\t    };\n\t    SliderButton.prototype.handleStartSlide = function (e) {\n\t        var position = this.getMousePosition(e);\n\t        this.isMouseDown = true;\n\t        this.startPositionX = position.x;\n\t        this.lastElementLeft = (parseInt(this.element.style.left, 10) / 100) * this.slider.element.clientWidth;\n\t        this.origUserSelect = document.body.style[this.getUserSelect()];\n\t        this.origCursor = document.body.style.cursor;\n\t        document.body.style[this.getUserSelect()] = 'none';\n\t        document.body.style.cursor = 'pointer';\n\t        Dom_1.$$(this.element).addClass('coveo-active');\n\t        Dom_1.$$(this.element).trigger(SliderEvents_1.SliderEvents.startSlide, {\n\t            button: this,\n\t            slider: this.slider\n\t        });\n\t        e.stopPropagation();\n\t    };\n\t    SliderButton.prototype.handleMoving = function (e) {\n\t        if (this.isMouseDown) {\n\t            this.slider.onMoving();\n\t            this.updatePosition(e);\n\t            this.handleButtonNearEnd();\n\t            Dom_1.$$(this.element).trigger(SliderEvents_1.SliderEvents.duringSlide, {\n\t                button: this,\n\t                slider: this.slider\n\t            });\n\t        }\n\t    };\n\t    SliderButton.prototype.handleEndSlide = function () {\n\t        if (this.isMouseDown) {\n\t            document.body.style[this.getUserSelect()] = this.origUserSelect;\n\t            document.body.style.cursor = this.origCursor;\n\t            Dom_1.$$(this.element).removeClass('coveo-active');\n\t            Dom_1.$$(this.element).trigger(SliderEvents_1.SliderEvents.endSlide, {\n\t                button: this,\n\t                slider: this.slider\n\t            });\n\t        }\n\t        this.isMouseDown = false;\n\t    };\n\t    SliderButton.prototype.handleButtonNearEnd = function () {\n\t        if (this.which == 0) {\n\t            if (this.origZIndex == undefined) {\n\t                this.origZIndex = this.element.style.zIndex || '1';\n\t            }\n\t            if (this.currentPos > 90) {\n\t                this.element.style.zIndex = this.origZIndex + 1;\n\t            }\n\t            else {\n\t                this.element.style.zIndex = this.origZIndex;\n\t            }\n\t        }\n\t    };\n\t    SliderButton.prototype.getMousePosition = function (e) {\n\t        var posx = 0;\n\t        var posy = 0;\n\t        if (e['touches'] && e['touches'][0]) {\n\t            posx = e['touches'][0].pageX;\n\t            posy = e['touches'][0].pageY;\n\t        }\n\t        else if (e.pageX && e.pageY) {\n\t            posx = e.pageX;\n\t            posy = e.pageY;\n\t        }\n\t        else if (e.clientX && e.clientY) {\n\t            posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n\t            posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n\t        }\n\t        return { x: posx, y: posy };\n\t    };\n\t    SliderButton.prototype.updatePosition = function (e) {\n\t        var pos = this.getMousePosition(e);\n\t        var spanX = pos.x - this.startPositionX;\n\t        var currentValue;\n\t        this.currentPos = this.lastElementLeft + spanX;\n\t        if (this.slider.options.steps || this.slider.options.getSteps) {\n\t            var snapResult = this.snapToStep(spanX);\n\t            this.currentPos = snapResult.position;\n\t            currentValue = snapResult.value;\n\t        }\n\t        this.currentPos = Math.max(this.leftBoundary, this.currentPos);\n\t        this.currentPos = Math.min(this.rightBoundary, this.currentPos);\n\t        this.currentPos = this.getPercent(this.currentPos) * 100;\n\t        this.currentPos = Math.min(this.currentPos, 100);\n\t        this.currentPos = Math.max(this.currentPos, 0);\n\t        this.element.style.left = Math.round(this.currentPos) + '%';\n\t        if (this.slider.options.steps || this.slider.options.getSteps) {\n\t            this.slider.currentValues[this.which] = currentValue;\n\t        }\n\t        else {\n\t            this.slider.currentValues[this.which] = this.getValue();\n\t        }\n\t    };\n\t    SliderButton.prototype.snapToStep = function (spanX) {\n\t        var _this = this;\n\t        var diffs = _.map(this.slider.steps, function (step, i) {\n\t            return Math.abs(_this.currentPos - _this.fromValueToPosition(_this.slider.steps[i]));\n\t        });\n\t        var diffsNext = _.map(this.slider.steps, function (step, i) {\n\t            return Math.abs(_this.rightBoundary - _this.fromValueToPosition(_this.slider.steps[i]));\n\t        });\n\t        var diffsPrev = _.map(this.slider.steps, function (step, i) {\n\t            return Math.abs(_this.leftBoundary - _this.fromValueToPosition(_this.slider.steps[i]));\n\t        });\n\t        var nearest = _.min(diffs);\n\t        var nearestNext = _.min(diffsNext);\n\t        var nearestPrevious = _.min(diffsPrev);\n\t        var currentStep = this.slider.steps[_.indexOf(diffs, nearest)];\n\t        var nextStep = this.slider.steps[_.indexOf(diffsNext, nearestNext)];\n\t        var previousStep = this.slider.steps[_.indexOf(diffsPrev, nearestPrevious)];\n\t        currentStep = Math.min(currentStep, nextStep);\n\t        currentStep = Math.max(currentStep, previousStep);\n\t        return { position: this.fromValueToPosition(currentStep), value: currentStep };\n\t    };\n\t    return SliderButton;\n\t}());\n\texports.SliderButton = SliderButton;\n\tvar SliderRange = (function () {\n\t    function SliderRange(slider) {\n\t        this.slider = slider;\n\t        this.firstButton = new SliderButton(slider, 0);\n\t        this.secondButton = new SliderButton(slider, 1);\n\t    }\n\t    SliderRange.prototype.build = function () {\n\t        var firstElem = this.firstButton.build();\n\t        var secondElem = this.secondButton.build();\n\t        Dom_1.$$(secondElem).addClass('coveo-range-button');\n\t        return [firstElem, secondElem];\n\t    };\n\t    SliderRange.prototype.initializeSliderRangeState = function (values) {\n\t        if (values == undefined) {\n\t            this.firstButton.toBeginning();\n\t            this.secondButton.toEnd();\n\t        }\n\t        else {\n\t            this.firstButton.setValue(values[0]);\n\t            this.secondButton.setValue(values[1]);\n\t        }\n\t        this.setBoundary();\n\t    };\n\t    SliderRange.prototype.setValue = function (values) {\n\t        this.firstButton.setValue(values[0]);\n\t        this.secondButton.setValue(values[1]);\n\t    };\n\t    SliderRange.prototype.setBoundary = function () {\n\t        this.firstButton.leftBoundary = 0;\n\t        this.firstButton.rightBoundary = this.secondButton.getPosition();\n\t        this.secondButton.leftBoundary = this.firstButton.getPosition();\n\t        this.secondButton.rightBoundary = this.slider.element.clientWidth;\n\t    };\n\t    SliderRange.prototype.getPosition = function () {\n\t        return [this.firstButton.getPosition(), this.secondButton.getPosition()];\n\t    };\n\t    SliderRange.prototype.getPercentPosition = function () {\n\t        return [this.firstButton.getPercent(), this.secondButton.getPercent()];\n\t    };\n\t    SliderRange.prototype.getValue = function () {\n\t        return [this.firstButton.getValue(), this.secondButton.getValue()];\n\t    };\n\t    return SliderRange;\n\t}());\n\tvar SliderCaption = (function () {\n\t    function SliderCaption(slider) {\n\t        this.slider = slider;\n\t        this.separator = '-';\n\t        this.unitSign = '';\n\t        if (this.slider.options.displayAsPercent && this.slider.options.displayAsPercent.enable) {\n\t            this.separator = this.slider.options.displayAsPercent.separator != undefined ? this.slider.options.displayAsPercent.separator : this.separator;\n\t        }\n\t        else if (this.slider.options.displayAsValue && this.slider.options.displayAsValue.enable) {\n\t            this.separator = this.slider.options.displayAsValue.separator != undefined ? this.slider.options.displayAsValue.separator : this.separator;\n\t            this.unitSign = this.slider.options.displayAsValue.unitSign != undefined ? this.slider.options.displayAsValue.unitSign : this.unitSign;\n\t        }\n\t    }\n\t    SliderCaption.prototype.build = function () {\n\t        this.caption = Dom_1.$$('div', {\n\t            className: 'coveo-slider-caption'\n\t        }).el;\n\t        return this.caption;\n\t    };\n\t    SliderCaption.prototype.getCaption = function () {\n\t        return Dom_1.$$(this.caption).text();\n\t    };\n\t    SliderCaption.prototype.getCaptionFromValues = function (values) {\n\t        return this.getValueCaption(values);\n\t    };\n\t    SliderCaption.prototype.getCaptionFromValuesAsPercent = function (values) {\n\t        return this.getValueCaption(values);\n\t    };\n\t    SliderCaption.prototype.setAsValue = function () {\n\t        Dom_1.$$(this.caption).text(this.getValueCaption());\n\t    };\n\t    SliderCaption.prototype.setAsPercent = function () {\n\t        var values = this.slider.getPercentPosition();\n\t        Dom_1.$$(this.caption).text([(values[0] * 100).toFixed(this.slider.options.rounded), '%', this.separator, (values[1] * 100).toFixed(this.slider.options.rounded), '%'].join(' '));\n\t    };\n\t    SliderCaption.prototype.setFromString = function (str) {\n\t        Dom_1.$$(this.caption).text(str);\n\t    };\n\t    SliderCaption.prototype.getValueCaption = function (values) {\n\t        if (values === void 0) { values = this.slider.getValues(); }\n\t        var first = values[0];\n\t        var second = values[1];\n\t        if (this.slider.options.dateField) {\n\t            var firstAsDate = new Date(first);\n\t            var secondAsDate = new Date(second);\n\t            firstAsDate.setHours(0, 0, 0, 0);\n\t            secondAsDate.setHours(0, 0, 0, 0);\n\t            first = Globalize.format(firstAsDate, this.slider.options.dateFormat || 'MMM dd, yyyy');\n\t            second = Globalize.format(secondAsDate, this.slider.options.dateFormat || 'MMM dd, yyyy');\n\t            this.unitSign = '';\n\t        }\n\t        else {\n\t            first = first.toFixed(this.slider.options.rounded);\n\t            second = second.toFixed(this.slider.options.rounded);\n\t        }\n\t        return [first, this.unitSign, this.separator, second, this.unitSign].join(' ');\n\t    };\n\t    return SliderCaption;\n\t}());\n\tvar SliderGraph = (function () {\n\t    function SliderGraph(slider) {\n\t        this.slider = slider;\n\t        this.svg = d3.select(slider.element).append('svg').append('g');\n\t        this.x = d3Scale.scaleBand();\n\t        this.y = d3Scale.scaleLinear();\n\t        this.slider.options.graph.margin = Utils_1.Utils.extendDeep({\n\t            top: 20,\n\t            right: 0,\n\t            left: 0,\n\t            bottom: 20\n\t        }, this.slider.options.graph.margin || {});\n\t        this.slider.options.graph.animationDuration = this.slider.options.graph.animationDuration || 500;\n\t        this.tooltip = Dom_1.$$('div', {\n\t            className: 'coveo-slider-tooltip'\n\t        }).el;\n\t        this.tooltip.style.display = 'none';\n\t        this.slider.element.appendChild(this.tooltip);\n\t        this.slider.options.graph.steps = this.slider.options.graph.steps || 10;\n\t    }\n\t    SliderGraph.prototype.draw = function (data) {\n\t        if (data === void 0) { data = this.oldData; }\n\t        if (data) {\n\t            if (data != this.oldData) {\n\t                // only modify the data if it's new\n\t                data = this.modifyPossibleSinglePointDataIntoValidRange(data);\n\t            }\n\t            var sliderOuterWidth = this.slider.element.offsetWidth;\n\t            var sliderOuterHeight = this.slider.element.offsetHeight;\n\t            var width = sliderOuterWidth - this.slider.options.graph.margin.left - this.slider.options.graph.margin.right;\n\t            var height = sliderOuterHeight - this.slider.options.graph.margin.top - this.slider.options.graph.margin.bottom;\n\t            if (!isNaN(width) && width >= 0 && !isNaN(height) && height >= 0) {\n\t                this.applyTransformOnSvg(width, height);\n\t                this.setXAndYRange(width, height);\n\t                this.setXAndYDomain(data);\n\t                var bars = this.svg.selectAll('.coveo-bar').data(data);\n\t                var currentSliderValues = this.slider.getValues();\n\t                this.renderGraphBars(bars, width, height, currentSliderValues);\n\t                this.setGraphBarsTransition(bars, height, currentSliderValues);\n\t            }\n\t            this.oldData = data;\n\t        }\n\t    };\n\t    SliderGraph.prototype.modifyPossibleSinglePointDataIntoValidRange = function (data) {\n\t        var _this = this;\n\t        return _.map(data, function (d) {\n\t            // In some rare corner case, the index can return range values where the start of the data is equal to the end of the data\n\t            // Since it's a \"point\" as opposed to a real range, it's impossible to display this properly on a graph (where the range is the x axis)\n\t            // An element in a graph with with 0 width on the x axis is illogical and cannot work.\n\t            // In those case, we must \"widen\" the x range. Instead of adding an arbitrary value (like +1 to end, for example), we need something that won't make the range super small to click on.\n\t            // We use the total width available, and subtract half a step at the beginning, and add half a step at the end\n\t            if (d.start == d.end) {\n\t                var oneStep = (_this.slider.options.end - _this.slider.options.start) / _this.slider.options.graph.steps;\n\t                d.start = Math.round(d.start - oneStep / 2);\n\t                d.end = Math.round(d.end + oneStep / 2);\n\t            }\n\t            return d;\n\t        });\n\t    };\n\t    SliderGraph.prototype.setXAndYRange = function (width, height) {\n\t        this.x.range([0, width]);\n\t        this.x.padding(0.2);\n\t        this.y.range([height - this.slider.options.graph.margin.top, 0]);\n\t    };\n\t    SliderGraph.prototype.setXAndYDomain = function (data) {\n\t        this.padGraphWithEmptyData(data);\n\t        this.x.domain(_.map(data, function (d) {\n\t            return d.start;\n\t        }));\n\t        this.y.domain([0, d3.max(data, function (d) {\n\t                return d.y;\n\t            })]);\n\t    };\n\t    SliderGraph.prototype.padGraphWithEmptyData = function (data) {\n\t        var oneStepOfGraph = data[0].end - data[0].start;\n\t        this.padBeginningOfGraphWithEmptyData(data, oneStepOfGraph);\n\t        this.padEndOfGraphWithEmptyData(data, oneStepOfGraph);\n\t    };\n\t    SliderGraph.prototype.padBeginningOfGraphWithEmptyData = function (data, oneStepOfGraph) {\n\t        if (data[0].start > this.slider.options.start && data[0].start > oneStepOfGraph) {\n\t            var difToFillAtStart = data[0].start - this.slider.options.start;\n\t            var nbOfStepsAtStart = Math.round(difToFillAtStart / oneStepOfGraph);\n\t            var currentStep = data[0].start;\n\t            for (var i = nbOfStepsAtStart; i > 0; i--) {\n\t                data.unshift({ start: currentStep - oneStepOfGraph, end: currentStep, y: 0 });\n\t                currentStep -= oneStepOfGraph;\n\t            }\n\t        }\n\t    };\n\t    SliderGraph.prototype.padEndOfGraphWithEmptyData = function (data, oneStepOfGraph) {\n\t        var lastDataIndex = data.length - 1;\n\t        if (data[lastDataIndex].end < this.slider.options.end) {\n\t            var diffToFillAtEnd = this.slider.options.end - data[lastDataIndex].end;\n\t            var nbOfStepsAtEnd = Math.round(diffToFillAtEnd / oneStepOfGraph);\n\t            var currentStep = data[lastDataIndex].end;\n\t            for (var i = 0; i < nbOfStepsAtEnd; i++) {\n\t                data.push({ start: currentStep, end: currentStep + oneStepOfGraph, y: 0 });\n\t                currentStep += oneStepOfGraph;\n\t            }\n\t        }\n\t    };\n\t    SliderGraph.prototype.applyTransformOnSvg = function (width, height) {\n\t        var svg = Dom_1.$$(this.slider.element).find('svg');\n\t        svg.setAttribute('width', width + 'px');\n\t        svg.setAttribute('height', height + 'px');\n\t        this.svg.attr('transform', 'translate(' + this.slider.options.graph.margin.left + ',' + this.slider.options.graph.margin.top + ')');\n\t    };\n\t    SliderGraph.prototype.renderGraphBars = function (bars, width, height, currentSliderValues) {\n\t        bars.enter().append('rect')\n\t            .attr('class', this.getFunctionForClass(currentSliderValues))\n\t            .attr('width', this.x.bandwidth())\n\t            .attr('height', this.getFunctionForHeight(height))\n\t            .attr('x', this.getFunctionForX())\n\t            .attr('y', this.getFunctionForY())\n\t            .on('click', this.getFunctionForClick())\n\t            .on('mouseover', this.getFunctionForMouseOver(height))\n\t            .on('mouseout', this.getFunctionForMouseOut());\n\t    };\n\t    SliderGraph.prototype.setGraphBarsTransition = function (bars, height, currentSliderValues) {\n\t        bars\n\t            .transition()\n\t            .attr('x', this.getFunctionForX())\n\t            .attr('width', this.x.bandwidth())\n\t            .attr('class', this.getFunctionForClass(currentSliderValues))\n\t            .transition()\n\t            .duration(this.slider.options.graph.animationDuration)\n\t            .attr('y', this.getFunctionForY())\n\t            .attr('height', this.getFunctionForHeight(height));\n\t    };\n\t    SliderGraph.prototype.getBarClass = function (currentSliderValues, d, i) {\n\t        if (d.start >= currentSliderValues[0] && d.end <= currentSliderValues[1]) {\n\t            return 'coveo-active';\n\t        }\n\t        else if (currentSliderValues[0] == this.slider.options.start && i == 0) {\n\t            return 'coveo-active';\n\t        }\n\t        else if (currentSliderValues[1] == this.slider.options.end && i == this.slider.options.graph.steps - 1) {\n\t            return 'coveo-active';\n\t        }\n\t        else {\n\t            return '';\n\t        }\n\t    };\n\t    SliderGraph.prototype.setTooltip = function (d, height) {\n\t        var caption = Dom_1.$$('span', {\n\t            className: 'coveo-caption'\n\t        });\n\t        caption.text(this.slider.getCaptionFromValue([d.start, d.end]));\n\t        var count = Dom_1.$$('span', {\n\t            className: 'coveo-count'\n\t        });\n\t        count.text(d.y.toString());\n\t        Dom_1.$$(this.tooltip).empty();\n\t        this.tooltip.appendChild(caption.el);\n\t        this.tooltip.appendChild(count.el);\n\t        this.tooltip.style.display = 'block';\n\t        this.tooltip.style.left = (this.x(d.start) - (0.2 * this.slider.options.graph.steps)) + 'px';\n\t        this.tooltip.style.top = (this.y(d.y) - height) + 'px';\n\t    };\n\t    SliderGraph.prototype.getFunctionForX = function () {\n\t        var _this = this;\n\t        return function (d) {\n\t            return _this.x(d.start);\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForY = function () {\n\t        var _this = this;\n\t        return function (d) {\n\t            return _this.y(d.y);\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForHeight = function (height) {\n\t        var _this = this;\n\t        return function (d) {\n\t            return height - _this.y(d.y);\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForClass = function (currentSliderValues) {\n\t        var _this = this;\n\t        return function (d, i) {\n\t            return 'coveo-bar ' + _this.getBarClass(currentSliderValues, d, i);\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForClick = function () {\n\t        var _this = this;\n\t        return function (d, i) {\n\t            Dom_1.$$(_this.slider.element).trigger(SliderEvents_1.SliderEvents.graphValueSelected, {\n\t                start: d.start,\n\t                end: d.end,\n\t                value: d.y\n\t            });\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForMouseOver = function (height) {\n\t        var _this = this;\n\t        return function (d) {\n\t            _this.setTooltip(d, height);\n\t        };\n\t    };\n\t    SliderGraph.prototype.getFunctionForMouseOut = function () {\n\t        var _this = this;\n\t        return function () {\n\t            _this.tooltip.style.display = 'none';\n\t        };\n\t    };\n\t    return SliderGraph;\n\t}());\n\n\n/***/ },\n/* 148 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-scale/ Version 1.0.3. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports, __webpack_require__(149), __webpack_require__(150), __webpack_require__(151), __webpack_require__(153), __webpack_require__(154), __webpack_require__(155), __webpack_require__(152)) :\n\t  typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) :\n\t  (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));\n\t}(this, function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict';\n\t\n\t  var array = Array.prototype;\n\t\n\t  var map$1 = array.map;\n\t  var slice = array.slice;\n\t\n\t  var implicit = {name: \"implicit\"};\n\t\n\t  function ordinal(range) {\n\t    var index = d3Collection.map(),\n\t        domain = [],\n\t        unknown = implicit;\n\t\n\t    range = range == null ? [] : slice.call(range);\n\t\n\t    function scale(d) {\n\t      var key = d + \"\", i = index.get(key);\n\t      if (!i) {\n\t        if (unknown !== implicit) return unknown;\n\t        index.set(key, i = domain.push(d));\n\t      }\n\t      return range[(i - 1) % range.length];\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      if (!arguments.length) return domain.slice();\n\t      domain = [], index = d3Collection.map();\n\t      var i = -1, n = _.length, d, key;\n\t      while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n\t      return scale;\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice.call(_), scale) : range.slice();\n\t    };\n\t\n\t    scale.unknown = function(_) {\n\t      return arguments.length ? (unknown = _, scale) : unknown;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return ordinal()\n\t          .domain(domain)\n\t          .range(range)\n\t          .unknown(unknown);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function band() {\n\t    var scale = ordinal().unknown(undefined),\n\t        domain = scale.domain,\n\t        ordinalRange = scale.range,\n\t        range = [0, 1],\n\t        step,\n\t        bandwidth,\n\t        round = false,\n\t        paddingInner = 0,\n\t        paddingOuter = 0,\n\t        align = 0.5;\n\t\n\t    delete scale.unknown;\n\t\n\t    function rescale() {\n\t      var n = domain().length,\n\t          reverse = range[1] < range[0],\n\t          start = range[reverse - 0],\n\t          stop = range[1 - reverse];\n\t      step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n\t      if (round) step = Math.floor(step);\n\t      start += (stop - start - step * (n - paddingInner)) * align;\n\t      bandwidth = step * (1 - paddingInner);\n\t      if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n\t      var values = d3Array.range(n).map(function(i) { return start + step * i; });\n\t      return ordinalRange(reverse ? values.reverse() : values);\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain(_), rescale()) : domain();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n\t    };\n\t\n\t    scale.rangeRound = function(_) {\n\t      return range = [+_[0], +_[1]], round = true, rescale();\n\t    };\n\t\n\t    scale.bandwidth = function() {\n\t      return bandwidth;\n\t    };\n\t\n\t    scale.step = function() {\n\t      return step;\n\t    };\n\t\n\t    scale.round = function(_) {\n\t      return arguments.length ? (round = !!_, rescale()) : round;\n\t    };\n\t\n\t    scale.padding = function(_) {\n\t      return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n\t    };\n\t\n\t    scale.paddingInner = function(_) {\n\t      return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n\t    };\n\t\n\t    scale.paddingOuter = function(_) {\n\t      return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n\t    };\n\t\n\t    scale.align = function(_) {\n\t      return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return band()\n\t          .domain(domain())\n\t          .range(range)\n\t          .round(round)\n\t          .paddingInner(paddingInner)\n\t          .paddingOuter(paddingOuter)\n\t          .align(align);\n\t    };\n\t\n\t    return rescale();\n\t  }\n\t\n\t  function pointish(scale) {\n\t    var copy = scale.copy;\n\t\n\t    scale.padding = scale.paddingOuter;\n\t    delete scale.paddingInner;\n\t    delete scale.paddingOuter;\n\t\n\t    scale.copy = function() {\n\t      return pointish(copy());\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function point() {\n\t    return pointish(band().paddingInner(1));\n\t  }\n\t\n\t  function constant(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function number(x) {\n\t    return +x;\n\t  }\n\t\n\t  var unit = [0, 1];\n\t\n\t  function deinterpolate(a, b) {\n\t    return (b -= (a = +a))\n\t        ? function(x) { return (x - a) / b; }\n\t        : constant(b);\n\t  }\n\t\n\t  function deinterpolateClamp(deinterpolate) {\n\t    return function(a, b) {\n\t      var d = deinterpolate(a = +a, b = +b);\n\t      return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n\t    };\n\t  }\n\t\n\t  function reinterpolateClamp(reinterpolate) {\n\t    return function(a, b) {\n\t      var r = reinterpolate(a = +a, b = +b);\n\t      return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n\t    };\n\t  }\n\t\n\t  function bimap(domain, range, deinterpolate, reinterpolate) {\n\t    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n\t    if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n\t    else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n\t    return function(x) { return r0(d0(x)); };\n\t  }\n\t\n\t  function polymap(domain, range, deinterpolate, reinterpolate) {\n\t    var j = Math.min(domain.length, range.length) - 1,\n\t        d = new Array(j),\n\t        r = new Array(j),\n\t        i = -1;\n\t\n\t    // Reverse descending domains.\n\t    if (domain[j] < domain[0]) {\n\t      domain = domain.slice().reverse();\n\t      range = range.slice().reverse();\n\t    }\n\t\n\t    while (++i < j) {\n\t      d[i] = deinterpolate(domain[i], domain[i + 1]);\n\t      r[i] = reinterpolate(range[i], range[i + 1]);\n\t    }\n\t\n\t    return function(x) {\n\t      var i = d3Array.bisect(domain, x, 1, j) - 1;\n\t      return r[i](d[i](x));\n\t    };\n\t  }\n\t\n\t  function copy(source, target) {\n\t    return target\n\t        .domain(source.domain())\n\t        .range(source.range())\n\t        .interpolate(source.interpolate())\n\t        .clamp(source.clamp());\n\t  }\n\t\n\t  // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n\t  // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n\t  function continuous(deinterpolate$$, reinterpolate) {\n\t    var domain = unit,\n\t        range = unit,\n\t        interpolate = d3Interpolate.interpolate,\n\t        clamp = false,\n\t        piecewise,\n\t        output,\n\t        input;\n\t\n\t    function rescale() {\n\t      piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n\t      output = input = null;\n\t      return scale;\n\t    }\n\t\n\t    function scale(x) {\n\t      return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate)))(+x);\n\t    }\n\t\n\t    scale.invert = function(y) {\n\t      return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n\t    };\n\t\n\t    scale.rangeRound = function(_) {\n\t      return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale();\n\t    };\n\t\n\t    scale.clamp = function(_) {\n\t      return arguments.length ? (clamp = !!_, rescale()) : clamp;\n\t    };\n\t\n\t    scale.interpolate = function(_) {\n\t      return arguments.length ? (interpolate = _, rescale()) : interpolate;\n\t    };\n\t\n\t    return rescale();\n\t  }\n\t\n\t  function tickFormat(domain, count, specifier) {\n\t    var start = domain[0],\n\t        stop = domain[domain.length - 1],\n\t        step = d3Array.tickStep(start, stop, count == null ? 10 : count),\n\t        precision;\n\t    specifier = d3Format.formatSpecifier(specifier == null ? \",f\" : specifier);\n\t    switch (specifier.type) {\n\t      case \"s\": {\n\t        var value = Math.max(Math.abs(start), Math.abs(stop));\n\t        if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;\n\t        return d3Format.formatPrefix(specifier, value);\n\t      }\n\t      case \"\":\n\t      case \"e\":\n\t      case \"g\":\n\t      case \"p\":\n\t      case \"r\": {\n\t        if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n\t        break;\n\t      }\n\t      case \"f\":\n\t      case \"%\": {\n\t        if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n\t        break;\n\t      }\n\t    }\n\t    return d3Format.format(specifier);\n\t  }\n\t\n\t  function linearish(scale) {\n\t    var domain = scale.domain;\n\t\n\t    scale.ticks = function(count) {\n\t      var d = domain();\n\t      return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      return tickFormat(domain(), count, specifier);\n\t    };\n\t\n\t    scale.nice = function(count) {\n\t      var d = domain(),\n\t          i = d.length - 1,\n\t          n = count == null ? 10 : count,\n\t          start = d[0],\n\t          stop = d[i],\n\t          step = d3Array.tickStep(start, stop, n);\n\t\n\t      if (step) {\n\t        step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n\t        d[0] = Math.floor(start / step) * step;\n\t        d[i] = Math.ceil(stop / step) * step;\n\t        domain(d);\n\t      }\n\t\n\t      return scale;\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function linear() {\n\t    var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber);\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, linear());\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function identity() {\n\t    var domain = [0, 1];\n\t\n\t    function scale(x) {\n\t      return +x;\n\t    }\n\t\n\t    scale.invert = scale;\n\t\n\t    scale.domain = scale.range = function(_) {\n\t      return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return identity().domain(domain);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function nice(domain, interval) {\n\t    domain = domain.slice();\n\t\n\t    var i0 = 0,\n\t        i1 = domain.length - 1,\n\t        x0 = domain[i0],\n\t        x1 = domain[i1],\n\t        t;\n\t\n\t    if (x1 < x0) {\n\t      t = i0, i0 = i1, i1 = t;\n\t      t = x0, x0 = x1, x1 = t;\n\t    }\n\t\n\t    domain[i0] = interval.floor(x0);\n\t    domain[i1] = interval.ceil(x1);\n\t    return domain;\n\t  }\n\t\n\t  function deinterpolate$1(a, b) {\n\t    return (b = Math.log(b / a))\n\t        ? function(x) { return Math.log(x / a) / b; }\n\t        : constant(b);\n\t  }\n\t\n\t  function reinterpolate(a, b) {\n\t    return a < 0\n\t        ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n\t        : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n\t  }\n\t\n\t  function pow10(x) {\n\t    return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n\t  }\n\t\n\t  function powp(base) {\n\t    return base === 10 ? pow10\n\t        : base === Math.E ? Math.exp\n\t        : function(x) { return Math.pow(base, x); };\n\t  }\n\t\n\t  function logp(base) {\n\t    return base === Math.E ? Math.log\n\t        : base === 10 && Math.log10\n\t        || base === 2 && Math.log2\n\t        || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n\t  }\n\t\n\t  function reflect(f) {\n\t    return function(x) {\n\t      return -f(-x);\n\t    };\n\t  }\n\t\n\t  function log() {\n\t    var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),\n\t        domain = scale.domain,\n\t        base = 10,\n\t        logs = logp(10),\n\t        pows = powp(10);\n\t\n\t    function rescale() {\n\t      logs = logp(base), pows = powp(base);\n\t      if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n\t      return scale;\n\t    }\n\t\n\t    scale.base = function(_) {\n\t      return arguments.length ? (base = +_, rescale()) : base;\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain(_), rescale()) : domain();\n\t    };\n\t\n\t    scale.ticks = function(count) {\n\t      var d = domain(),\n\t          u = d[0],\n\t          v = d[d.length - 1],\n\t          r;\n\t\n\t      if (r = v < u) i = u, u = v, v = i;\n\t\n\t      var i = logs(u),\n\t          j = logs(v),\n\t          p,\n\t          k,\n\t          t,\n\t          n = count == null ? 10 : +count,\n\t          z = [];\n\t\n\t      if (!(base % 1) && j - i < n) {\n\t        i = Math.round(i) - 1, j = Math.round(j) + 1;\n\t        if (u > 0) for (; i < j; ++i) {\n\t          for (k = 1, p = pows(i); k < base; ++k) {\n\t            t = p * k;\n\t            if (t < u) continue;\n\t            if (t > v) break;\n\t            z.push(t);\n\t          }\n\t        } else for (; i < j; ++i) {\n\t          for (k = base - 1, p = pows(i); k >= 1; --k) {\n\t            t = p * k;\n\t            if (t < u) continue;\n\t            if (t > v) break;\n\t            z.push(t);\n\t          }\n\t        }\n\t      } else {\n\t        z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);\n\t      }\n\t\n\t      return r ? z.reverse() : z;\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n\t      if (typeof specifier !== \"function\") specifier = d3Format.format(specifier);\n\t      if (count === Infinity) return specifier;\n\t      if (count == null) count = 10;\n\t      var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n\t      return function(d) {\n\t        var i = d / pows(Math.round(logs(d)));\n\t        if (i * base < base - 0.5) i *= base;\n\t        return i <= k ? specifier(d) : \"\";\n\t      };\n\t    };\n\t\n\t    scale.nice = function() {\n\t      return domain(nice(domain(), {\n\t        floor: function(x) { return pows(Math.floor(logs(x))); },\n\t        ceil: function(x) { return pows(Math.ceil(logs(x))); }\n\t      }));\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, log().base(base));\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function raise(x, exponent) {\n\t    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\t  }\n\t\n\t  function pow() {\n\t    var exponent = 1,\n\t        scale = continuous(deinterpolate, reinterpolate),\n\t        domain = scale.domain;\n\t\n\t    function deinterpolate(a, b) {\n\t      return (b = raise(b, exponent) - (a = raise(a, exponent)))\n\t          ? function(x) { return (raise(x, exponent) - a) / b; }\n\t          : constant(b);\n\t    }\n\t\n\t    function reinterpolate(a, b) {\n\t      b = raise(b, exponent) - (a = raise(a, exponent));\n\t      return function(t) { return raise(a + b * t, 1 / exponent); };\n\t    }\n\t\n\t    scale.exponent = function(_) {\n\t      return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, pow().exponent(exponent));\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function sqrt() {\n\t    return pow().exponent(0.5);\n\t  }\n\t\n\t  function quantile$1() {\n\t    var domain = [],\n\t        range = [],\n\t        thresholds = [];\n\t\n\t    function rescale() {\n\t      var i = 0, n = Math.max(1, range.length);\n\t      thresholds = new Array(n - 1);\n\t      while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);\n\t      return scale;\n\t    }\n\t\n\t    function scale(x) {\n\t      if (!isNaN(x = +x)) return range[d3Array.bisect(thresholds, x)];\n\t    }\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return i < 0 ? [NaN, NaN] : [\n\t        i > 0 ? thresholds[i - 1] : domain[0],\n\t        i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n\t      ];\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      if (!arguments.length) return domain.slice();\n\t      domain = [];\n\t      for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n\t      domain.sort(d3Array.ascending);\n\t      return rescale();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n\t    };\n\t\n\t    scale.quantiles = function() {\n\t      return thresholds.slice();\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return quantile$1()\n\t          .domain(domain)\n\t          .range(range);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function quantize() {\n\t    var x0 = 0,\n\t        x1 = 1,\n\t        n = 1,\n\t        domain = [0.5],\n\t        range = [0, 1];\n\t\n\t    function scale(x) {\n\t      if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n\t    }\n\t\n\t    function rescale() {\n\t      var i = -1;\n\t      domain = new Array(n);\n\t      while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n\t      return scale;\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n\t    };\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return i < 0 ? [NaN, NaN]\n\t          : i < 1 ? [x0, domain[0]]\n\t          : i >= n ? [domain[n - 1], x1]\n\t          : [domain[i - 1], domain[i]];\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return quantize()\n\t          .domain([x0, x1])\n\t          .range(range);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function threshold() {\n\t    var domain = [0.5],\n\t        range = [0, 1],\n\t        n = 1;\n\t\n\t    function scale(x) {\n\t      if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n\t    };\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return [domain[i - 1], domain[i]];\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return threshold()\n\t          .domain(domain)\n\t          .range(range);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  var durationSecond = 1000;\n\t  var durationMinute = durationSecond * 60;\n\t  var durationHour = durationMinute * 60;\n\t  var durationDay = durationHour * 24;\n\t  var durationWeek = durationDay * 7;\n\t  var durationMonth = durationDay * 30;\n\t  var durationYear = durationDay * 365;\n\t  function date(t) {\n\t    return new Date(t);\n\t  }\n\t\n\t  function number$1(t) {\n\t    return t instanceof Date ? +t : +new Date(+t);\n\t  }\n\t\n\t  function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n\t    var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber),\n\t        invert = scale.invert,\n\t        domain = scale.domain;\n\t\n\t    var formatMillisecond = format(\".%L\"),\n\t        formatSecond = format(\":%S\"),\n\t        formatMinute = format(\"%I:%M\"),\n\t        formatHour = format(\"%I %p\"),\n\t        formatDay = format(\"%a %d\"),\n\t        formatWeek = format(\"%b %d\"),\n\t        formatMonth = format(\"%B\"),\n\t        formatYear = format(\"%Y\");\n\t\n\t    var tickIntervals = [\n\t      [second,  1,      durationSecond],\n\t      [second,  5,  5 * durationSecond],\n\t      [second, 15, 15 * durationSecond],\n\t      [second, 30, 30 * durationSecond],\n\t      [minute,  1,      durationMinute],\n\t      [minute,  5,  5 * durationMinute],\n\t      [minute, 15, 15 * durationMinute],\n\t      [minute, 30, 30 * durationMinute],\n\t      [  hour,  1,      durationHour  ],\n\t      [  hour,  3,  3 * durationHour  ],\n\t      [  hour,  6,  6 * durationHour  ],\n\t      [  hour, 12, 12 * durationHour  ],\n\t      [   day,  1,      durationDay   ],\n\t      [   day,  2,  2 * durationDay   ],\n\t      [  week,  1,      durationWeek  ],\n\t      [ month,  1,      durationMonth ],\n\t      [ month,  3,  3 * durationMonth ],\n\t      [  year,  1,      durationYear  ]\n\t    ];\n\t\n\t    function tickFormat(date) {\n\t      return (second(date) < date ? formatMillisecond\n\t          : minute(date) < date ? formatSecond\n\t          : hour(date) < date ? formatMinute\n\t          : day(date) < date ? formatHour\n\t          : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n\t          : year(date) < date ? formatMonth\n\t          : formatYear)(date);\n\t    }\n\t\n\t    function tickInterval(interval, start, stop, step) {\n\t      if (interval == null) interval = 10;\n\t\n\t      // If a desired tick count is specified, pick a reasonable tick interval\n\t      // based on the extent of the domain and a rough estimate of tick size.\n\t      // Otherwise, assume interval is already a time interval and use it.\n\t      if (typeof interval === \"number\") {\n\t        var target = Math.abs(stop - start) / interval,\n\t            i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n\t        if (i === tickIntervals.length) {\n\t          step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);\n\t          interval = year;\n\t        } else if (i) {\n\t          i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n\t          step = i[1];\n\t          interval = i[0];\n\t        } else {\n\t          step = d3Array.tickStep(start, stop, interval);\n\t          interval = millisecond;\n\t        }\n\t      }\n\t\n\t      return step == null ? interval : interval.every(step);\n\t    }\n\t\n\t    scale.invert = function(y) {\n\t      return new Date(invert(y));\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date);\n\t    };\n\t\n\t    scale.ticks = function(interval, step) {\n\t      var d = domain(),\n\t          t0 = d[0],\n\t          t1 = d[d.length - 1],\n\t          r = t1 < t0,\n\t          t;\n\t      if (r) t = t0, t0 = t1, t1 = t;\n\t      t = tickInterval(interval, t0, t1, step);\n\t      t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n\t      return r ? t.reverse() : t;\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      return specifier == null ? tickFormat : format(specifier);\n\t    };\n\t\n\t    scale.nice = function(interval, step) {\n\t      var d = domain();\n\t      return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n\t          ? domain(nice(d, interval))\n\t          : scale;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function time() {\n\t    return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n\t  }\n\t\n\t  function utcTime() {\n\t    return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n\t  }\n\t\n\t  function colors(s) {\n\t    return s.match(/.{6}/g).map(function(x) {\n\t      return \"#\" + x;\n\t    });\n\t  }\n\t\n\t  var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\t\n\t  var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\t\n\t  var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\t\n\t  var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\t\n\t  var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0));\n\t\n\t  var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\t\n\t  var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\t\n\t  var rainbow = d3Color.cubehelix();\n\t\n\t  function rainbow$1(t) {\n\t    if (t < 0 || t > 1) t -= Math.floor(t);\n\t    var ts = Math.abs(t - 0.5);\n\t    rainbow.h = 360 * t - 100;\n\t    rainbow.s = 1.5 - 1.5 * ts;\n\t    rainbow.l = 0.8 - 0.9 * ts;\n\t    return rainbow + \"\";\n\t  }\n\t\n\t  function ramp(range) {\n\t    var n = range.length;\n\t    return function(t) {\n\t      return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n\t    };\n\t  }\n\t\n\t  var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\t\n\t  var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\t\n\t  var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\t\n\t  var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\t\n\t  function sequential(interpolator) {\n\t    var x0 = 0,\n\t        x1 = 1,\n\t        clamp = false;\n\t\n\t    function scale(x) {\n\t      var t = (x - x0) / (x1 - x0);\n\t      return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n\t    };\n\t\n\t    scale.clamp = function(_) {\n\t      return arguments.length ? (clamp = !!_, scale) : clamp;\n\t    };\n\t\n\t    scale.interpolator = function(_) {\n\t      return arguments.length ? (interpolator = _, scale) : interpolator;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  exports.scaleBand = band;\n\t  exports.scalePoint = point;\n\t  exports.scaleIdentity = identity;\n\t  exports.scaleLinear = linear;\n\t  exports.scaleLog = log;\n\t  exports.scaleOrdinal = ordinal;\n\t  exports.scaleImplicit = implicit;\n\t  exports.scalePow = pow;\n\t  exports.scaleSqrt = sqrt;\n\t  exports.scaleQuantile = quantile$1;\n\t  exports.scaleQuantize = quantize;\n\t  exports.scaleThreshold = threshold;\n\t  exports.scaleTime = time;\n\t  exports.scaleUtc = utcTime;\n\t  exports.schemeCategory10 = category10;\n\t  exports.schemeCategory20b = category20b;\n\t  exports.schemeCategory20c = category20c;\n\t  exports.schemeCategory20 = category20;\n\t  exports.interpolateCubehelixDefault = cubehelix$1;\n\t  exports.interpolateRainbow = rainbow$1;\n\t  exports.interpolateWarm = warm;\n\t  exports.interpolateCool = cool;\n\t  exports.interpolateViridis = viridis;\n\t  exports.interpolateMagma = magma;\n\t  exports.interpolateInferno = inferno;\n\t  exports.interpolatePlasma = plasma;\n\t  exports.scaleSequential = sequential;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 149 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-array/ Version 1.0.1. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  function ascending(a, b) {\n\t    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n\t  }\n\t\n\t  function bisector(compare) {\n\t    if (compare.length === 1) compare = ascendingComparator(compare);\n\t    return {\n\t      left: function(a, x, lo, hi) {\n\t        if (lo == null) lo = 0;\n\t        if (hi == null) hi = a.length;\n\t        while (lo < hi) {\n\t          var mid = lo + hi >>> 1;\n\t          if (compare(a[mid], x) < 0) lo = mid + 1;\n\t          else hi = mid;\n\t        }\n\t        return lo;\n\t      },\n\t      right: function(a, x, lo, hi) {\n\t        if (lo == null) lo = 0;\n\t        if (hi == null) hi = a.length;\n\t        while (lo < hi) {\n\t          var mid = lo + hi >>> 1;\n\t          if (compare(a[mid], x) > 0) hi = mid;\n\t          else lo = mid + 1;\n\t        }\n\t        return lo;\n\t      }\n\t    };\n\t  }\n\t\n\t  function ascendingComparator(f) {\n\t    return function(d, x) {\n\t      return ascending(f(d), x);\n\t    };\n\t  }\n\t\n\t  var ascendingBisect = bisector(ascending);\n\t  var bisectRight = ascendingBisect.right;\n\t  var bisectLeft = ascendingBisect.left;\n\t\n\t  function descending(a, b) {\n\t    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n\t  }\n\t\n\t  function number(x) {\n\t    return x === null ? NaN : +x;\n\t  }\n\t\n\t  function variance(array, f) {\n\t    var n = array.length,\n\t        m = 0,\n\t        a,\n\t        d,\n\t        s = 0,\n\t        i = -1,\n\t        j = 0;\n\t\n\t    if (f == null) {\n\t      while (++i < n) {\n\t        if (!isNaN(a = number(array[i]))) {\n\t          d = a - m;\n\t          m += d / ++j;\n\t          s += d * (a - m);\n\t        }\n\t      }\n\t    }\n\t\n\t    else {\n\t      while (++i < n) {\n\t        if (!isNaN(a = number(f(array[i], i, array)))) {\n\t          d = a - m;\n\t          m += d / ++j;\n\t          s += d * (a - m);\n\t        }\n\t      }\n\t    }\n\t\n\t    if (j > 1) return s / (j - 1);\n\t  }\n\t\n\t  function deviation(array, f) {\n\t    var v = variance(array, f);\n\t    return v ? Math.sqrt(v) : v;\n\t  }\n\t\n\t  function extent(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b,\n\t        c;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null) {\n\t        if (a > b) a = b;\n\t        if (c < b) c = b;\n\t      }\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n\t        if (a > b) a = b;\n\t        if (c < b) c = b;\n\t      }\n\t    }\n\t\n\t    return [a, c];\n\t  }\n\t\n\t  var array = Array.prototype;\n\t\n\t  var slice = array.slice;\n\t  var map = array.map;\n\t\n\t  function constant(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function identity(x) {\n\t    return x;\n\t  }\n\t\n\t  function range(start, stop, step) {\n\t    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\t\n\t    var i = -1,\n\t        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n\t        range = new Array(n);\n\t\n\t    while (++i < n) {\n\t      range[i] = start + i * step;\n\t    }\n\t\n\t    return range;\n\t  }\n\t\n\t  var e10 = Math.sqrt(50);\n\t  var e5 = Math.sqrt(10);\n\t  var e2 = Math.sqrt(2);\n\t  function ticks(start, stop, count) {\n\t    var step = tickStep(start, stop, count);\n\t    return range(\n\t      Math.ceil(start / step) * step,\n\t      Math.floor(stop / step) * step + step / 2, // inclusive\n\t      step\n\t    );\n\t  }\n\t\n\t  function tickStep(start, stop, count) {\n\t    var step0 = Math.abs(stop - start) / Math.max(0, count),\n\t        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n\t        error = step0 / step1;\n\t    if (error >= e10) step1 *= 10;\n\t    else if (error >= e5) step1 *= 5;\n\t    else if (error >= e2) step1 *= 2;\n\t    return stop < start ? -step1 : step1;\n\t  }\n\t\n\t  function sturges(values) {\n\t    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n\t  }\n\t\n\t  function histogram() {\n\t    var value = identity,\n\t        domain = extent,\n\t        threshold = sturges;\n\t\n\t    function histogram(data) {\n\t      var i,\n\t          n = data.length,\n\t          x,\n\t          values = new Array(n);\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        values[i] = value(data[i], i, data);\n\t      }\n\t\n\t      var xz = domain(values),\n\t          x0 = xz[0],\n\t          x1 = xz[1],\n\t          tz = threshold(values, x0, x1);\n\t\n\t      // Convert number of thresholds into uniform thresholds.\n\t      if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\t\n\t      // Remove any thresholds outside the domain.\n\t      var m = tz.length;\n\t      while (tz[0] <= x0) tz.shift(), --m;\n\t      while (tz[m - 1] >= x1) tz.pop(), --m;\n\t\n\t      var bins = new Array(m + 1),\n\t          bin;\n\t\n\t      // Initialize bins.\n\t      for (i = 0; i <= m; ++i) {\n\t        bin = bins[i] = [];\n\t        bin.x0 = i > 0 ? tz[i - 1] : x0;\n\t        bin.x1 = i < m ? tz[i] : x1;\n\t      }\n\t\n\t      // Assign data to bins by value, ignoring any outside the domain.\n\t      for (i = 0; i < n; ++i) {\n\t        x = values[i];\n\t        if (x0 <= x && x <= x1) {\n\t          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n\t        }\n\t      }\n\t\n\t      return bins;\n\t    }\n\t\n\t    histogram.value = function(_) {\n\t      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n\t    };\n\t\n\t    histogram.domain = function(_) {\n\t      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n\t    };\n\t\n\t    histogram.thresholds = function(_) {\n\t      return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n\t    };\n\t\n\t    return histogram;\n\t  }\n\t\n\t  function quantile(array, p, f) {\n\t    if (f == null) f = number;\n\t    if (!(n = array.length)) return;\n\t    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n\t    if (p >= 1) return +f(array[n - 1], n - 1, array);\n\t    var n,\n\t        h = (n - 1) * p,\n\t        i = Math.floor(h),\n\t        a = +f(array[i], i, array),\n\t        b = +f(array[i + 1], i + 1, array);\n\t    return a + (b - a) * (h - i);\n\t  }\n\t\n\t  function freedmanDiaconis(values, min, max) {\n\t    values = map.call(values, number).sort(ascending);\n\t    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n\t  }\n\t\n\t  function scott(values, min, max) {\n\t    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n\t  }\n\t\n\t  function max(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n\t    }\n\t\n\t    return a;\n\t  }\n\t\n\t  function mean(array, f) {\n\t    var s = 0,\n\t        n = array.length,\n\t        a,\n\t        i = -1,\n\t        j = n;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;\n\t    }\n\t\n\t    if (j) return s / j;\n\t  }\n\t\n\t  function median(array, f) {\n\t    var numbers = [],\n\t        n = array.length,\n\t        a,\n\t        i = -1;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n\t    }\n\t\n\t    return quantile(numbers.sort(ascending), 0.5);\n\t  }\n\t\n\t  function merge(arrays) {\n\t    var n = arrays.length,\n\t        m,\n\t        i = -1,\n\t        j = 0,\n\t        merged,\n\t        array;\n\t\n\t    while (++i < n) j += arrays[i].length;\n\t    merged = new Array(j);\n\t\n\t    while (--n >= 0) {\n\t      array = arrays[n];\n\t      m = array.length;\n\t      while (--m >= 0) {\n\t        merged[--j] = array[m];\n\t      }\n\t    }\n\t\n\t    return merged;\n\t  }\n\t\n\t  function min(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n\t    }\n\t\n\t    return a;\n\t  }\n\t\n\t  function pairs(array) {\n\t    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n\t    while (i < n) pairs[i] = [p, p = array[++i]];\n\t    return pairs;\n\t  }\n\t\n\t  function permute(array, indexes) {\n\t    var i = indexes.length, permutes = new Array(i);\n\t    while (i--) permutes[i] = array[indexes[i]];\n\t    return permutes;\n\t  }\n\t\n\t  function scan(array, compare) {\n\t    if (!(n = array.length)) return;\n\t    var i = 0,\n\t        n,\n\t        j = 0,\n\t        xi,\n\t        xj = array[j];\n\t\n\t    if (!compare) compare = ascending;\n\t\n\t    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\t\n\t    if (compare(xj, xj) === 0) return j;\n\t  }\n\t\n\t  function shuffle(array, i0, i1) {\n\t    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n\t        t,\n\t        i;\n\t\n\t    while (m) {\n\t      i = Math.random() * m-- | 0;\n\t      t = array[m + i0];\n\t      array[m + i0] = array[i + i0];\n\t      array[i + i0] = t;\n\t    }\n\t\n\t    return array;\n\t  }\n\t\n\t  function sum(array, f) {\n\t    var s = 0,\n\t        n = array.length,\n\t        a,\n\t        i = -1;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n\t    }\n\t\n\t    return s;\n\t  }\n\t\n\t  function transpose(matrix) {\n\t    if (!(n = matrix.length)) return [];\n\t    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n\t      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n\t        row[j] = matrix[j][i];\n\t      }\n\t    }\n\t    return transpose;\n\t  }\n\t\n\t  function length(d) {\n\t    return d.length;\n\t  }\n\t\n\t  function zip() {\n\t    return transpose(arguments);\n\t  }\n\t\n\t  exports.bisect = bisectRight;\n\t  exports.bisectRight = bisectRight;\n\t  exports.bisectLeft = bisectLeft;\n\t  exports.ascending = ascending;\n\t  exports.bisector = bisector;\n\t  exports.descending = descending;\n\t  exports.deviation = deviation;\n\t  exports.extent = extent;\n\t  exports.histogram = histogram;\n\t  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n\t  exports.thresholdScott = scott;\n\t  exports.thresholdSturges = sturges;\n\t  exports.max = max;\n\t  exports.mean = mean;\n\t  exports.median = median;\n\t  exports.merge = merge;\n\t  exports.min = min;\n\t  exports.pairs = pairs;\n\t  exports.permute = permute;\n\t  exports.quantile = quantile;\n\t  exports.range = range;\n\t  exports.scan = scan;\n\t  exports.shuffle = shuffle;\n\t  exports.sum = sum;\n\t  exports.ticks = ticks;\n\t  exports.tickStep = tickStep;\n\t  exports.transpose = transpose;\n\t  exports.variance = variance;\n\t  exports.zip = zip;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 150 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-collection/ Version 1.0.1. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  var prefix = \"$\";\n\t\n\t  function Map() {}\n\t\n\t  Map.prototype = map.prototype = {\n\t    constructor: Map,\n\t    has: function(key) {\n\t      return (prefix + key) in this;\n\t    },\n\t    get: function(key) {\n\t      return this[prefix + key];\n\t    },\n\t    set: function(key, value) {\n\t      this[prefix + key] = value;\n\t      return this;\n\t    },\n\t    remove: function(key) {\n\t      var property = prefix + key;\n\t      return property in this && delete this[property];\n\t    },\n\t    clear: function() {\n\t      for (var property in this) if (property[0] === prefix) delete this[property];\n\t    },\n\t    keys: function() {\n\t      var keys = [];\n\t      for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n\t      return keys;\n\t    },\n\t    values: function() {\n\t      var values = [];\n\t      for (var property in this) if (property[0] === prefix) values.push(this[property]);\n\t      return values;\n\t    },\n\t    entries: function() {\n\t      var entries = [];\n\t      for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n\t      return entries;\n\t    },\n\t    size: function() {\n\t      var size = 0;\n\t      for (var property in this) if (property[0] === prefix) ++size;\n\t      return size;\n\t    },\n\t    empty: function() {\n\t      for (var property in this) if (property[0] === prefix) return false;\n\t      return true;\n\t    },\n\t    each: function(f) {\n\t      for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n\t    }\n\t  };\n\t\n\t  function map(object, f) {\n\t    var map = new Map;\n\t\n\t    // Copy constructor.\n\t    if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\t\n\t    // Index array by numeric index or specified key function.\n\t    else if (Array.isArray(object)) {\n\t      var i = -1,\n\t          n = object.length,\n\t          o;\n\t\n\t      if (f == null) while (++i < n) map.set(i, object[i]);\n\t      else while (++i < n) map.set(f(o = object[i], i, object), o);\n\t    }\n\t\n\t    // Convert object to map.\n\t    else if (object) for (var key in object) map.set(key, object[key]);\n\t\n\t    return map;\n\t  }\n\t\n\t  function nest() {\n\t    var keys = [],\n\t        sortKeys = [],\n\t        sortValues,\n\t        rollup,\n\t        nest;\n\t\n\t    function apply(array, depth, createResult, setResult) {\n\t      if (depth >= keys.length) return rollup != null\n\t          ? rollup(array) : (sortValues != null\n\t          ? array.sort(sortValues)\n\t          : array);\n\t\n\t      var i = -1,\n\t          n = array.length,\n\t          key = keys[depth++],\n\t          keyValue,\n\t          value,\n\t          valuesByKey = map(),\n\t          values,\n\t          result = createResult();\n\t\n\t      while (++i < n) {\n\t        if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n\t          values.push(value);\n\t        } else {\n\t          valuesByKey.set(keyValue, [value]);\n\t        }\n\t      }\n\t\n\t      valuesByKey.each(function(values, key) {\n\t        setResult(result, key, apply(values, depth, createResult, setResult));\n\t      });\n\t\n\t      return result;\n\t    }\n\t\n\t    function entries(map, depth) {\n\t      if (++depth > keys.length) return map;\n\t      var array, sortKey = sortKeys[depth - 1];\n\t      if (rollup != null && depth >= keys.length) array = map.entries();\n\t      else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n\t      return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n\t    }\n\t\n\t    return nest = {\n\t      object: function(array) { return apply(array, 0, createObject, setObject); },\n\t      map: function(array) { return apply(array, 0, createMap, setMap); },\n\t      entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n\t      key: function(d) { keys.push(d); return nest; },\n\t      sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n\t      sortValues: function(order) { sortValues = order; return nest; },\n\t      rollup: function(f) { rollup = f; return nest; }\n\t    };\n\t  }\n\t\n\t  function createObject() {\n\t    return {};\n\t  }\n\t\n\t  function setObject(object, key, value) {\n\t    object[key] = value;\n\t  }\n\t\n\t  function createMap() {\n\t    return map();\n\t  }\n\t\n\t  function setMap(map, key, value) {\n\t    map.set(key, value);\n\t  }\n\t\n\t  function Set() {}\n\t\n\t  var proto = map.prototype;\n\t\n\t  Set.prototype = set.prototype = {\n\t    constructor: Set,\n\t    has: proto.has,\n\t    add: function(value) {\n\t      value += \"\";\n\t      this[prefix + value] = value;\n\t      return this;\n\t    },\n\t    remove: proto.remove,\n\t    clear: proto.clear,\n\t    values: proto.keys,\n\t    size: proto.size,\n\t    empty: proto.empty,\n\t    each: proto.each\n\t  };\n\t\n\t  function set(object, f) {\n\t    var set = new Set;\n\t\n\t    // Copy constructor.\n\t    if (object instanceof Set) object.each(function(value) { set.add(value); });\n\t\n\t    // Otherwise, assume it’s an array.\n\t    else if (object) {\n\t      var i = -1, n = object.length;\n\t      if (f == null) while (++i < n) set.add(object[i]);\n\t      else while (++i < n) set.add(f(object[i], i, object));\n\t    }\n\t\n\t    return set;\n\t  }\n\t\n\t  function keys(map) {\n\t    var keys = [];\n\t    for (var key in map) keys.push(key);\n\t    return keys;\n\t  }\n\t\n\t  function values(map) {\n\t    var values = [];\n\t    for (var key in map) values.push(map[key]);\n\t    return values;\n\t  }\n\t\n\t  function entries(map) {\n\t    var entries = [];\n\t    for (var key in map) entries.push({key: key, value: map[key]});\n\t    return entries;\n\t  }\n\t\n\t  exports.nest = nest;\n\t  exports.set = set;\n\t  exports.map = map;\n\t  exports.keys = keys;\n\t  exports.values = values;\n\t  exports.entries = entries;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 151 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-interpolate/ Version 1.1.1. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports, __webpack_require__(152)) :\n\t  typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) :\n\t  (factory((global.d3 = global.d3 || {}),global.d3));\n\t}(this, function (exports,d3Color) { 'use strict';\n\t\n\t  function basis(t1, v0, v1, v2, v3) {\n\t    var t2 = t1 * t1, t3 = t2 * t1;\n\t    return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n\t        + (4 - 6 * t2 + 3 * t3) * v1\n\t        + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n\t        + t3 * v3) / 6;\n\t  }\n\t\n\t  function basis$1(values) {\n\t    var n = values.length - 1;\n\t    return function(t) {\n\t      var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n\t          v1 = values[i],\n\t          v2 = values[i + 1],\n\t          v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n\t          v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n\t      return basis((t - i / n) * n, v0, v1, v2, v3);\n\t    };\n\t  }\n\t\n\t  function basisClosed(values) {\n\t    var n = values.length;\n\t    return function(t) {\n\t      var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n\t          v0 = values[(i + n - 1) % n],\n\t          v1 = values[i % n],\n\t          v2 = values[(i + 1) % n],\n\t          v3 = values[(i + 2) % n];\n\t      return basis((t - i / n) * n, v0, v1, v2, v3);\n\t    };\n\t  }\n\t\n\t  function constant(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function linear(a, d) {\n\t    return function(t) {\n\t      return a + t * d;\n\t    };\n\t  }\n\t\n\t  function exponential(a, b, y) {\n\t    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n\t      return Math.pow(a + t * b, y);\n\t    };\n\t  }\n\t\n\t  function hue(a, b) {\n\t    var d = b - a;\n\t    return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n\t  }\n\t\n\t  function gamma(y) {\n\t    return (y = +y) === 1 ? nogamma : function(a, b) {\n\t      return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n\t    };\n\t  }\n\t\n\t  function nogamma(a, b) {\n\t    var d = b - a;\n\t    return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n\t  }\n\t\n\t  var rgb$1 = (function rgbGamma(y) {\n\t    var color = gamma(y);\n\t\n\t    function rgb(start, end) {\n\t      var r = color((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),\n\t          g = color(start.g, end.g),\n\t          b = color(start.b, end.b),\n\t          opacity = color(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.r = r(t);\n\t        start.g = g(t);\n\t        start.b = b(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t\n\t    rgb.gamma = rgbGamma;\n\t\n\t    return rgb;\n\t  })(1);\n\t\n\t  function rgbSpline(spline) {\n\t    return function(colors) {\n\t      var n = colors.length,\n\t          r = new Array(n),\n\t          g = new Array(n),\n\t          b = new Array(n),\n\t          i, color;\n\t      for (i = 0; i < n; ++i) {\n\t        color = d3Color.rgb(colors[i]);\n\t        r[i] = color.r || 0;\n\t        g[i] = color.g || 0;\n\t        b[i] = color.b || 0;\n\t      }\n\t      r = spline(r);\n\t      g = spline(g);\n\t      b = spline(b);\n\t      color.opacity = 1;\n\t      return function(t) {\n\t        color.r = r(t);\n\t        color.g = g(t);\n\t        color.b = b(t);\n\t        return color + \"\";\n\t      };\n\t    };\n\t  }\n\t\n\t  var rgbBasis = rgbSpline(basis$1);\n\t  var rgbBasisClosed = rgbSpline(basisClosed);\n\t\n\t  function array(a, b) {\n\t    var nb = b ? b.length : 0,\n\t        na = a ? Math.min(nb, a.length) : 0,\n\t        x = new Array(nb),\n\t        c = new Array(nb),\n\t        i;\n\t\n\t    for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n\t    for (; i < nb; ++i) c[i] = b[i];\n\t\n\t    return function(t) {\n\t      for (i = 0; i < na; ++i) c[i] = x[i](t);\n\t      return c;\n\t    };\n\t  }\n\t\n\t  function date(a, b) {\n\t    var d = new Date;\n\t    return a = +a, b -= a, function(t) {\n\t      return d.setTime(a + b * t), d;\n\t    };\n\t  }\n\t\n\t  function number(a, b) {\n\t    return a = +a, b -= a, function(t) {\n\t      return a + b * t;\n\t    };\n\t  }\n\t\n\t  function object(a, b) {\n\t    var i = {},\n\t        c = {},\n\t        k;\n\t\n\t    if (a === null || typeof a !== \"object\") a = {};\n\t    if (b === null || typeof b !== \"object\") b = {};\n\t\n\t    for (k in b) {\n\t      if (k in a) {\n\t        i[k] = value(a[k], b[k]);\n\t      } else {\n\t        c[k] = b[k];\n\t      }\n\t    }\n\t\n\t    return function(t) {\n\t      for (k in i) c[k] = i[k](t);\n\t      return c;\n\t    };\n\t  }\n\t\n\t  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\n\t  var reB = new RegExp(reA.source, \"g\");\n\t  function zero(b) {\n\t    return function() {\n\t      return b;\n\t    };\n\t  }\n\t\n\t  function one(b) {\n\t    return function(t) {\n\t      return b(t) + \"\";\n\t    };\n\t  }\n\t\n\t  function string(a, b) {\n\t    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n\t        am, // current match in a\n\t        bm, // current match in b\n\t        bs, // string preceding current number in b, if any\n\t        i = -1, // index in s\n\t        s = [], // string constants and placeholders\n\t        q = []; // number interpolators\n\t\n\t    // Coerce inputs to strings.\n\t    a = a + \"\", b = b + \"\";\n\t\n\t    // Interpolate pairs of numbers in a & b.\n\t    while ((am = reA.exec(a))\n\t        && (bm = reB.exec(b))) {\n\t      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n\t        bs = b.slice(bi, bs);\n\t        if (s[i]) s[i] += bs; // coalesce with previous string\n\t        else s[++i] = bs;\n\t      }\n\t      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n\t        if (s[i]) s[i] += bm; // coalesce with previous string\n\t        else s[++i] = bm;\n\t      } else { // interpolate non-matching numbers\n\t        s[++i] = null;\n\t        q.push({i: i, x: number(am, bm)});\n\t      }\n\t      bi = reB.lastIndex;\n\t    }\n\t\n\t    // Add remains of b.\n\t    if (bi < b.length) {\n\t      bs = b.slice(bi);\n\t      if (s[i]) s[i] += bs; // coalesce with previous string\n\t      else s[++i] = bs;\n\t    }\n\t\n\t    // Special optimization for only a single match.\n\t    // Otherwise, interpolate each of the numbers and rejoin the string.\n\t    return s.length < 2 ? (q[0]\n\t        ? one(q[0].x)\n\t        : zero(b))\n\t        : (b = q.length, function(t) {\n\t            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n\t            return s.join(\"\");\n\t          });\n\t  }\n\t\n\t  function value(a, b) {\n\t    var t = typeof b, c;\n\t    return b == null || t === \"boolean\" ? constant(b)\n\t        : (t === \"number\" ? number\n\t        : t === \"string\" ? ((c = d3Color.color(b)) ? (b = c, rgb$1) : string)\n\t        : b instanceof d3Color.color ? rgb$1\n\t        : b instanceof Date ? date\n\t        : Array.isArray(b) ? array\n\t        : isNaN(b) ? object\n\t        : number)(a, b);\n\t  }\n\t\n\t  function round(a, b) {\n\t    return a = +a, b -= a, function(t) {\n\t      return Math.round(a + b * t);\n\t    };\n\t  }\n\t\n\t  var degrees = 180 / Math.PI;\n\t\n\t  var identity = {\n\t    translateX: 0,\n\t    translateY: 0,\n\t    rotate: 0,\n\t    skewX: 0,\n\t    scaleX: 1,\n\t    scaleY: 1\n\t  };\n\t\n\t  function decompose(a, b, c, d, e, f) {\n\t    var scaleX, scaleY, skewX;\n\t    if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n\t    if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n\t    if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n\t    if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n\t    return {\n\t      translateX: e,\n\t      translateY: f,\n\t      rotate: Math.atan2(b, a) * degrees,\n\t      skewX: Math.atan(skewX) * degrees,\n\t      scaleX: scaleX,\n\t      scaleY: scaleY\n\t    };\n\t  }\n\t\n\t  var cssNode;\n\t  var cssRoot;\n\t  var cssView;\n\t  var svgNode;\n\t  function parseCss(value) {\n\t    if (value === \"none\") return identity;\n\t    if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n\t    cssNode.style.transform = value;\n\t    value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n\t    cssRoot.removeChild(cssNode);\n\t    value = value.slice(7, -1).split(\",\");\n\t    return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n\t  }\n\t\n\t  function parseSvg(value) {\n\t    if (value == null) return identity;\n\t    if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t    svgNode.setAttribute(\"transform\", value);\n\t    if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n\t    value = value.matrix;\n\t    return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n\t  }\n\t\n\t  function interpolateTransform(parse, pxComma, pxParen, degParen) {\n\t\n\t    function pop(s) {\n\t      return s.length ? s.pop() + \" \" : \"\";\n\t    }\n\t\n\t    function translate(xa, ya, xb, yb, s, q) {\n\t      if (xa !== xb || ya !== yb) {\n\t        var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n\t        q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n\t      } else if (xb || yb) {\n\t        s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n\t      }\n\t    }\n\t\n\t    function rotate(a, b, s, q) {\n\t      if (a !== b) {\n\t        if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n\t        q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n\t      } else if (b) {\n\t        s.push(pop(s) + \"rotate(\" + b + degParen);\n\t      }\n\t    }\n\t\n\t    function skewX(a, b, s, q) {\n\t      if (a !== b) {\n\t        q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n\t      } else if (b) {\n\t        s.push(pop(s) + \"skewX(\" + b + degParen);\n\t      }\n\t    }\n\t\n\t    function scale(xa, ya, xb, yb, s, q) {\n\t      if (xa !== xb || ya !== yb) {\n\t        var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n\t        q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n\t      } else if (xb !== 1 || yb !== 1) {\n\t        s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n\t      }\n\t    }\n\t\n\t    return function(a, b) {\n\t      var s = [], // string constants and placeholders\n\t          q = []; // number interpolators\n\t      a = parse(a), b = parse(b);\n\t      translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n\t      rotate(a.rotate, b.rotate, s, q);\n\t      skewX(a.skewX, b.skewX, s, q);\n\t      scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n\t      a = b = null; // gc\n\t      return function(t) {\n\t        var i = -1, n = q.length, o;\n\t        while (++i < n) s[(o = q[i]).i] = o.x(t);\n\t        return s.join(\"\");\n\t      };\n\t    };\n\t  }\n\t\n\t  var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\n\t  var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\t\n\t  var rho = Math.SQRT2;\n\t  var rho2 = 2;\n\t  var rho4 = 4;\n\t  var epsilon2 = 1e-12;\n\t  function cosh(x) {\n\t    return ((x = Math.exp(x)) + 1 / x) / 2;\n\t  }\n\t\n\t  function sinh(x) {\n\t    return ((x = Math.exp(x)) - 1 / x) / 2;\n\t  }\n\t\n\t  function tanh(x) {\n\t    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n\t  }\n\t\n\t  // p0 = [ux0, uy0, w0]\n\t  // p1 = [ux1, uy1, w1]\n\t  function zoom(p0, p1) {\n\t    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n\t        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n\t        dx = ux1 - ux0,\n\t        dy = uy1 - uy0,\n\t        d2 = dx * dx + dy * dy,\n\t        i,\n\t        S;\n\t\n\t    // Special case for u0 ≅ u1.\n\t    if (d2 < epsilon2) {\n\t      S = Math.log(w1 / w0) / rho;\n\t      i = function(t) {\n\t        return [\n\t          ux0 + t * dx,\n\t          uy0 + t * dy,\n\t          w0 * Math.exp(rho * t * S)\n\t        ];\n\t      }\n\t    }\n\t\n\t    // General case.\n\t    else {\n\t      var d1 = Math.sqrt(d2),\n\t          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n\t          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n\t          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n\t          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n\t      S = (r1 - r0) / rho;\n\t      i = function(t) {\n\t        var s = t * S,\n\t            coshr0 = cosh(r0),\n\t            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n\t        return [\n\t          ux0 + u * dx,\n\t          uy0 + u * dy,\n\t          w0 * coshr0 / cosh(rho * s + r0)\n\t        ];\n\t      }\n\t    }\n\t\n\t    i.duration = S * 1000;\n\t\n\t    return i;\n\t  }\n\t\n\t  function hsl$1(hue) {\n\t    return function(start, end) {\n\t      var h = hue((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),\n\t          s = nogamma(start.s, end.s),\n\t          l = nogamma(start.l, end.l),\n\t          opacity = nogamma(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.h = h(t);\n\t        start.s = s(t);\n\t        start.l = l(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t  }\n\t\n\t  var hsl$2 = hsl$1(hue);\n\t  var hslLong = hsl$1(nogamma);\n\t\n\t  function lab$1(start, end) {\n\t    var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),\n\t        a = nogamma(start.a, end.a),\n\t        b = nogamma(start.b, end.b),\n\t        opacity = nogamma(start.opacity, end.opacity);\n\t    return function(t) {\n\t      start.l = l(t);\n\t      start.a = a(t);\n\t      start.b = b(t);\n\t      start.opacity = opacity(t);\n\t      return start + \"\";\n\t    };\n\t  }\n\t\n\t  function hcl$1(hue) {\n\t    return function(start, end) {\n\t      var h = hue((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),\n\t          c = nogamma(start.c, end.c),\n\t          l = nogamma(start.l, end.l),\n\t          opacity = nogamma(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.h = h(t);\n\t        start.c = c(t);\n\t        start.l = l(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t  }\n\t\n\t  var hcl$2 = hcl$1(hue);\n\t  var hclLong = hcl$1(nogamma);\n\t\n\t  function cubehelix$1(hue) {\n\t    return (function cubehelixGamma(y) {\n\t      y = +y;\n\t\n\t      function cubehelix(start, end) {\n\t        var h = hue((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),\n\t            s = nogamma(start.s, end.s),\n\t            l = nogamma(start.l, end.l),\n\t            opacity = nogamma(start.opacity, end.opacity);\n\t        return function(t) {\n\t          start.h = h(t);\n\t          start.s = s(t);\n\t          start.l = l(Math.pow(t, y));\n\t          start.opacity = opacity(t);\n\t          return start + \"\";\n\t        };\n\t      }\n\t\n\t      cubehelix.gamma = cubehelixGamma;\n\t\n\t      return cubehelix;\n\t    })(1);\n\t  }\n\t\n\t  var cubehelix$2 = cubehelix$1(hue);\n\t  var cubehelixLong = cubehelix$1(nogamma);\n\t\n\t  function quantize(interpolator, n) {\n\t    var samples = new Array(n);\n\t    for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n\t    return samples;\n\t  }\n\t\n\t  exports.interpolate = value;\n\t  exports.interpolateArray = array;\n\t  exports.interpolateBasis = basis$1;\n\t  exports.interpolateBasisClosed = basisClosed;\n\t  exports.interpolateDate = date;\n\t  exports.interpolateNumber = number;\n\t  exports.interpolateObject = object;\n\t  exports.interpolateRound = round;\n\t  exports.interpolateString = string;\n\t  exports.interpolateTransformCss = interpolateTransformCss;\n\t  exports.interpolateTransformSvg = interpolateTransformSvg;\n\t  exports.interpolateZoom = zoom;\n\t  exports.interpolateRgb = rgb$1;\n\t  exports.interpolateRgbBasis = rgbBasis;\n\t  exports.interpolateRgbBasisClosed = rgbBasisClosed;\n\t  exports.interpolateHsl = hsl$2;\n\t  exports.interpolateHslLong = hslLong;\n\t  exports.interpolateLab = lab$1;\n\t  exports.interpolateHcl = hcl$2;\n\t  exports.interpolateHclLong = hclLong;\n\t  exports.interpolateCubehelix = cubehelix$2;\n\t  exports.interpolateCubehelixLong = cubehelixLong;\n\t  exports.quantize = quantize;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 152 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-color/ Version 1.0.1. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  function define(constructor, factory, prototype) {\n\t    constructor.prototype = factory.prototype = prototype;\n\t    prototype.constructor = constructor;\n\t  }\n\t\n\t  function extend(parent, definition) {\n\t    var prototype = Object.create(parent.prototype);\n\t    for (var key in definition) prototype[key] = definition[key];\n\t    return prototype;\n\t  }\n\t\n\t  function Color() {}\n\t\n\t  var darker = 0.7;\n\t  var brighter = 1 / darker;\n\t\n\t  var reHex3 = /^#([0-9a-f]{3})$/;\n\t  var reHex6 = /^#([0-9a-f]{6})$/;\n\t  var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n\t  var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n\t  var reRgbaInteger = /^rgba\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var reRgbaPercent = /^rgba\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n\t  var reHslaPercent = /^hsla\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var named = {\n\t    aliceblue: 0xf0f8ff,\n\t    antiquewhite: 0xfaebd7,\n\t    aqua: 0x00ffff,\n\t    aquamarine: 0x7fffd4,\n\t    azure: 0xf0ffff,\n\t    beige: 0xf5f5dc,\n\t    bisque: 0xffe4c4,\n\t    black: 0x000000,\n\t    blanchedalmond: 0xffebcd,\n\t    blue: 0x0000ff,\n\t    blueviolet: 0x8a2be2,\n\t    brown: 0xa52a2a,\n\t    burlywood: 0xdeb887,\n\t    cadetblue: 0x5f9ea0,\n\t    chartreuse: 0x7fff00,\n\t    chocolate: 0xd2691e,\n\t    coral: 0xff7f50,\n\t    cornflowerblue: 0x6495ed,\n\t    cornsilk: 0xfff8dc,\n\t    crimson: 0xdc143c,\n\t    cyan: 0x00ffff,\n\t    darkblue: 0x00008b,\n\t    darkcyan: 0x008b8b,\n\t    darkgoldenrod: 0xb8860b,\n\t    darkgray: 0xa9a9a9,\n\t    darkgreen: 0x006400,\n\t    darkgrey: 0xa9a9a9,\n\t    darkkhaki: 0xbdb76b,\n\t    darkmagenta: 0x8b008b,\n\t    darkolivegreen: 0x556b2f,\n\t    darkorange: 0xff8c00,\n\t    darkorchid: 0x9932cc,\n\t    darkred: 0x8b0000,\n\t    darksalmon: 0xe9967a,\n\t    darkseagreen: 0x8fbc8f,\n\t    darkslateblue: 0x483d8b,\n\t    darkslategray: 0x2f4f4f,\n\t    darkslategrey: 0x2f4f4f,\n\t    darkturquoise: 0x00ced1,\n\t    darkviolet: 0x9400d3,\n\t    deeppink: 0xff1493,\n\t    deepskyblue: 0x00bfff,\n\t    dimgray: 0x696969,\n\t    dimgrey: 0x696969,\n\t    dodgerblue: 0x1e90ff,\n\t    firebrick: 0xb22222,\n\t    floralwhite: 0xfffaf0,\n\t    forestgreen: 0x228b22,\n\t    fuchsia: 0xff00ff,\n\t    gainsboro: 0xdcdcdc,\n\t    ghostwhite: 0xf8f8ff,\n\t    gold: 0xffd700,\n\t    goldenrod: 0xdaa520,\n\t    gray: 0x808080,\n\t    green: 0x008000,\n\t    greenyellow: 0xadff2f,\n\t    grey: 0x808080,\n\t    honeydew: 0xf0fff0,\n\t    hotpink: 0xff69b4,\n\t    indianred: 0xcd5c5c,\n\t    indigo: 0x4b0082,\n\t    ivory: 0xfffff0,\n\t    khaki: 0xf0e68c,\n\t    lavender: 0xe6e6fa,\n\t    lavenderblush: 0xfff0f5,\n\t    lawngreen: 0x7cfc00,\n\t    lemonchiffon: 0xfffacd,\n\t    lightblue: 0xadd8e6,\n\t    lightcoral: 0xf08080,\n\t    lightcyan: 0xe0ffff,\n\t    lightgoldenrodyellow: 0xfafad2,\n\t    lightgray: 0xd3d3d3,\n\t    lightgreen: 0x90ee90,\n\t    lightgrey: 0xd3d3d3,\n\t    lightpink: 0xffb6c1,\n\t    lightsalmon: 0xffa07a,\n\t    lightseagreen: 0x20b2aa,\n\t    lightskyblue: 0x87cefa,\n\t    lightslategray: 0x778899,\n\t    lightslategrey: 0x778899,\n\t    lightsteelblue: 0xb0c4de,\n\t    lightyellow: 0xffffe0,\n\t    lime: 0x00ff00,\n\t    limegreen: 0x32cd32,\n\t    linen: 0xfaf0e6,\n\t    magenta: 0xff00ff,\n\t    maroon: 0x800000,\n\t    mediumaquamarine: 0x66cdaa,\n\t    mediumblue: 0x0000cd,\n\t    mediumorchid: 0xba55d3,\n\t    mediumpurple: 0x9370db,\n\t    mediumseagreen: 0x3cb371,\n\t    mediumslateblue: 0x7b68ee,\n\t    mediumspringgreen: 0x00fa9a,\n\t    mediumturquoise: 0x48d1cc,\n\t    mediumvioletred: 0xc71585,\n\t    midnightblue: 0x191970,\n\t    mintcream: 0xf5fffa,\n\t    mistyrose: 0xffe4e1,\n\t    moccasin: 0xffe4b5,\n\t    navajowhite: 0xffdead,\n\t    navy: 0x000080,\n\t    oldlace: 0xfdf5e6,\n\t    olive: 0x808000,\n\t    olivedrab: 0x6b8e23,\n\t    orange: 0xffa500,\n\t    orangered: 0xff4500,\n\t    orchid: 0xda70d6,\n\t    palegoldenrod: 0xeee8aa,\n\t    palegreen: 0x98fb98,\n\t    paleturquoise: 0xafeeee,\n\t    palevioletred: 0xdb7093,\n\t    papayawhip: 0xffefd5,\n\t    peachpuff: 0xffdab9,\n\t    peru: 0xcd853f,\n\t    pink: 0xffc0cb,\n\t    plum: 0xdda0dd,\n\t    powderblue: 0xb0e0e6,\n\t    purple: 0x800080,\n\t    rebeccapurple: 0x663399,\n\t    red: 0xff0000,\n\t    rosybrown: 0xbc8f8f,\n\t    royalblue: 0x4169e1,\n\t    saddlebrown: 0x8b4513,\n\t    salmon: 0xfa8072,\n\t    sandybrown: 0xf4a460,\n\t    seagreen: 0x2e8b57,\n\t    seashell: 0xfff5ee,\n\t    sienna: 0xa0522d,\n\t    silver: 0xc0c0c0,\n\t    skyblue: 0x87ceeb,\n\t    slateblue: 0x6a5acd,\n\t    slategray: 0x708090,\n\t    slategrey: 0x708090,\n\t    snow: 0xfffafa,\n\t    springgreen: 0x00ff7f,\n\t    steelblue: 0x4682b4,\n\t    tan: 0xd2b48c,\n\t    teal: 0x008080,\n\t    thistle: 0xd8bfd8,\n\t    tomato: 0xff6347,\n\t    turquoise: 0x40e0d0,\n\t    violet: 0xee82ee,\n\t    wheat: 0xf5deb3,\n\t    white: 0xffffff,\n\t    whitesmoke: 0xf5f5f5,\n\t    yellow: 0xffff00,\n\t    yellowgreen: 0x9acd32\n\t  };\n\t\n\t  define(Color, color, {\n\t    displayable: function() {\n\t      return this.rgb().displayable();\n\t    },\n\t    toString: function() {\n\t      return this.rgb() + \"\";\n\t    }\n\t  });\n\t\n\t  function color(format) {\n\t    var m;\n\t    format = (format + \"\").trim().toLowerCase();\n\t    return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n\t        : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n\t        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n\t        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n\t        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n\t        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n\t        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n\t        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n\t        : named.hasOwnProperty(format) ? rgbn(named[format])\n\t        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n\t        : null;\n\t  }\n\t\n\t  function rgbn(n) {\n\t    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n\t  }\n\t\n\t  function rgba(r, g, b, a) {\n\t    if (a <= 0) r = g = b = NaN;\n\t    return new Rgb(r, g, b, a);\n\t  }\n\t\n\t  function rgbConvert(o) {\n\t    if (!(o instanceof Color)) o = color(o);\n\t    if (!o) return new Rgb;\n\t    o = o.rgb();\n\t    return new Rgb(o.r, o.g, o.b, o.opacity);\n\t  }\n\t\n\t  function rgb(r, g, b, opacity) {\n\t    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Rgb(r, g, b, opacity) {\n\t    this.r = +r;\n\t    this.g = +g;\n\t    this.b = +b;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Rgb, rgb, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      return this;\n\t    },\n\t    displayable: function() {\n\t      return (0 <= this.r && this.r <= 255)\n\t          && (0 <= this.g && this.g <= 255)\n\t          && (0 <= this.b && this.b <= 255)\n\t          && (0 <= this.opacity && this.opacity <= 1);\n\t    },\n\t    toString: function() {\n\t      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n\t      return (a === 1 ? \"rgb(\" : \"rgba(\")\n\t          + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n\t          + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n\t          + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n\t          + (a === 1 ? \")\" : \", \" + a + \")\");\n\t    }\n\t  }));\n\t\n\t  function hsla(h, s, l, a) {\n\t    if (a <= 0) h = s = l = NaN;\n\t    else if (l <= 0 || l >= 1) h = s = NaN;\n\t    else if (s <= 0) h = NaN;\n\t    return new Hsl(h, s, l, a);\n\t  }\n\t\n\t  function hslConvert(o) {\n\t    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n\t    if (!(o instanceof Color)) o = color(o);\n\t    if (!o) return new Hsl;\n\t    if (o instanceof Hsl) return o;\n\t    o = o.rgb();\n\t    var r = o.r / 255,\n\t        g = o.g / 255,\n\t        b = o.b / 255,\n\t        min = Math.min(r, g, b),\n\t        max = Math.max(r, g, b),\n\t        h = NaN,\n\t        s = max - min,\n\t        l = (max + min) / 2;\n\t    if (s) {\n\t      if (r === max) h = (g - b) / s + (g < b) * 6;\n\t      else if (g === max) h = (b - r) / s + 2;\n\t      else h = (r - g) / s + 4;\n\t      s /= l < 0.5 ? max + min : 2 - max - min;\n\t      h *= 60;\n\t    } else {\n\t      s = l > 0 && l < 1 ? 0 : h;\n\t    }\n\t    return new Hsl(h, s, l, o.opacity);\n\t  }\n\t\n\t  function hsl(h, s, l, opacity) {\n\t    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Hsl(h, s, l, opacity) {\n\t    this.h = +h;\n\t    this.s = +s;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Hsl, hsl, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var h = this.h % 360 + (this.h < 0) * 360,\n\t          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n\t          l = this.l,\n\t          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n\t          m1 = 2 * l - m2;\n\t      return new Rgb(\n\t        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n\t        hsl2rgb(h, m1, m2),\n\t        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n\t        this.opacity\n\t      );\n\t    },\n\t    displayable: function() {\n\t      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n\t          && (0 <= this.l && this.l <= 1)\n\t          && (0 <= this.opacity && this.opacity <= 1);\n\t    }\n\t  }));\n\t\n\t  /* From FvD 13.37, CSS Color Module Level 3 */\n\t  function hsl2rgb(h, m1, m2) {\n\t    return (h < 60 ? m1 + (m2 - m1) * h / 60\n\t        : h < 180 ? m2\n\t        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n\t        : m1) * 255;\n\t  }\n\t\n\t  var deg2rad = Math.PI / 180;\n\t  var rad2deg = 180 / Math.PI;\n\t\n\t  var Kn = 18;\n\t  var Xn = 0.950470;\n\t  var Yn = 1;\n\t  var Zn = 1.088830;\n\t  var t0 = 4 / 29;\n\t  var t1 = 6 / 29;\n\t  var t2 = 3 * t1 * t1;\n\t  var t3 = t1 * t1 * t1;\n\t  function labConvert(o) {\n\t    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n\t    if (o instanceof Hcl) {\n\t      var h = o.h * deg2rad;\n\t      return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n\t    }\n\t    if (!(o instanceof Rgb)) o = rgbConvert(o);\n\t    var b = rgb2xyz(o.r),\n\t        a = rgb2xyz(o.g),\n\t        l = rgb2xyz(o.b),\n\t        x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n\t        y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n\t        z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\t    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n\t  }\n\t\n\t  function lab(l, a, b, opacity) {\n\t    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Lab(l, a, b, opacity) {\n\t    this.l = +l;\n\t    this.a = +a;\n\t    this.b = +b;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Lab, lab, extend(Color, {\n\t    brighter: function(k) {\n\t      return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var y = (this.l + 16) / 116,\n\t          x = isNaN(this.a) ? y : y + this.a / 500,\n\t          z = isNaN(this.b) ? y : y - this.b / 200;\n\t      y = Yn * lab2xyz(y);\n\t      x = Xn * lab2xyz(x);\n\t      z = Zn * lab2xyz(z);\n\t      return new Rgb(\n\t        xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n\t        xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n\t        xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n\t        this.opacity\n\t      );\n\t    }\n\t  }));\n\t\n\t  function xyz2lab(t) {\n\t    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n\t  }\n\t\n\t  function lab2xyz(t) {\n\t    return t > t1 ? t * t * t : t2 * (t - t0);\n\t  }\n\t\n\t  function xyz2rgb(x) {\n\t    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n\t  }\n\t\n\t  function rgb2xyz(x) {\n\t    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n\t  }\n\t\n\t  function hclConvert(o) {\n\t    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n\t    if (!(o instanceof Lab)) o = labConvert(o);\n\t    var h = Math.atan2(o.b, o.a) * rad2deg;\n\t    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n\t  }\n\t\n\t  function hcl(h, c, l, opacity) {\n\t    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Hcl(h, c, l, opacity) {\n\t    this.h = +h;\n\t    this.c = +c;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Hcl, hcl, extend(Color, {\n\t    brighter: function(k) {\n\t      return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n\t    },\n\t    rgb: function() {\n\t      return labConvert(this).rgb();\n\t    }\n\t  }));\n\t\n\t  var A = -0.14861;\n\t  var B = +1.78277;\n\t  var C = -0.29227;\n\t  var D = -0.90649;\n\t  var E = +1.97294;\n\t  var ED = E * D;\n\t  var EB = E * B;\n\t  var BC_DA = B * C - D * A;\n\t  function cubehelixConvert(o) {\n\t    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n\t    if (!(o instanceof Rgb)) o = rgbConvert(o);\n\t    var r = o.r / 255,\n\t        g = o.g / 255,\n\t        b = o.b / 255,\n\t        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n\t        bl = b - l,\n\t        k = (E * (g - l) - C * bl) / D,\n\t        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n\t        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n\t    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n\t  }\n\t\n\t  function cubehelix(h, s, l, opacity) {\n\t    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Cubehelix(h, s, l, opacity) {\n\t    this.h = +h;\n\t    this.s = +s;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Cubehelix, cubehelix, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n\t          l = +this.l,\n\t          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n\t          cosh = Math.cos(h),\n\t          sinh = Math.sin(h);\n\t      return new Rgb(\n\t        255 * (l + a * (A * cosh + B * sinh)),\n\t        255 * (l + a * (C * cosh + D * sinh)),\n\t        255 * (l + a * (E * cosh)),\n\t        this.opacity\n\t      );\n\t    }\n\t  }));\n\t\n\t  exports.color = color;\n\t  exports.rgb = rgb;\n\t  exports.hsl = hsl;\n\t  exports.lab = lab;\n\t  exports.hcl = hcl;\n\t  exports.cubehelix = cubehelix;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 153 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-format/ Version 1.0.2. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  // Computes the decimal coefficient and exponent of the specified number x with\n\t  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n\t  // For example, formatDecimal(1.23) returns [\"123\", 0].\n\t  function formatDecimal(x, p) {\n\t    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n\t    var i, coefficient = x.slice(0, i);\n\t\n\t    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n\t    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n\t    return [\n\t      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n\t      +x.slice(i + 1)\n\t    ];\n\t  }\n\t\n\t  function exponent(x) {\n\t    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n\t  }\n\t\n\t  function formatGroup(grouping, thousands) {\n\t    return function(value, width) {\n\t      var i = value.length,\n\t          t = [],\n\t          j = 0,\n\t          g = grouping[0],\n\t          length = 0;\n\t\n\t      while (i > 0 && g > 0) {\n\t        if (length + g + 1 > width) g = Math.max(1, width - length);\n\t        t.push(value.substring(i -= g, i + g));\n\t        if ((length += g + 1) > width) break;\n\t        g = grouping[j = (j + 1) % grouping.length];\n\t      }\n\t\n\t      return t.reverse().join(thousands);\n\t    };\n\t  }\n\t\n\t  function formatDefault(x, p) {\n\t    x = x.toPrecision(p);\n\t\n\t    out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n\t      switch (x[i]) {\n\t        case \".\": i0 = i1 = i; break;\n\t        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n\t        case \"e\": break out;\n\t        default: if (i0 > 0) i0 = 0; break;\n\t      }\n\t    }\n\t\n\t    return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n\t  }\n\t\n\t  var prefixExponent;\n\t\n\t  function formatPrefixAuto(x, p) {\n\t    var d = formatDecimal(x, p);\n\t    if (!d) return x + \"\";\n\t    var coefficient = d[0],\n\t        exponent = d[1],\n\t        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n\t        n = coefficient.length;\n\t    return i === n ? coefficient\n\t        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n\t        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n\t        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n\t  }\n\t\n\t  function formatRounded(x, p) {\n\t    var d = formatDecimal(x, p);\n\t    if (!d) return x + \"\";\n\t    var coefficient = d[0],\n\t        exponent = d[1];\n\t    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n\t        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n\t        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n\t  }\n\t\n\t  var formatTypes = {\n\t    \"\": formatDefault,\n\t    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n\t    \"b\": function(x) { return Math.round(x).toString(2); },\n\t    \"c\": function(x) { return x + \"\"; },\n\t    \"d\": function(x) { return Math.round(x).toString(10); },\n\t    \"e\": function(x, p) { return x.toExponential(p); },\n\t    \"f\": function(x, p) { return x.toFixed(p); },\n\t    \"g\": function(x, p) { return x.toPrecision(p); },\n\t    \"o\": function(x) { return Math.round(x).toString(8); },\n\t    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n\t    \"r\": formatRounded,\n\t    \"s\": formatPrefixAuto,\n\t    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n\t    \"x\": function(x) { return Math.round(x).toString(16); }\n\t  };\n\t\n\t  // [[fill]align][sign][symbol][0][width][,][.precision][type]\n\t  var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\t\n\t  function formatSpecifier(specifier) {\n\t    return new FormatSpecifier(specifier);\n\t  }\n\t\n\t  function FormatSpecifier(specifier) {\n\t    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\t\n\t    var match,\n\t        fill = match[1] || \" \",\n\t        align = match[2] || \">\",\n\t        sign = match[3] || \"-\",\n\t        symbol = match[4] || \"\",\n\t        zero = !!match[5],\n\t        width = match[6] && +match[6],\n\t        comma = !!match[7],\n\t        precision = match[8] && +match[8].slice(1),\n\t        type = match[9] || \"\";\n\t\n\t    // The \"n\" type is an alias for \",g\".\n\t    if (type === \"n\") comma = true, type = \"g\";\n\t\n\t    // Map invalid types to the default format.\n\t    else if (!formatTypes[type]) type = \"\";\n\t\n\t    // If zero fill is specified, padding goes after sign and before digits.\n\t    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\t\n\t    this.fill = fill;\n\t    this.align = align;\n\t    this.sign = sign;\n\t    this.symbol = symbol;\n\t    this.zero = zero;\n\t    this.width = width;\n\t    this.comma = comma;\n\t    this.precision = precision;\n\t    this.type = type;\n\t  }\n\t\n\t  FormatSpecifier.prototype.toString = function() {\n\t    return this.fill\n\t        + this.align\n\t        + this.sign\n\t        + this.symbol\n\t        + (this.zero ? \"0\" : \"\")\n\t        + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n\t        + (this.comma ? \",\" : \"\")\n\t        + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n\t        + this.type;\n\t  };\n\t\n\t  var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\t\n\t  function identity(x) {\n\t    return x;\n\t  }\n\t\n\t  function formatLocale(locale) {\n\t    var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n\t        currency = locale.currency,\n\t        decimal = locale.decimal;\n\t\n\t    function newFormat(specifier) {\n\t      specifier = formatSpecifier(specifier);\n\t\n\t      var fill = specifier.fill,\n\t          align = specifier.align,\n\t          sign = specifier.sign,\n\t          symbol = specifier.symbol,\n\t          zero = specifier.zero,\n\t          width = specifier.width,\n\t          comma = specifier.comma,\n\t          precision = specifier.precision,\n\t          type = specifier.type;\n\t\n\t      // Compute the prefix and suffix.\n\t      // For SI-prefix, the suffix is lazily computed.\n\t      var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n\t          suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\t\n\t      // What format function should we use?\n\t      // Is this an integer type?\n\t      // Can this type generate exponential notation?\n\t      var formatType = formatTypes[type],\n\t          maybeSuffix = !type || /[defgprs%]/.test(type);\n\t\n\t      // Set the default precision if not specified,\n\t      // or clamp the specified precision to the supported range.\n\t      // For significant precision, it must be in [1, 21].\n\t      // For fixed precision, it must be in [0, 20].\n\t      precision = precision == null ? (type ? 6 : 12)\n\t          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n\t          : Math.max(0, Math.min(20, precision));\n\t\n\t      function format(value) {\n\t        var valuePrefix = prefix,\n\t            valueSuffix = suffix,\n\t            i, n, c;\n\t\n\t        if (type === \"c\") {\n\t          valueSuffix = formatType(value) + valueSuffix;\n\t          value = \"\";\n\t        } else {\n\t          value = +value;\n\t\n\t          // Convert negative to positive, and compute the prefix.\n\t          // Note that -0 is not less than 0, but 1 / -0 is!\n\t          var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\t\n\t          // Perform the initial formatting.\n\t          value = formatType(value, precision);\n\t\n\t          // If the original value was negative, it may be rounded to zero during\n\t          // formatting; treat this as (positive) zero.\n\t          if (valueNegative) {\n\t            i = -1, n = value.length;\n\t            valueNegative = false;\n\t            while (++i < n) {\n\t              if (c = value.charCodeAt(i), (48 < c && c < 58)\n\t                  || (type === \"x\" && 96 < c && c < 103)\n\t                  || (type === \"X\" && 64 < c && c < 71)) {\n\t                valueNegative = true;\n\t                break;\n\t              }\n\t            }\n\t          }\n\t\n\t          // Compute the prefix and suffix.\n\t          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\t          valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\t\n\t          // Break the formatted value into the integer “value” part that can be\n\t          // grouped, and fractional or exponential “suffix” part that is not.\n\t          if (maybeSuffix) {\n\t            i = -1, n = value.length;\n\t            while (++i < n) {\n\t              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n\t                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n\t                value = value.slice(0, i);\n\t                break;\n\t              }\n\t            }\n\t          }\n\t        }\n\t\n\t        // If the fill character is not \"0\", grouping is applied before padding.\n\t        if (comma && !zero) value = group(value, Infinity);\n\t\n\t        // Compute the padding.\n\t        var length = valuePrefix.length + value.length + valueSuffix.length,\n\t            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\t\n\t        // If the fill character is \"0\", grouping is applied after padding.\n\t        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\t\n\t        // Reconstruct the final output based on the desired alignment.\n\t        switch (align) {\n\t          case \"<\": return valuePrefix + value + valueSuffix + padding;\n\t          case \"=\": return valuePrefix + padding + value + valueSuffix;\n\t          case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n\t        }\n\t        return padding + valuePrefix + value + valueSuffix;\n\t      }\n\t\n\t      format.toString = function() {\n\t        return specifier + \"\";\n\t      };\n\t\n\t      return format;\n\t    }\n\t\n\t    function formatPrefix(specifier, value) {\n\t      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n\t          e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n\t          k = Math.pow(10, -e),\n\t          prefix = prefixes[8 + e / 3];\n\t      return function(value) {\n\t        return f(k * value) + prefix;\n\t      };\n\t    }\n\t\n\t    return {\n\t      format: newFormat,\n\t      formatPrefix: formatPrefix\n\t    };\n\t  }\n\t\n\t  var locale;\n\t  defaultLocale({\n\t    decimal: \".\",\n\t    thousands: \",\",\n\t    grouping: [3],\n\t    currency: [\"$\", \"\"]\n\t  });\n\t\n\t  function defaultLocale(definition) {\n\t    locale = formatLocale(definition);\n\t    exports.format = locale.format;\n\t    exports.formatPrefix = locale.formatPrefix;\n\t    return locale;\n\t  }\n\t\n\t  function precisionFixed(step) {\n\t    return Math.max(0, -exponent(Math.abs(step)));\n\t  }\n\t\n\t  function precisionPrefix(step, value) {\n\t    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n\t  }\n\t\n\t  function precisionRound(step, max) {\n\t    step = Math.abs(step), max = Math.abs(max) - step;\n\t    return Math.max(0, exponent(max) - exponent(step)) + 1;\n\t  }\n\t\n\t  exports.formatDefaultLocale = defaultLocale;\n\t  exports.formatLocale = formatLocale;\n\t  exports.formatSpecifier = formatSpecifier;\n\t  exports.precisionFixed = precisionFixed;\n\t  exports.precisionPrefix = precisionPrefix;\n\t  exports.precisionRound = precisionRound;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 154 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-time/ Version 1.0.2. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  var t0 = new Date;\n\t  var t1 = new Date;\n\t  function newInterval(floori, offseti, count, field) {\n\t\n\t    function interval(date) {\n\t      return floori(date = new Date(+date)), date;\n\t    }\n\t\n\t    interval.floor = interval;\n\t\n\t    interval.ceil = function(date) {\n\t      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n\t    };\n\t\n\t    interval.round = function(date) {\n\t      var d0 = interval(date),\n\t          d1 = interval.ceil(date);\n\t      return date - d0 < d1 - date ? d0 : d1;\n\t    };\n\t\n\t    interval.offset = function(date, step) {\n\t      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n\t    };\n\t\n\t    interval.range = function(start, stop, step) {\n\t      var range = [];\n\t      start = interval.ceil(start);\n\t      step = step == null ? 1 : Math.floor(step);\n\t      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n\t      do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)\n\t      return range;\n\t    };\n\t\n\t    interval.filter = function(test) {\n\t      return newInterval(function(date) {\n\t        while (floori(date), !test(date)) date.setTime(date - 1);\n\t      }, function(date, step) {\n\t        while (--step >= 0) while (offseti(date, 1), !test(date));\n\t      });\n\t    };\n\t\n\t    if (count) {\n\t      interval.count = function(start, end) {\n\t        t0.setTime(+start), t1.setTime(+end);\n\t        floori(t0), floori(t1);\n\t        return Math.floor(count(t0, t1));\n\t      };\n\t\n\t      interval.every = function(step) {\n\t        step = Math.floor(step);\n\t        return !isFinite(step) || !(step > 0) ? null\n\t            : !(step > 1) ? interval\n\t            : interval.filter(field\n\t                ? function(d) { return field(d) % step === 0; }\n\t                : function(d) { return interval.count(0, d) % step === 0; });\n\t      };\n\t    }\n\t\n\t    return interval;\n\t  }\n\t\n\t  var millisecond = newInterval(function() {\n\t    // noop\n\t  }, function(date, step) {\n\t    date.setTime(+date + step);\n\t  }, function(start, end) {\n\t    return end - start;\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  millisecond.every = function(k) {\n\t    k = Math.floor(k);\n\t    if (!isFinite(k) || !(k > 0)) return null;\n\t    if (!(k > 1)) return millisecond;\n\t    return newInterval(function(date) {\n\t      date.setTime(Math.floor(date / k) * k);\n\t    }, function(date, step) {\n\t      date.setTime(+date + step * k);\n\t    }, function(start, end) {\n\t      return (end - start) / k;\n\t    });\n\t  };\n\t\n\t  var milliseconds = millisecond.range;\n\t\n\t  var durationSecond = 1e3;\n\t  var durationMinute = 6e4;\n\t  var durationHour = 36e5;\n\t  var durationDay = 864e5;\n\t  var durationWeek = 6048e5;\n\t\n\t  var second = newInterval(function(date) {\n\t    date.setTime(Math.floor(date / durationSecond) * durationSecond);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationSecond);\n\t  }, function(start, end) {\n\t    return (end - start) / durationSecond;\n\t  }, function(date) {\n\t    return date.getUTCSeconds();\n\t  });\n\t\n\t  var seconds = second.range;\n\t\n\t  var minute = newInterval(function(date) {\n\t    date.setTime(Math.floor(date / durationMinute) * durationMinute);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationMinute);\n\t  }, function(start, end) {\n\t    return (end - start) / durationMinute;\n\t  }, function(date) {\n\t    return date.getMinutes();\n\t  });\n\t\n\t  var minutes = minute.range;\n\t\n\t  var hour = newInterval(function(date) {\n\t    var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n\t    if (offset < 0) offset += durationHour;\n\t    date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationHour);\n\t  }, function(start, end) {\n\t    return (end - start) / durationHour;\n\t  }, function(date) {\n\t    return date.getHours();\n\t  });\n\t\n\t  var hours = hour.range;\n\t\n\t  var day = newInterval(function(date) {\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setDate(date.getDate() + step);\n\t  }, function(start, end) {\n\t    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n\t  }, function(date) {\n\t    return date.getDate() - 1;\n\t  });\n\t\n\t  var days = day.range;\n\t\n\t  function weekday(i) {\n\t    return newInterval(function(date) {\n\t      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n\t      date.setHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setDate(date.getDate() + step * 7);\n\t    }, function(start, end) {\n\t      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n\t    });\n\t  }\n\t\n\t  var sunday = weekday(0);\n\t  var monday = weekday(1);\n\t  var tuesday = weekday(2);\n\t  var wednesday = weekday(3);\n\t  var thursday = weekday(4);\n\t  var friday = weekday(5);\n\t  var saturday = weekday(6);\n\t\n\t  var sundays = sunday.range;\n\t  var mondays = monday.range;\n\t  var tuesdays = tuesday.range;\n\t  var wednesdays = wednesday.range;\n\t  var thursdays = thursday.range;\n\t  var fridays = friday.range;\n\t  var saturdays = saturday.range;\n\t\n\t  var month = newInterval(function(date) {\n\t    date.setDate(1);\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setMonth(date.getMonth() + step);\n\t  }, function(start, end) {\n\t    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n\t  }, function(date) {\n\t    return date.getMonth();\n\t  });\n\t\n\t  var months = month.range;\n\t\n\t  var year = newInterval(function(date) {\n\t    date.setMonth(0, 1);\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setFullYear(date.getFullYear() + step);\n\t  }, function(start, end) {\n\t    return end.getFullYear() - start.getFullYear();\n\t  }, function(date) {\n\t    return date.getFullYear();\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  year.every = function(k) {\n\t    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n\t      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n\t      date.setMonth(0, 1);\n\t      date.setHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setFullYear(date.getFullYear() + step * k);\n\t    });\n\t  };\n\t\n\t  var years = year.range;\n\t\n\t  var utcMinute = newInterval(function(date) {\n\t    date.setUTCSeconds(0, 0);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationMinute);\n\t  }, function(start, end) {\n\t    return (end - start) / durationMinute;\n\t  }, function(date) {\n\t    return date.getUTCMinutes();\n\t  });\n\t\n\t  var utcMinutes = utcMinute.range;\n\t\n\t  var utcHour = newInterval(function(date) {\n\t    date.setUTCMinutes(0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationHour);\n\t  }, function(start, end) {\n\t    return (end - start) / durationHour;\n\t  }, function(date) {\n\t    return date.getUTCHours();\n\t  });\n\t\n\t  var utcHours = utcHour.range;\n\t\n\t  var utcDay = newInterval(function(date) {\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCDate(date.getUTCDate() + step);\n\t  }, function(start, end) {\n\t    return (end - start) / durationDay;\n\t  }, function(date) {\n\t    return date.getUTCDate() - 1;\n\t  });\n\t\n\t  var utcDays = utcDay.range;\n\t\n\t  function utcWeekday(i) {\n\t    return newInterval(function(date) {\n\t      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n\t      date.setUTCHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setUTCDate(date.getUTCDate() + step * 7);\n\t    }, function(start, end) {\n\t      return (end - start) / durationWeek;\n\t    });\n\t  }\n\t\n\t  var utcSunday = utcWeekday(0);\n\t  var utcMonday = utcWeekday(1);\n\t  var utcTuesday = utcWeekday(2);\n\t  var utcWednesday = utcWeekday(3);\n\t  var utcThursday = utcWeekday(4);\n\t  var utcFriday = utcWeekday(5);\n\t  var utcSaturday = utcWeekday(6);\n\t\n\t  var utcSundays = utcSunday.range;\n\t  var utcMondays = utcMonday.range;\n\t  var utcTuesdays = utcTuesday.range;\n\t  var utcWednesdays = utcWednesday.range;\n\t  var utcThursdays = utcThursday.range;\n\t  var utcFridays = utcFriday.range;\n\t  var utcSaturdays = utcSaturday.range;\n\t\n\t  var utcMonth = newInterval(function(date) {\n\t    date.setUTCDate(1);\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCMonth(date.getUTCMonth() + step);\n\t  }, function(start, end) {\n\t    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n\t  }, function(date) {\n\t    return date.getUTCMonth();\n\t  });\n\t\n\t  var utcMonths = utcMonth.range;\n\t\n\t  var utcYear = newInterval(function(date) {\n\t    date.setUTCMonth(0, 1);\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCFullYear(date.getUTCFullYear() + step);\n\t  }, function(start, end) {\n\t    return end.getUTCFullYear() - start.getUTCFullYear();\n\t  }, function(date) {\n\t    return date.getUTCFullYear();\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  utcYear.every = function(k) {\n\t    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n\t      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n\t      date.setUTCMonth(0, 1);\n\t      date.setUTCHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n\t    });\n\t  };\n\t\n\t  var utcYears = utcYear.range;\n\t\n\t  exports.timeInterval = newInterval;\n\t  exports.timeMillisecond = millisecond;\n\t  exports.timeMilliseconds = milliseconds;\n\t  exports.utcMillisecond = millisecond;\n\t  exports.utcMilliseconds = milliseconds;\n\t  exports.timeSecond = second;\n\t  exports.timeSeconds = seconds;\n\t  exports.utcSecond = second;\n\t  exports.utcSeconds = seconds;\n\t  exports.timeMinute = minute;\n\t  exports.timeMinutes = minutes;\n\t  exports.timeHour = hour;\n\t  exports.timeHours = hours;\n\t  exports.timeDay = day;\n\t  exports.timeDays = days;\n\t  exports.timeWeek = sunday;\n\t  exports.timeWeeks = sundays;\n\t  exports.timeSunday = sunday;\n\t  exports.timeSundays = sundays;\n\t  exports.timeMonday = monday;\n\t  exports.timeMondays = mondays;\n\t  exports.timeTuesday = tuesday;\n\t  exports.timeTuesdays = tuesdays;\n\t  exports.timeWednesday = wednesday;\n\t  exports.timeWednesdays = wednesdays;\n\t  exports.timeThursday = thursday;\n\t  exports.timeThursdays = thursdays;\n\t  exports.timeFriday = friday;\n\t  exports.timeFridays = fridays;\n\t  exports.timeSaturday = saturday;\n\t  exports.timeSaturdays = saturdays;\n\t  exports.timeMonth = month;\n\t  exports.timeMonths = months;\n\t  exports.timeYear = year;\n\t  exports.timeYears = years;\n\t  exports.utcMinute = utcMinute;\n\t  exports.utcMinutes = utcMinutes;\n\t  exports.utcHour = utcHour;\n\t  exports.utcHours = utcHours;\n\t  exports.utcDay = utcDay;\n\t  exports.utcDays = utcDays;\n\t  exports.utcWeek = utcSunday;\n\t  exports.utcWeeks = utcSundays;\n\t  exports.utcSunday = utcSunday;\n\t  exports.utcSundays = utcSundays;\n\t  exports.utcMonday = utcMonday;\n\t  exports.utcMondays = utcMondays;\n\t  exports.utcTuesday = utcTuesday;\n\t  exports.utcTuesdays = utcTuesdays;\n\t  exports.utcWednesday = utcWednesday;\n\t  exports.utcWednesdays = utcWednesdays;\n\t  exports.utcThursday = utcThursday;\n\t  exports.utcThursdays = utcThursdays;\n\t  exports.utcFriday = utcFriday;\n\t  exports.utcFridays = utcFridays;\n\t  exports.utcSaturday = utcSaturday;\n\t  exports.utcSaturdays = utcSaturdays;\n\t  exports.utcMonth = utcMonth;\n\t  exports.utcMonths = utcMonths;\n\t  exports.utcYear = utcYear;\n\t  exports.utcYears = utcYears;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 155 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org/d3-time-format/ Version 2.0.2. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports, __webpack_require__(154)) :\n\t  typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) :\n\t  (factory((global.d3 = global.d3 || {}),global.d3));\n\t}(this, function (exports,d3Time) { 'use strict';\n\t\n\t  function localDate(d) {\n\t    if (0 <= d.y && d.y < 100) {\n\t      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n\t      date.setFullYear(d.y);\n\t      return date;\n\t    }\n\t    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n\t  }\n\t\n\t  function utcDate(d) {\n\t    if (0 <= d.y && d.y < 100) {\n\t      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n\t      date.setUTCFullYear(d.y);\n\t      return date;\n\t    }\n\t    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n\t  }\n\t\n\t  function newYear(y) {\n\t    return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n\t  }\n\t\n\t  function formatLocale(locale) {\n\t    var locale_dateTime = locale.dateTime,\n\t        locale_date = locale.date,\n\t        locale_time = locale.time,\n\t        locale_periods = locale.periods,\n\t        locale_weekdays = locale.days,\n\t        locale_shortWeekdays = locale.shortDays,\n\t        locale_months = locale.months,\n\t        locale_shortMonths = locale.shortMonths;\n\t\n\t    var periodRe = formatRe(locale_periods),\n\t        periodLookup = formatLookup(locale_periods),\n\t        weekdayRe = formatRe(locale_weekdays),\n\t        weekdayLookup = formatLookup(locale_weekdays),\n\t        shortWeekdayRe = formatRe(locale_shortWeekdays),\n\t        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n\t        monthRe = formatRe(locale_months),\n\t        monthLookup = formatLookup(locale_months),\n\t        shortMonthRe = formatRe(locale_shortMonths),\n\t        shortMonthLookup = formatLookup(locale_shortMonths);\n\t\n\t    var formats = {\n\t      \"a\": formatShortWeekday,\n\t      \"A\": formatWeekday,\n\t      \"b\": formatShortMonth,\n\t      \"B\": formatMonth,\n\t      \"c\": null,\n\t      \"d\": formatDayOfMonth,\n\t      \"e\": formatDayOfMonth,\n\t      \"H\": formatHour24,\n\t      \"I\": formatHour12,\n\t      \"j\": formatDayOfYear,\n\t      \"L\": formatMilliseconds,\n\t      \"m\": formatMonthNumber,\n\t      \"M\": formatMinutes,\n\t      \"p\": formatPeriod,\n\t      \"S\": formatSeconds,\n\t      \"U\": formatWeekNumberSunday,\n\t      \"w\": formatWeekdayNumber,\n\t      \"W\": formatWeekNumberMonday,\n\t      \"x\": null,\n\t      \"X\": null,\n\t      \"y\": formatYear,\n\t      \"Y\": formatFullYear,\n\t      \"Z\": formatZone,\n\t      \"%\": formatLiteralPercent\n\t    };\n\t\n\t    var utcFormats = {\n\t      \"a\": formatUTCShortWeekday,\n\t      \"A\": formatUTCWeekday,\n\t      \"b\": formatUTCShortMonth,\n\t      \"B\": formatUTCMonth,\n\t      \"c\": null,\n\t      \"d\": formatUTCDayOfMonth,\n\t      \"e\": formatUTCDayOfMonth,\n\t      \"H\": formatUTCHour24,\n\t      \"I\": formatUTCHour12,\n\t      \"j\": formatUTCDayOfYear,\n\t      \"L\": formatUTCMilliseconds,\n\t      \"m\": formatUTCMonthNumber,\n\t      \"M\": formatUTCMinutes,\n\t      \"p\": formatUTCPeriod,\n\t      \"S\": formatUTCSeconds,\n\t      \"U\": formatUTCWeekNumberSunday,\n\t      \"w\": formatUTCWeekdayNumber,\n\t      \"W\": formatUTCWeekNumberMonday,\n\t      \"x\": null,\n\t      \"X\": null,\n\t      \"y\": formatUTCYear,\n\t      \"Y\": formatUTCFullYear,\n\t      \"Z\": formatUTCZone,\n\t      \"%\": formatLiteralPercent\n\t    };\n\t\n\t    var parses = {\n\t      \"a\": parseShortWeekday,\n\t      \"A\": parseWeekday,\n\t      \"b\": parseShortMonth,\n\t      \"B\": parseMonth,\n\t      \"c\": parseLocaleDateTime,\n\t      \"d\": parseDayOfMonth,\n\t      \"e\": parseDayOfMonth,\n\t      \"H\": parseHour24,\n\t      \"I\": parseHour24,\n\t      \"j\": parseDayOfYear,\n\t      \"L\": parseMilliseconds,\n\t      \"m\": parseMonthNumber,\n\t      \"M\": parseMinutes,\n\t      \"p\": parsePeriod,\n\t      \"S\": parseSeconds,\n\t      \"U\": parseWeekNumberSunday,\n\t      \"w\": parseWeekdayNumber,\n\t      \"W\": parseWeekNumberMonday,\n\t      \"x\": parseLocaleDate,\n\t      \"X\": parseLocaleTime,\n\t      \"y\": parseYear,\n\t      \"Y\": parseFullYear,\n\t      \"Z\": parseZone,\n\t      \"%\": parseLiteralPercent\n\t    };\n\t\n\t    // These recursive directive definitions must be deferred.\n\t    formats.x = newFormat(locale_date, formats);\n\t    formats.X = newFormat(locale_time, formats);\n\t    formats.c = newFormat(locale_dateTime, formats);\n\t    utcFormats.x = newFormat(locale_date, utcFormats);\n\t    utcFormats.X = newFormat(locale_time, utcFormats);\n\t    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\t\n\t    function newFormat(specifier, formats) {\n\t      return function(date) {\n\t        var string = [],\n\t            i = -1,\n\t            j = 0,\n\t            n = specifier.length,\n\t            c,\n\t            pad,\n\t            format;\n\t\n\t        if (!(date instanceof Date)) date = new Date(+date);\n\t\n\t        while (++i < n) {\n\t          if (specifier.charCodeAt(i) === 37) {\n\t            string.push(specifier.slice(j, i));\n\t            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n\t            else pad = c === \"e\" ? \" \" : \"0\";\n\t            if (format = formats[c]) c = format(date, pad);\n\t            string.push(c);\n\t            j = i + 1;\n\t          }\n\t        }\n\t\n\t        string.push(specifier.slice(j, i));\n\t        return string.join(\"\");\n\t      };\n\t    }\n\t\n\t    function newParse(specifier, newDate) {\n\t      return function(string) {\n\t        var d = newYear(1900),\n\t            i = parseSpecifier(d, specifier, string += \"\", 0);\n\t        if (i != string.length) return null;\n\t\n\t        // The am-pm flag is 0 for AM, and 1 for PM.\n\t        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\t\n\t        // Convert day-of-week and week-of-year to day-of-year.\n\t        if (\"W\" in d || \"U\" in d) {\n\t          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n\t          var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n\t          d.m = 0;\n\t          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n\t        }\n\t\n\t        // If a time zone is specified, all fields are interpreted as UTC and then\n\t        // offset according to the specified time zone.\n\t        if (\"Z\" in d) {\n\t          d.H += d.Z / 100 | 0;\n\t          d.M += d.Z % 100;\n\t          return utcDate(d);\n\t        }\n\t\n\t        // Otherwise, all fields are in local time.\n\t        return newDate(d);\n\t      };\n\t    }\n\t\n\t    function parseSpecifier(d, specifier, string, j) {\n\t      var i = 0,\n\t          n = specifier.length,\n\t          m = string.length,\n\t          c,\n\t          parse;\n\t\n\t      while (i < n) {\n\t        if (j >= m) return -1;\n\t        c = specifier.charCodeAt(i++);\n\t        if (c === 37) {\n\t          c = specifier.charAt(i++);\n\t          parse = parses[c in pads ? specifier.charAt(i++) : c];\n\t          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n\t        } else if (c != string.charCodeAt(j++)) {\n\t          return -1;\n\t        }\n\t      }\n\t\n\t      return j;\n\t    }\n\t\n\t    function parsePeriod(d, string, i) {\n\t      var n = periodRe.exec(string.slice(i));\n\t      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseShortWeekday(d, string, i) {\n\t      var n = shortWeekdayRe.exec(string.slice(i));\n\t      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseWeekday(d, string, i) {\n\t      var n = weekdayRe.exec(string.slice(i));\n\t      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseShortMonth(d, string, i) {\n\t      var n = shortMonthRe.exec(string.slice(i));\n\t      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseMonth(d, string, i) {\n\t      var n = monthRe.exec(string.slice(i));\n\t      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseLocaleDateTime(d, string, i) {\n\t      return parseSpecifier(d, locale_dateTime, string, i);\n\t    }\n\t\n\t    function parseLocaleDate(d, string, i) {\n\t      return parseSpecifier(d, locale_date, string, i);\n\t    }\n\t\n\t    function parseLocaleTime(d, string, i) {\n\t      return parseSpecifier(d, locale_time, string, i);\n\t    }\n\t\n\t    function formatShortWeekday(d) {\n\t      return locale_shortWeekdays[d.getDay()];\n\t    }\n\t\n\t    function formatWeekday(d) {\n\t      return locale_weekdays[d.getDay()];\n\t    }\n\t\n\t    function formatShortMonth(d) {\n\t      return locale_shortMonths[d.getMonth()];\n\t    }\n\t\n\t    function formatMonth(d) {\n\t      return locale_months[d.getMonth()];\n\t    }\n\t\n\t    function formatPeriod(d) {\n\t      return locale_periods[+(d.getHours() >= 12)];\n\t    }\n\t\n\t    function formatUTCShortWeekday(d) {\n\t      return locale_shortWeekdays[d.getUTCDay()];\n\t    }\n\t\n\t    function formatUTCWeekday(d) {\n\t      return locale_weekdays[d.getUTCDay()];\n\t    }\n\t\n\t    function formatUTCShortMonth(d) {\n\t      return locale_shortMonths[d.getUTCMonth()];\n\t    }\n\t\n\t    function formatUTCMonth(d) {\n\t      return locale_months[d.getUTCMonth()];\n\t    }\n\t\n\t    function formatUTCPeriod(d) {\n\t      return locale_periods[+(d.getUTCHours() >= 12)];\n\t    }\n\t\n\t    return {\n\t      format: function(specifier) {\n\t        var f = newFormat(specifier += \"\", formats);\n\t        f.toString = function() { return specifier; };\n\t        return f;\n\t      },\n\t      parse: function(specifier) {\n\t        var p = newParse(specifier += \"\", localDate);\n\t        p.toString = function() { return specifier; };\n\t        return p;\n\t      },\n\t      utcFormat: function(specifier) {\n\t        var f = newFormat(specifier += \"\", utcFormats);\n\t        f.toString = function() { return specifier; };\n\t        return f;\n\t      },\n\t      utcParse: function(specifier) {\n\t        var p = newParse(specifier, utcDate);\n\t        p.toString = function() { return specifier; };\n\t        return p;\n\t      }\n\t    };\n\t  }\n\t\n\t  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n\t  var numberRe = /^\\s*\\d+/;\n\t  var percentRe = /^%/;\n\t  var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\t  function pad(value, fill, width) {\n\t    var sign = value < 0 ? \"-\" : \"\",\n\t        string = (sign ? -value : value) + \"\",\n\t        length = string.length;\n\t    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n\t  }\n\t\n\t  function requote(s) {\n\t    return s.replace(requoteRe, \"\\\\$&\");\n\t  }\n\t\n\t  function formatRe(names) {\n\t    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n\t  }\n\t\n\t  function formatLookup(names) {\n\t    var map = {}, i = -1, n = names.length;\n\t    while (++i < n) map[names[i].toLowerCase()] = i;\n\t    return map;\n\t  }\n\t\n\t  function parseWeekdayNumber(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 1));\n\t    return n ? (d.w = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseWeekNumberSunday(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i));\n\t    return n ? (d.U = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseWeekNumberMonday(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i));\n\t    return n ? (d.W = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseFullYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 4));\n\t    return n ? (d.y = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseZone(d, string, i) {\n\t    var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n\t    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMonthNumber(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseDayOfMonth(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.d = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseDayOfYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 3));\n\t    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseHour24(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.H = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMinutes(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.M = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseSeconds(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.S = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMilliseconds(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 3));\n\t    return n ? (d.L = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseLiteralPercent(d, string, i) {\n\t    var n = percentRe.exec(string.slice(i, i + 1));\n\t    return n ? i + n[0].length : -1;\n\t  }\n\t\n\t  function formatDayOfMonth(d, p) {\n\t    return pad(d.getDate(), p, 2);\n\t  }\n\t\n\t  function formatHour24(d, p) {\n\t    return pad(d.getHours(), p, 2);\n\t  }\n\t\n\t  function formatHour12(d, p) {\n\t    return pad(d.getHours() % 12 || 12, p, 2);\n\t  }\n\t\n\t  function formatDayOfYear(d, p) {\n\t    return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);\n\t  }\n\t\n\t  function formatMilliseconds(d, p) {\n\t    return pad(d.getMilliseconds(), p, 3);\n\t  }\n\t\n\t  function formatMonthNumber(d, p) {\n\t    return pad(d.getMonth() + 1, p, 2);\n\t  }\n\t\n\t  function formatMinutes(d, p) {\n\t    return pad(d.getMinutes(), p, 2);\n\t  }\n\t\n\t  function formatSeconds(d, p) {\n\t    return pad(d.getSeconds(), p, 2);\n\t  }\n\t\n\t  function formatWeekNumberSunday(d, p) {\n\t    return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatWeekdayNumber(d) {\n\t    return d.getDay();\n\t  }\n\t\n\t  function formatWeekNumberMonday(d, p) {\n\t    return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatYear(d, p) {\n\t    return pad(d.getFullYear() % 100, p, 2);\n\t  }\n\t\n\t  function formatFullYear(d, p) {\n\t    return pad(d.getFullYear() % 10000, p, 4);\n\t  }\n\t\n\t  function formatZone(d) {\n\t    var z = d.getTimezoneOffset();\n\t    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n\t        + pad(z / 60 | 0, \"0\", 2)\n\t        + pad(z % 60, \"0\", 2);\n\t  }\n\t\n\t  function formatUTCDayOfMonth(d, p) {\n\t    return pad(d.getUTCDate(), p, 2);\n\t  }\n\t\n\t  function formatUTCHour24(d, p) {\n\t    return pad(d.getUTCHours(), p, 2);\n\t  }\n\t\n\t  function formatUTCHour12(d, p) {\n\t    return pad(d.getUTCHours() % 12 || 12, p, 2);\n\t  }\n\t\n\t  function formatUTCDayOfYear(d, p) {\n\t    return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);\n\t  }\n\t\n\t  function formatUTCMilliseconds(d, p) {\n\t    return pad(d.getUTCMilliseconds(), p, 3);\n\t  }\n\t\n\t  function formatUTCMonthNumber(d, p) {\n\t    return pad(d.getUTCMonth() + 1, p, 2);\n\t  }\n\t\n\t  function formatUTCMinutes(d, p) {\n\t    return pad(d.getUTCMinutes(), p, 2);\n\t  }\n\t\n\t  function formatUTCSeconds(d, p) {\n\t    return pad(d.getUTCSeconds(), p, 2);\n\t  }\n\t\n\t  function formatUTCWeekNumberSunday(d, p) {\n\t    return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatUTCWeekdayNumber(d) {\n\t    return d.getUTCDay();\n\t  }\n\t\n\t  function formatUTCWeekNumberMonday(d, p) {\n\t    return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatUTCYear(d, p) {\n\t    return pad(d.getUTCFullYear() % 100, p, 2);\n\t  }\n\t\n\t  function formatUTCFullYear(d, p) {\n\t    return pad(d.getUTCFullYear() % 10000, p, 4);\n\t  }\n\t\n\t  function formatUTCZone() {\n\t    return \"+0000\";\n\t  }\n\t\n\t  function formatLiteralPercent() {\n\t    return \"%\";\n\t  }\n\t\n\t  var locale;\n\t  defaultLocale({\n\t    dateTime: \"%x, %X\",\n\t    date: \"%-m/%-d/%Y\",\n\t    time: \"%-I:%M:%S %p\",\n\t    periods: [\"AM\", \"PM\"],\n\t    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\t  });\n\t\n\t  function defaultLocale(definition) {\n\t    locale = formatLocale(definition);\n\t    exports.timeFormat = locale.format;\n\t    exports.timeParse = locale.parse;\n\t    exports.utcFormat = locale.utcFormat;\n\t    exports.utcParse = locale.utcParse;\n\t    return locale;\n\t  }\n\t\n\t  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\t\n\t  function formatIsoNative(date) {\n\t    return date.toISOString();\n\t  }\n\t\n\t  var formatIso = Date.prototype.toISOString\n\t      ? formatIsoNative\n\t      : exports.utcFormat(isoSpecifier);\n\t\n\t  function parseIsoNative(string) {\n\t    var date = new Date(string);\n\t    return isNaN(date) ? null : date;\n\t  }\n\t\n\t  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n\t      ? parseIsoNative\n\t      : exports.utcParse(isoSpecifier);\n\t\n\t  exports.timeFormatDefaultLocale = defaultLocale;\n\t  exports.timeFormatLocale = formatLocale;\n\t  exports.isoFormat = formatIso;\n\t  exports.isoParse = parseIso;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 156 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://d3js.org Version 4.2.1. Copyright 2016 Mike Bostock.\n\t(function (global, factory) {\n\t   true ? factory(exports) :\n\t  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t  (factory((global.d3 = global.d3 || {})));\n\t}(this, function (exports) { 'use strict';\n\t\n\t  var version = \"4.2.1\";\n\t\n\t  function ascending(a, b) {\n\t    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n\t  }\n\t\n\t  function bisector(compare) {\n\t    if (compare.length === 1) compare = ascendingComparator(compare);\n\t    return {\n\t      left: function(a, x, lo, hi) {\n\t        if (lo == null) lo = 0;\n\t        if (hi == null) hi = a.length;\n\t        while (lo < hi) {\n\t          var mid = lo + hi >>> 1;\n\t          if (compare(a[mid], x) < 0) lo = mid + 1;\n\t          else hi = mid;\n\t        }\n\t        return lo;\n\t      },\n\t      right: function(a, x, lo, hi) {\n\t        if (lo == null) lo = 0;\n\t        if (hi == null) hi = a.length;\n\t        while (lo < hi) {\n\t          var mid = lo + hi >>> 1;\n\t          if (compare(a[mid], x) > 0) hi = mid;\n\t          else lo = mid + 1;\n\t        }\n\t        return lo;\n\t      }\n\t    };\n\t  }\n\t\n\t  function ascendingComparator(f) {\n\t    return function(d, x) {\n\t      return ascending(f(d), x);\n\t    };\n\t  }\n\t\n\t  var ascendingBisect = bisector(ascending);\n\t  var bisectRight = ascendingBisect.right;\n\t  var bisectLeft = ascendingBisect.left;\n\t\n\t  function descending(a, b) {\n\t    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n\t  }\n\t\n\t  function number(x) {\n\t    return x === null ? NaN : +x;\n\t  }\n\t\n\t  function variance(array, f) {\n\t    var n = array.length,\n\t        m = 0,\n\t        a,\n\t        d,\n\t        s = 0,\n\t        i = -1,\n\t        j = 0;\n\t\n\t    if (f == null) {\n\t      while (++i < n) {\n\t        if (!isNaN(a = number(array[i]))) {\n\t          d = a - m;\n\t          m += d / ++j;\n\t          s += d * (a - m);\n\t        }\n\t      }\n\t    }\n\t\n\t    else {\n\t      while (++i < n) {\n\t        if (!isNaN(a = number(f(array[i], i, array)))) {\n\t          d = a - m;\n\t          m += d / ++j;\n\t          s += d * (a - m);\n\t        }\n\t      }\n\t    }\n\t\n\t    if (j > 1) return s / (j - 1);\n\t  }\n\t\n\t  function deviation(array, f) {\n\t    var v = variance(array, f);\n\t    return v ? Math.sqrt(v) : v;\n\t  }\n\t\n\t  function extent(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b,\n\t        c;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null) {\n\t        if (a > b) a = b;\n\t        if (c < b) c = b;\n\t      }\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n\t        if (a > b) a = b;\n\t        if (c < b) c = b;\n\t      }\n\t    }\n\t\n\t    return [a, c];\n\t  }\n\t\n\t  var array = Array.prototype;\n\t\n\t  var slice = array.slice;\n\t  var map = array.map;\n\t\n\t  function constant(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function identity(x) {\n\t    return x;\n\t  }\n\t\n\t  function range(start, stop, step) {\n\t    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\t\n\t    var i = -1,\n\t        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n\t        range = new Array(n);\n\t\n\t    while (++i < n) {\n\t      range[i] = start + i * step;\n\t    }\n\t\n\t    return range;\n\t  }\n\t\n\t  var e10 = Math.sqrt(50);\n\t  var e5 = Math.sqrt(10);\n\t  var e2 = Math.sqrt(2);\n\t  function ticks(start, stop, count) {\n\t    var step = tickStep(start, stop, count);\n\t    return range(\n\t      Math.ceil(start / step) * step,\n\t      Math.floor(stop / step) * step + step / 2, // inclusive\n\t      step\n\t    );\n\t  }\n\t\n\t  function tickStep(start, stop, count) {\n\t    var step0 = Math.abs(stop - start) / Math.max(0, count),\n\t        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n\t        error = step0 / step1;\n\t    if (error >= e10) step1 *= 10;\n\t    else if (error >= e5) step1 *= 5;\n\t    else if (error >= e2) step1 *= 2;\n\t    return stop < start ? -step1 : step1;\n\t  }\n\t\n\t  function sturges(values) {\n\t    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n\t  }\n\t\n\t  function histogram() {\n\t    var value = identity,\n\t        domain = extent,\n\t        threshold = sturges;\n\t\n\t    function histogram(data) {\n\t      var i,\n\t          n = data.length,\n\t          x,\n\t          values = new Array(n);\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        values[i] = value(data[i], i, data);\n\t      }\n\t\n\t      var xz = domain(values),\n\t          x0 = xz[0],\n\t          x1 = xz[1],\n\t          tz = threshold(values, x0, x1);\n\t\n\t      // Convert number of thresholds into uniform thresholds.\n\t      if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\t\n\t      // Remove any thresholds outside the domain.\n\t      var m = tz.length;\n\t      while (tz[0] <= x0) tz.shift(), --m;\n\t      while (tz[m - 1] >= x1) tz.pop(), --m;\n\t\n\t      var bins = new Array(m + 1),\n\t          bin;\n\t\n\t      // Initialize bins.\n\t      for (i = 0; i <= m; ++i) {\n\t        bin = bins[i] = [];\n\t        bin.x0 = i > 0 ? tz[i - 1] : x0;\n\t        bin.x1 = i < m ? tz[i] : x1;\n\t      }\n\t\n\t      // Assign data to bins by value, ignoring any outside the domain.\n\t      for (i = 0; i < n; ++i) {\n\t        x = values[i];\n\t        if (x0 <= x && x <= x1) {\n\t          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n\t        }\n\t      }\n\t\n\t      return bins;\n\t    }\n\t\n\t    histogram.value = function(_) {\n\t      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n\t    };\n\t\n\t    histogram.domain = function(_) {\n\t      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n\t    };\n\t\n\t    histogram.thresholds = function(_) {\n\t      return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n\t    };\n\t\n\t    return histogram;\n\t  }\n\t\n\t  function threshold(array, p, f) {\n\t    if (f == null) f = number;\n\t    if (!(n = array.length)) return;\n\t    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n\t    if (p >= 1) return +f(array[n - 1], n - 1, array);\n\t    var n,\n\t        h = (n - 1) * p,\n\t        i = Math.floor(h),\n\t        a = +f(array[i], i, array),\n\t        b = +f(array[i + 1], i + 1, array);\n\t    return a + (b - a) * (h - i);\n\t  }\n\t\n\t  function freedmanDiaconis(values, min, max) {\n\t    values = map.call(values, number).sort(ascending);\n\t    return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n\t  }\n\t\n\t  function scott(values, min, max) {\n\t    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n\t  }\n\t\n\t  function max(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n\t    }\n\t\n\t    return a;\n\t  }\n\t\n\t  function mean(array, f) {\n\t    var s = 0,\n\t        n = array.length,\n\t        a,\n\t        i = -1,\n\t        j = n;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;\n\t    }\n\t\n\t    if (j) return s / j;\n\t  }\n\t\n\t  function median(array, f) {\n\t    var numbers = [],\n\t        n = array.length,\n\t        a,\n\t        i = -1;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n\t    }\n\t\n\t    return threshold(numbers.sort(ascending), 0.5);\n\t  }\n\t\n\t  function merge(arrays) {\n\t    var n = arrays.length,\n\t        m,\n\t        i = -1,\n\t        j = 0,\n\t        merged,\n\t        array;\n\t\n\t    while (++i < n) j += arrays[i].length;\n\t    merged = new Array(j);\n\t\n\t    while (--n >= 0) {\n\t      array = arrays[n];\n\t      m = array.length;\n\t      while (--m >= 0) {\n\t        merged[--j] = array[m];\n\t      }\n\t    }\n\t\n\t    return merged;\n\t  }\n\t\n\t  function min(array, f) {\n\t    var i = -1,\n\t        n = array.length,\n\t        a,\n\t        b;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n\t      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n\t    }\n\t\n\t    return a;\n\t  }\n\t\n\t  function pairs(array) {\n\t    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n\t    while (i < n) pairs[i] = [p, p = array[++i]];\n\t    return pairs;\n\t  }\n\t\n\t  function permute(array, indexes) {\n\t    var i = indexes.length, permutes = new Array(i);\n\t    while (i--) permutes[i] = array[indexes[i]];\n\t    return permutes;\n\t  }\n\t\n\t  function scan(array, compare) {\n\t    if (!(n = array.length)) return;\n\t    var i = 0,\n\t        n,\n\t        j = 0,\n\t        xi,\n\t        xj = array[j];\n\t\n\t    if (!compare) compare = ascending;\n\t\n\t    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\t\n\t    if (compare(xj, xj) === 0) return j;\n\t  }\n\t\n\t  function shuffle(array, i0, i1) {\n\t    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n\t        t,\n\t        i;\n\t\n\t    while (m) {\n\t      i = Math.random() * m-- | 0;\n\t      t = array[m + i0];\n\t      array[m + i0] = array[i + i0];\n\t      array[i + i0] = t;\n\t    }\n\t\n\t    return array;\n\t  }\n\t\n\t  function sum(array, f) {\n\t    var s = 0,\n\t        n = array.length,\n\t        a,\n\t        i = -1;\n\t\n\t    if (f == null) {\n\t      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n\t    }\n\t\n\t    else {\n\t      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n\t    }\n\t\n\t    return s;\n\t  }\n\t\n\t  function transpose(matrix) {\n\t    if (!(n = matrix.length)) return [];\n\t    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n\t      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n\t        row[j] = matrix[j][i];\n\t      }\n\t    }\n\t    return transpose;\n\t  }\n\t\n\t  function length(d) {\n\t    return d.length;\n\t  }\n\t\n\t  function zip() {\n\t    return transpose(arguments);\n\t  }\n\t\n\t  var prefix = \"$\";\n\t\n\t  function Map() {}\n\t\n\t  Map.prototype = map$1.prototype = {\n\t    constructor: Map,\n\t    has: function(key) {\n\t      return (prefix + key) in this;\n\t    },\n\t    get: function(key) {\n\t      return this[prefix + key];\n\t    },\n\t    set: function(key, value) {\n\t      this[prefix + key] = value;\n\t      return this;\n\t    },\n\t    remove: function(key) {\n\t      var property = prefix + key;\n\t      return property in this && delete this[property];\n\t    },\n\t    clear: function() {\n\t      for (var property in this) if (property[0] === prefix) delete this[property];\n\t    },\n\t    keys: function() {\n\t      var keys = [];\n\t      for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n\t      return keys;\n\t    },\n\t    values: function() {\n\t      var values = [];\n\t      for (var property in this) if (property[0] === prefix) values.push(this[property]);\n\t      return values;\n\t    },\n\t    entries: function() {\n\t      var entries = [];\n\t      for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n\t      return entries;\n\t    },\n\t    size: function() {\n\t      var size = 0;\n\t      for (var property in this) if (property[0] === prefix) ++size;\n\t      return size;\n\t    },\n\t    empty: function() {\n\t      for (var property in this) if (property[0] === prefix) return false;\n\t      return true;\n\t    },\n\t    each: function(f) {\n\t      for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n\t    }\n\t  };\n\t\n\t  function map$1(object, f) {\n\t    var map = new Map;\n\t\n\t    // Copy constructor.\n\t    if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\t\n\t    // Index array by numeric index or specified key function.\n\t    else if (Array.isArray(object)) {\n\t      var i = -1,\n\t          n = object.length,\n\t          o;\n\t\n\t      if (f == null) while (++i < n) map.set(i, object[i]);\n\t      else while (++i < n) map.set(f(o = object[i], i, object), o);\n\t    }\n\t\n\t    // Convert object to map.\n\t    else if (object) for (var key in object) map.set(key, object[key]);\n\t\n\t    return map;\n\t  }\n\t\n\t  function nest() {\n\t    var keys = [],\n\t        sortKeys = [],\n\t        sortValues,\n\t        rollup,\n\t        nest;\n\t\n\t    function apply(array, depth, createResult, setResult) {\n\t      if (depth >= keys.length) return rollup != null\n\t          ? rollup(array) : (sortValues != null\n\t          ? array.sort(sortValues)\n\t          : array);\n\t\n\t      var i = -1,\n\t          n = array.length,\n\t          key = keys[depth++],\n\t          keyValue,\n\t          value,\n\t          valuesByKey = map$1(),\n\t          values,\n\t          result = createResult();\n\t\n\t      while (++i < n) {\n\t        if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n\t          values.push(value);\n\t        } else {\n\t          valuesByKey.set(keyValue, [value]);\n\t        }\n\t      }\n\t\n\t      valuesByKey.each(function(values, key) {\n\t        setResult(result, key, apply(values, depth, createResult, setResult));\n\t      });\n\t\n\t      return result;\n\t    }\n\t\n\t    function entries(map, depth) {\n\t      if (++depth > keys.length) return map;\n\t      var array, sortKey = sortKeys[depth - 1];\n\t      if (rollup != null && depth >= keys.length) array = map.entries();\n\t      else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n\t      return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n\t    }\n\t\n\t    return nest = {\n\t      object: function(array) { return apply(array, 0, createObject, setObject); },\n\t      map: function(array) { return apply(array, 0, createMap, setMap); },\n\t      entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n\t      key: function(d) { keys.push(d); return nest; },\n\t      sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n\t      sortValues: function(order) { sortValues = order; return nest; },\n\t      rollup: function(f) { rollup = f; return nest; }\n\t    };\n\t  }\n\t\n\t  function createObject() {\n\t    return {};\n\t  }\n\t\n\t  function setObject(object, key, value) {\n\t    object[key] = value;\n\t  }\n\t\n\t  function createMap() {\n\t    return map$1();\n\t  }\n\t\n\t  function setMap(map, key, value) {\n\t    map.set(key, value);\n\t  }\n\t\n\t  function Set() {}\n\t\n\t  var proto = map$1.prototype;\n\t\n\t  Set.prototype = set.prototype = {\n\t    constructor: Set,\n\t    has: proto.has,\n\t    add: function(value) {\n\t      value += \"\";\n\t      this[prefix + value] = value;\n\t      return this;\n\t    },\n\t    remove: proto.remove,\n\t    clear: proto.clear,\n\t    values: proto.keys,\n\t    size: proto.size,\n\t    empty: proto.empty,\n\t    each: proto.each\n\t  };\n\t\n\t  function set(object, f) {\n\t    var set = new Set;\n\t\n\t    // Copy constructor.\n\t    if (object instanceof Set) object.each(function(value) { set.add(value); });\n\t\n\t    // Otherwise, assume it’s an array.\n\t    else if (object) {\n\t      var i = -1, n = object.length;\n\t      if (f == null) while (++i < n) set.add(object[i]);\n\t      else while (++i < n) set.add(f(object[i], i, object));\n\t    }\n\t\n\t    return set;\n\t  }\n\t\n\t  function keys(map) {\n\t    var keys = [];\n\t    for (var key in map) keys.push(key);\n\t    return keys;\n\t  }\n\t\n\t  function values(map) {\n\t    var values = [];\n\t    for (var key in map) values.push(map[key]);\n\t    return values;\n\t  }\n\t\n\t  function entries(map) {\n\t    var entries = [];\n\t    for (var key in map) entries.push({key: key, value: map[key]});\n\t    return entries;\n\t  }\n\t\n\t  function uniform(min, max) {\n\t    min = min == null ? 0 : +min;\n\t    max = max == null ? 1 : +max;\n\t    if (arguments.length === 1) max = min, min = 0;\n\t    else max -= min;\n\t    return function() {\n\t      return Math.random() * max + min;\n\t    };\n\t  }\n\t\n\t  function normal(mu, sigma) {\n\t    var x, r;\n\t    mu = mu == null ? 0 : +mu;\n\t    sigma = sigma == null ? 1 : +sigma;\n\t    return function() {\n\t      var y;\n\t\n\t      // If available, use the second previously-generated uniform random.\n\t      if (x != null) y = x, x = null;\n\t\n\t      // Otherwise, generate a new x and y.\n\t      else do {\n\t        x = Math.random() * 2 - 1;\n\t        y = Math.random() * 2 - 1;\n\t        r = x * x + y * y;\n\t      } while (!r || r > 1);\n\t\n\t      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n\t    };\n\t  }\n\t\n\t  function logNormal() {\n\t    var randomNormal = normal.apply(this, arguments);\n\t    return function() {\n\t      return Math.exp(randomNormal());\n\t    };\n\t  }\n\t\n\t  function irwinHall(n) {\n\t    return function() {\n\t      for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();\n\t      return sum;\n\t    };\n\t  }\n\t\n\t  function bates(n) {\n\t    var randomIrwinHall = irwinHall(n);\n\t    return function() {\n\t      return randomIrwinHall() / n;\n\t    };\n\t  }\n\t\n\t  function exponential(lambda) {\n\t    return function() {\n\t      return -Math.log(1 - Math.random()) / lambda;\n\t    };\n\t  }\n\t\n\t  function linear(t) {\n\t    return +t;\n\t  }\n\t\n\t  function quadIn(t) {\n\t    return t * t;\n\t  }\n\t\n\t  function quadOut(t) {\n\t    return t * (2 - t);\n\t  }\n\t\n\t  function quadInOut(t) {\n\t    return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n\t  }\n\t\n\t  function cubicIn(t) {\n\t    return t * t * t;\n\t  }\n\t\n\t  function cubicOut(t) {\n\t    return --t * t * t + 1;\n\t  }\n\t\n\t  function easeCubicInOut(t) {\n\t    return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n\t  }\n\t\n\t  var exponent = 3;\n\t\n\t  var polyIn = (function custom(e) {\n\t    e = +e;\n\t\n\t    function polyIn(t) {\n\t      return Math.pow(t, e);\n\t    }\n\t\n\t    polyIn.exponent = custom;\n\t\n\t    return polyIn;\n\t  })(exponent);\n\t\n\t  var polyOut = (function custom(e) {\n\t    e = +e;\n\t\n\t    function polyOut(t) {\n\t      return 1 - Math.pow(1 - t, e);\n\t    }\n\t\n\t    polyOut.exponent = custom;\n\t\n\t    return polyOut;\n\t  })(exponent);\n\t\n\t  var polyInOut = (function custom(e) {\n\t    e = +e;\n\t\n\t    function polyInOut(t) {\n\t      return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n\t    }\n\t\n\t    polyInOut.exponent = custom;\n\t\n\t    return polyInOut;\n\t  })(exponent);\n\t\n\t  var pi = Math.PI;\n\t  var halfPi = pi / 2;\n\t  function sinIn(t) {\n\t    return 1 - Math.cos(t * halfPi);\n\t  }\n\t\n\t  function sinOut(t) {\n\t    return Math.sin(t * halfPi);\n\t  }\n\t\n\t  function sinInOut(t) {\n\t    return (1 - Math.cos(pi * t)) / 2;\n\t  }\n\t\n\t  function expIn(t) {\n\t    return Math.pow(2, 10 * t - 10);\n\t  }\n\t\n\t  function expOut(t) {\n\t    return 1 - Math.pow(2, -10 * t);\n\t  }\n\t\n\t  function expInOut(t) {\n\t    return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n\t  }\n\t\n\t  function circleIn(t) {\n\t    return 1 - Math.sqrt(1 - t * t);\n\t  }\n\t\n\t  function circleOut(t) {\n\t    return Math.sqrt(1 - --t * t);\n\t  }\n\t\n\t  function circleInOut(t) {\n\t    return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n\t  }\n\t\n\t  var b1 = 4 / 11;\n\t  var b2 = 6 / 11;\n\t  var b3 = 8 / 11;\n\t  var b4 = 3 / 4;\n\t  var b5 = 9 / 11;\n\t  var b6 = 10 / 11;\n\t  var b7 = 15 / 16;\n\t  var b8 = 21 / 22;\n\t  var b9 = 63 / 64;\n\t  var b0 = 1 / b1 / b1;\n\t  function bounceIn(t) {\n\t    return 1 - bounceOut(1 - t);\n\t  }\n\t\n\t  function bounceOut(t) {\n\t    return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n\t  }\n\t\n\t  function bounceInOut(t) {\n\t    return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n\t  }\n\t\n\t  var overshoot = 1.70158;\n\t\n\t  var backIn = (function custom(s) {\n\t    s = +s;\n\t\n\t    function backIn(t) {\n\t      return t * t * ((s + 1) * t - s);\n\t    }\n\t\n\t    backIn.overshoot = custom;\n\t\n\t    return backIn;\n\t  })(overshoot);\n\t\n\t  var backOut = (function custom(s) {\n\t    s = +s;\n\t\n\t    function backOut(t) {\n\t      return --t * t * ((s + 1) * t + s) + 1;\n\t    }\n\t\n\t    backOut.overshoot = custom;\n\t\n\t    return backOut;\n\t  })(overshoot);\n\t\n\t  var backInOut = (function custom(s) {\n\t    s = +s;\n\t\n\t    function backInOut(t) {\n\t      return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n\t    }\n\t\n\t    backInOut.overshoot = custom;\n\t\n\t    return backInOut;\n\t  })(overshoot);\n\t\n\t  var tau = 2 * Math.PI;\n\t  var amplitude = 1;\n\t  var period = 0.3;\n\t  var elasticIn = (function custom(a, p) {\n\t    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\t\n\t    function elasticIn(t) {\n\t      return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n\t    }\n\t\n\t    elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n\t    elasticIn.period = function(p) { return custom(a, p); };\n\t\n\t    return elasticIn;\n\t  })(amplitude, period);\n\t\n\t  var elasticOut = (function custom(a, p) {\n\t    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\t\n\t    function elasticOut(t) {\n\t      return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n\t    }\n\t\n\t    elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n\t    elasticOut.period = function(p) { return custom(a, p); };\n\t\n\t    return elasticOut;\n\t  })(amplitude, period);\n\t\n\t  var elasticInOut = (function custom(a, p) {\n\t    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\t\n\t    function elasticInOut(t) {\n\t      return ((t = t * 2 - 1) < 0\n\t          ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n\t          : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n\t    }\n\t\n\t    elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n\t    elasticInOut.period = function(p) { return custom(a, p); };\n\t\n\t    return elasticInOut;\n\t  })(amplitude, period);\n\t\n\t  function area(polygon) {\n\t    var i = -1,\n\t        n = polygon.length,\n\t        a,\n\t        b = polygon[n - 1],\n\t        area = 0;\n\t\n\t    while (++i < n) {\n\t      a = b;\n\t      b = polygon[i];\n\t      area += a[1] * b[0] - a[0] * b[1];\n\t    }\n\t\n\t    return area / 2;\n\t  }\n\t\n\t  function centroid(polygon) {\n\t    var i = -1,\n\t        n = polygon.length,\n\t        x = 0,\n\t        y = 0,\n\t        a,\n\t        b = polygon[n - 1],\n\t        c,\n\t        k = 0;\n\t\n\t    while (++i < n) {\n\t      a = b;\n\t      b = polygon[i];\n\t      k += c = a[0] * b[1] - b[0] * a[1];\n\t      x += (a[0] + b[0]) * c;\n\t      y += (a[1] + b[1]) * c;\n\t    }\n\t\n\t    return k *= 3, [x / k, y / k];\n\t  }\n\t\n\t  // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n\t  // the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n\t  // right, +y is up). Returns a positive value if ABC is counter-clockwise,\n\t  // negative if clockwise, and zero if the points are collinear.\n\t  function cross(a, b, c) {\n\t    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n\t  }\n\t\n\t  function lexicographicOrder(a, b) {\n\t    return a[0] - b[0] || a[1] - b[1];\n\t  }\n\t\n\t  // Computes the upper convex hull per the monotone chain algorithm.\n\t  // Assumes points.length >= 3, is sorted by x, unique in y.\n\t  // Returns an array of indices into points in left-to-right order.\n\t  function computeUpperHullIndexes(points) {\n\t    var n = points.length,\n\t        indexes = [0, 1],\n\t        size = 2;\n\t\n\t    for (var i = 2; i < n; ++i) {\n\t      while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n\t      indexes[size++] = i;\n\t    }\n\t\n\t    return indexes.slice(0, size); // remove popped points\n\t  }\n\t\n\t  function hull(points) {\n\t    if ((n = points.length) < 3) return null;\n\t\n\t    var i,\n\t        n,\n\t        sortedPoints = new Array(n),\n\t        flippedPoints = new Array(n);\n\t\n\t    for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n\t    sortedPoints.sort(lexicographicOrder);\n\t    for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\t\n\t    var upperIndexes = computeUpperHullIndexes(sortedPoints),\n\t        lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\t\n\t    // Construct the hull polygon, removing possible duplicate endpoints.\n\t    var skipLeft = lowerIndexes[0] === upperIndexes[0],\n\t        skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n\t        hull = [];\n\t\n\t    // Add upper hull in right-to-l order.\n\t    // Then add lower hull in left-to-right order.\n\t    for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n\t    for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\t\n\t    return hull;\n\t  }\n\t\n\t  function contains(polygon, point) {\n\t    var n = polygon.length,\n\t        p = polygon[n - 1],\n\t        x = point[0], y = point[1],\n\t        x0 = p[0], y0 = p[1],\n\t        x1, y1,\n\t        inside = false;\n\t\n\t    for (var i = 0; i < n; ++i) {\n\t      p = polygon[i], x1 = p[0], y1 = p[1];\n\t      if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n\t      x0 = x1, y0 = y1;\n\t    }\n\t\n\t    return inside;\n\t  }\n\t\n\t  function length$1(polygon) {\n\t    var i = -1,\n\t        n = polygon.length,\n\t        b = polygon[n - 1],\n\t        xa,\n\t        ya,\n\t        xb = b[0],\n\t        yb = b[1],\n\t        perimeter = 0;\n\t\n\t    while (++i < n) {\n\t      xa = xb;\n\t      ya = yb;\n\t      b = polygon[i];\n\t      xb = b[0];\n\t      yb = b[1];\n\t      xa -= xb;\n\t      ya -= yb;\n\t      perimeter += Math.sqrt(xa * xa + ya * ya);\n\t    }\n\t\n\t    return perimeter;\n\t  }\n\t\n\tvar   pi$1 = Math.PI;\n\tvar   tau$1 = 2 * pi$1;\n\t  var epsilon = 1e-6;\n\t  var tauEpsilon = tau$1 - epsilon;\n\t  function Path() {\n\t    this._x0 = this._y0 = // start of current subpath\n\t    this._x1 = this._y1 = null; // end of current subpath\n\t    this._ = [];\n\t  }\n\t\n\t  function path() {\n\t    return new Path;\n\t  }\n\t\n\t  Path.prototype = path.prototype = {\n\t    constructor: Path,\n\t    moveTo: function(x, y) {\n\t      this._.push(\"M\", this._x0 = this._x1 = +x, \",\", this._y0 = this._y1 = +y);\n\t    },\n\t    closePath: function() {\n\t      if (this._x1 !== null) {\n\t        this._x1 = this._x0, this._y1 = this._y0;\n\t        this._.push(\"Z\");\n\t      }\n\t    },\n\t    lineTo: function(x, y) {\n\t      this._.push(\"L\", this._x1 = +x, \",\", this._y1 = +y);\n\t    },\n\t    quadraticCurveTo: function(x1, y1, x, y) {\n\t      this._.push(\"Q\", +x1, \",\", +y1, \",\", this._x1 = +x, \",\", this._y1 = +y);\n\t    },\n\t    bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n\t      this._.push(\"C\", +x1, \",\", +y1, \",\", +x2, \",\", +y2, \",\", this._x1 = +x, \",\", this._y1 = +y);\n\t    },\n\t    arcTo: function(x1, y1, x2, y2, r) {\n\t      x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\t      var x0 = this._x1,\n\t          y0 = this._y1,\n\t          x21 = x2 - x1,\n\t          y21 = y2 - y1,\n\t          x01 = x0 - x1,\n\t          y01 = y0 - y1,\n\t          l01_2 = x01 * x01 + y01 * y01;\n\t\n\t      // Is the radius negative? Error.\n\t      if (r < 0) throw new Error(\"negative radius: \" + r);\n\t\n\t      // Is this path empty? Move to (x1,y1).\n\t      if (this._x1 === null) {\n\t        this._.push(\n\t          \"M\", this._x1 = x1, \",\", this._y1 = y1\n\t        );\n\t      }\n\t\n\t      // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n\t      else if (!(l01_2 > epsilon));\n\t\n\t      // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n\t      // Equivalently, is (x1,y1) coincident with (x2,y2)?\n\t      // Or, is the radius zero? Line to (x1,y1).\n\t      else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n\t        this._.push(\n\t          \"L\", this._x1 = x1, \",\", this._y1 = y1\n\t        );\n\t      }\n\t\n\t      // Otherwise, draw an arc!\n\t      else {\n\t        var x20 = x2 - x0,\n\t            y20 = y2 - y0,\n\t            l21_2 = x21 * x21 + y21 * y21,\n\t            l20_2 = x20 * x20 + y20 * y20,\n\t            l21 = Math.sqrt(l21_2),\n\t            l01 = Math.sqrt(l01_2),\n\t            l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n\t            t01 = l / l01,\n\t            t21 = l / l21;\n\t\n\t        // If the start tangent is not coincident with (x0,y0), line to.\n\t        if (Math.abs(t01 - 1) > epsilon) {\n\t          this._.push(\n\t            \"L\", x1 + t01 * x01, \",\", y1 + t01 * y01\n\t          );\n\t        }\n\t\n\t        this._.push(\n\t          \"A\", r, \",\", r, \",0,0,\", +(y01 * x20 > x01 * y20), \",\", this._x1 = x1 + t21 * x21, \",\", this._y1 = y1 + t21 * y21\n\t        );\n\t      }\n\t    },\n\t    arc: function(x, y, r, a0, a1, ccw) {\n\t      x = +x, y = +y, r = +r;\n\t      var dx = r * Math.cos(a0),\n\t          dy = r * Math.sin(a0),\n\t          x0 = x + dx,\n\t          y0 = y + dy,\n\t          cw = 1 ^ ccw,\n\t          da = ccw ? a0 - a1 : a1 - a0;\n\t\n\t      // Is the radius negative? Error.\n\t      if (r < 0) throw new Error(\"negative radius: \" + r);\n\t\n\t      // Is this path empty? Move to (x0,y0).\n\t      if (this._x1 === null) {\n\t        this._.push(\n\t          \"M\", x0, \",\", y0\n\t        );\n\t      }\n\t\n\t      // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n\t      else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n\t        this._.push(\n\t          \"L\", x0, \",\", y0\n\t        );\n\t      }\n\t\n\t      // Is this arc empty? We’re done.\n\t      if (!r) return;\n\t\n\t      // Is this a complete circle? Draw two arcs to complete the circle.\n\t      if (da > tauEpsilon) {\n\t        this._.push(\n\t          \"A\", r, \",\", r, \",0,1,\", cw, \",\", x - dx, \",\", y - dy,\n\t          \"A\", r, \",\", r, \",0,1,\", cw, \",\", this._x1 = x0, \",\", this._y1 = y0\n\t        );\n\t      }\n\t\n\t      // Otherwise, draw an arc!\n\t      else {\n\t        if (da < 0) da = da % tau$1 + tau$1;\n\t        this._.push(\n\t          \"A\", r, \",\", r, \",0,\", +(da >= pi$1), \",\", cw, \",\", this._x1 = x + r * Math.cos(a1), \",\", this._y1 = y + r * Math.sin(a1)\n\t        );\n\t      }\n\t    },\n\t    rect: function(x, y, w, h) {\n\t      this._.push(\"M\", this._x0 = this._x1 = +x, \",\", this._y0 = this._y1 = +y, \"h\", +w, \"v\", +h, \"h\", -w, \"Z\");\n\t    },\n\t    toString: function() {\n\t      return this._.join(\"\");\n\t    }\n\t  };\n\t\n\t  function tree_add(d) {\n\t    var x = +this._x.call(null, d),\n\t        y = +this._y.call(null, d);\n\t    return add(this.cover(x, y), x, y, d);\n\t  }\n\t\n\t  function add(tree, x, y, d) {\n\t    if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\t\n\t    var parent,\n\t        node = tree._root,\n\t        leaf = {data: d},\n\t        x0 = tree._x0,\n\t        y0 = tree._y0,\n\t        x1 = tree._x1,\n\t        y1 = tree._y1,\n\t        xm,\n\t        ym,\n\t        xp,\n\t        yp,\n\t        right,\n\t        bottom,\n\t        i,\n\t        j;\n\t\n\t    // If the tree is empty, initialize the root as a leaf.\n\t    if (!node) return tree._root = leaf, tree;\n\t\n\t    // Find the existing leaf for the new point, or add it.\n\t    while (node.length) {\n\t      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n\t      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n\t      if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n\t    }\n\t\n\t    // Is the new point is exactly coincident with the existing point?\n\t    xp = +tree._x.call(null, node.data);\n\t    yp = +tree._y.call(null, node.data);\n\t    if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\t\n\t    // Otherwise, split the leaf node until the old and new point are separated.\n\t    do {\n\t      parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n\t      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n\t      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n\t    } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n\t    return parent[j] = node, parent[i] = leaf, tree;\n\t  }\n\t\n\t  function addAll(data) {\n\t    var d, i, n = data.length,\n\t        x,\n\t        y,\n\t        xz = new Array(n),\n\t        yz = new Array(n),\n\t        x0 = Infinity,\n\t        y0 = Infinity,\n\t        x1 = -Infinity,\n\t        y1 = -Infinity;\n\t\n\t    // Compute the points and their extent.\n\t    for (i = 0; i < n; ++i) {\n\t      if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n\t      xz[i] = x;\n\t      yz[i] = y;\n\t      if (x < x0) x0 = x;\n\t      if (x > x1) x1 = x;\n\t      if (y < y0) y0 = y;\n\t      if (y > y1) y1 = y;\n\t    }\n\t\n\t    // If there were no (valid) points, inherit the existing extent.\n\t    if (x1 < x0) x0 = this._x0, x1 = this._x1;\n\t    if (y1 < y0) y0 = this._y0, y1 = this._y1;\n\t\n\t    // Expand the tree to cover the new points.\n\t    this.cover(x0, y0).cover(x1, y1);\n\t\n\t    // Add the new points.\n\t    for (i = 0; i < n; ++i) {\n\t      add(this, xz[i], yz[i], data[i]);\n\t    }\n\t\n\t    return this;\n\t  }\n\t\n\t  function tree_cover(x, y) {\n\t    if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\t\n\t    var x0 = this._x0,\n\t        y0 = this._y0,\n\t        x1 = this._x1,\n\t        y1 = this._y1;\n\t\n\t    // If the quadtree has no extent, initialize them.\n\t    // Integer extent are necessary so that if we later double the extent,\n\t    // the existing quadrant boundaries don’t change due to floating point error!\n\t    if (isNaN(x0)) {\n\t      x1 = (x0 = Math.floor(x)) + 1;\n\t      y1 = (y0 = Math.floor(y)) + 1;\n\t    }\n\t\n\t    // Otherwise, double repeatedly to cover.\n\t    else if (x0 > x || x > x1 || y0 > y || y > y1) {\n\t      var z = x1 - x0,\n\t          node = this._root,\n\t          parent,\n\t          i;\n\t\n\t      switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n\t        case 0: {\n\t          do parent = new Array(4), parent[i] = node, node = parent;\n\t          while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);\n\t          break;\n\t        }\n\t        case 1: {\n\t          do parent = new Array(4), parent[i] = node, node = parent;\n\t          while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);\n\t          break;\n\t        }\n\t        case 2: {\n\t          do parent = new Array(4), parent[i] = node, node = parent;\n\t          while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);\n\t          break;\n\t        }\n\t        case 3: {\n\t          do parent = new Array(4), parent[i] = node, node = parent;\n\t          while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);\n\t          break;\n\t        }\n\t      }\n\t\n\t      if (this._root && this._root.length) this._root = node;\n\t    }\n\t\n\t    // If the quadtree covers the point already, just return.\n\t    else return this;\n\t\n\t    this._x0 = x0;\n\t    this._y0 = y0;\n\t    this._x1 = x1;\n\t    this._y1 = y1;\n\t    return this;\n\t  }\n\t\n\t  function tree_data() {\n\t    var data = [];\n\t    this.visit(function(node) {\n\t      if (!node.length) do data.push(node.data); while (node = node.next)\n\t    });\n\t    return data;\n\t  }\n\t\n\t  function tree_extent(_) {\n\t    return arguments.length\n\t        ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n\t        : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n\t  }\n\t\n\t  function Quad(node, x0, y0, x1, y1) {\n\t    this.node = node;\n\t    this.x0 = x0;\n\t    this.y0 = y0;\n\t    this.x1 = x1;\n\t    this.y1 = y1;\n\t  }\n\t\n\t  function tree_find(x, y, radius) {\n\t    var data,\n\t        x0 = this._x0,\n\t        y0 = this._y0,\n\t        x1,\n\t        y1,\n\t        x2,\n\t        y2,\n\t        x3 = this._x1,\n\t        y3 = this._y1,\n\t        quads = [],\n\t        node = this._root,\n\t        q,\n\t        i;\n\t\n\t    if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n\t    if (radius == null) radius = Infinity;\n\t    else {\n\t      x0 = x - radius, y0 = y - radius;\n\t      x3 = x + radius, y3 = y + radius;\n\t      radius *= radius;\n\t    }\n\t\n\t    while (q = quads.pop()) {\n\t\n\t      // Stop searching if this quadrant can’t contain a closer node.\n\t      if (!(node = q.node)\n\t          || (x1 = q.x0) > x3\n\t          || (y1 = q.y0) > y3\n\t          || (x2 = q.x1) < x0\n\t          || (y2 = q.y1) < y0) continue;\n\t\n\t      // Bisect the current quadrant.\n\t      if (node.length) {\n\t        var xm = (x1 + x2) / 2,\n\t            ym = (y1 + y2) / 2;\n\t\n\t        quads.push(\n\t          new Quad(node[3], xm, ym, x2, y2),\n\t          new Quad(node[2], x1, ym, xm, y2),\n\t          new Quad(node[1], xm, y1, x2, ym),\n\t          new Quad(node[0], x1, y1, xm, ym)\n\t        );\n\t\n\t        // Visit the closest quadrant first.\n\t        if (i = (y >= ym) << 1 | (x >= xm)) {\n\t          q = quads[quads.length - 1];\n\t          quads[quads.length - 1] = quads[quads.length - 1 - i];\n\t          quads[quads.length - 1 - i] = q;\n\t        }\n\t      }\n\t\n\t      // Visit this point. (Visiting coincident points isn’t necessary!)\n\t      else {\n\t        var dx = x - +this._x.call(null, node.data),\n\t            dy = y - +this._y.call(null, node.data),\n\t            d2 = dx * dx + dy * dy;\n\t        if (d2 < radius) {\n\t          var d = Math.sqrt(radius = d2);\n\t          x0 = x - d, y0 = y - d;\n\t          x3 = x + d, y3 = y + d;\n\t          data = node.data;\n\t        }\n\t      }\n\t    }\n\t\n\t    return data;\n\t  }\n\t\n\t  function tree_remove(d) {\n\t    if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\t\n\t    var parent,\n\t        node = this._root,\n\t        retainer,\n\t        previous,\n\t        next,\n\t        x0 = this._x0,\n\t        y0 = this._y0,\n\t        x1 = this._x1,\n\t        y1 = this._y1,\n\t        x,\n\t        y,\n\t        xm,\n\t        ym,\n\t        right,\n\t        bottom,\n\t        i,\n\t        j;\n\t\n\t    // If the tree is empty, initialize the root as a leaf.\n\t    if (!node) return this;\n\t\n\t    // Find the leaf node for the point.\n\t    // While descending, also retain the deepest parent with a non-removed sibling.\n\t    if (node.length) while (true) {\n\t      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n\t      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n\t      if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n\t      if (!node.length) break;\n\t      if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n\t    }\n\t\n\t    // Find the point to remove.\n\t    while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n\t    if (next = node.next) delete node.next;\n\t\n\t    // If there are multiple coincident points, remove just the point.\n\t    if (previous) return (next ? previous.next = next : delete previous.next), this;\n\t\n\t    // If this is the root point, remove it.\n\t    if (!parent) return this._root = next, this;\n\t\n\t    // Remove this leaf.\n\t    next ? parent[i] = next : delete parent[i];\n\t\n\t    // If the parent now contains exactly one leaf, collapse superfluous parents.\n\t    if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n\t        && node === (parent[3] || parent[2] || parent[1] || parent[0])\n\t        && !node.length) {\n\t      if (retainer) retainer[j] = node;\n\t      else this._root = node;\n\t    }\n\t\n\t    return this;\n\t  }\n\t\n\t  function removeAll(data) {\n\t    for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n\t    return this;\n\t  }\n\t\n\t  function tree_root() {\n\t    return this._root;\n\t  }\n\t\n\t  function tree_size() {\n\t    var size = 0;\n\t    this.visit(function(node) {\n\t      if (!node.length) do ++size; while (node = node.next)\n\t    });\n\t    return size;\n\t  }\n\t\n\t  function tree_visit(callback) {\n\t    var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n\t    if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n\t    while (q = quads.pop()) {\n\t      if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n\t        var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n\t        if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n\t        if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n\t        if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n\t        if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n\t      }\n\t    }\n\t    return this;\n\t  }\n\t\n\t  function tree_visitAfter(callback) {\n\t    var quads = [], next = [], q;\n\t    if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n\t    while (q = quads.pop()) {\n\t      var node = q.node;\n\t      if (node.length) {\n\t        var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n\t        if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n\t        if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n\t        if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n\t        if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n\t      }\n\t      next.push(q);\n\t    }\n\t    while (q = next.pop()) {\n\t      callback(q.node, q.x0, q.y0, q.x1, q.y1);\n\t    }\n\t    return this;\n\t  }\n\t\n\t  function defaultX(d) {\n\t    return d[0];\n\t  }\n\t\n\t  function tree_x(_) {\n\t    return arguments.length ? (this._x = _, this) : this._x;\n\t  }\n\t\n\t  function defaultY(d) {\n\t    return d[1];\n\t  }\n\t\n\t  function tree_y(_) {\n\t    return arguments.length ? (this._y = _, this) : this._y;\n\t  }\n\t\n\t  function quadtree(nodes, x, y) {\n\t    var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n\t    return nodes == null ? tree : tree.addAll(nodes);\n\t  }\n\t\n\t  function Quadtree(x, y, x0, y0, x1, y1) {\n\t    this._x = x;\n\t    this._y = y;\n\t    this._x0 = x0;\n\t    this._y0 = y0;\n\t    this._x1 = x1;\n\t    this._y1 = y1;\n\t    this._root = undefined;\n\t  }\n\t\n\t  function leaf_copy(leaf) {\n\t    var copy = {data: leaf.data}, next = copy;\n\t    while (leaf = leaf.next) next = next.next = {data: leaf.data};\n\t    return copy;\n\t  }\n\t\n\t  var treeProto = quadtree.prototype = Quadtree.prototype;\n\t\n\t  treeProto.copy = function() {\n\t    var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n\t        node = this._root,\n\t        nodes,\n\t        child;\n\t\n\t    if (!node) return copy;\n\t\n\t    if (!node.length) return copy._root = leaf_copy(node), copy;\n\t\n\t    nodes = [{source: node, target: copy._root = new Array(4)}];\n\t    while (node = nodes.pop()) {\n\t      for (var i = 0; i < 4; ++i) {\n\t        if (child = node.source[i]) {\n\t          if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n\t          else node.target[i] = leaf_copy(child);\n\t        }\n\t      }\n\t    }\n\t\n\t    return copy;\n\t  };\n\t\n\t  treeProto.add = tree_add;\n\t  treeProto.addAll = addAll;\n\t  treeProto.cover = tree_cover;\n\t  treeProto.data = tree_data;\n\t  treeProto.extent = tree_extent;\n\t  treeProto.find = tree_find;\n\t  treeProto.remove = tree_remove;\n\t  treeProto.removeAll = removeAll;\n\t  treeProto.root = tree_root;\n\t  treeProto.size = tree_size;\n\t  treeProto.visit = tree_visit;\n\t  treeProto.visitAfter = tree_visitAfter;\n\t  treeProto.x = tree_x;\n\t  treeProto.y = tree_y;\n\t\n\t  var slice$1 = [].slice;\n\t\n\t  var noabort = {};\n\t\n\t  function Queue(size) {\n\t    if (!(size >= 1)) throw new Error;\n\t    this._size = size;\n\t    this._call =\n\t    this._error = null;\n\t    this._tasks = [];\n\t    this._data = [];\n\t    this._waiting =\n\t    this._active =\n\t    this._ended =\n\t    this._start = 0; // inside a synchronous task callback?\n\t  }\n\t\n\t  Queue.prototype = queue.prototype = {\n\t    constructor: Queue,\n\t    defer: function(callback) {\n\t      if (typeof callback !== \"function\" || this._call) throw new Error;\n\t      if (this._error != null) return this;\n\t      var t = slice$1.call(arguments, 1);\n\t      t.push(callback);\n\t      ++this._waiting, this._tasks.push(t);\n\t      poke(this);\n\t      return this;\n\t    },\n\t    abort: function() {\n\t      if (this._error == null) abort(this, new Error(\"abort\"));\n\t      return this;\n\t    },\n\t    await: function(callback) {\n\t      if (typeof callback !== \"function\" || this._call) throw new Error;\n\t      this._call = function(error, results) { callback.apply(null, [error].concat(results)); };\n\t      maybeNotify(this);\n\t      return this;\n\t    },\n\t    awaitAll: function(callback) {\n\t      if (typeof callback !== \"function\" || this._call) throw new Error;\n\t      this._call = callback;\n\t      maybeNotify(this);\n\t      return this;\n\t    }\n\t  };\n\t\n\t  function poke(q) {\n\t    if (!q._start) try { start(q); } // let the current task complete\n\t    catch (e) { if (q._tasks[q._ended + q._active - 1]) abort(q, e); } // task errored synchronously\n\t  }\n\t\n\t  function start(q) {\n\t    while (q._start = q._waiting && q._active < q._size) {\n\t      var i = q._ended + q._active,\n\t          t = q._tasks[i],\n\t          j = t.length - 1,\n\t          c = t[j];\n\t      t[j] = end(q, i);\n\t      --q._waiting, ++q._active;\n\t      t = c.apply(null, t);\n\t      if (!q._tasks[i]) continue; // task finished synchronously\n\t      q._tasks[i] = t || noabort;\n\t    }\n\t  }\n\t\n\t  function end(q, i) {\n\t    return function(e, r) {\n\t      if (!q._tasks[i]) return; // ignore multiple callbacks\n\t      --q._active, ++q._ended;\n\t      q._tasks[i] = null;\n\t      if (q._error != null) return; // ignore secondary errors\n\t      if (e != null) {\n\t        abort(q, e);\n\t      } else {\n\t        q._data[i] = r;\n\t        if (q._waiting) poke(q);\n\t        else maybeNotify(q);\n\t      }\n\t    };\n\t  }\n\t\n\t  function abort(q, e) {\n\t    var i = q._tasks.length, t;\n\t    q._error = e; // ignore active callbacks\n\t    q._data = undefined; // allow gc\n\t    q._waiting = NaN; // prevent starting\n\t\n\t    while (--i >= 0) {\n\t      if (t = q._tasks[i]) {\n\t        q._tasks[i] = null;\n\t        if (t.abort) try { t.abort(); }\n\t        catch (e) { /* ignore */ }\n\t      }\n\t    }\n\t\n\t    q._active = NaN; // allow notification\n\t    maybeNotify(q);\n\t  }\n\t\n\t  function maybeNotify(q) {\n\t    if (!q._active && q._call) q._call(q._error, q._data);\n\t  }\n\t\n\t  function queue(concurrency) {\n\t    return new Queue(arguments.length ? +concurrency : Infinity);\n\t  }\n\t\n\t  function constant$1(x) {\n\t    return function constant() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  var epsilon$1 = 1e-12;\n\t  var pi$2 = Math.PI;\n\t  var halfPi$1 = pi$2 / 2;\n\t  var tau$2 = 2 * pi$2;\n\t\n\t  function arcInnerRadius(d) {\n\t    return d.innerRadius;\n\t  }\n\t\n\t  function arcOuterRadius(d) {\n\t    return d.outerRadius;\n\t  }\n\t\n\t  function arcStartAngle(d) {\n\t    return d.startAngle;\n\t  }\n\t\n\t  function arcEndAngle(d) {\n\t    return d.endAngle;\n\t  }\n\t\n\t  function arcPadAngle(d) {\n\t    return d && d.padAngle; // Note: optional!\n\t  }\n\t\n\t  function asin(x) {\n\t    return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);\n\t  }\n\t\n\t  function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n\t    var x10 = x1 - x0, y10 = y1 - y0,\n\t        x32 = x3 - x2, y32 = y3 - y2,\n\t        t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n\t    return [x0 + t * x10, y0 + t * y10];\n\t  }\n\t\n\t  // Compute perpendicular offset line of length rc.\n\t  // http://mathworld.wolfram.com/Circle-LineIntersection.html\n\t  function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n\t    var x01 = x0 - x1,\n\t        y01 = y0 - y1,\n\t        lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),\n\t        ox = lo * y01,\n\t        oy = -lo * x01,\n\t        x11 = x0 + ox,\n\t        y11 = y0 + oy,\n\t        x10 = x1 + ox,\n\t        y10 = y1 + oy,\n\t        x00 = (x11 + x10) / 2,\n\t        y00 = (y11 + y10) / 2,\n\t        dx = x10 - x11,\n\t        dy = y10 - y11,\n\t        d2 = dx * dx + dy * dy,\n\t        r = r1 - rc,\n\t        D = x11 * y10 - x10 * y11,\n\t        d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),\n\t        cx0 = (D * dy - dx * d) / d2,\n\t        cy0 = (-D * dx - dy * d) / d2,\n\t        cx1 = (D * dy + dx * d) / d2,\n\t        cy1 = (-D * dx + dy * d) / d2,\n\t        dx0 = cx0 - x00,\n\t        dy0 = cy0 - y00,\n\t        dx1 = cx1 - x00,\n\t        dy1 = cy1 - y00;\n\t\n\t    // Pick the closer of the two intersection points.\n\t    // TODO Is there a faster way to determine which intersection to use?\n\t    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\t\n\t    return {\n\t      cx: cx0,\n\t      cy: cy0,\n\t      x01: -ox,\n\t      y01: -oy,\n\t      x11: cx0 * (r1 / r - 1),\n\t      y11: cy0 * (r1 / r - 1)\n\t    };\n\t  }\n\t\n\t  function arc() {\n\t    var innerRadius = arcInnerRadius,\n\t        outerRadius = arcOuterRadius,\n\t        cornerRadius = constant$1(0),\n\t        padRadius = null,\n\t        startAngle = arcStartAngle,\n\t        endAngle = arcEndAngle,\n\t        padAngle = arcPadAngle,\n\t        context = null;\n\t\n\t    function arc() {\n\t      var buffer,\n\t          r,\n\t          r0 = +innerRadius.apply(this, arguments),\n\t          r1 = +outerRadius.apply(this, arguments),\n\t          a0 = startAngle.apply(this, arguments) - halfPi$1,\n\t          a1 = endAngle.apply(this, arguments) - halfPi$1,\n\t          da = Math.abs(a1 - a0),\n\t          cw = a1 > a0;\n\t\n\t      if (!context) context = buffer = path();\n\t\n\t      // Ensure that the outer radius is always larger than the inner radius.\n\t      if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\t\n\t      // Is it a point?\n\t      if (!(r1 > epsilon$1)) context.moveTo(0, 0);\n\t\n\t      // Or is it a circle or annulus?\n\t      else if (da > tau$2 - epsilon$1) {\n\t        context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));\n\t        context.arc(0, 0, r1, a0, a1, !cw);\n\t        if (r0 > epsilon$1) {\n\t          context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));\n\t          context.arc(0, 0, r0, a1, a0, cw);\n\t        }\n\t      }\n\t\n\t      // Or is it a circular or annular sector?\n\t      else {\n\t        var a01 = a0,\n\t            a11 = a1,\n\t            a00 = a0,\n\t            a10 = a1,\n\t            da0 = da,\n\t            da1 = da,\n\t            ap = padAngle.apply(this, arguments) / 2,\n\t            rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),\n\t            rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n\t            rc0 = rc,\n\t            rc1 = rc,\n\t            t0,\n\t            t1;\n\t\n\t        // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n\t        if (rp > epsilon$1) {\n\t          var p0 = asin(rp / r0 * Math.sin(ap)),\n\t              p1 = asin(rp / r1 * Math.sin(ap));\n\t          if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n\t          else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n\t          if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n\t          else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n\t        }\n\t\n\t        var x01 = r1 * Math.cos(a01),\n\t            y01 = r1 * Math.sin(a01),\n\t            x10 = r0 * Math.cos(a10),\n\t            y10 = r0 * Math.sin(a10);\n\t\n\t        // Apply rounded corners?\n\t        if (rc > epsilon$1) {\n\t          var x11 = r1 * Math.cos(a11),\n\t              y11 = r1 * Math.sin(a11),\n\t              x00 = r0 * Math.cos(a00),\n\t              y00 = r0 * Math.sin(a00);\n\t\n\t          // Restrict the corner radius according to the sector angle.\n\t          if (da < pi$2) {\n\t            var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n\t                ax = x01 - oc[0],\n\t                ay = y01 - oc[1],\n\t                bx = x11 - oc[0],\n\t                by = y11 - oc[1],\n\t                kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),\n\t                lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n\t            rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n\t            rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n\t          }\n\t        }\n\t\n\t        // Is the sector collapsed to a line?\n\t        if (!(da1 > epsilon$1)) context.moveTo(x01, y01);\n\t\n\t        // Does the sector’s outer ring have rounded corners?\n\t        else if (rc1 > epsilon$1) {\n\t          t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n\t          t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\t\n\t          context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\t\n\t          // Have the corners merged?\n\t          if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\t\n\t          // Otherwise, draw the two corners and the ring.\n\t          else {\n\t            context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n\t            context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n\t            context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n\t          }\n\t        }\n\t\n\t        // Or is the outer ring just a circular arc?\n\t        else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\t\n\t        // Is there no inner ring, and it’s a circular sector?\n\t        // Or perhaps it’s an annular sector collapsed due to padding?\n\t        if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);\n\t\n\t        // Does the sector’s inner ring (or point) have rounded corners?\n\t        else if (rc0 > epsilon$1) {\n\t          t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n\t          t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\t\n\t          context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\t\n\t          // Have the corners merged?\n\t          if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\t\n\t          // Otherwise, draw the two corners and the ring.\n\t          else {\n\t            context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n\t            context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n\t            context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n\t          }\n\t        }\n\t\n\t        // Or is the inner ring just a circular arc?\n\t        else context.arc(0, 0, r0, a10, a00, cw);\n\t      }\n\t\n\t      context.closePath();\n\t\n\t      if (buffer) return context = null, buffer + \"\" || null;\n\t    }\n\t\n\t    arc.centroid = function() {\n\t      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n\t          a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;\n\t      return [Math.cos(a) * r, Math.sin(a) * r];\n\t    };\n\t\n\t    arc.innerRadius = function(_) {\n\t      return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : innerRadius;\n\t    };\n\t\n\t    arc.outerRadius = function(_) {\n\t      return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : outerRadius;\n\t    };\n\t\n\t    arc.cornerRadius = function(_) {\n\t      return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : cornerRadius;\n\t    };\n\t\n\t    arc.padRadius = function(_) {\n\t      return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), arc) : padRadius;\n\t    };\n\t\n\t    arc.startAngle = function(_) {\n\t      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : startAngle;\n\t    };\n\t\n\t    arc.endAngle = function(_) {\n\t      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : endAngle;\n\t    };\n\t\n\t    arc.padAngle = function(_) {\n\t      return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : padAngle;\n\t    };\n\t\n\t    arc.context = function(_) {\n\t      return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n\t    };\n\t\n\t    return arc;\n\t  }\n\t\n\t  function Linear(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  Linear.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; // proceed\n\t        default: this._context.lineTo(x, y); break;\n\t      }\n\t    }\n\t  };\n\t\n\t  function curveLinear(context) {\n\t    return new Linear(context);\n\t  }\n\t\n\t  function x(p) {\n\t    return p[0];\n\t  }\n\t\n\t  function y(p) {\n\t    return p[1];\n\t  }\n\t\n\t  function line() {\n\t    var x$$ = x,\n\t        y$$ = y,\n\t        defined = constant$1(true),\n\t        context = null,\n\t        curve = curveLinear,\n\t        output = null;\n\t\n\t    function line(data) {\n\t      var i,\n\t          n = data.length,\n\t          d,\n\t          defined0 = false,\n\t          buffer;\n\t\n\t      if (context == null) output = curve(buffer = path());\n\t\n\t      for (i = 0; i <= n; ++i) {\n\t        if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n\t          if (defined0 = !defined0) output.lineStart();\n\t          else output.lineEnd();\n\t        }\n\t        if (defined0) output.point(+x$$(d, i, data), +y$$(d, i, data));\n\t      }\n\t\n\t      if (buffer) return output = null, buffer + \"\" || null;\n\t    }\n\t\n\t    line.x = function(_) {\n\t      return arguments.length ? (x$$ = typeof _ === \"function\" ? _ : constant$1(+_), line) : x$$;\n\t    };\n\t\n\t    line.y = function(_) {\n\t      return arguments.length ? (y$$ = typeof _ === \"function\" ? _ : constant$1(+_), line) : y$$;\n\t    };\n\t\n\t    line.defined = function(_) {\n\t      return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), line) : defined;\n\t    };\n\t\n\t    line.curve = function(_) {\n\t      return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n\t    };\n\t\n\t    line.context = function(_) {\n\t      return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n\t    };\n\t\n\t    return line;\n\t  }\n\t\n\t  function area$1() {\n\t    var x0 = x,\n\t        x1 = null,\n\t        y0 = constant$1(0),\n\t        y1 = y,\n\t        defined = constant$1(true),\n\t        context = null,\n\t        curve = curveLinear,\n\t        output = null;\n\t\n\t    function area(data) {\n\t      var i,\n\t          j,\n\t          k,\n\t          n = data.length,\n\t          d,\n\t          defined0 = false,\n\t          buffer,\n\t          x0z = new Array(n),\n\t          y0z = new Array(n);\n\t\n\t      if (context == null) output = curve(buffer = path());\n\t\n\t      for (i = 0; i <= n; ++i) {\n\t        if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n\t          if (defined0 = !defined0) {\n\t            j = i;\n\t            output.areaStart();\n\t            output.lineStart();\n\t          } else {\n\t            output.lineEnd();\n\t            output.lineStart();\n\t            for (k = i - 1; k >= j; --k) {\n\t              output.point(x0z[k], y0z[k]);\n\t            }\n\t            output.lineEnd();\n\t            output.areaEnd();\n\t          }\n\t        }\n\t        if (defined0) {\n\t          x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n\t          output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n\t        }\n\t      }\n\t\n\t      if (buffer) return output = null, buffer + \"\" || null;\n\t    }\n\t\n\t    function arealine() {\n\t      return line().defined(defined).curve(curve).context(context);\n\t    }\n\t\n\t    area.x = function(_) {\n\t      return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), x1 = null, area) : x0;\n\t    };\n\t\n\t    area.x0 = function(_) {\n\t      return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : x0;\n\t    };\n\t\n\t    area.x1 = function(_) {\n\t      return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : x1;\n\t    };\n\t\n\t    area.y = function(_) {\n\t      return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), y1 = null, area) : y0;\n\t    };\n\t\n\t    area.y0 = function(_) {\n\t      return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : y0;\n\t    };\n\t\n\t    area.y1 = function(_) {\n\t      return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : y1;\n\t    };\n\t\n\t    area.lineX0 =\n\t    area.lineY0 = function() {\n\t      return arealine().x(x0).y(y0);\n\t    };\n\t\n\t    area.lineY1 = function() {\n\t      return arealine().x(x0).y(y1);\n\t    };\n\t\n\t    area.lineX1 = function() {\n\t      return arealine().x(x1).y(y0);\n\t    };\n\t\n\t    area.defined = function(_) {\n\t      return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), area) : defined;\n\t    };\n\t\n\t    area.curve = function(_) {\n\t      return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n\t    };\n\t\n\t    area.context = function(_) {\n\t      return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n\t    };\n\t\n\t    return area;\n\t  }\n\t\n\t  function descending$1(a, b) {\n\t    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n\t  }\n\t\n\t  function identity$1(d) {\n\t    return d;\n\t  }\n\t\n\t  function pie() {\n\t    var value = identity$1,\n\t        sortValues = descending$1,\n\t        sort = null,\n\t        startAngle = constant$1(0),\n\t        endAngle = constant$1(tau$2),\n\t        padAngle = constant$1(0);\n\t\n\t    function pie(data) {\n\t      var i,\n\t          n = data.length,\n\t          j,\n\t          k,\n\t          sum = 0,\n\t          index = new Array(n),\n\t          arcs = new Array(n),\n\t          a0 = +startAngle.apply(this, arguments),\n\t          da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),\n\t          a1,\n\t          p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n\t          pa = p * (da < 0 ? -1 : 1),\n\t          v;\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n\t          sum += v;\n\t        }\n\t      }\n\t\n\t      // Optionally sort the arcs by previously-computed values or by data.\n\t      if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n\t      else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\t\n\t      // Compute the arcs! They are stored in the original data's order.\n\t      for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n\t        j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n\t          data: data[j],\n\t          index: i,\n\t          value: v,\n\t          startAngle: a0,\n\t          endAngle: a1,\n\t          padAngle: p\n\t        };\n\t      }\n\t\n\t      return arcs;\n\t    }\n\t\n\t    pie.value = function(_) {\n\t      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), pie) : value;\n\t    };\n\t\n\t    pie.sortValues = function(_) {\n\t      return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n\t    };\n\t\n\t    pie.sort = function(_) {\n\t      return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n\t    };\n\t\n\t    pie.startAngle = function(_) {\n\t      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : startAngle;\n\t    };\n\t\n\t    pie.endAngle = function(_) {\n\t      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : endAngle;\n\t    };\n\t\n\t    pie.padAngle = function(_) {\n\t      return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : padAngle;\n\t    };\n\t\n\t    return pie;\n\t  }\n\t\n\t  var curveRadialLinear = curveRadial(curveLinear);\n\t\n\t  function Radial(curve) {\n\t    this._curve = curve;\n\t  }\n\t\n\t  Radial.prototype = {\n\t    areaStart: function() {\n\t      this._curve.areaStart();\n\t    },\n\t    areaEnd: function() {\n\t      this._curve.areaEnd();\n\t    },\n\t    lineStart: function() {\n\t      this._curve.lineStart();\n\t    },\n\t    lineEnd: function() {\n\t      this._curve.lineEnd();\n\t    },\n\t    point: function(a, r) {\n\t      this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n\t    }\n\t  };\n\t\n\t  function curveRadial(curve) {\n\t\n\t    function radial(context) {\n\t      return new Radial(curve(context));\n\t    }\n\t\n\t    radial._curve = curve;\n\t\n\t    return radial;\n\t  }\n\t\n\t  function radialLine(l) {\n\t    var c = l.curve;\n\t\n\t    l.angle = l.x, delete l.x;\n\t    l.radius = l.y, delete l.y;\n\t\n\t    l.curve = function(_) {\n\t      return arguments.length ? c(curveRadial(_)) : c()._curve;\n\t    };\n\t\n\t    return l;\n\t  }\n\t\n\t  function radialLine$1() {\n\t    return radialLine(line().curve(curveRadialLinear));\n\t  }\n\t\n\t  function radialArea() {\n\t    var a = area$1().curve(curveRadialLinear),\n\t        c = a.curve,\n\t        x0 = a.lineX0,\n\t        x1 = a.lineX1,\n\t        y0 = a.lineY0,\n\t        y1 = a.lineY1;\n\t\n\t    a.angle = a.x, delete a.x;\n\t    a.startAngle = a.x0, delete a.x0;\n\t    a.endAngle = a.x1, delete a.x1;\n\t    a.radius = a.y, delete a.y;\n\t    a.innerRadius = a.y0, delete a.y0;\n\t    a.outerRadius = a.y1, delete a.y1;\n\t    a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;\n\t    a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;\n\t    a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;\n\t    a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;\n\t\n\t    a.curve = function(_) {\n\t      return arguments.length ? c(curveRadial(_)) : c()._curve;\n\t    };\n\t\n\t    return a;\n\t  }\n\t\n\t  var circle = {\n\t    draw: function(context, size) {\n\t      var r = Math.sqrt(size / pi$2);\n\t      context.moveTo(r, 0);\n\t      context.arc(0, 0, r, 0, tau$2);\n\t    }\n\t  };\n\t\n\t  var cross$1 = {\n\t    draw: function(context, size) {\n\t      var r = Math.sqrt(size / 5) / 2;\n\t      context.moveTo(-3 * r, -r);\n\t      context.lineTo(-r, -r);\n\t      context.lineTo(-r, -3 * r);\n\t      context.lineTo(r, -3 * r);\n\t      context.lineTo(r, -r);\n\t      context.lineTo(3 * r, -r);\n\t      context.lineTo(3 * r, r);\n\t      context.lineTo(r, r);\n\t      context.lineTo(r, 3 * r);\n\t      context.lineTo(-r, 3 * r);\n\t      context.lineTo(-r, r);\n\t      context.lineTo(-3 * r, r);\n\t      context.closePath();\n\t    }\n\t  };\n\t\n\t  var tan30 = Math.sqrt(1 / 3);\n\t  var tan30_2 = tan30 * 2;\n\t  var diamond = {\n\t    draw: function(context, size) {\n\t      var y = Math.sqrt(size / tan30_2),\n\t          x = y * tan30;\n\t      context.moveTo(0, -y);\n\t      context.lineTo(x, 0);\n\t      context.lineTo(0, y);\n\t      context.lineTo(-x, 0);\n\t      context.closePath();\n\t    }\n\t  };\n\t\n\t  var ka = 0.89081309152928522810;\n\t  var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);\n\t  var kx = Math.sin(tau$2 / 10) * kr;\n\t  var ky = -Math.cos(tau$2 / 10) * kr;\n\t  var star = {\n\t    draw: function(context, size) {\n\t      var r = Math.sqrt(size * ka),\n\t          x = kx * r,\n\t          y = ky * r;\n\t      context.moveTo(0, -r);\n\t      context.lineTo(x, y);\n\t      for (var i = 1; i < 5; ++i) {\n\t        var a = tau$2 * i / 5,\n\t            c = Math.cos(a),\n\t            s = Math.sin(a);\n\t        context.lineTo(s * r, -c * r);\n\t        context.lineTo(c * x - s * y, s * x + c * y);\n\t      }\n\t      context.closePath();\n\t    }\n\t  };\n\t\n\t  var square = {\n\t    draw: function(context, size) {\n\t      var w = Math.sqrt(size),\n\t          x = -w / 2;\n\t      context.rect(x, x, w, w);\n\t    }\n\t  };\n\t\n\t  var sqrt3 = Math.sqrt(3);\n\t\n\t  var triangle = {\n\t    draw: function(context, size) {\n\t      var y = -Math.sqrt(size / (sqrt3 * 3));\n\t      context.moveTo(0, y * 2);\n\t      context.lineTo(-sqrt3 * y, -y);\n\t      context.lineTo(sqrt3 * y, -y);\n\t      context.closePath();\n\t    }\n\t  };\n\t\n\t  var c = -0.5;\n\t  var s = Math.sqrt(3) / 2;\n\t  var k = 1 / Math.sqrt(12);\n\t  var a = (k / 2 + 1) * 3;\n\t  var wye = {\n\t    draw: function(context, size) {\n\t      var r = Math.sqrt(size / a),\n\t          x0 = r / 2,\n\t          y0 = r * k,\n\t          x1 = x0,\n\t          y1 = r * k + r,\n\t          x2 = -x1,\n\t          y2 = y1;\n\t      context.moveTo(x0, y0);\n\t      context.lineTo(x1, y1);\n\t      context.lineTo(x2, y2);\n\t      context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n\t      context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n\t      context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n\t      context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n\t      context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n\t      context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n\t      context.closePath();\n\t    }\n\t  };\n\t\n\t  var symbols = [\n\t    circle,\n\t    cross$1,\n\t    diamond,\n\t    square,\n\t    star,\n\t    triangle,\n\t    wye\n\t  ];\n\t\n\t  function symbol() {\n\t    var type = constant$1(circle),\n\t        size = constant$1(64),\n\t        context = null;\n\t\n\t    function symbol() {\n\t      var buffer;\n\t      if (!context) context = buffer = path();\n\t      type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n\t      if (buffer) return context = null, buffer + \"\" || null;\n\t    }\n\t\n\t    symbol.type = function(_) {\n\t      return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$1(_), symbol) : type;\n\t    };\n\t\n\t    symbol.size = function(_) {\n\t      return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$1(+_), symbol) : size;\n\t    };\n\t\n\t    symbol.context = function(_) {\n\t      return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n\t    };\n\t\n\t    return symbol;\n\t  }\n\t\n\t  function noop() {}\n\t\n\t  function point(that, x, y) {\n\t    that._context.bezierCurveTo(\n\t      (2 * that._x0 + that._x1) / 3,\n\t      (2 * that._y0 + that._y1) / 3,\n\t      (that._x0 + 2 * that._x1) / 3,\n\t      (that._y0 + 2 * that._y1) / 3,\n\t      (that._x0 + 4 * that._x1 + x) / 6,\n\t      (that._y0 + 4 * that._y1 + y) / 6\n\t    );\n\t  }\n\t\n\t  function Basis(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  Basis.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 =\n\t      this._y0 = this._y1 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 3: point(this, this._x1, this._y1); // proceed\n\t        case 2: this._context.lineTo(this._x1, this._y1); break;\n\t      }\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n\t        default: point(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = x;\n\t      this._y0 = this._y1, this._y1 = y;\n\t    }\n\t  };\n\t\n\t  function basis(context) {\n\t    return new Basis(context);\n\t  }\n\t\n\t  function BasisClosed(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  BasisClosed.prototype = {\n\t    areaStart: noop,\n\t    areaEnd: noop,\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n\t      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 1: {\n\t          this._context.moveTo(this._x2, this._y2);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 2: {\n\t          this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n\t          this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 3: {\n\t          this.point(this._x2, this._y2);\n\t          this.point(this._x3, this._y3);\n\t          this.point(this._x4, this._y4);\n\t          break;\n\t        }\n\t      }\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n\t        case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n\t        case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n\t        default: point(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = x;\n\t      this._y0 = this._y1, this._y1 = y;\n\t    }\n\t  };\n\t\n\t  function basisClosed(context) {\n\t    return new BasisClosed(context);\n\t  }\n\t\n\t  function BasisOpen(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  BasisOpen.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 =\n\t      this._y0 = this._y1 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n\t        case 3: this._point = 4; // proceed\n\t        default: point(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = x;\n\t      this._y0 = this._y1, this._y1 = y;\n\t    }\n\t  };\n\t\n\t  function basisOpen(context) {\n\t    return new BasisOpen(context);\n\t  }\n\t\n\t  function Bundle(context, beta) {\n\t    this._basis = new Basis(context);\n\t    this._beta = beta;\n\t  }\n\t\n\t  Bundle.prototype = {\n\t    lineStart: function() {\n\t      this._x = [];\n\t      this._y = [];\n\t      this._basis.lineStart();\n\t    },\n\t    lineEnd: function() {\n\t      var x = this._x,\n\t          y = this._y,\n\t          j = x.length - 1;\n\t\n\t      if (j > 0) {\n\t        var x0 = x[0],\n\t            y0 = y[0],\n\t            dx = x[j] - x0,\n\t            dy = y[j] - y0,\n\t            i = -1,\n\t            t;\n\t\n\t        while (++i <= j) {\n\t          t = i / j;\n\t          this._basis.point(\n\t            this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n\t            this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n\t          );\n\t        }\n\t      }\n\t\n\t      this._x = this._y = null;\n\t      this._basis.lineEnd();\n\t    },\n\t    point: function(x, y) {\n\t      this._x.push(+x);\n\t      this._y.push(+y);\n\t    }\n\t  };\n\t\n\t  var bundle = (function custom(beta) {\n\t\n\t    function bundle(context) {\n\t      return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n\t    }\n\t\n\t    bundle.beta = function(beta) {\n\t      return custom(+beta);\n\t    };\n\t\n\t    return bundle;\n\t  })(0.85);\n\t\n\t  function point$1(that, x, y) {\n\t    that._context.bezierCurveTo(\n\t      that._x1 + that._k * (that._x2 - that._x0),\n\t      that._y1 + that._k * (that._y2 - that._y0),\n\t      that._x2 + that._k * (that._x1 - x),\n\t      that._y2 + that._k * (that._y1 - y),\n\t      that._x2,\n\t      that._y2\n\t    );\n\t  }\n\t\n\t  function Cardinal(context, tension) {\n\t    this._context = context;\n\t    this._k = (1 - tension) / 6;\n\t  }\n\t\n\t  Cardinal.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 =\n\t      this._y0 = this._y1 = this._y2 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 2: this._context.lineTo(this._x2, this._y2); break;\n\t        case 3: point$1(this, this._x1, this._y1); break;\n\t      }\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n\t        case 2: this._point = 3; // proceed\n\t        default: point$1(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var cardinal = (function custom(tension) {\n\t\n\t    function cardinal(context) {\n\t      return new Cardinal(context, tension);\n\t    }\n\t\n\t    cardinal.tension = function(tension) {\n\t      return custom(+tension);\n\t    };\n\t\n\t    return cardinal;\n\t  })(0);\n\t\n\t  function CardinalClosed(context, tension) {\n\t    this._context = context;\n\t    this._k = (1 - tension) / 6;\n\t  }\n\t\n\t  CardinalClosed.prototype = {\n\t    areaStart: noop,\n\t    areaEnd: noop,\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n\t      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 1: {\n\t          this._context.moveTo(this._x3, this._y3);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 2: {\n\t          this._context.lineTo(this._x3, this._y3);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 3: {\n\t          this.point(this._x3, this._y3);\n\t          this.point(this._x4, this._y4);\n\t          this.point(this._x5, this._y5);\n\t          break;\n\t        }\n\t      }\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n\t        case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n\t        case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n\t        default: point$1(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var cardinalClosed = (function custom(tension) {\n\t\n\t    function cardinal(context) {\n\t      return new CardinalClosed(context, tension);\n\t    }\n\t\n\t    cardinal.tension = function(tension) {\n\t      return custom(+tension);\n\t    };\n\t\n\t    return cardinal;\n\t  })(0);\n\t\n\t  function CardinalOpen(context, tension) {\n\t    this._context = context;\n\t    this._k = (1 - tension) / 6;\n\t  }\n\t\n\t  CardinalOpen.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 =\n\t      this._y0 = this._y1 = this._y2 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n\t        case 3: this._point = 4; // proceed\n\t        default: point$1(this, x, y); break;\n\t      }\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var cardinalOpen = (function custom(tension) {\n\t\n\t    function cardinal(context) {\n\t      return new CardinalOpen(context, tension);\n\t    }\n\t\n\t    cardinal.tension = function(tension) {\n\t      return custom(+tension);\n\t    };\n\t\n\t    return cardinal;\n\t  })(0);\n\t\n\t  function point$2(that, x, y) {\n\t    var x1 = that._x1,\n\t        y1 = that._y1,\n\t        x2 = that._x2,\n\t        y2 = that._y2;\n\t\n\t    if (that._l01_a > epsilon$1) {\n\t      var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n\t          n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n\t      x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n\t      y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n\t    }\n\t\n\t    if (that._l23_a > epsilon$1) {\n\t      var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n\t          m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n\t      x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n\t      y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n\t    }\n\t\n\t    that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n\t  }\n\t\n\t  function CatmullRom(context, alpha) {\n\t    this._context = context;\n\t    this._alpha = alpha;\n\t  }\n\t\n\t  CatmullRom.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 =\n\t      this._y0 = this._y1 = this._y2 = NaN;\n\t      this._l01_a = this._l12_a = this._l23_a =\n\t      this._l01_2a = this._l12_2a = this._l23_2a =\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 2: this._context.lineTo(this._x2, this._y2); break;\n\t        case 3: this.point(this, this._x2, this._y2); break;\n\t      }\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t\n\t      if (this._point) {\n\t        var x23 = this._x2 - x,\n\t            y23 = this._y2 - y;\n\t        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n\t      }\n\t\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; // proceed\n\t        default: point$2(this, x, y); break;\n\t      }\n\t\n\t      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n\t      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var catmullRom = (function custom(alpha) {\n\t\n\t    function catmullRom(context) {\n\t      return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n\t    }\n\t\n\t    catmullRom.alpha = function(alpha) {\n\t      return custom(+alpha);\n\t    };\n\t\n\t    return catmullRom;\n\t  })(0.5);\n\t\n\t  function CatmullRomClosed(context, alpha) {\n\t    this._context = context;\n\t    this._alpha = alpha;\n\t  }\n\t\n\t  CatmullRomClosed.prototype = {\n\t    areaStart: noop,\n\t    areaEnd: noop,\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n\t      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n\t      this._l01_a = this._l12_a = this._l23_a =\n\t      this._l01_2a = this._l12_2a = this._l23_2a =\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 1: {\n\t          this._context.moveTo(this._x3, this._y3);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 2: {\n\t          this._context.lineTo(this._x3, this._y3);\n\t          this._context.closePath();\n\t          break;\n\t        }\n\t        case 3: {\n\t          this.point(this._x3, this._y3);\n\t          this.point(this._x4, this._y4);\n\t          this.point(this._x5, this._y5);\n\t          break;\n\t        }\n\t      }\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t\n\t      if (this._point) {\n\t        var x23 = this._x2 - x,\n\t            y23 = this._y2 - y;\n\t        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n\t      }\n\t\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n\t        case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n\t        case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n\t        default: point$2(this, x, y); break;\n\t      }\n\t\n\t      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n\t      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var catmullRomClosed = (function custom(alpha) {\n\t\n\t    function catmullRom(context) {\n\t      return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n\t    }\n\t\n\t    catmullRom.alpha = function(alpha) {\n\t      return custom(+alpha);\n\t    };\n\t\n\t    return catmullRom;\n\t  })(0.5);\n\t\n\t  function CatmullRomOpen(context, alpha) {\n\t    this._context = context;\n\t    this._alpha = alpha;\n\t  }\n\t\n\t  CatmullRomOpen.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 = this._x2 =\n\t      this._y0 = this._y1 = this._y2 = NaN;\n\t      this._l01_a = this._l12_a = this._l23_a =\n\t      this._l01_2a = this._l12_2a = this._l23_2a =\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t\n\t      if (this._point) {\n\t        var x23 = this._x2 - x,\n\t            y23 = this._y2 - y;\n\t        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n\t      }\n\t\n\t      switch (this._point) {\n\t        case 0: this._point = 1; break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n\t        case 3: this._point = 4; // proceed\n\t        default: point$2(this, x, y); break;\n\t      }\n\t\n\t      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n\t      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n\t      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n\t      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n\t    }\n\t  };\n\t\n\t  var catmullRomOpen = (function custom(alpha) {\n\t\n\t    function catmullRom(context) {\n\t      return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n\t    }\n\t\n\t    catmullRom.alpha = function(alpha) {\n\t      return custom(+alpha);\n\t    };\n\t\n\t    return catmullRom;\n\t  })(0.5);\n\t\n\t  function LinearClosed(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  LinearClosed.prototype = {\n\t    areaStart: noop,\n\t    areaEnd: noop,\n\t    lineStart: function() {\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (this._point) this._context.closePath();\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      if (this._point) this._context.lineTo(x, y);\n\t      else this._point = 1, this._context.moveTo(x, y);\n\t    }\n\t  };\n\t\n\t  function linearClosed(context) {\n\t    return new LinearClosed(context);\n\t  }\n\t\n\t  function sign(x) {\n\t    return x < 0 ? -1 : 1;\n\t  }\n\t\n\t  // Calculate the slopes of the tangents (Hermite-type interpolation) based on\n\t  // the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n\t  // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n\t  // NOV(II), P. 443, 1990.\n\t  function slope3(that, x2, y2) {\n\t    var h0 = that._x1 - that._x0,\n\t        h1 = x2 - that._x1,\n\t        s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n\t        s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n\t        p = (s0 * h1 + s1 * h0) / (h0 + h1);\n\t    return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n\t  }\n\t\n\t  // Calculate a one-sided slope.\n\t  function slope2(that, t) {\n\t    var h = that._x1 - that._x0;\n\t    return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n\t  }\n\t\n\t  // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n\t  // \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n\t  // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\n\t  function point$3(that, t0, t1) {\n\t    var x0 = that._x0,\n\t        y0 = that._y0,\n\t        x1 = that._x1,\n\t        y1 = that._y1,\n\t        dx = (x1 - x0) / 3;\n\t    that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n\t  }\n\t\n\t  function MonotoneX(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  MonotoneX.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x0 = this._x1 =\n\t      this._y0 = this._y1 =\n\t      this._t0 = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      switch (this._point) {\n\t        case 2: this._context.lineTo(this._x1, this._y1); break;\n\t        case 3: point$3(this, this._t0, slope2(this, this._t0)); break;\n\t      }\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      var t1 = NaN;\n\t\n\t      x = +x, y = +y;\n\t      if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; break;\n\t        case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n\t        default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;\n\t      }\n\t\n\t      this._x0 = this._x1, this._x1 = x;\n\t      this._y0 = this._y1, this._y1 = y;\n\t      this._t0 = t1;\n\t    }\n\t  }\n\t\n\t  function MonotoneY(context) {\n\t    this._context = new ReflectContext(context);\n\t  }\n\t\n\t  (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n\t    MonotoneX.prototype.point.call(this, y, x);\n\t  };\n\t\n\t  function ReflectContext(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  ReflectContext.prototype = {\n\t    moveTo: function(x, y) { this._context.moveTo(y, x); },\n\t    closePath: function() { this._context.closePath(); },\n\t    lineTo: function(x, y) { this._context.lineTo(y, x); },\n\t    bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n\t  };\n\t\n\t  function monotoneX(context) {\n\t    return new MonotoneX(context);\n\t  }\n\t\n\t  function monotoneY(context) {\n\t    return new MonotoneY(context);\n\t  }\n\t\n\t  function Natural(context) {\n\t    this._context = context;\n\t  }\n\t\n\t  Natural.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x = [];\n\t      this._y = [];\n\t    },\n\t    lineEnd: function() {\n\t      var x = this._x,\n\t          y = this._y,\n\t          n = x.length;\n\t\n\t      if (n) {\n\t        this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n\t        if (n === 2) {\n\t          this._context.lineTo(x[1], y[1]);\n\t        } else {\n\t          var px = controlPoints(x),\n\t              py = controlPoints(y);\n\t          for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n\t            this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n\t          }\n\t        }\n\t      }\n\t\n\t      if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n\t      this._line = 1 - this._line;\n\t      this._x = this._y = null;\n\t    },\n\t    point: function(x, y) {\n\t      this._x.push(+x);\n\t      this._y.push(+y);\n\t    }\n\t  };\n\t\n\t  // See https://www.particleincell.com/2012/bezier-splines/ for derivation.\n\t  function controlPoints(x) {\n\t    var i,\n\t        n = x.length - 1,\n\t        m,\n\t        a = new Array(n),\n\t        b = new Array(n),\n\t        r = new Array(n);\n\t    a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n\t    for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n\t    a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n\t    for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n\t    a[n - 1] = r[n - 1] / b[n - 1];\n\t    for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n\t    b[n - 1] = (x[n] + a[n - 1]) / 2;\n\t    for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n\t    return [a, b];\n\t  }\n\t\n\t  function natural(context) {\n\t    return new Natural(context);\n\t  }\n\t\n\t  function Step(context, t) {\n\t    this._context = context;\n\t    this._t = t;\n\t  }\n\t\n\t  Step.prototype = {\n\t    areaStart: function() {\n\t      this._line = 0;\n\t    },\n\t    areaEnd: function() {\n\t      this._line = NaN;\n\t    },\n\t    lineStart: function() {\n\t      this._x = this._y = NaN;\n\t      this._point = 0;\n\t    },\n\t    lineEnd: function() {\n\t      if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n\t      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n\t      if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n\t    },\n\t    point: function(x, y) {\n\t      x = +x, y = +y;\n\t      switch (this._point) {\n\t        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n\t        case 1: this._point = 2; // proceed\n\t        default: {\n\t          if (this._t <= 0) {\n\t            this._context.lineTo(this._x, y);\n\t            this._context.lineTo(x, y);\n\t          } else {\n\t            var x1 = this._x * (1 - this._t) + x * this._t;\n\t            this._context.lineTo(x1, this._y);\n\t            this._context.lineTo(x1, y);\n\t          }\n\t          break;\n\t        }\n\t      }\n\t      this._x = x, this._y = y;\n\t    }\n\t  };\n\t\n\t  function step(context) {\n\t    return new Step(context, 0.5);\n\t  }\n\t\n\t  function stepBefore(context) {\n\t    return new Step(context, 0);\n\t  }\n\t\n\t  function stepAfter(context) {\n\t    return new Step(context, 1);\n\t  }\n\t\n\t  var slice$2 = Array.prototype.slice;\n\t\n\t  function none(series, order) {\n\t    if (!((n = series.length) > 1)) return;\n\t    for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n\t      s0 = s1, s1 = series[order[i]];\n\t      for (var j = 0; j < m; ++j) {\n\t        s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n\t      }\n\t    }\n\t  }\n\t\n\t  function none$1(series) {\n\t    var n = series.length, o = new Array(n);\n\t    while (--n >= 0) o[n] = n;\n\t    return o;\n\t  }\n\t\n\t  function stackValue(d, key) {\n\t    return d[key];\n\t  }\n\t\n\t  function stack() {\n\t    var keys = constant$1([]),\n\t        order = none$1,\n\t        offset = none,\n\t        value = stackValue;\n\t\n\t    function stack(data) {\n\t      var kz = keys.apply(this, arguments),\n\t          i,\n\t          m = data.length,\n\t          n = kz.length,\n\t          sz = new Array(n),\n\t          oz;\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n\t          si[j] = sij = [0, +value(data[j], ki, j, data)];\n\t          sij.data = data[j];\n\t        }\n\t        si.key = ki;\n\t      }\n\t\n\t      for (i = 0, oz = order(sz); i < n; ++i) {\n\t        sz[oz[i]].index = i;\n\t      }\n\t\n\t      offset(sz, oz);\n\t      return sz;\n\t    }\n\t\n\t    stack.keys = function(_) {\n\t      return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant$1(slice$2.call(_)), stack) : keys;\n\t    };\n\t\n\t    stack.value = function(_) {\n\t      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), stack) : value;\n\t    };\n\t\n\t    stack.order = function(_) {\n\t      return arguments.length ? (order = _ == null ? none$1 : typeof _ === \"function\" ? _ : constant$1(slice$2.call(_)), stack) : order;\n\t    };\n\t\n\t    stack.offset = function(_) {\n\t      return arguments.length ? (offset = _ == null ? none : _, stack) : offset;\n\t    };\n\t\n\t    return stack;\n\t  }\n\t\n\t  function expand(series, order) {\n\t    if (!((n = series.length) > 0)) return;\n\t    for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n\t      for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n\t      if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n\t    }\n\t    none(series, order);\n\t  }\n\t\n\t  function silhouette(series, order) {\n\t    if (!((n = series.length) > 0)) return;\n\t    for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n\t      for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n\t      s0[j][1] += s0[j][0] = -y / 2;\n\t    }\n\t    none(series, order);\n\t  }\n\t\n\t  function wiggle(series, order) {\n\t    if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n\t    for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n\t      for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n\t        var si = series[order[i]],\n\t            sij0 = si[j][1] || 0,\n\t            sij1 = si[j - 1][1] || 0,\n\t            s3 = (sij0 - sij1) / 2;\n\t        for (var k = 0; k < i; ++k) {\n\t          var sk = series[order[k]],\n\t              skj0 = sk[j][1] || 0,\n\t              skj1 = sk[j - 1][1] || 0;\n\t          s3 += skj0 - skj1;\n\t        }\n\t        s1 += sij0, s2 += s3 * sij0;\n\t      }\n\t      s0[j - 1][1] += s0[j - 1][0] = y;\n\t      if (s1) y -= s2 / s1;\n\t    }\n\t    s0[j - 1][1] += s0[j - 1][0] = y;\n\t    none(series, order);\n\t  }\n\t\n\t  function ascending$1(series) {\n\t    var sums = series.map(sum$1);\n\t    return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });\n\t  }\n\t\n\t  function sum$1(series) {\n\t    var s = 0, i = -1, n = series.length, v;\n\t    while (++i < n) if (v = +series[i][1]) s += v;\n\t    return s;\n\t  }\n\t\n\t  function descending$2(series) {\n\t    return ascending$1(series).reverse();\n\t  }\n\t\n\t  function insideOut(series) {\n\t    var n = series.length,\n\t        i,\n\t        j,\n\t        sums = series.map(sum$1),\n\t        order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),\n\t        top = 0,\n\t        bottom = 0,\n\t        tops = [],\n\t        bottoms = [];\n\t\n\t    for (i = 0; i < n; ++i) {\n\t      j = order[i];\n\t      if (top < bottom) {\n\t        top += sums[j];\n\t        tops.push(j);\n\t      } else {\n\t        bottom += sums[j];\n\t        bottoms.push(j);\n\t      }\n\t    }\n\t\n\t    return bottoms.reverse().concat(tops);\n\t  }\n\t\n\t  function reverse(series) {\n\t    return none$1(series).reverse();\n\t  }\n\t\n\t  function define(constructor, factory, prototype) {\n\t    constructor.prototype = factory.prototype = prototype;\n\t    prototype.constructor = constructor;\n\t  }\n\t\n\t  function extend(parent, definition) {\n\t    var prototype = Object.create(parent.prototype);\n\t    for (var key in definition) prototype[key] = definition[key];\n\t    return prototype;\n\t  }\n\t\n\t  function Color() {}\n\t\n\t  var darker = 0.7;\n\t  var brighter = 1 / darker;\n\t\n\t  var reHex3 = /^#([0-9a-f]{3})$/;\n\t  var reHex6 = /^#([0-9a-f]{6})$/;\n\t  var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n\t  var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n\t  var reRgbaInteger = /^rgba\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var reRgbaPercent = /^rgba\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n\t  var reHslaPercent = /^hsla\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n\t  var named = {\n\t    aliceblue: 0xf0f8ff,\n\t    antiquewhite: 0xfaebd7,\n\t    aqua: 0x00ffff,\n\t    aquamarine: 0x7fffd4,\n\t    azure: 0xf0ffff,\n\t    beige: 0xf5f5dc,\n\t    bisque: 0xffe4c4,\n\t    black: 0x000000,\n\t    blanchedalmond: 0xffebcd,\n\t    blue: 0x0000ff,\n\t    blueviolet: 0x8a2be2,\n\t    brown: 0xa52a2a,\n\t    burlywood: 0xdeb887,\n\t    cadetblue: 0x5f9ea0,\n\t    chartreuse: 0x7fff00,\n\t    chocolate: 0xd2691e,\n\t    coral: 0xff7f50,\n\t    cornflowerblue: 0x6495ed,\n\t    cornsilk: 0xfff8dc,\n\t    crimson: 0xdc143c,\n\t    cyan: 0x00ffff,\n\t    darkblue: 0x00008b,\n\t    darkcyan: 0x008b8b,\n\t    darkgoldenrod: 0xb8860b,\n\t    darkgray: 0xa9a9a9,\n\t    darkgreen: 0x006400,\n\t    darkgrey: 0xa9a9a9,\n\t    darkkhaki: 0xbdb76b,\n\t    darkmagenta: 0x8b008b,\n\t    darkolivegreen: 0x556b2f,\n\t    darkorange: 0xff8c00,\n\t    darkorchid: 0x9932cc,\n\t    darkred: 0x8b0000,\n\t    darksalmon: 0xe9967a,\n\t    darkseagreen: 0x8fbc8f,\n\t    darkslateblue: 0x483d8b,\n\t    darkslategray: 0x2f4f4f,\n\t    darkslategrey: 0x2f4f4f,\n\t    darkturquoise: 0x00ced1,\n\t    darkviolet: 0x9400d3,\n\t    deeppink: 0xff1493,\n\t    deepskyblue: 0x00bfff,\n\t    dimgray: 0x696969,\n\t    dimgrey: 0x696969,\n\t    dodgerblue: 0x1e90ff,\n\t    firebrick: 0xb22222,\n\t    floralwhite: 0xfffaf0,\n\t    forestgreen: 0x228b22,\n\t    fuchsia: 0xff00ff,\n\t    gainsboro: 0xdcdcdc,\n\t    ghostwhite: 0xf8f8ff,\n\t    gold: 0xffd700,\n\t    goldenrod: 0xdaa520,\n\t    gray: 0x808080,\n\t    green: 0x008000,\n\t    greenyellow: 0xadff2f,\n\t    grey: 0x808080,\n\t    honeydew: 0xf0fff0,\n\t    hotpink: 0xff69b4,\n\t    indianred: 0xcd5c5c,\n\t    indigo: 0x4b0082,\n\t    ivory: 0xfffff0,\n\t    khaki: 0xf0e68c,\n\t    lavender: 0xe6e6fa,\n\t    lavenderblush: 0xfff0f5,\n\t    lawngreen: 0x7cfc00,\n\t    lemonchiffon: 0xfffacd,\n\t    lightblue: 0xadd8e6,\n\t    lightcoral: 0xf08080,\n\t    lightcyan: 0xe0ffff,\n\t    lightgoldenrodyellow: 0xfafad2,\n\t    lightgray: 0xd3d3d3,\n\t    lightgreen: 0x90ee90,\n\t    lightgrey: 0xd3d3d3,\n\t    lightpink: 0xffb6c1,\n\t    lightsalmon: 0xffa07a,\n\t    lightseagreen: 0x20b2aa,\n\t    lightskyblue: 0x87cefa,\n\t    lightslategray: 0x778899,\n\t    lightslategrey: 0x778899,\n\t    lightsteelblue: 0xb0c4de,\n\t    lightyellow: 0xffffe0,\n\t    lime: 0x00ff00,\n\t    limegreen: 0x32cd32,\n\t    linen: 0xfaf0e6,\n\t    magenta: 0xff00ff,\n\t    maroon: 0x800000,\n\t    mediumaquamarine: 0x66cdaa,\n\t    mediumblue: 0x0000cd,\n\t    mediumorchid: 0xba55d3,\n\t    mediumpurple: 0x9370db,\n\t    mediumseagreen: 0x3cb371,\n\t    mediumslateblue: 0x7b68ee,\n\t    mediumspringgreen: 0x00fa9a,\n\t    mediumturquoise: 0x48d1cc,\n\t    mediumvioletred: 0xc71585,\n\t    midnightblue: 0x191970,\n\t    mintcream: 0xf5fffa,\n\t    mistyrose: 0xffe4e1,\n\t    moccasin: 0xffe4b5,\n\t    navajowhite: 0xffdead,\n\t    navy: 0x000080,\n\t    oldlace: 0xfdf5e6,\n\t    olive: 0x808000,\n\t    olivedrab: 0x6b8e23,\n\t    orange: 0xffa500,\n\t    orangered: 0xff4500,\n\t    orchid: 0xda70d6,\n\t    palegoldenrod: 0xeee8aa,\n\t    palegreen: 0x98fb98,\n\t    paleturquoise: 0xafeeee,\n\t    palevioletred: 0xdb7093,\n\t    papayawhip: 0xffefd5,\n\t    peachpuff: 0xffdab9,\n\t    peru: 0xcd853f,\n\t    pink: 0xffc0cb,\n\t    plum: 0xdda0dd,\n\t    powderblue: 0xb0e0e6,\n\t    purple: 0x800080,\n\t    rebeccapurple: 0x663399,\n\t    red: 0xff0000,\n\t    rosybrown: 0xbc8f8f,\n\t    royalblue: 0x4169e1,\n\t    saddlebrown: 0x8b4513,\n\t    salmon: 0xfa8072,\n\t    sandybrown: 0xf4a460,\n\t    seagreen: 0x2e8b57,\n\t    seashell: 0xfff5ee,\n\t    sienna: 0xa0522d,\n\t    silver: 0xc0c0c0,\n\t    skyblue: 0x87ceeb,\n\t    slateblue: 0x6a5acd,\n\t    slategray: 0x708090,\n\t    slategrey: 0x708090,\n\t    snow: 0xfffafa,\n\t    springgreen: 0x00ff7f,\n\t    steelblue: 0x4682b4,\n\t    tan: 0xd2b48c,\n\t    teal: 0x008080,\n\t    thistle: 0xd8bfd8,\n\t    tomato: 0xff6347,\n\t    turquoise: 0x40e0d0,\n\t    violet: 0xee82ee,\n\t    wheat: 0xf5deb3,\n\t    white: 0xffffff,\n\t    whitesmoke: 0xf5f5f5,\n\t    yellow: 0xffff00,\n\t    yellowgreen: 0x9acd32\n\t  };\n\t\n\t  define(Color, color, {\n\t    displayable: function() {\n\t      return this.rgb().displayable();\n\t    },\n\t    toString: function() {\n\t      return this.rgb() + \"\";\n\t    }\n\t  });\n\t\n\t  function color(format) {\n\t    var m;\n\t    format = (format + \"\").trim().toLowerCase();\n\t    return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n\t        : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n\t        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n\t        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n\t        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n\t        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n\t        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n\t        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n\t        : named.hasOwnProperty(format) ? rgbn(named[format])\n\t        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n\t        : null;\n\t  }\n\t\n\t  function rgbn(n) {\n\t    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n\t  }\n\t\n\t  function rgba(r, g, b, a) {\n\t    if (a <= 0) r = g = b = NaN;\n\t    return new Rgb(r, g, b, a);\n\t  }\n\t\n\t  function rgbConvert(o) {\n\t    if (!(o instanceof Color)) o = color(o);\n\t    if (!o) return new Rgb;\n\t    o = o.rgb();\n\t    return new Rgb(o.r, o.g, o.b, o.opacity);\n\t  }\n\t\n\t  function colorRgb(r, g, b, opacity) {\n\t    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Rgb(r, g, b, opacity) {\n\t    this.r = +r;\n\t    this.g = +g;\n\t    this.b = +b;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Rgb, colorRgb, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      return this;\n\t    },\n\t    displayable: function() {\n\t      return (0 <= this.r && this.r <= 255)\n\t          && (0 <= this.g && this.g <= 255)\n\t          && (0 <= this.b && this.b <= 255)\n\t          && (0 <= this.opacity && this.opacity <= 1);\n\t    },\n\t    toString: function() {\n\t      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n\t      return (a === 1 ? \"rgb(\" : \"rgba(\")\n\t          + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n\t          + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n\t          + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n\t          + (a === 1 ? \")\" : \", \" + a + \")\");\n\t    }\n\t  }));\n\t\n\t  function hsla(h, s, l, a) {\n\t    if (a <= 0) h = s = l = NaN;\n\t    else if (l <= 0 || l >= 1) h = s = NaN;\n\t    else if (s <= 0) h = NaN;\n\t    return new Hsl(h, s, l, a);\n\t  }\n\t\n\t  function hslConvert(o) {\n\t    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n\t    if (!(o instanceof Color)) o = color(o);\n\t    if (!o) return new Hsl;\n\t    if (o instanceof Hsl) return o;\n\t    o = o.rgb();\n\t    var r = o.r / 255,\n\t        g = o.g / 255,\n\t        b = o.b / 255,\n\t        min = Math.min(r, g, b),\n\t        max = Math.max(r, g, b),\n\t        h = NaN,\n\t        s = max - min,\n\t        l = (max + min) / 2;\n\t    if (s) {\n\t      if (r === max) h = (g - b) / s + (g < b) * 6;\n\t      else if (g === max) h = (b - r) / s + 2;\n\t      else h = (r - g) / s + 4;\n\t      s /= l < 0.5 ? max + min : 2 - max - min;\n\t      h *= 60;\n\t    } else {\n\t      s = l > 0 && l < 1 ? 0 : h;\n\t    }\n\t    return new Hsl(h, s, l, o.opacity);\n\t  }\n\t\n\t  function colorHsl(h, s, l, opacity) {\n\t    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Hsl(h, s, l, opacity) {\n\t    this.h = +h;\n\t    this.s = +s;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Hsl, colorHsl, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var h = this.h % 360 + (this.h < 0) * 360,\n\t          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n\t          l = this.l,\n\t          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n\t          m1 = 2 * l - m2;\n\t      return new Rgb(\n\t        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n\t        hsl2rgb(h, m1, m2),\n\t        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n\t        this.opacity\n\t      );\n\t    },\n\t    displayable: function() {\n\t      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n\t          && (0 <= this.l && this.l <= 1)\n\t          && (0 <= this.opacity && this.opacity <= 1);\n\t    }\n\t  }));\n\t\n\t  /* From FvD 13.37, CSS Color Module Level 3 */\n\t  function hsl2rgb(h, m1, m2) {\n\t    return (h < 60 ? m1 + (m2 - m1) * h / 60\n\t        : h < 180 ? m2\n\t        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n\t        : m1) * 255;\n\t  }\n\t\n\t  var deg2rad = Math.PI / 180;\n\t  var rad2deg = 180 / Math.PI;\n\t\n\t  var Kn = 18;\n\t  var Xn = 0.950470;\n\t  var Yn = 1;\n\t  var Zn = 1.088830;\n\t  var t0 = 4 / 29;\n\t  var t1 = 6 / 29;\n\t  var t2 = 3 * t1 * t1;\n\t  var t3 = t1 * t1 * t1;\n\t  function labConvert(o) {\n\t    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n\t    if (o instanceof Hcl) {\n\t      var h = o.h * deg2rad;\n\t      return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n\t    }\n\t    if (!(o instanceof Rgb)) o = rgbConvert(o);\n\t    var b = rgb2xyz(o.r),\n\t        a = rgb2xyz(o.g),\n\t        l = rgb2xyz(o.b),\n\t        x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n\t        y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n\t        z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\t    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n\t  }\n\t\n\t  function lab(l, a, b, opacity) {\n\t    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Lab(l, a, b, opacity) {\n\t    this.l = +l;\n\t    this.a = +a;\n\t    this.b = +b;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Lab, lab, extend(Color, {\n\t    brighter: function(k) {\n\t      return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var y = (this.l + 16) / 116,\n\t          x = isNaN(this.a) ? y : y + this.a / 500,\n\t          z = isNaN(this.b) ? y : y - this.b / 200;\n\t      y = Yn * lab2xyz(y);\n\t      x = Xn * lab2xyz(x);\n\t      z = Zn * lab2xyz(z);\n\t      return new Rgb(\n\t        xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n\t        xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n\t        xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n\t        this.opacity\n\t      );\n\t    }\n\t  }));\n\t\n\t  function xyz2lab(t) {\n\t    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n\t  }\n\t\n\t  function lab2xyz(t) {\n\t    return t > t1 ? t * t * t : t2 * (t - t0);\n\t  }\n\t\n\t  function xyz2rgb(x) {\n\t    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n\t  }\n\t\n\t  function rgb2xyz(x) {\n\t    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n\t  }\n\t\n\t  function hclConvert(o) {\n\t    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n\t    if (!(o instanceof Lab)) o = labConvert(o);\n\t    var h = Math.atan2(o.b, o.a) * rad2deg;\n\t    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n\t  }\n\t\n\t  function colorHcl(h, c, l, opacity) {\n\t    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Hcl(h, c, l, opacity) {\n\t    this.h = +h;\n\t    this.c = +c;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Hcl, colorHcl, extend(Color, {\n\t    brighter: function(k) {\n\t      return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n\t    },\n\t    rgb: function() {\n\t      return labConvert(this).rgb();\n\t    }\n\t  }));\n\t\n\t  var A = -0.14861;\n\t  var B = +1.78277;\n\t  var C = -0.29227;\n\t  var D = -0.90649;\n\t  var E = +1.97294;\n\t  var ED = E * D;\n\t  var EB = E * B;\n\t  var BC_DA = B * C - D * A;\n\t  function cubehelixConvert(o) {\n\t    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n\t    if (!(o instanceof Rgb)) o = rgbConvert(o);\n\t    var r = o.r / 255,\n\t        g = o.g / 255,\n\t        b = o.b / 255,\n\t        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n\t        bl = b - l,\n\t        k = (E * (g - l) - C * bl) / D,\n\t        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n\t        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n\t    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n\t  }\n\t\n\t  function cubehelix(h, s, l, opacity) {\n\t    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n\t  }\n\t\n\t  function Cubehelix(h, s, l, opacity) {\n\t    this.h = +h;\n\t    this.s = +s;\n\t    this.l = +l;\n\t    this.opacity = +opacity;\n\t  }\n\t\n\t  define(Cubehelix, cubehelix, extend(Color, {\n\t    brighter: function(k) {\n\t      k = k == null ? brighter : Math.pow(brighter, k);\n\t      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    darker: function(k) {\n\t      k = k == null ? darker : Math.pow(darker, k);\n\t      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n\t    },\n\t    rgb: function() {\n\t      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n\t          l = +this.l,\n\t          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n\t          cosh = Math.cos(h),\n\t          sinh = Math.sin(h);\n\t      return new Rgb(\n\t        255 * (l + a * (A * cosh + B * sinh)),\n\t        255 * (l + a * (C * cosh + D * sinh)),\n\t        255 * (l + a * (E * cosh)),\n\t        this.opacity\n\t      );\n\t    }\n\t  }));\n\t\n\t  function basis$1(t1, v0, v1, v2, v3) {\n\t    var t2 = t1 * t1, t3 = t2 * t1;\n\t    return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n\t        + (4 - 6 * t2 + 3 * t3) * v1\n\t        + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n\t        + t3 * v3) / 6;\n\t  }\n\t\n\t  function basis$2(values) {\n\t    var n = values.length - 1;\n\t    return function(t) {\n\t      var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n\t          v1 = values[i],\n\t          v2 = values[i + 1],\n\t          v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n\t          v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n\t      return basis$1((t - i / n) * n, v0, v1, v2, v3);\n\t    };\n\t  }\n\t\n\t  function basisClosed$1(values) {\n\t    var n = values.length;\n\t    return function(t) {\n\t      var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n\t          v0 = values[(i + n - 1) % n],\n\t          v1 = values[i % n],\n\t          v2 = values[(i + 1) % n],\n\t          v3 = values[(i + 2) % n];\n\t      return basis$1((t - i / n) * n, v0, v1, v2, v3);\n\t    };\n\t  }\n\t\n\t  function constant$2(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function linear$1(a, d) {\n\t    return function(t) {\n\t      return a + t * d;\n\t    };\n\t  }\n\t\n\t  function exponential$1(a, b, y) {\n\t    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n\t      return Math.pow(a + t * b, y);\n\t    };\n\t  }\n\t\n\t  function hue(a, b) {\n\t    var d = b - a;\n\t    return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$2(isNaN(a) ? b : a);\n\t  }\n\t\n\t  function gamma(y) {\n\t    return (y = +y) === 1 ? nogamma : function(a, b) {\n\t      return b - a ? exponential$1(a, b, y) : constant$2(isNaN(a) ? b : a);\n\t    };\n\t  }\n\t\n\t  function nogamma(a, b) {\n\t    var d = b - a;\n\t    return d ? linear$1(a, d) : constant$2(isNaN(a) ? b : a);\n\t  }\n\t\n\t  var interpolateRgb = (function rgbGamma(y) {\n\t    var color = gamma(y);\n\t\n\t    function rgb(start, end) {\n\t      var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n\t          g = color(start.g, end.g),\n\t          b = color(start.b, end.b),\n\t          opacity = color(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.r = r(t);\n\t        start.g = g(t);\n\t        start.b = b(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t\n\t    rgb.gamma = rgbGamma;\n\t\n\t    return rgb;\n\t  })(1);\n\t\n\t  function rgbSpline(spline) {\n\t    return function(colors) {\n\t      var n = colors.length,\n\t          r = new Array(n),\n\t          g = new Array(n),\n\t          b = new Array(n),\n\t          i, color;\n\t      for (i = 0; i < n; ++i) {\n\t        color = colorRgb(colors[i]);\n\t        r[i] = color.r || 0;\n\t        g[i] = color.g || 0;\n\t        b[i] = color.b || 0;\n\t      }\n\t      r = spline(r);\n\t      g = spline(g);\n\t      b = spline(b);\n\t      color.opacity = 1;\n\t      return function(t) {\n\t        color.r = r(t);\n\t        color.g = g(t);\n\t        color.b = b(t);\n\t        return color + \"\";\n\t      };\n\t    };\n\t  }\n\t\n\t  var rgbBasis = rgbSpline(basis$2);\n\t  var rgbBasisClosed = rgbSpline(basisClosed$1);\n\t\n\t  function array$1(a, b) {\n\t    var nb = b ? b.length : 0,\n\t        na = a ? Math.min(nb, a.length) : 0,\n\t        x = new Array(nb),\n\t        c = new Array(nb),\n\t        i;\n\t\n\t    for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n\t    for (; i < nb; ++i) c[i] = b[i];\n\t\n\t    return function(t) {\n\t      for (i = 0; i < na; ++i) c[i] = x[i](t);\n\t      return c;\n\t    };\n\t  }\n\t\n\t  function date(a, b) {\n\t    var d = new Date;\n\t    return a = +a, b -= a, function(t) {\n\t      return d.setTime(a + b * t), d;\n\t    };\n\t  }\n\t\n\t  function interpolateNumber(a, b) {\n\t    return a = +a, b -= a, function(t) {\n\t      return a + b * t;\n\t    };\n\t  }\n\t\n\t  function object(a, b) {\n\t    var i = {},\n\t        c = {},\n\t        k;\n\t\n\t    if (a === null || typeof a !== \"object\") a = {};\n\t    if (b === null || typeof b !== \"object\") b = {};\n\t\n\t    for (k in b) {\n\t      if (k in a) {\n\t        i[k] = interpolate(a[k], b[k]);\n\t      } else {\n\t        c[k] = b[k];\n\t      }\n\t    }\n\t\n\t    return function(t) {\n\t      for (k in i) c[k] = i[k](t);\n\t      return c;\n\t    };\n\t  }\n\t\n\t  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\n\t  var reB = new RegExp(reA.source, \"g\");\n\t  function zero(b) {\n\t    return function() {\n\t      return b;\n\t    };\n\t  }\n\t\n\t  function one(b) {\n\t    return function(t) {\n\t      return b(t) + \"\";\n\t    };\n\t  }\n\t\n\t  function interpolateString(a, b) {\n\t    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n\t        am, // current match in a\n\t        bm, // current match in b\n\t        bs, // string preceding current number in b, if any\n\t        i = -1, // index in s\n\t        s = [], // string constants and placeholders\n\t        q = []; // number interpolators\n\t\n\t    // Coerce inputs to strings.\n\t    a = a + \"\", b = b + \"\";\n\t\n\t    // Interpolate pairs of numbers in a & b.\n\t    while ((am = reA.exec(a))\n\t        && (bm = reB.exec(b))) {\n\t      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n\t        bs = b.slice(bi, bs);\n\t        if (s[i]) s[i] += bs; // coalesce with previous string\n\t        else s[++i] = bs;\n\t      }\n\t      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n\t        if (s[i]) s[i] += bm; // coalesce with previous string\n\t        else s[++i] = bm;\n\t      } else { // interpolate non-matching numbers\n\t        s[++i] = null;\n\t        q.push({i: i, x: interpolateNumber(am, bm)});\n\t      }\n\t      bi = reB.lastIndex;\n\t    }\n\t\n\t    // Add remains of b.\n\t    if (bi < b.length) {\n\t      bs = b.slice(bi);\n\t      if (s[i]) s[i] += bs; // coalesce with previous string\n\t      else s[++i] = bs;\n\t    }\n\t\n\t    // Special optimization for only a single match.\n\t    // Otherwise, interpolate each of the numbers and rejoin the string.\n\t    return s.length < 2 ? (q[0]\n\t        ? one(q[0].x)\n\t        : zero(b))\n\t        : (b = q.length, function(t) {\n\t            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n\t            return s.join(\"\");\n\t          });\n\t  }\n\t\n\t  function interpolate(a, b) {\n\t    var t = typeof b, c;\n\t    return b == null || t === \"boolean\" ? constant$2(b)\n\t        : (t === \"number\" ? interpolateNumber\n\t        : t === \"string\" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)\n\t        : b instanceof color ? interpolateRgb\n\t        : b instanceof Date ? date\n\t        : Array.isArray(b) ? array$1\n\t        : isNaN(b) ? object\n\t        : interpolateNumber)(a, b);\n\t  }\n\t\n\t  function interpolateRound(a, b) {\n\t    return a = +a, b -= a, function(t) {\n\t      return Math.round(a + b * t);\n\t    };\n\t  }\n\t\n\t  var degrees = 180 / Math.PI;\n\t\n\t  var identity$2 = {\n\t    translateX: 0,\n\t    translateY: 0,\n\t    rotate: 0,\n\t    skewX: 0,\n\t    scaleX: 1,\n\t    scaleY: 1\n\t  };\n\t\n\t  function decompose(a, b, c, d, e, f) {\n\t    var scaleX, scaleY, skewX;\n\t    if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n\t    if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n\t    if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n\t    if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n\t    return {\n\t      translateX: e,\n\t      translateY: f,\n\t      rotate: Math.atan2(b, a) * degrees,\n\t      skewX: Math.atan(skewX) * degrees,\n\t      scaleX: scaleX,\n\t      scaleY: scaleY\n\t    };\n\t  }\n\t\n\t  var cssNode;\n\t  var cssRoot;\n\t  var cssView;\n\t  var svgNode;\n\t  function parseCss(value) {\n\t    if (value === \"none\") return identity$2;\n\t    if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n\t    cssNode.style.transform = value;\n\t    value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n\t    cssRoot.removeChild(cssNode);\n\t    value = value.slice(7, -1).split(\",\");\n\t    return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n\t  }\n\t\n\t  function parseSvg(value) {\n\t    if (value == null) return identity$2;\n\t    if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n\t    svgNode.setAttribute(\"transform\", value);\n\t    if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;\n\t    value = value.matrix;\n\t    return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n\t  }\n\t\n\t  function interpolateTransform(parse, pxComma, pxParen, degParen) {\n\t\n\t    function pop(s) {\n\t      return s.length ? s.pop() + \" \" : \"\";\n\t    }\n\t\n\t    function translate(xa, ya, xb, yb, s, q) {\n\t      if (xa !== xb || ya !== yb) {\n\t        var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n\t        q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n\t      } else if (xb || yb) {\n\t        s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n\t      }\n\t    }\n\t\n\t    function rotate(a, b, s, q) {\n\t      if (a !== b) {\n\t        if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n\t        q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n\t      } else if (b) {\n\t        s.push(pop(s) + \"rotate(\" + b + degParen);\n\t      }\n\t    }\n\t\n\t    function skewX(a, b, s, q) {\n\t      if (a !== b) {\n\t        q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n\t      } else if (b) {\n\t        s.push(pop(s) + \"skewX(\" + b + degParen);\n\t      }\n\t    }\n\t\n\t    function scale(xa, ya, xb, yb, s, q) {\n\t      if (xa !== xb || ya !== yb) {\n\t        var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n\t        q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n\t      } else if (xb !== 1 || yb !== 1) {\n\t        s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n\t      }\n\t    }\n\t\n\t    return function(a, b) {\n\t      var s = [], // string constants and placeholders\n\t          q = []; // number interpolators\n\t      a = parse(a), b = parse(b);\n\t      translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n\t      rotate(a.rotate, b.rotate, s, q);\n\t      skewX(a.skewX, b.skewX, s, q);\n\t      scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n\t      a = b = null; // gc\n\t      return function(t) {\n\t        var i = -1, n = q.length, o;\n\t        while (++i < n) s[(o = q[i]).i] = o.x(t);\n\t        return s.join(\"\");\n\t      };\n\t    };\n\t  }\n\t\n\t  var interpolateTransform$1 = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\n\t  var interpolateTransform$2 = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\t\n\t  var rho = Math.SQRT2;\n\t  var rho2 = 2;\n\t  var rho4 = 4;\n\t  var epsilon2 = 1e-12;\n\t  function cosh(x) {\n\t    return ((x = Math.exp(x)) + 1 / x) / 2;\n\t  }\n\t\n\t  function sinh(x) {\n\t    return ((x = Math.exp(x)) - 1 / x) / 2;\n\t  }\n\t\n\t  function tanh(x) {\n\t    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n\t  }\n\t\n\t  // p0 = [ux0, uy0, w0]\n\t  // p1 = [ux1, uy1, w1]\n\t  function interpolateZoom(p0, p1) {\n\t    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n\t        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n\t        dx = ux1 - ux0,\n\t        dy = uy1 - uy0,\n\t        d2 = dx * dx + dy * dy,\n\t        i,\n\t        S;\n\t\n\t    // Special case for u0 ≅ u1.\n\t    if (d2 < epsilon2) {\n\t      S = Math.log(w1 / w0) / rho;\n\t      i = function(t) {\n\t        return [\n\t          ux0 + t * dx,\n\t          uy0 + t * dy,\n\t          w0 * Math.exp(rho * t * S)\n\t        ];\n\t      }\n\t    }\n\t\n\t    // General case.\n\t    else {\n\t      var d1 = Math.sqrt(d2),\n\t          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n\t          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n\t          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n\t          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n\t      S = (r1 - r0) / rho;\n\t      i = function(t) {\n\t        var s = t * S,\n\t            coshr0 = cosh(r0),\n\t            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n\t        return [\n\t          ux0 + u * dx,\n\t          uy0 + u * dy,\n\t          w0 * coshr0 / cosh(rho * s + r0)\n\t        ];\n\t      }\n\t    }\n\t\n\t    i.duration = S * 1000;\n\t\n\t    return i;\n\t  }\n\t\n\t  function hsl(hue) {\n\t    return function(start, end) {\n\t      var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n\t          s = nogamma(start.s, end.s),\n\t          l = nogamma(start.l, end.l),\n\t          opacity = nogamma(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.h = h(t);\n\t        start.s = s(t);\n\t        start.l = l(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t  }\n\t\n\t  var hsl$1 = hsl(hue);\n\t  var hslLong = hsl(nogamma);\n\t\n\t  function lab$1(start, end) {\n\t    var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n\t        a = nogamma(start.a, end.a),\n\t        b = nogamma(start.b, end.b),\n\t        opacity = nogamma(start.opacity, end.opacity);\n\t    return function(t) {\n\t      start.l = l(t);\n\t      start.a = a(t);\n\t      start.b = b(t);\n\t      start.opacity = opacity(t);\n\t      return start + \"\";\n\t    };\n\t  }\n\t\n\t  function hcl(hue) {\n\t    return function(start, end) {\n\t      var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n\t          c = nogamma(start.c, end.c),\n\t          l = nogamma(start.l, end.l),\n\t          opacity = nogamma(start.opacity, end.opacity);\n\t      return function(t) {\n\t        start.h = h(t);\n\t        start.c = c(t);\n\t        start.l = l(t);\n\t        start.opacity = opacity(t);\n\t        return start + \"\";\n\t      };\n\t    }\n\t  }\n\t\n\t  var hcl$1 = hcl(hue);\n\t  var hclLong = hcl(nogamma);\n\t\n\t  function cubehelix$1(hue) {\n\t    return (function cubehelixGamma(y) {\n\t      y = +y;\n\t\n\t      function cubehelix$$(start, end) {\n\t        var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),\n\t            s = nogamma(start.s, end.s),\n\t            l = nogamma(start.l, end.l),\n\t            opacity = nogamma(start.opacity, end.opacity);\n\t        return function(t) {\n\t          start.h = h(t);\n\t          start.s = s(t);\n\t          start.l = l(Math.pow(t, y));\n\t          start.opacity = opacity(t);\n\t          return start + \"\";\n\t        };\n\t      }\n\t\n\t      cubehelix$$.gamma = cubehelixGamma;\n\t\n\t      return cubehelix$$;\n\t    })(1);\n\t  }\n\t\n\t  var cubehelix$2 = cubehelix$1(hue);\n\t  var interpolateCubehelixLong = cubehelix$1(nogamma);\n\t\n\t  function quantize(interpolator, n) {\n\t    var samples = new Array(n);\n\t    for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n\t    return samples;\n\t  }\n\t\n\t  var noop$1 = {value: function() {}};\n\t\n\t  function dispatch() {\n\t    for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n\t      if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n\t      _[t] = [];\n\t    }\n\t    return new Dispatch(_);\n\t  }\n\t\n\t  function Dispatch(_) {\n\t    this._ = _;\n\t  }\n\t\n\t  function parseTypenames(typenames, types) {\n\t    return typenames.trim().split(/^|\\s+/).map(function(t) {\n\t      var name = \"\", i = t.indexOf(\".\");\n\t      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n\t      if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n\t      return {type: t, name: name};\n\t    });\n\t  }\n\t\n\t  Dispatch.prototype = dispatch.prototype = {\n\t    constructor: Dispatch,\n\t    on: function(typename, callback) {\n\t      var _ = this._,\n\t          T = parseTypenames(typename + \"\", _),\n\t          t,\n\t          i = -1,\n\t          n = T.length;\n\t\n\t      // If no callback was specified, return the callback of the given type and name.\n\t      if (arguments.length < 2) {\n\t        while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n\t        return;\n\t      }\n\t\n\t      // If a type was specified, set the callback for the given type and name.\n\t      // Otherwise, if a null callback was specified, remove callbacks of the given name.\n\t      if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n\t      while (++i < n) {\n\t        if (t = (typename = T[i]).type) _[t] = set$1(_[t], typename.name, callback);\n\t        else if (callback == null) for (t in _) _[t] = set$1(_[t], typename.name, null);\n\t      }\n\t\n\t      return this;\n\t    },\n\t    copy: function() {\n\t      var copy = {}, _ = this._;\n\t      for (var t in _) copy[t] = _[t].slice();\n\t      return new Dispatch(copy);\n\t    },\n\t    call: function(type, that) {\n\t      if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n\t      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n\t      for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n\t    },\n\t    apply: function(type, that, args) {\n\t      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n\t      for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n\t    }\n\t  };\n\t\n\t  function get(type, name) {\n\t    for (var i = 0, n = type.length, c; i < n; ++i) {\n\t      if ((c = type[i]).name === name) {\n\t        return c.value;\n\t      }\n\t    }\n\t  }\n\t\n\t  function set$1(type, name, callback) {\n\t    for (var i = 0, n = type.length; i < n; ++i) {\n\t      if (type[i].name === name) {\n\t        type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));\n\t        break;\n\t      }\n\t    }\n\t    if (callback != null) type.push({name: name, value: callback});\n\t    return type;\n\t  }\n\t\n\t  function objectConverter(columns) {\n\t    return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n\t      return JSON.stringify(name) + \": d[\" + i + \"]\";\n\t    }).join(\",\") + \"}\");\n\t  }\n\t\n\t  function customConverter(columns, f) {\n\t    var object = objectConverter(columns);\n\t    return function(row, i) {\n\t      return f(object(row), i, columns);\n\t    };\n\t  }\n\t\n\t  // Compute unique columns in order of discovery.\n\t  function inferColumns(rows) {\n\t    var columnSet = Object.create(null),\n\t        columns = [];\n\t\n\t    rows.forEach(function(row) {\n\t      for (var column in row) {\n\t        if (!(column in columnSet)) {\n\t          columns.push(columnSet[column] = column);\n\t        }\n\t      }\n\t    });\n\t\n\t    return columns;\n\t  }\n\t\n\t  function dsv(delimiter) {\n\t    var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n]\"),\n\t        delimiterCode = delimiter.charCodeAt(0);\n\t\n\t    function parse(text, f) {\n\t      var convert, columns, rows = parseRows(text, function(row, i) {\n\t        if (convert) return convert(row, i - 1);\n\t        columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n\t      });\n\t      rows.columns = columns;\n\t      return rows;\n\t    }\n\t\n\t    function parseRows(text, f) {\n\t      var EOL = {}, // sentinel value for end-of-line\n\t          EOF = {}, // sentinel value for end-of-file\n\t          rows = [], // output rows\n\t          N = text.length,\n\t          I = 0, // current character index\n\t          n = 0, // the current line number\n\t          t, // the current token\n\t          eol; // is the current token followed by EOL?\n\t\n\t      function token() {\n\t        if (I >= N) return EOF; // special case: end of file\n\t        if (eol) return eol = false, EOL; // special case: end of line\n\t\n\t        // special case: quotes\n\t        var j = I, c;\n\t        if (text.charCodeAt(j) === 34) {\n\t          var i = j;\n\t          while (i++ < N) {\n\t            if (text.charCodeAt(i) === 34) {\n\t              if (text.charCodeAt(i + 1) !== 34) break;\n\t              ++i;\n\t            }\n\t          }\n\t          I = i + 2;\n\t          c = text.charCodeAt(i + 1);\n\t          if (c === 13) {\n\t            eol = true;\n\t            if (text.charCodeAt(i + 2) === 10) ++I;\n\t          } else if (c === 10) {\n\t            eol = true;\n\t          }\n\t          return text.slice(j + 1, i).replace(/\"\"/g, \"\\\"\");\n\t        }\n\t\n\t        // common case: find next delimiter or newline\n\t        while (I < N) {\n\t          var k = 1;\n\t          c = text.charCodeAt(I++);\n\t          if (c === 10) eol = true; // \\n\n\t          else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \\r|\\r\\n\n\t          else if (c !== delimiterCode) continue;\n\t          return text.slice(j, I - k);\n\t        }\n\t\n\t        // special case: last token before EOF\n\t        return text.slice(j);\n\t      }\n\t\n\t      while ((t = token()) !== EOF) {\n\t        var a = [];\n\t        while (t !== EOL && t !== EOF) {\n\t          a.push(t);\n\t          t = token();\n\t        }\n\t        if (f && (a = f(a, n++)) == null) continue;\n\t        rows.push(a);\n\t      }\n\t\n\t      return rows;\n\t    }\n\t\n\t    function format(rows, columns) {\n\t      if (columns == null) columns = inferColumns(rows);\n\t      return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n\t        return columns.map(function(column) {\n\t          return formatValue(row[column]);\n\t        }).join(delimiter);\n\t      })).join(\"\\n\");\n\t    }\n\t\n\t    function formatRows(rows) {\n\t      return rows.map(formatRow).join(\"\\n\");\n\t    }\n\t\n\t    function formatRow(row) {\n\t      return row.map(formatValue).join(delimiter);\n\t    }\n\t\n\t    function formatValue(text) {\n\t      return text == null ? \"\"\n\t          : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\\\"/g, \"\\\"\\\"\") + \"\\\"\"\n\t          : text;\n\t    }\n\t\n\t    return {\n\t      parse: parse,\n\t      parseRows: parseRows,\n\t      format: format,\n\t      formatRows: formatRows\n\t    };\n\t  }\n\t\n\t  var csv = dsv(\",\");\n\t\n\t  var csvParse = csv.parse;\n\t  var csvParseRows = csv.parseRows;\n\t  var csvFormat = csv.format;\n\t  var csvFormatRows = csv.formatRows;\n\t\n\t  var tsv = dsv(\"\\t\");\n\t\n\t  var tsvParse = tsv.parse;\n\t  var tsvParseRows = tsv.parseRows;\n\t  var tsvFormat = tsv.format;\n\t  var tsvFormatRows = tsv.formatRows;\n\t\n\t  function request(url, callback) {\n\t    var request,\n\t        event = dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n\t        mimeType,\n\t        headers = map$1(),\n\t        xhr = new XMLHttpRequest,\n\t        user = null,\n\t        password = null,\n\t        response,\n\t        responseType,\n\t        timeout = 0;\n\t\n\t    // If IE does not support CORS, use XDomainRequest.\n\t    if (typeof XDomainRequest !== \"undefined\"\n\t        && !(\"withCredentials\" in xhr)\n\t        && /^(http(s)?:)?\\/\\//.test(url)) xhr = new XDomainRequest;\n\t\n\t    \"onload\" in xhr\n\t        ? xhr.onload = xhr.onerror = xhr.ontimeout = respond\n\t        : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };\n\t\n\t    function respond(o) {\n\t      var status = xhr.status, result;\n\t      if (!status && hasResponse(xhr)\n\t          || status >= 200 && status < 300\n\t          || status === 304) {\n\t        if (response) {\n\t          try {\n\t            result = response.call(request, xhr);\n\t          } catch (e) {\n\t            event.call(\"error\", request, e);\n\t            return;\n\t          }\n\t        } else {\n\t          result = xhr;\n\t        }\n\t        event.call(\"load\", request, result);\n\t      } else {\n\t        event.call(\"error\", request, o);\n\t      }\n\t    }\n\t\n\t    xhr.onprogress = function(e) {\n\t      event.call(\"progress\", request, e);\n\t    };\n\t\n\t    request = {\n\t      header: function(name, value) {\n\t        name = (name + \"\").toLowerCase();\n\t        if (arguments.length < 2) return headers.get(name);\n\t        if (value == null) headers.remove(name);\n\t        else headers.set(name, value + \"\");\n\t        return request;\n\t      },\n\t\n\t      // If mimeType is non-null and no Accept header is set, a default is used.\n\t      mimeType: function(value) {\n\t        if (!arguments.length) return mimeType;\n\t        mimeType = value == null ? null : value + \"\";\n\t        return request;\n\t      },\n\t\n\t      // Specifies what type the response value should take;\n\t      // for instance, arraybuffer, blob, document, or text.\n\t      responseType: function(value) {\n\t        if (!arguments.length) return responseType;\n\t        responseType = value;\n\t        return request;\n\t      },\n\t\n\t      timeout: function(value) {\n\t        if (!arguments.length) return timeout;\n\t        timeout = +value;\n\t        return request;\n\t      },\n\t\n\t      user: function(value) {\n\t        return arguments.length < 1 ? user : (user = value == null ? null : value + \"\", request);\n\t      },\n\t\n\t      password: function(value) {\n\t        return arguments.length < 1 ? password : (password = value == null ? null : value + \"\", request);\n\t      },\n\t\n\t      // Specify how to convert the response content to a specific type;\n\t      // changes the callback value on \"load\" events.\n\t      response: function(value) {\n\t        response = value;\n\t        return request;\n\t      },\n\t\n\t      // Alias for send(\"GET\", …).\n\t      get: function(data, callback) {\n\t        return request.send(\"GET\", data, callback);\n\t      },\n\t\n\t      // Alias for send(\"POST\", …).\n\t      post: function(data, callback) {\n\t        return request.send(\"POST\", data, callback);\n\t      },\n\t\n\t      // If callback is non-null, it will be used for error and load events.\n\t      send: function(method, data, callback) {\n\t        xhr.open(method, url, true, user, password);\n\t        if (mimeType != null && !headers.has(\"accept\")) headers.set(\"accept\", mimeType + \",*/*\");\n\t        if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });\n\t        if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);\n\t        if (responseType != null) xhr.responseType = responseType;\n\t        if (timeout > 0) xhr.timeout = timeout;\n\t        if (callback == null && typeof data === \"function\") callback = data, data = null;\n\t        if (callback != null && callback.length === 1) callback = fixCallback(callback);\n\t        if (callback != null) request.on(\"error\", callback).on(\"load\", function(xhr) { callback(null, xhr); });\n\t        event.call(\"beforesend\", request, xhr);\n\t        xhr.send(data == null ? null : data);\n\t        return request;\n\t      },\n\t\n\t      abort: function() {\n\t        xhr.abort();\n\t        return request;\n\t      },\n\t\n\t      on: function() {\n\t        var value = event.on.apply(event, arguments);\n\t        return value === event ? request : value;\n\t      }\n\t    };\n\t\n\t    if (callback != null) {\n\t      if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n\t      return request.get(callback);\n\t    }\n\t\n\t    return request;\n\t  }\n\t\n\t  function fixCallback(callback) {\n\t    return function(error, xhr) {\n\t      callback(error == null ? xhr : null);\n\t    };\n\t  }\n\t\n\t  function hasResponse(xhr) {\n\t    var type = xhr.responseType;\n\t    return type && type !== \"text\"\n\t        ? xhr.response // null on error\n\t        : xhr.responseText; // \"\" on error\n\t  }\n\t\n\t  function type(defaultMimeType, response) {\n\t    return function(url, callback) {\n\t      var r = request(url).mimeType(defaultMimeType).response(response);\n\t      if (callback != null) {\n\t        if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n\t        return r.get(callback);\n\t      }\n\t      return r;\n\t    };\n\t  }\n\t\n\t  var html = type(\"text/html\", function(xhr) {\n\t    return document.createRange().createContextualFragment(xhr.responseText);\n\t  });\n\t\n\t  var json = type(\"application/json\", function(xhr) {\n\t    return JSON.parse(xhr.responseText);\n\t  });\n\t\n\t  var text = type(\"text/plain\", function(xhr) {\n\t    return xhr.responseText;\n\t  });\n\t\n\t  var xml = type(\"application/xml\", function(xhr) {\n\t    var xml = xhr.responseXML;\n\t    if (!xml) throw new Error(\"parse error\");\n\t    return xml;\n\t  });\n\t\n\t  function dsv$1(defaultMimeType, parse) {\n\t    return function(url, row, callback) {\n\t      if (arguments.length < 3) callback = row, row = null;\n\t      var r = request(url).mimeType(defaultMimeType);\n\t      r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };\n\t      r.row(row);\n\t      return callback ? r.get(callback) : r;\n\t    };\n\t  }\n\t\n\t  function responseOf(parse, row) {\n\t    return function(request) {\n\t      return parse(request.responseText, row);\n\t    };\n\t  }\n\t\n\t  var csv$1 = dsv$1(\"text/csv\", csvParse);\n\t\n\t  var tsv$1 = dsv$1(\"text/tab-separated-values\", tsvParse);\n\t\n\t  var frame = 0;\n\t  var timeout = 0;\n\t  var interval = 0;\n\t  var pokeDelay = 1000;\n\t  var taskHead;\n\t  var taskTail;\n\t  var clockLast = 0;\n\t  var clockNow = 0;\n\t  var clockSkew = 0;\n\t  var clock = typeof performance === \"object\" && performance.now ? performance : Date;\n\t  var setFrame = typeof requestAnimationFrame === \"function\"\n\t          ? (clock === Date ? function(f) { requestAnimationFrame(function() { f(clock.now()); }); } : requestAnimationFrame)\n\t          : function(f) { setTimeout(f, 17); };\n\t  function now() {\n\t    return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n\t  }\n\t\n\t  function clearNow() {\n\t    clockNow = 0;\n\t  }\n\t\n\t  function Timer() {\n\t    this._call =\n\t    this._time =\n\t    this._next = null;\n\t  }\n\t\n\t  Timer.prototype = timer.prototype = {\n\t    constructor: Timer,\n\t    restart: function(callback, delay, time) {\n\t      if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n\t      time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n\t      if (!this._next && taskTail !== this) {\n\t        if (taskTail) taskTail._next = this;\n\t        else taskHead = this;\n\t        taskTail = this;\n\t      }\n\t      this._call = callback;\n\t      this._time = time;\n\t      sleep();\n\t    },\n\t    stop: function() {\n\t      if (this._call) {\n\t        this._call = null;\n\t        this._time = Infinity;\n\t        sleep();\n\t      }\n\t    }\n\t  };\n\t\n\t  function timer(callback, delay, time) {\n\t    var t = new Timer;\n\t    t.restart(callback, delay, time);\n\t    return t;\n\t  }\n\t\n\t  function timerFlush() {\n\t    now(); // Get the current time, if not already set.\n\t    ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n\t    var t = taskHead, e;\n\t    while (t) {\n\t      if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n\t      t = t._next;\n\t    }\n\t    --frame;\n\t  }\n\t\n\t  function wake(time) {\n\t    clockNow = (clockLast = time || clock.now()) + clockSkew;\n\t    frame = timeout = 0;\n\t    try {\n\t      timerFlush();\n\t    } finally {\n\t      frame = 0;\n\t      nap();\n\t      clockNow = 0;\n\t    }\n\t  }\n\t\n\t  function poke$1() {\n\t    var now = clock.now(), delay = now - clockLast;\n\t    if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n\t  }\n\t\n\t  function nap() {\n\t    var t0, t1 = taskHead, t2, time = Infinity;\n\t    while (t1) {\n\t      if (t1._call) {\n\t        if (time > t1._time) time = t1._time;\n\t        t0 = t1, t1 = t1._next;\n\t      } else {\n\t        t2 = t1._next, t1._next = null;\n\t        t1 = t0 ? t0._next = t2 : taskHead = t2;\n\t      }\n\t    }\n\t    taskTail = t0;\n\t    sleep(time);\n\t  }\n\t\n\t  function sleep(time) {\n\t    if (frame) return; // Soonest alarm already set, or will be.\n\t    if (timeout) timeout = clearTimeout(timeout);\n\t    var delay = time - clockNow;\n\t    if (delay > 24) {\n\t      if (time < Infinity) timeout = setTimeout(wake, delay);\n\t      if (interval) interval = clearInterval(interval);\n\t    } else {\n\t      if (!interval) interval = setInterval(poke$1, pokeDelay);\n\t      frame = 1, setFrame(wake);\n\t    }\n\t  }\n\t\n\t  function timeout$1(callback, delay, time) {\n\t    var t = new Timer;\n\t    delay = delay == null ? 0 : +delay;\n\t    t.restart(function(elapsed) {\n\t      t.stop();\n\t      callback(elapsed + delay);\n\t    }, delay, time);\n\t    return t;\n\t  }\n\t\n\t  function interval$1(callback, delay, time) {\n\t    var t = new Timer, total = delay;\n\t    if (delay == null) return t.restart(callback, delay, time), t;\n\t    delay = +delay, time = time == null ? now() : +time;\n\t    t.restart(function tick(elapsed) {\n\t      elapsed += total;\n\t      t.restart(tick, total += delay, time);\n\t      callback(elapsed);\n\t    }, delay, time);\n\t    return t;\n\t  }\n\t\n\tvar   t0$1 = new Date;\n\tvar   t1$1 = new Date;\n\t  function newInterval(floori, offseti, count, field) {\n\t\n\t    function interval(date) {\n\t      return floori(date = new Date(+date)), date;\n\t    }\n\t\n\t    interval.floor = interval;\n\t\n\t    interval.ceil = function(date) {\n\t      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n\t    };\n\t\n\t    interval.round = function(date) {\n\t      var d0 = interval(date),\n\t          d1 = interval.ceil(date);\n\t      return date - d0 < d1 - date ? d0 : d1;\n\t    };\n\t\n\t    interval.offset = function(date, step) {\n\t      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n\t    };\n\t\n\t    interval.range = function(start, stop, step) {\n\t      var range = [];\n\t      start = interval.ceil(start);\n\t      step = step == null ? 1 : Math.floor(step);\n\t      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n\t      do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)\n\t      return range;\n\t    };\n\t\n\t    interval.filter = function(test) {\n\t      return newInterval(function(date) {\n\t        while (floori(date), !test(date)) date.setTime(date - 1);\n\t      }, function(date, step) {\n\t        while (--step >= 0) while (offseti(date, 1), !test(date));\n\t      });\n\t    };\n\t\n\t    if (count) {\n\t      interval.count = function(start, end) {\n\t        t0$1.setTime(+start), t1$1.setTime(+end);\n\t        floori(t0$1), floori(t1$1);\n\t        return Math.floor(count(t0$1, t1$1));\n\t      };\n\t\n\t      interval.every = function(step) {\n\t        step = Math.floor(step);\n\t        return !isFinite(step) || !(step > 0) ? null\n\t            : !(step > 1) ? interval\n\t            : interval.filter(field\n\t                ? function(d) { return field(d) % step === 0; }\n\t                : function(d) { return interval.count(0, d) % step === 0; });\n\t      };\n\t    }\n\t\n\t    return interval;\n\t  }\n\t\n\t  var millisecond = newInterval(function() {\n\t    // noop\n\t  }, function(date, step) {\n\t    date.setTime(+date + step);\n\t  }, function(start, end) {\n\t    return end - start;\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  millisecond.every = function(k) {\n\t    k = Math.floor(k);\n\t    if (!isFinite(k) || !(k > 0)) return null;\n\t    if (!(k > 1)) return millisecond;\n\t    return newInterval(function(date) {\n\t      date.setTime(Math.floor(date / k) * k);\n\t    }, function(date, step) {\n\t      date.setTime(+date + step * k);\n\t    }, function(start, end) {\n\t      return (end - start) / k;\n\t    });\n\t  };\n\t\n\t  var milliseconds = millisecond.range;\n\t\n\t  var durationSecond = 1e3;\n\t  var durationMinute = 6e4;\n\t  var durationHour = 36e5;\n\t  var durationDay = 864e5;\n\t  var durationWeek = 6048e5;\n\t\n\t  var second = newInterval(function(date) {\n\t    date.setTime(Math.floor(date / durationSecond) * durationSecond);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationSecond);\n\t  }, function(start, end) {\n\t    return (end - start) / durationSecond;\n\t  }, function(date) {\n\t    return date.getUTCSeconds();\n\t  });\n\t\n\t  var seconds = second.range;\n\t\n\t  var minute = newInterval(function(date) {\n\t    date.setTime(Math.floor(date / durationMinute) * durationMinute);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationMinute);\n\t  }, function(start, end) {\n\t    return (end - start) / durationMinute;\n\t  }, function(date) {\n\t    return date.getMinutes();\n\t  });\n\t\n\t  var minutes = minute.range;\n\t\n\t  var hour = newInterval(function(date) {\n\t    var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n\t    if (offset < 0) offset += durationHour;\n\t    date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationHour);\n\t  }, function(start, end) {\n\t    return (end - start) / durationHour;\n\t  }, function(date) {\n\t    return date.getHours();\n\t  });\n\t\n\t  var hours = hour.range;\n\t\n\t  var day = newInterval(function(date) {\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setDate(date.getDate() + step);\n\t  }, function(start, end) {\n\t    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n\t  }, function(date) {\n\t    return date.getDate() - 1;\n\t  });\n\t\n\t  var days = day.range;\n\t\n\t  function weekday(i) {\n\t    return newInterval(function(date) {\n\t      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n\t      date.setHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setDate(date.getDate() + step * 7);\n\t    }, function(start, end) {\n\t      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n\t    });\n\t  }\n\t\n\t  var timeWeek = weekday(0);\n\t  var timeMonday = weekday(1);\n\t  var tuesday = weekday(2);\n\t  var wednesday = weekday(3);\n\t  var thursday = weekday(4);\n\t  var friday = weekday(5);\n\t  var saturday = weekday(6);\n\t\n\t  var sundays = timeWeek.range;\n\t  var mondays = timeMonday.range;\n\t  var tuesdays = tuesday.range;\n\t  var wednesdays = wednesday.range;\n\t  var thursdays = thursday.range;\n\t  var fridays = friday.range;\n\t  var saturdays = saturday.range;\n\t\n\t  var month = newInterval(function(date) {\n\t    date.setDate(1);\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setMonth(date.getMonth() + step);\n\t  }, function(start, end) {\n\t    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n\t  }, function(date) {\n\t    return date.getMonth();\n\t  });\n\t\n\t  var months = month.range;\n\t\n\t  var year = newInterval(function(date) {\n\t    date.setMonth(0, 1);\n\t    date.setHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setFullYear(date.getFullYear() + step);\n\t  }, function(start, end) {\n\t    return end.getFullYear() - start.getFullYear();\n\t  }, function(date) {\n\t    return date.getFullYear();\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  year.every = function(k) {\n\t    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n\t      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n\t      date.setMonth(0, 1);\n\t      date.setHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setFullYear(date.getFullYear() + step * k);\n\t    });\n\t  };\n\t\n\t  var years = year.range;\n\t\n\t  var utcMinute = newInterval(function(date) {\n\t    date.setUTCSeconds(0, 0);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationMinute);\n\t  }, function(start, end) {\n\t    return (end - start) / durationMinute;\n\t  }, function(date) {\n\t    return date.getUTCMinutes();\n\t  });\n\t\n\t  var utcMinutes = utcMinute.range;\n\t\n\t  var utcHour = newInterval(function(date) {\n\t    date.setUTCMinutes(0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setTime(+date + step * durationHour);\n\t  }, function(start, end) {\n\t    return (end - start) / durationHour;\n\t  }, function(date) {\n\t    return date.getUTCHours();\n\t  });\n\t\n\t  var utcHours = utcHour.range;\n\t\n\t  var utcDay = newInterval(function(date) {\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCDate(date.getUTCDate() + step);\n\t  }, function(start, end) {\n\t    return (end - start) / durationDay;\n\t  }, function(date) {\n\t    return date.getUTCDate() - 1;\n\t  });\n\t\n\t  var utcDays = utcDay.range;\n\t\n\t  function utcWeekday(i) {\n\t    return newInterval(function(date) {\n\t      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n\t      date.setUTCHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setUTCDate(date.getUTCDate() + step * 7);\n\t    }, function(start, end) {\n\t      return (end - start) / durationWeek;\n\t    });\n\t  }\n\t\n\t  var utcWeek = utcWeekday(0);\n\t  var utcMonday = utcWeekday(1);\n\t  var utcTuesday = utcWeekday(2);\n\t  var utcWednesday = utcWeekday(3);\n\t  var utcThursday = utcWeekday(4);\n\t  var utcFriday = utcWeekday(5);\n\t  var utcSaturday = utcWeekday(6);\n\t\n\t  var utcSundays = utcWeek.range;\n\t  var utcMondays = utcMonday.range;\n\t  var utcTuesdays = utcTuesday.range;\n\t  var utcWednesdays = utcWednesday.range;\n\t  var utcThursdays = utcThursday.range;\n\t  var utcFridays = utcFriday.range;\n\t  var utcSaturdays = utcSaturday.range;\n\t\n\t  var utcMonth = newInterval(function(date) {\n\t    date.setUTCDate(1);\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCMonth(date.getUTCMonth() + step);\n\t  }, function(start, end) {\n\t    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n\t  }, function(date) {\n\t    return date.getUTCMonth();\n\t  });\n\t\n\t  var utcMonths = utcMonth.range;\n\t\n\t  var utcYear = newInterval(function(date) {\n\t    date.setUTCMonth(0, 1);\n\t    date.setUTCHours(0, 0, 0, 0);\n\t  }, function(date, step) {\n\t    date.setUTCFullYear(date.getUTCFullYear() + step);\n\t  }, function(start, end) {\n\t    return end.getUTCFullYear() - start.getUTCFullYear();\n\t  }, function(date) {\n\t    return date.getUTCFullYear();\n\t  });\n\t\n\t  // An optimized implementation for this simple case.\n\t  utcYear.every = function(k) {\n\t    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n\t      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n\t      date.setUTCMonth(0, 1);\n\t      date.setUTCHours(0, 0, 0, 0);\n\t    }, function(date, step) {\n\t      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n\t    });\n\t  };\n\t\n\t  var utcYears = utcYear.range;\n\t\n\t  // Computes the decimal coefficient and exponent of the specified number x with\n\t  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n\t  // For example, formatDecimal(1.23) returns [\"123\", 0].\n\t  function formatDecimal(x, p) {\n\t    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n\t    var i, coefficient = x.slice(0, i);\n\t\n\t    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n\t    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n\t    return [\n\t      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n\t      +x.slice(i + 1)\n\t    ];\n\t  }\n\t\n\t  function exponent$1(x) {\n\t    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n\t  }\n\t\n\t  function formatGroup(grouping, thousands) {\n\t    return function(value, width) {\n\t      var i = value.length,\n\t          t = [],\n\t          j = 0,\n\t          g = grouping[0],\n\t          length = 0;\n\t\n\t      while (i > 0 && g > 0) {\n\t        if (length + g + 1 > width) g = Math.max(1, width - length);\n\t        t.push(value.substring(i -= g, i + g));\n\t        if ((length += g + 1) > width) break;\n\t        g = grouping[j = (j + 1) % grouping.length];\n\t      }\n\t\n\t      return t.reverse().join(thousands);\n\t    };\n\t  }\n\t\n\t  function formatDefault(x, p) {\n\t    x = x.toPrecision(p);\n\t\n\t    out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n\t      switch (x[i]) {\n\t        case \".\": i0 = i1 = i; break;\n\t        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n\t        case \"e\": break out;\n\t        default: if (i0 > 0) i0 = 0; break;\n\t      }\n\t    }\n\t\n\t    return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n\t  }\n\t\n\t  var prefixExponent;\n\t\n\t  function formatPrefixAuto(x, p) {\n\t    var d = formatDecimal(x, p);\n\t    if (!d) return x + \"\";\n\t    var coefficient = d[0],\n\t        exponent = d[1],\n\t        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n\t        n = coefficient.length;\n\t    return i === n ? coefficient\n\t        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n\t        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n\t        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n\t  }\n\t\n\t  function formatRounded(x, p) {\n\t    var d = formatDecimal(x, p);\n\t    if (!d) return x + \"\";\n\t    var coefficient = d[0],\n\t        exponent = d[1];\n\t    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n\t        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n\t        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n\t  }\n\t\n\t  var formatTypes = {\n\t    \"\": formatDefault,\n\t    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n\t    \"b\": function(x) { return Math.round(x).toString(2); },\n\t    \"c\": function(x) { return x + \"\"; },\n\t    \"d\": function(x) { return Math.round(x).toString(10); },\n\t    \"e\": function(x, p) { return x.toExponential(p); },\n\t    \"f\": function(x, p) { return x.toFixed(p); },\n\t    \"g\": function(x, p) { return x.toPrecision(p); },\n\t    \"o\": function(x) { return Math.round(x).toString(8); },\n\t    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n\t    \"r\": formatRounded,\n\t    \"s\": formatPrefixAuto,\n\t    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n\t    \"x\": function(x) { return Math.round(x).toString(16); }\n\t  };\n\t\n\t  // [[fill]align][sign][symbol][0][width][,][.precision][type]\n\t  var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\t\n\t  function formatSpecifier(specifier) {\n\t    return new FormatSpecifier(specifier);\n\t  }\n\t\n\t  function FormatSpecifier(specifier) {\n\t    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\t\n\t    var match,\n\t        fill = match[1] || \" \",\n\t        align = match[2] || \">\",\n\t        sign = match[3] || \"-\",\n\t        symbol = match[4] || \"\",\n\t        zero = !!match[5],\n\t        width = match[6] && +match[6],\n\t        comma = !!match[7],\n\t        precision = match[8] && +match[8].slice(1),\n\t        type = match[9] || \"\";\n\t\n\t    // The \"n\" type is an alias for \",g\".\n\t    if (type === \"n\") comma = true, type = \"g\";\n\t\n\t    // Map invalid types to the default format.\n\t    else if (!formatTypes[type]) type = \"\";\n\t\n\t    // If zero fill is specified, padding goes after sign and before digits.\n\t    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\t\n\t    this.fill = fill;\n\t    this.align = align;\n\t    this.sign = sign;\n\t    this.symbol = symbol;\n\t    this.zero = zero;\n\t    this.width = width;\n\t    this.comma = comma;\n\t    this.precision = precision;\n\t    this.type = type;\n\t  }\n\t\n\t  FormatSpecifier.prototype.toString = function() {\n\t    return this.fill\n\t        + this.align\n\t        + this.sign\n\t        + this.symbol\n\t        + (this.zero ? \"0\" : \"\")\n\t        + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n\t        + (this.comma ? \",\" : \"\")\n\t        + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n\t        + this.type;\n\t  };\n\t\n\t  var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xB5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\t\n\t  function identity$3(x) {\n\t    return x;\n\t  }\n\t\n\t  function formatLocale(locale) {\n\t    var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,\n\t        currency = locale.currency,\n\t        decimal = locale.decimal;\n\t\n\t    function newFormat(specifier) {\n\t      specifier = formatSpecifier(specifier);\n\t\n\t      var fill = specifier.fill,\n\t          align = specifier.align,\n\t          sign = specifier.sign,\n\t          symbol = specifier.symbol,\n\t          zero = specifier.zero,\n\t          width = specifier.width,\n\t          comma = specifier.comma,\n\t          precision = specifier.precision,\n\t          type = specifier.type;\n\t\n\t      // Compute the prefix and suffix.\n\t      // For SI-prefix, the suffix is lazily computed.\n\t      var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n\t          suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\t\n\t      // What format function should we use?\n\t      // Is this an integer type?\n\t      // Can this type generate exponential notation?\n\t      var formatType = formatTypes[type],\n\t          maybeSuffix = !type || /[defgprs%]/.test(type);\n\t\n\t      // Set the default precision if not specified,\n\t      // or clamp the specified precision to the supported range.\n\t      // For significant precision, it must be in [1, 21].\n\t      // For fixed precision, it must be in [0, 20].\n\t      precision = precision == null ? (type ? 6 : 12)\n\t          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n\t          : Math.max(0, Math.min(20, precision));\n\t\n\t      function format(value) {\n\t        var valuePrefix = prefix,\n\t            valueSuffix = suffix,\n\t            i, n, c;\n\t\n\t        if (type === \"c\") {\n\t          valueSuffix = formatType(value) + valueSuffix;\n\t          value = \"\";\n\t        } else {\n\t          value = +value;\n\t\n\t          // Convert negative to positive, and compute the prefix.\n\t          // Note that -0 is not less than 0, but 1 / -0 is!\n\t          var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\t\n\t          // Perform the initial formatting.\n\t          value = formatType(value, precision);\n\t\n\t          // If the original value was negative, it may be rounded to zero during\n\t          // formatting; treat this as (positive) zero.\n\t          if (valueNegative) {\n\t            i = -1, n = value.length;\n\t            valueNegative = false;\n\t            while (++i < n) {\n\t              if (c = value.charCodeAt(i), (48 < c && c < 58)\n\t                  || (type === \"x\" && 96 < c && c < 103)\n\t                  || (type === \"X\" && 64 < c && c < 71)) {\n\t                valueNegative = true;\n\t                break;\n\t              }\n\t            }\n\t          }\n\t\n\t          // Compute the prefix and suffix.\n\t          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\t          valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\t\n\t          // Break the formatted value into the integer “value” part that can be\n\t          // grouped, and fractional or exponential “suffix” part that is not.\n\t          if (maybeSuffix) {\n\t            i = -1, n = value.length;\n\t            while (++i < n) {\n\t              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n\t                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n\t                value = value.slice(0, i);\n\t                break;\n\t              }\n\t            }\n\t          }\n\t        }\n\t\n\t        // If the fill character is not \"0\", grouping is applied before padding.\n\t        if (comma && !zero) value = group(value, Infinity);\n\t\n\t        // Compute the padding.\n\t        var length = valuePrefix.length + value.length + valueSuffix.length,\n\t            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\t\n\t        // If the fill character is \"0\", grouping is applied after padding.\n\t        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\t\n\t        // Reconstruct the final output based on the desired alignment.\n\t        switch (align) {\n\t          case \"<\": return valuePrefix + value + valueSuffix + padding;\n\t          case \"=\": return valuePrefix + padding + value + valueSuffix;\n\t          case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n\t        }\n\t        return padding + valuePrefix + value + valueSuffix;\n\t      }\n\t\n\t      format.toString = function() {\n\t        return specifier + \"\";\n\t      };\n\t\n\t      return format;\n\t    }\n\t\n\t    function formatPrefix(specifier, value) {\n\t      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n\t          e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,\n\t          k = Math.pow(10, -e),\n\t          prefix = prefixes[8 + e / 3];\n\t      return function(value) {\n\t        return f(k * value) + prefix;\n\t      };\n\t    }\n\t\n\t    return {\n\t      format: newFormat,\n\t      formatPrefix: formatPrefix\n\t    };\n\t  }\n\t\n\t  var locale;\n\t  defaultLocale({\n\t    decimal: \".\",\n\t    thousands: \",\",\n\t    grouping: [3],\n\t    currency: [\"$\", \"\"]\n\t  });\n\t\n\t  function defaultLocale(definition) {\n\t    locale = formatLocale(definition);\n\t    exports.format = locale.format;\n\t    exports.formatPrefix = locale.formatPrefix;\n\t    return locale;\n\t  }\n\t\n\t  function precisionFixed(step) {\n\t    return Math.max(0, -exponent$1(Math.abs(step)));\n\t  }\n\t\n\t  function precisionPrefix(step, value) {\n\t    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));\n\t  }\n\t\n\t  function precisionRound(step, max) {\n\t    step = Math.abs(step), max = Math.abs(max) - step;\n\t    return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;\n\t  }\n\t\n\t  function localDate(d) {\n\t    if (0 <= d.y && d.y < 100) {\n\t      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n\t      date.setFullYear(d.y);\n\t      return date;\n\t    }\n\t    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n\t  }\n\t\n\t  function utcDate(d) {\n\t    if (0 <= d.y && d.y < 100) {\n\t      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n\t      date.setUTCFullYear(d.y);\n\t      return date;\n\t    }\n\t    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n\t  }\n\t\n\t  function newYear(y) {\n\t    return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n\t  }\n\t\n\t  function formatLocale$1(locale) {\n\t    var locale_dateTime = locale.dateTime,\n\t        locale_date = locale.date,\n\t        locale_time = locale.time,\n\t        locale_periods = locale.periods,\n\t        locale_weekdays = locale.days,\n\t        locale_shortWeekdays = locale.shortDays,\n\t        locale_months = locale.months,\n\t        locale_shortMonths = locale.shortMonths;\n\t\n\t    var periodRe = formatRe(locale_periods),\n\t        periodLookup = formatLookup(locale_periods),\n\t        weekdayRe = formatRe(locale_weekdays),\n\t        weekdayLookup = formatLookup(locale_weekdays),\n\t        shortWeekdayRe = formatRe(locale_shortWeekdays),\n\t        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n\t        monthRe = formatRe(locale_months),\n\t        monthLookup = formatLookup(locale_months),\n\t        shortMonthRe = formatRe(locale_shortMonths),\n\t        shortMonthLookup = formatLookup(locale_shortMonths);\n\t\n\t    var formats = {\n\t      \"a\": formatShortWeekday,\n\t      \"A\": formatWeekday,\n\t      \"b\": formatShortMonth,\n\t      \"B\": formatMonth,\n\t      \"c\": null,\n\t      \"d\": formatDayOfMonth,\n\t      \"e\": formatDayOfMonth,\n\t      \"H\": formatHour24,\n\t      \"I\": formatHour12,\n\t      \"j\": formatDayOfYear,\n\t      \"L\": formatMilliseconds,\n\t      \"m\": formatMonthNumber,\n\t      \"M\": formatMinutes,\n\t      \"p\": formatPeriod,\n\t      \"S\": formatSeconds,\n\t      \"U\": formatWeekNumberSunday,\n\t      \"w\": formatWeekdayNumber,\n\t      \"W\": formatWeekNumberMonday,\n\t      \"x\": null,\n\t      \"X\": null,\n\t      \"y\": formatYear,\n\t      \"Y\": formatFullYear,\n\t      \"Z\": formatZone,\n\t      \"%\": formatLiteralPercent\n\t    };\n\t\n\t    var utcFormats = {\n\t      \"a\": formatUTCShortWeekday,\n\t      \"A\": formatUTCWeekday,\n\t      \"b\": formatUTCShortMonth,\n\t      \"B\": formatUTCMonth,\n\t      \"c\": null,\n\t      \"d\": formatUTCDayOfMonth,\n\t      \"e\": formatUTCDayOfMonth,\n\t      \"H\": formatUTCHour24,\n\t      \"I\": formatUTCHour12,\n\t      \"j\": formatUTCDayOfYear,\n\t      \"L\": formatUTCMilliseconds,\n\t      \"m\": formatUTCMonthNumber,\n\t      \"M\": formatUTCMinutes,\n\t      \"p\": formatUTCPeriod,\n\t      \"S\": formatUTCSeconds,\n\t      \"U\": formatUTCWeekNumberSunday,\n\t      \"w\": formatUTCWeekdayNumber,\n\t      \"W\": formatUTCWeekNumberMonday,\n\t      \"x\": null,\n\t      \"X\": null,\n\t      \"y\": formatUTCYear,\n\t      \"Y\": formatUTCFullYear,\n\t      \"Z\": formatUTCZone,\n\t      \"%\": formatLiteralPercent\n\t    };\n\t\n\t    var parses = {\n\t      \"a\": parseShortWeekday,\n\t      \"A\": parseWeekday,\n\t      \"b\": parseShortMonth,\n\t      \"B\": parseMonth,\n\t      \"c\": parseLocaleDateTime,\n\t      \"d\": parseDayOfMonth,\n\t      \"e\": parseDayOfMonth,\n\t      \"H\": parseHour24,\n\t      \"I\": parseHour24,\n\t      \"j\": parseDayOfYear,\n\t      \"L\": parseMilliseconds,\n\t      \"m\": parseMonthNumber,\n\t      \"M\": parseMinutes,\n\t      \"p\": parsePeriod,\n\t      \"S\": parseSeconds,\n\t      \"U\": parseWeekNumberSunday,\n\t      \"w\": parseWeekdayNumber,\n\t      \"W\": parseWeekNumberMonday,\n\t      \"x\": parseLocaleDate,\n\t      \"X\": parseLocaleTime,\n\t      \"y\": parseYear,\n\t      \"Y\": parseFullYear,\n\t      \"Z\": parseZone,\n\t      \"%\": parseLiteralPercent\n\t    };\n\t\n\t    // These recursive directive definitions must be deferred.\n\t    formats.x = newFormat(locale_date, formats);\n\t    formats.X = newFormat(locale_time, formats);\n\t    formats.c = newFormat(locale_dateTime, formats);\n\t    utcFormats.x = newFormat(locale_date, utcFormats);\n\t    utcFormats.X = newFormat(locale_time, utcFormats);\n\t    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\t\n\t    function newFormat(specifier, formats) {\n\t      return function(date) {\n\t        var string = [],\n\t            i = -1,\n\t            j = 0,\n\t            n = specifier.length,\n\t            c,\n\t            pad,\n\t            format;\n\t\n\t        if (!(date instanceof Date)) date = new Date(+date);\n\t\n\t        while (++i < n) {\n\t          if (specifier.charCodeAt(i) === 37) {\n\t            string.push(specifier.slice(j, i));\n\t            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n\t            else pad = c === \"e\" ? \" \" : \"0\";\n\t            if (format = formats[c]) c = format(date, pad);\n\t            string.push(c);\n\t            j = i + 1;\n\t          }\n\t        }\n\t\n\t        string.push(specifier.slice(j, i));\n\t        return string.join(\"\");\n\t      };\n\t    }\n\t\n\t    function newParse(specifier, newDate) {\n\t      return function(string) {\n\t        var d = newYear(1900),\n\t            i = parseSpecifier(d, specifier, string += \"\", 0);\n\t        if (i != string.length) return null;\n\t\n\t        // The am-pm flag is 0 for AM, and 1 for PM.\n\t        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\t\n\t        // Convert day-of-week and week-of-year to day-of-year.\n\t        if (\"W\" in d || \"U\" in d) {\n\t          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n\t          var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n\t          d.m = 0;\n\t          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n\t        }\n\t\n\t        // If a time zone is specified, all fields are interpreted as UTC and then\n\t        // offset according to the specified time zone.\n\t        if (\"Z\" in d) {\n\t          d.H += d.Z / 100 | 0;\n\t          d.M += d.Z % 100;\n\t          return utcDate(d);\n\t        }\n\t\n\t        // Otherwise, all fields are in local time.\n\t        return newDate(d);\n\t      };\n\t    }\n\t\n\t    function parseSpecifier(d, specifier, string, j) {\n\t      var i = 0,\n\t          n = specifier.length,\n\t          m = string.length,\n\t          c,\n\t          parse;\n\t\n\t      while (i < n) {\n\t        if (j >= m) return -1;\n\t        c = specifier.charCodeAt(i++);\n\t        if (c === 37) {\n\t          c = specifier.charAt(i++);\n\t          parse = parses[c in pads ? specifier.charAt(i++) : c];\n\t          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n\t        } else if (c != string.charCodeAt(j++)) {\n\t          return -1;\n\t        }\n\t      }\n\t\n\t      return j;\n\t    }\n\t\n\t    function parsePeriod(d, string, i) {\n\t      var n = periodRe.exec(string.slice(i));\n\t      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseShortWeekday(d, string, i) {\n\t      var n = shortWeekdayRe.exec(string.slice(i));\n\t      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseWeekday(d, string, i) {\n\t      var n = weekdayRe.exec(string.slice(i));\n\t      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseShortMonth(d, string, i) {\n\t      var n = shortMonthRe.exec(string.slice(i));\n\t      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseMonth(d, string, i) {\n\t      var n = monthRe.exec(string.slice(i));\n\t      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n\t    }\n\t\n\t    function parseLocaleDateTime(d, string, i) {\n\t      return parseSpecifier(d, locale_dateTime, string, i);\n\t    }\n\t\n\t    function parseLocaleDate(d, string, i) {\n\t      return parseSpecifier(d, locale_date, string, i);\n\t    }\n\t\n\t    function parseLocaleTime(d, string, i) {\n\t      return parseSpecifier(d, locale_time, string, i);\n\t    }\n\t\n\t    function formatShortWeekday(d) {\n\t      return locale_shortWeekdays[d.getDay()];\n\t    }\n\t\n\t    function formatWeekday(d) {\n\t      return locale_weekdays[d.getDay()];\n\t    }\n\t\n\t    function formatShortMonth(d) {\n\t      return locale_shortMonths[d.getMonth()];\n\t    }\n\t\n\t    function formatMonth(d) {\n\t      return locale_months[d.getMonth()];\n\t    }\n\t\n\t    function formatPeriod(d) {\n\t      return locale_periods[+(d.getHours() >= 12)];\n\t    }\n\t\n\t    function formatUTCShortWeekday(d) {\n\t      return locale_shortWeekdays[d.getUTCDay()];\n\t    }\n\t\n\t    function formatUTCWeekday(d) {\n\t      return locale_weekdays[d.getUTCDay()];\n\t    }\n\t\n\t    function formatUTCShortMonth(d) {\n\t      return locale_shortMonths[d.getUTCMonth()];\n\t    }\n\t\n\t    function formatUTCMonth(d) {\n\t      return locale_months[d.getUTCMonth()];\n\t    }\n\t\n\t    function formatUTCPeriod(d) {\n\t      return locale_periods[+(d.getUTCHours() >= 12)];\n\t    }\n\t\n\t    return {\n\t      format: function(specifier) {\n\t        var f = newFormat(specifier += \"\", formats);\n\t        f.toString = function() { return specifier; };\n\t        return f;\n\t      },\n\t      parse: function(specifier) {\n\t        var p = newParse(specifier += \"\", localDate);\n\t        p.toString = function() { return specifier; };\n\t        return p;\n\t      },\n\t      utcFormat: function(specifier) {\n\t        var f = newFormat(specifier += \"\", utcFormats);\n\t        f.toString = function() { return specifier; };\n\t        return f;\n\t      },\n\t      utcParse: function(specifier) {\n\t        var p = newParse(specifier, utcDate);\n\t        p.toString = function() { return specifier; };\n\t        return p;\n\t      }\n\t    };\n\t  }\n\t\n\t  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n\t  var numberRe = /^\\s*\\d+/;\n\t  var percentRe = /^%/;\n\t  var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\t  function pad(value, fill, width) {\n\t    var sign = value < 0 ? \"-\" : \"\",\n\t        string = (sign ? -value : value) + \"\",\n\t        length = string.length;\n\t    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n\t  }\n\t\n\t  function requote(s) {\n\t    return s.replace(requoteRe, \"\\\\$&\");\n\t  }\n\t\n\t  function formatRe(names) {\n\t    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n\t  }\n\t\n\t  function formatLookup(names) {\n\t    var map = {}, i = -1, n = names.length;\n\t    while (++i < n) map[names[i].toLowerCase()] = i;\n\t    return map;\n\t  }\n\t\n\t  function parseWeekdayNumber(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 1));\n\t    return n ? (d.w = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseWeekNumberSunday(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i));\n\t    return n ? (d.U = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseWeekNumberMonday(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i));\n\t    return n ? (d.W = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseFullYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 4));\n\t    return n ? (d.y = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseZone(d, string, i) {\n\t    var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n\t    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMonthNumber(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseDayOfMonth(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.d = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseDayOfYear(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 3));\n\t    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseHour24(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.H = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMinutes(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.M = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseSeconds(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 2));\n\t    return n ? (d.S = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseMilliseconds(d, string, i) {\n\t    var n = numberRe.exec(string.slice(i, i + 3));\n\t    return n ? (d.L = +n[0], i + n[0].length) : -1;\n\t  }\n\t\n\t  function parseLiteralPercent(d, string, i) {\n\t    var n = percentRe.exec(string.slice(i, i + 1));\n\t    return n ? i + n[0].length : -1;\n\t  }\n\t\n\t  function formatDayOfMonth(d, p) {\n\t    return pad(d.getDate(), p, 2);\n\t  }\n\t\n\t  function formatHour24(d, p) {\n\t    return pad(d.getHours(), p, 2);\n\t  }\n\t\n\t  function formatHour12(d, p) {\n\t    return pad(d.getHours() % 12 || 12, p, 2);\n\t  }\n\t\n\t  function formatDayOfYear(d, p) {\n\t    return pad(1 + day.count(year(d), d), p, 3);\n\t  }\n\t\n\t  function formatMilliseconds(d, p) {\n\t    return pad(d.getMilliseconds(), p, 3);\n\t  }\n\t\n\t  function formatMonthNumber(d, p) {\n\t    return pad(d.getMonth() + 1, p, 2);\n\t  }\n\t\n\t  function formatMinutes(d, p) {\n\t    return pad(d.getMinutes(), p, 2);\n\t  }\n\t\n\t  function formatSeconds(d, p) {\n\t    return pad(d.getSeconds(), p, 2);\n\t  }\n\t\n\t  function formatWeekNumberSunday(d, p) {\n\t    return pad(timeWeek.count(year(d), d), p, 2);\n\t  }\n\t\n\t  function formatWeekdayNumber(d) {\n\t    return d.getDay();\n\t  }\n\t\n\t  function formatWeekNumberMonday(d, p) {\n\t    return pad(timeMonday.count(year(d), d), p, 2);\n\t  }\n\t\n\t  function formatYear(d, p) {\n\t    return pad(d.getFullYear() % 100, p, 2);\n\t  }\n\t\n\t  function formatFullYear(d, p) {\n\t    return pad(d.getFullYear() % 10000, p, 4);\n\t  }\n\t\n\t  function formatZone(d) {\n\t    var z = d.getTimezoneOffset();\n\t    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n\t        + pad(z / 60 | 0, \"0\", 2)\n\t        + pad(z % 60, \"0\", 2);\n\t  }\n\t\n\t  function formatUTCDayOfMonth(d, p) {\n\t    return pad(d.getUTCDate(), p, 2);\n\t  }\n\t\n\t  function formatUTCHour24(d, p) {\n\t    return pad(d.getUTCHours(), p, 2);\n\t  }\n\t\n\t  function formatUTCHour12(d, p) {\n\t    return pad(d.getUTCHours() % 12 || 12, p, 2);\n\t  }\n\t\n\t  function formatUTCDayOfYear(d, p) {\n\t    return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n\t  }\n\t\n\t  function formatUTCMilliseconds(d, p) {\n\t    return pad(d.getUTCMilliseconds(), p, 3);\n\t  }\n\t\n\t  function formatUTCMonthNumber(d, p) {\n\t    return pad(d.getUTCMonth() + 1, p, 2);\n\t  }\n\t\n\t  function formatUTCMinutes(d, p) {\n\t    return pad(d.getUTCMinutes(), p, 2);\n\t  }\n\t\n\t  function formatUTCSeconds(d, p) {\n\t    return pad(d.getUTCSeconds(), p, 2);\n\t  }\n\t\n\t  function formatUTCWeekNumberSunday(d, p) {\n\t    return pad(utcWeek.count(utcYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatUTCWeekdayNumber(d) {\n\t    return d.getUTCDay();\n\t  }\n\t\n\t  function formatUTCWeekNumberMonday(d, p) {\n\t    return pad(utcMonday.count(utcYear(d), d), p, 2);\n\t  }\n\t\n\t  function formatUTCYear(d, p) {\n\t    return pad(d.getUTCFullYear() % 100, p, 2);\n\t  }\n\t\n\t  function formatUTCFullYear(d, p) {\n\t    return pad(d.getUTCFullYear() % 10000, p, 4);\n\t  }\n\t\n\t  function formatUTCZone() {\n\t    return \"+0000\";\n\t  }\n\t\n\t  function formatLiteralPercent() {\n\t    return \"%\";\n\t  }\n\t\n\t  var locale$1;\n\t  defaultLocale$1({\n\t    dateTime: \"%x, %X\",\n\t    date: \"%-m/%-d/%Y\",\n\t    time: \"%-I:%M:%S %p\",\n\t    periods: [\"AM\", \"PM\"],\n\t    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n\t  });\n\t\n\t  function defaultLocale$1(definition) {\n\t    locale$1 = formatLocale$1(definition);\n\t    exports.timeFormat = locale$1.format;\n\t    exports.timeParse = locale$1.parse;\n\t    exports.utcFormat = locale$1.utcFormat;\n\t    exports.utcParse = locale$1.utcParse;\n\t    return locale$1;\n\t  }\n\t\n\t  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\t\n\t  function formatIsoNative(date) {\n\t    return date.toISOString();\n\t  }\n\t\n\t  var formatIso = Date.prototype.toISOString\n\t      ? formatIsoNative\n\t      : exports.utcFormat(isoSpecifier);\n\t\n\t  function parseIsoNative(string) {\n\t    var date = new Date(string);\n\t    return isNaN(date) ? null : date;\n\t  }\n\t\n\t  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n\t      ? parseIsoNative\n\t      : exports.utcParse(isoSpecifier);\n\t\n\t  var array$2 = Array.prototype;\n\t\n\t  var map$2 = array$2.map;\n\t  var slice$3 = array$2.slice;\n\t\n\t  var implicit = {name: \"implicit\"};\n\t\n\t  function ordinal(range) {\n\t    var index = map$1(),\n\t        domain = [],\n\t        unknown = implicit;\n\t\n\t    range = range == null ? [] : slice$3.call(range);\n\t\n\t    function scale(d) {\n\t      var key = d + \"\", i = index.get(key);\n\t      if (!i) {\n\t        if (unknown !== implicit) return unknown;\n\t        index.set(key, i = domain.push(d));\n\t      }\n\t      return range[(i - 1) % range.length];\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      if (!arguments.length) return domain.slice();\n\t      domain = [], index = map$1();\n\t      var i = -1, n = _.length, d, key;\n\t      while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n\t      return scale;\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice$3.call(_), scale) : range.slice();\n\t    };\n\t\n\t    scale.unknown = function(_) {\n\t      return arguments.length ? (unknown = _, scale) : unknown;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return ordinal()\n\t          .domain(domain)\n\t          .range(range)\n\t          .unknown(unknown);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function band() {\n\t    var scale = ordinal().unknown(undefined),\n\t        domain = scale.domain,\n\t        ordinalRange = scale.range,\n\t        range$$ = [0, 1],\n\t        step,\n\t        bandwidth,\n\t        round = false,\n\t        paddingInner = 0,\n\t        paddingOuter = 0,\n\t        align = 0.5;\n\t\n\t    delete scale.unknown;\n\t\n\t    function rescale() {\n\t      var n = domain().length,\n\t          reverse = range$$[1] < range$$[0],\n\t          start = range$$[reverse - 0],\n\t          stop = range$$[1 - reverse];\n\t      step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n\t      if (round) step = Math.floor(step);\n\t      start += (stop - start - step * (n - paddingInner)) * align;\n\t      bandwidth = step * (1 - paddingInner);\n\t      if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n\t      var values = range(n).map(function(i) { return start + step * i; });\n\t      return ordinalRange(reverse ? values.reverse() : values);\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain(_), rescale()) : domain();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range$$ = [+_[0], +_[1]], rescale()) : range$$.slice();\n\t    };\n\t\n\t    scale.rangeRound = function(_) {\n\t      return range$$ = [+_[0], +_[1]], round = true, rescale();\n\t    };\n\t\n\t    scale.bandwidth = function() {\n\t      return bandwidth;\n\t    };\n\t\n\t    scale.step = function() {\n\t      return step;\n\t    };\n\t\n\t    scale.round = function(_) {\n\t      return arguments.length ? (round = !!_, rescale()) : round;\n\t    };\n\t\n\t    scale.padding = function(_) {\n\t      return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n\t    };\n\t\n\t    scale.paddingInner = function(_) {\n\t      return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n\t    };\n\t\n\t    scale.paddingOuter = function(_) {\n\t      return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n\t    };\n\t\n\t    scale.align = function(_) {\n\t      return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return band()\n\t          .domain(domain())\n\t          .range(range$$)\n\t          .round(round)\n\t          .paddingInner(paddingInner)\n\t          .paddingOuter(paddingOuter)\n\t          .align(align);\n\t    };\n\t\n\t    return rescale();\n\t  }\n\t\n\t  function pointish(scale) {\n\t    var copy = scale.copy;\n\t\n\t    scale.padding = scale.paddingOuter;\n\t    delete scale.paddingInner;\n\t    delete scale.paddingOuter;\n\t\n\t    scale.copy = function() {\n\t      return pointish(copy());\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function point$4() {\n\t    return pointish(band().paddingInner(1));\n\t  }\n\t\n\t  function constant$3(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function number$1(x) {\n\t    return +x;\n\t  }\n\t\n\t  var unit = [0, 1];\n\t\n\t  function deinterpolate(a, b) {\n\t    return (b -= (a = +a))\n\t        ? function(x) { return (x - a) / b; }\n\t        : constant$3(b);\n\t  }\n\t\n\t  function deinterpolateClamp(deinterpolate) {\n\t    return function(a, b) {\n\t      var d = deinterpolate(a = +a, b = +b);\n\t      return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n\t    };\n\t  }\n\t\n\t  function reinterpolateClamp(reinterpolate) {\n\t    return function(a, b) {\n\t      var r = reinterpolate(a = +a, b = +b);\n\t      return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n\t    };\n\t  }\n\t\n\t  function bimap(domain, range, deinterpolate, reinterpolate) {\n\t    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n\t    if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n\t    else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n\t    return function(x) { return r0(d0(x)); };\n\t  }\n\t\n\t  function polymap(domain, range, deinterpolate, reinterpolate) {\n\t    var j = Math.min(domain.length, range.length) - 1,\n\t        d = new Array(j),\n\t        r = new Array(j),\n\t        i = -1;\n\t\n\t    // Reverse descending domains.\n\t    if (domain[j] < domain[0]) {\n\t      domain = domain.slice().reverse();\n\t      range = range.slice().reverse();\n\t    }\n\t\n\t    while (++i < j) {\n\t      d[i] = deinterpolate(domain[i], domain[i + 1]);\n\t      r[i] = reinterpolate(range[i], range[i + 1]);\n\t    }\n\t\n\t    return function(x) {\n\t      var i = bisectRight(domain, x, 1, j) - 1;\n\t      return r[i](d[i](x));\n\t    };\n\t  }\n\t\n\t  function copy(source, target) {\n\t    return target\n\t        .domain(source.domain())\n\t        .range(source.range())\n\t        .interpolate(source.interpolate())\n\t        .clamp(source.clamp());\n\t  }\n\t\n\t  // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n\t  // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n\t  function continuous(deinterpolate$$, reinterpolate) {\n\t    var domain = unit,\n\t        range = unit,\n\t        interpolate$$ = interpolate,\n\t        clamp = false,\n\t        piecewise,\n\t        output,\n\t        input;\n\t\n\t    function rescale() {\n\t      piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n\t      output = input = null;\n\t      return scale;\n\t    }\n\t\n\t    function scale(x) {\n\t      return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate$$)))(+x);\n\t    }\n\t\n\t    scale.invert = function(y) {\n\t      return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain = map$2.call(_, number$1), rescale()) : domain.slice();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice$3.call(_), rescale()) : range.slice();\n\t    };\n\t\n\t    scale.rangeRound = function(_) {\n\t      return range = slice$3.call(_), interpolate$$ = interpolateRound, rescale();\n\t    };\n\t\n\t    scale.clamp = function(_) {\n\t      return arguments.length ? (clamp = !!_, rescale()) : clamp;\n\t    };\n\t\n\t    scale.interpolate = function(_) {\n\t      return arguments.length ? (interpolate$$ = _, rescale()) : interpolate$$;\n\t    };\n\t\n\t    return rescale();\n\t  }\n\t\n\t  function tickFormat(domain, count, specifier) {\n\t    var start = domain[0],\n\t        stop = domain[domain.length - 1],\n\t        step = tickStep(start, stop, count == null ? 10 : count),\n\t        precision;\n\t    specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n\t    switch (specifier.type) {\n\t      case \"s\": {\n\t        var value = Math.max(Math.abs(start), Math.abs(stop));\n\t        if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n\t        return exports.formatPrefix(specifier, value);\n\t      }\n\t      case \"\":\n\t      case \"e\":\n\t      case \"g\":\n\t      case \"p\":\n\t      case \"r\": {\n\t        if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n\t        break;\n\t      }\n\t      case \"f\":\n\t      case \"%\": {\n\t        if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n\t        break;\n\t      }\n\t    }\n\t    return exports.format(specifier);\n\t  }\n\t\n\t  function linearish(scale) {\n\t    var domain = scale.domain;\n\t\n\t    scale.ticks = function(count) {\n\t      var d = domain();\n\t      return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      return tickFormat(domain(), count, specifier);\n\t    };\n\t\n\t    scale.nice = function(count) {\n\t      var d = domain(),\n\t          i = d.length - 1,\n\t          n = count == null ? 10 : count,\n\t          start = d[0],\n\t          stop = d[i],\n\t          step = tickStep(start, stop, n);\n\t\n\t      if (step) {\n\t        step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n\t        d[0] = Math.floor(start / step) * step;\n\t        d[i] = Math.ceil(stop / step) * step;\n\t        domain(d);\n\t      }\n\t\n\t      return scale;\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function linear$2() {\n\t    var scale = continuous(deinterpolate, interpolateNumber);\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, linear$2());\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function identity$4() {\n\t    var domain = [0, 1];\n\t\n\t    function scale(x) {\n\t      return +x;\n\t    }\n\t\n\t    scale.invert = scale;\n\t\n\t    scale.domain = scale.range = function(_) {\n\t      return arguments.length ? (domain = map$2.call(_, number$1), scale) : domain.slice();\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return identity$4().domain(domain);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function nice(domain, interval) {\n\t    domain = domain.slice();\n\t\n\t    var i0 = 0,\n\t        i1 = domain.length - 1,\n\t        x0 = domain[i0],\n\t        x1 = domain[i1],\n\t        t;\n\t\n\t    if (x1 < x0) {\n\t      t = i0, i0 = i1, i1 = t;\n\t      t = x0, x0 = x1, x1 = t;\n\t    }\n\t\n\t    domain[i0] = interval.floor(x0);\n\t    domain[i1] = interval.ceil(x1);\n\t    return domain;\n\t  }\n\t\n\t  function deinterpolate$1(a, b) {\n\t    return (b = Math.log(b / a))\n\t        ? function(x) { return Math.log(x / a) / b; }\n\t        : constant$3(b);\n\t  }\n\t\n\t  function reinterpolate(a, b) {\n\t    return a < 0\n\t        ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n\t        : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n\t  }\n\t\n\t  function pow10(x) {\n\t    return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n\t  }\n\t\n\t  function powp(base) {\n\t    return base === 10 ? pow10\n\t        : base === Math.E ? Math.exp\n\t        : function(x) { return Math.pow(base, x); };\n\t  }\n\t\n\t  function logp(base) {\n\t    return base === Math.E ? Math.log\n\t        : base === 10 && Math.log10\n\t        || base === 2 && Math.log2\n\t        || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n\t  }\n\t\n\t  function reflect(f) {\n\t    return function(x) {\n\t      return -f(-x);\n\t    };\n\t  }\n\t\n\t  function log() {\n\t    var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),\n\t        domain = scale.domain,\n\t        base = 10,\n\t        logs = logp(10),\n\t        pows = powp(10);\n\t\n\t    function rescale() {\n\t      logs = logp(base), pows = powp(base);\n\t      if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n\t      return scale;\n\t    }\n\t\n\t    scale.base = function(_) {\n\t      return arguments.length ? (base = +_, rescale()) : base;\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain(_), rescale()) : domain();\n\t    };\n\t\n\t    scale.ticks = function(count) {\n\t      var d = domain(),\n\t          u = d[0],\n\t          v = d[d.length - 1],\n\t          r;\n\t\n\t      if (r = v < u) i = u, u = v, v = i;\n\t\n\t      var i = logs(u),\n\t          j = logs(v),\n\t          p,\n\t          k,\n\t          t,\n\t          n = count == null ? 10 : +count,\n\t          z = [];\n\t\n\t      if (!(base % 1) && j - i < n) {\n\t        i = Math.round(i) - 1, j = Math.round(j) + 1;\n\t        if (u > 0) for (; i < j; ++i) {\n\t          for (k = 1, p = pows(i); k < base; ++k) {\n\t            t = p * k;\n\t            if (t < u) continue;\n\t            if (t > v) break;\n\t            z.push(t);\n\t          }\n\t        } else for (; i < j; ++i) {\n\t          for (k = base - 1, p = pows(i); k >= 1; --k) {\n\t            t = p * k;\n\t            if (t < u) continue;\n\t            if (t > v) break;\n\t            z.push(t);\n\t          }\n\t        }\n\t      } else {\n\t        z = ticks(i, j, Math.min(j - i, n)).map(pows);\n\t      }\n\t\n\t      return r ? z.reverse() : z;\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n\t      if (typeof specifier !== \"function\") specifier = exports.format(specifier);\n\t      if (count === Infinity) return specifier;\n\t      if (count == null) count = 10;\n\t      var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n\t      return function(d) {\n\t        var i = d / pows(Math.round(logs(d)));\n\t        if (i * base < base - 0.5) i *= base;\n\t        return i <= k ? specifier(d) : \"\";\n\t      };\n\t    };\n\t\n\t    scale.nice = function() {\n\t      return domain(nice(domain(), {\n\t        floor: function(x) { return pows(Math.floor(logs(x))); },\n\t        ceil: function(x) { return pows(Math.ceil(logs(x))); }\n\t      }));\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, log().base(base));\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function raise(x, exponent) {\n\t    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n\t  }\n\t\n\t  function pow() {\n\t    var exponent = 1,\n\t        scale = continuous(deinterpolate, reinterpolate),\n\t        domain = scale.domain;\n\t\n\t    function deinterpolate(a, b) {\n\t      return (b = raise(b, exponent) - (a = raise(a, exponent)))\n\t          ? function(x) { return (raise(x, exponent) - a) / b; }\n\t          : constant$3(b);\n\t    }\n\t\n\t    function reinterpolate(a, b) {\n\t      b = raise(b, exponent) - (a = raise(a, exponent));\n\t      return function(t) { return raise(a + b * t, 1 / exponent); };\n\t    }\n\t\n\t    scale.exponent = function(_) {\n\t      return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, pow().exponent(exponent));\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function sqrt() {\n\t    return pow().exponent(0.5);\n\t  }\n\t\n\t  function quantile() {\n\t    var domain = [],\n\t        range = [],\n\t        thresholds = [];\n\t\n\t    function rescale() {\n\t      var i = 0, n = Math.max(1, range.length);\n\t      thresholds = new Array(n - 1);\n\t      while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n\t      return scale;\n\t    }\n\t\n\t    function scale(x) {\n\t      if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)];\n\t    }\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return i < 0 ? [NaN, NaN] : [\n\t        i > 0 ? thresholds[i - 1] : domain[0],\n\t        i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n\t      ];\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      if (!arguments.length) return domain.slice();\n\t      domain = [];\n\t      for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n\t      domain.sort(ascending);\n\t      return rescale();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice$3.call(_), rescale()) : range.slice();\n\t    };\n\t\n\t    scale.quantiles = function() {\n\t      return thresholds.slice();\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return quantile()\n\t          .domain(domain)\n\t          .range(range);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function quantize$1() {\n\t    var x0 = 0,\n\t        x1 = 1,\n\t        n = 1,\n\t        domain = [0.5],\n\t        range = [0, 1];\n\t\n\t    function scale(x) {\n\t      if (x <= x) return range[bisectRight(domain, x, 0, n)];\n\t    }\n\t\n\t    function rescale() {\n\t      var i = -1;\n\t      domain = new Array(n);\n\t      while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n\t      return scale;\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (n = (range = slice$3.call(_)).length - 1, rescale()) : range.slice();\n\t    };\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return i < 0 ? [NaN, NaN]\n\t          : i < 1 ? [x0, domain[0]]\n\t          : i >= n ? [domain[n - 1], x1]\n\t          : [domain[i - 1], domain[i]];\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return quantize$1()\n\t          .domain([x0, x1])\n\t          .range(range);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  function threshold$1() {\n\t    var domain = [0.5],\n\t        range = [0, 1],\n\t        n = 1;\n\t\n\t    function scale(x) {\n\t      if (x <= x) return range[bisectRight(domain, x, 0, n)];\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n\t    };\n\t\n\t    scale.range = function(_) {\n\t      return arguments.length ? (range = slice$3.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n\t    };\n\t\n\t    scale.invertExtent = function(y) {\n\t      var i = range.indexOf(y);\n\t      return [domain[i - 1], domain[i]];\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return threshold$1()\n\t          .domain(domain)\n\t          .range(range);\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\tvar   durationSecond$1 = 1000;\n\tvar   durationMinute$1 = durationSecond$1 * 60;\n\tvar   durationHour$1 = durationMinute$1 * 60;\n\tvar   durationDay$1 = durationHour$1 * 24;\n\tvar   durationWeek$1 = durationDay$1 * 7;\n\t  var durationMonth = durationDay$1 * 30;\n\t  var durationYear = durationDay$1 * 365;\n\t  function date$1(t) {\n\t    return new Date(t);\n\t  }\n\t\n\t  function number$2(t) {\n\t    return t instanceof Date ? +t : +new Date(+t);\n\t  }\n\t\n\t  function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n\t    var scale = continuous(deinterpolate, interpolateNumber),\n\t        invert = scale.invert,\n\t        domain = scale.domain;\n\t\n\t    var formatMillisecond = format(\".%L\"),\n\t        formatSecond = format(\":%S\"),\n\t        formatMinute = format(\"%I:%M\"),\n\t        formatHour = format(\"%I %p\"),\n\t        formatDay = format(\"%a %d\"),\n\t        formatWeek = format(\"%b %d\"),\n\t        formatMonth = format(\"%B\"),\n\t        formatYear = format(\"%Y\");\n\t\n\t    var tickIntervals = [\n\t      [second,  1,      durationSecond$1],\n\t      [second,  5,  5 * durationSecond$1],\n\t      [second, 15, 15 * durationSecond$1],\n\t      [second, 30, 30 * durationSecond$1],\n\t      [minute,  1,      durationMinute$1],\n\t      [minute,  5,  5 * durationMinute$1],\n\t      [minute, 15, 15 * durationMinute$1],\n\t      [minute, 30, 30 * durationMinute$1],\n\t      [  hour,  1,      durationHour$1  ],\n\t      [  hour,  3,  3 * durationHour$1  ],\n\t      [  hour,  6,  6 * durationHour$1  ],\n\t      [  hour, 12, 12 * durationHour$1  ],\n\t      [   day,  1,      durationDay$1   ],\n\t      [   day,  2,  2 * durationDay$1   ],\n\t      [  week,  1,      durationWeek$1  ],\n\t      [ month,  1,      durationMonth ],\n\t      [ month,  3,  3 * durationMonth ],\n\t      [  year,  1,      durationYear  ]\n\t    ];\n\t\n\t    function tickFormat(date) {\n\t      return (second(date) < date ? formatMillisecond\n\t          : minute(date) < date ? formatSecond\n\t          : hour(date) < date ? formatMinute\n\t          : day(date) < date ? formatHour\n\t          : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n\t          : year(date) < date ? formatMonth\n\t          : formatYear)(date);\n\t    }\n\t\n\t    function tickInterval(interval, start, stop, step) {\n\t      if (interval == null) interval = 10;\n\t\n\t      // If a desired tick count is specified, pick a reasonable tick interval\n\t      // based on the extent of the domain and a rough estimate of tick size.\n\t      // Otherwise, assume interval is already a time interval and use it.\n\t      if (typeof interval === \"number\") {\n\t        var target = Math.abs(stop - start) / interval,\n\t            i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n\t        if (i === tickIntervals.length) {\n\t          step = tickStep(start / durationYear, stop / durationYear, interval);\n\t          interval = year;\n\t        } else if (i) {\n\t          i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n\t          step = i[1];\n\t          interval = i[0];\n\t        } else {\n\t          step = tickStep(start, stop, interval);\n\t          interval = millisecond;\n\t        }\n\t      }\n\t\n\t      return step == null ? interval : interval.every(step);\n\t    }\n\t\n\t    scale.invert = function(y) {\n\t      return new Date(invert(y));\n\t    };\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? domain(map$2.call(_, number$2)) : domain().map(date$1);\n\t    };\n\t\n\t    scale.ticks = function(interval, step) {\n\t      var d = domain(),\n\t          t0 = d[0],\n\t          t1 = d[d.length - 1],\n\t          r = t1 < t0,\n\t          t;\n\t      if (r) t = t0, t0 = t1, t1 = t;\n\t      t = tickInterval(interval, t0, t1, step);\n\t      t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n\t      return r ? t.reverse() : t;\n\t    };\n\t\n\t    scale.tickFormat = function(count, specifier) {\n\t      return specifier == null ? tickFormat : format(specifier);\n\t    };\n\t\n\t    scale.nice = function(interval, step) {\n\t      var d = domain();\n\t      return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n\t          ? domain(nice(d, interval))\n\t          : scale;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n\t    };\n\t\n\t    return scale;\n\t  }\n\t\n\t  function time() {\n\t    return calendar(year, month, timeWeek, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n\t  }\n\t\n\t  function utcTime() {\n\t    return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n\t  }\n\t\n\t  function colors(s) {\n\t    return s.match(/.{6}/g).map(function(x) {\n\t      return \"#\" + x;\n\t    });\n\t  }\n\t\n\t  var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\t\n\t  var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\t\n\t  var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\t\n\t  var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\t\n\t  var cubehelix$3 = interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n\t\n\t  var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\t\n\t  var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\t\n\t  var rainbow = cubehelix();\n\t\n\t  function rainbow$1(t) {\n\t    if (t < 0 || t > 1) t -= Math.floor(t);\n\t    var ts = Math.abs(t - 0.5);\n\t    rainbow.h = 360 * t - 100;\n\t    rainbow.s = 1.5 - 1.5 * ts;\n\t    rainbow.l = 0.8 - 0.9 * ts;\n\t    return rainbow + \"\";\n\t  }\n\t\n\t  function ramp(range) {\n\t    var n = range.length;\n\t    return function(t) {\n\t      return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n\t    };\n\t  }\n\t\n\t  var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\t\n\t  var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\t\n\t  var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\t\n\t  var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\t\n\t  function sequential(interpolator) {\n\t    var x0 = 0,\n\t        x1 = 1,\n\t        clamp = false;\n\t\n\t    function scale(x) {\n\t      var t = (x - x0) / (x1 - x0);\n\t      return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n\t    }\n\t\n\t    scale.domain = function(_) {\n\t      return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n\t    };\n\t\n\t    scale.clamp = function(_) {\n\t      return arguments.length ? (clamp = !!_, scale) : clamp;\n\t    };\n\t\n\t    scale.interpolator = function(_) {\n\t      return arguments.length ? (interpolator = _, scale) : interpolator;\n\t    };\n\t\n\t    scale.copy = function() {\n\t      return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n\t    };\n\t\n\t    return linearish(scale);\n\t  }\n\t\n\t  var xhtml = \"http://www.w3.org/1999/xhtml\";\n\t\n\t  var namespaces = {\n\t    svg: \"http://www.w3.org/2000/svg\",\n\t    xhtml: xhtml,\n\t    xlink: \"http://www.w3.org/1999/xlink\",\n\t    xml: \"http://www.w3.org/XML/1998/namespace\",\n\t    xmlns: \"http://www.w3.org/2000/xmlns/\"\n\t  };\n\t\n\t  function namespace(name) {\n\t    var prefix = name += \"\", i = prefix.indexOf(\":\");\n\t    if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n\t    return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n\t  }\n\t\n\t  function creatorInherit(name) {\n\t    return function() {\n\t      var document = this.ownerDocument,\n\t          uri = this.namespaceURI;\n\t      return uri === xhtml && document.documentElement.namespaceURI === xhtml\n\t          ? document.createElement(name)\n\t          : document.createElementNS(uri, name);\n\t    };\n\t  }\n\t\n\t  function creatorFixed(fullname) {\n\t    return function() {\n\t      return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n\t    };\n\t  }\n\t\n\t  function creator(name) {\n\t    var fullname = namespace(name);\n\t    return (fullname.local\n\t        ? creatorFixed\n\t        : creatorInherit)(fullname);\n\t  }\n\t\n\t  var nextId = 0;\n\t\n\t  function local() {\n\t    return new Local;\n\t  }\n\t\n\t  function Local() {\n\t    this._ = \"@\" + (++nextId).toString(36);\n\t  }\n\t\n\t  Local.prototype = local.prototype = {\n\t    constructor: Local,\n\t    get: function(node) {\n\t      var id = this._;\n\t      while (!(id in node)) if (!(node = node.parentNode)) return;\n\t      return node[id];\n\t    },\n\t    set: function(node, value) {\n\t      return node[this._] = value;\n\t    },\n\t    remove: function(node) {\n\t      return this._ in node && delete node[this._];\n\t    },\n\t    toString: function() {\n\t      return this._;\n\t    }\n\t  };\n\t\n\t  var matcher = function(selector) {\n\t    return function() {\n\t      return this.matches(selector);\n\t    };\n\t  };\n\t\n\t  if (typeof document !== \"undefined\") {\n\t    var element = document.documentElement;\n\t    if (!element.matches) {\n\t      var vendorMatches = element.webkitMatchesSelector\n\t          || element.msMatchesSelector\n\t          || element.mozMatchesSelector\n\t          || element.oMatchesSelector;\n\t      matcher = function(selector) {\n\t        return function() {\n\t          return vendorMatches.call(this, selector);\n\t        };\n\t      };\n\t    }\n\t  }\n\t\n\t  var matcher$1 = matcher;\n\t\n\t  var filterEvents = {};\n\t\n\t  exports.event = null;\n\t\n\t  if (typeof document !== \"undefined\") {\n\t    var element$1 = document.documentElement;\n\t    if (!(\"onmouseenter\" in element$1)) {\n\t      filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n\t    }\n\t  }\n\t\n\t  function filterContextListener(listener, index, group) {\n\t    listener = contextListener(listener, index, group);\n\t    return function(event) {\n\t      var related = event.relatedTarget;\n\t      if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n\t        listener.call(this, event);\n\t      }\n\t    };\n\t  }\n\t\n\t  function contextListener(listener, index, group) {\n\t    return function(event1) {\n\t      var event0 = exports.event; // Events can be reentrant (e.g., focus).\n\t      exports.event = event1;\n\t      try {\n\t        listener.call(this, this.__data__, index, group);\n\t      } finally {\n\t        exports.event = event0;\n\t      }\n\t    };\n\t  }\n\t\n\t  function parseTypenames$1(typenames) {\n\t    return typenames.trim().split(/^|\\s+/).map(function(t) {\n\t      var name = \"\", i = t.indexOf(\".\");\n\t      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n\t      return {type: t, name: name};\n\t    });\n\t  }\n\t\n\t  function onRemove(typename) {\n\t    return function() {\n\t      var on = this.__on;\n\t      if (!on) return;\n\t      for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n\t        if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n\t          this.removeEventListener(o.type, o.listener, o.capture);\n\t        } else {\n\t          on[++i] = o;\n\t        }\n\t      }\n\t      if (++i) on.length = i;\n\t      else delete this.__on;\n\t    };\n\t  }\n\t\n\t  function onAdd(typename, value, capture) {\n\t    var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n\t    return function(d, i, group) {\n\t      var on = this.__on, o, listener = wrap(value, i, group);\n\t      if (on) for (var j = 0, m = on.length; j < m; ++j) {\n\t        if ((o = on[j]).type === typename.type && o.name === typename.name) {\n\t          this.removeEventListener(o.type, o.listener, o.capture);\n\t          this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n\t          o.value = value;\n\t          return;\n\t        }\n\t      }\n\t      this.addEventListener(typename.type, listener, capture);\n\t      o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n\t      if (!on) this.__on = [o];\n\t      else on.push(o);\n\t    };\n\t  }\n\t\n\t  function selection_on(typename, value, capture) {\n\t    var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\t\n\t    if (arguments.length < 2) {\n\t      var on = this.node().__on;\n\t      if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n\t        for (i = 0, o = on[j]; i < n; ++i) {\n\t          if ((t = typenames[i]).type === o.type && t.name === o.name) {\n\t            return o.value;\n\t          }\n\t        }\n\t      }\n\t      return;\n\t    }\n\t\n\t    on = value ? onAdd : onRemove;\n\t    if (capture == null) capture = false;\n\t    for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n\t    return this;\n\t  }\n\t\n\t  function customEvent(event1, listener, that, args) {\n\t    var event0 = exports.event;\n\t    event1.sourceEvent = exports.event;\n\t    exports.event = event1;\n\t    try {\n\t      return listener.apply(that, args);\n\t    } finally {\n\t      exports.event = event0;\n\t    }\n\t  }\n\t\n\t  function sourceEvent() {\n\t    var current = exports.event, source;\n\t    while (source = current.sourceEvent) current = source;\n\t    return current;\n\t  }\n\t\n\t  function point$5(node, event) {\n\t    var svg = node.ownerSVGElement || node;\n\t\n\t    if (svg.createSVGPoint) {\n\t      var point = svg.createSVGPoint();\n\t      point.x = event.clientX, point.y = event.clientY;\n\t      point = point.matrixTransform(node.getScreenCTM().inverse());\n\t      return [point.x, point.y];\n\t    }\n\t\n\t    var rect = node.getBoundingClientRect();\n\t    return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n\t  }\n\t\n\t  function mouse(node) {\n\t    var event = sourceEvent();\n\t    if (event.changedTouches) event = event.changedTouches[0];\n\t    return point$5(node, event);\n\t  }\n\t\n\t  function none$2() {}\n\t\n\t  function selector(selector) {\n\t    return selector == null ? none$2 : function() {\n\t      return this.querySelector(selector);\n\t    };\n\t  }\n\t\n\t  function selection_select(select) {\n\t    if (typeof select !== \"function\") select = selector(select);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n\t        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n\t          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n\t          subgroup[i] = subnode;\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Selection(subgroups, this._parents);\n\t  }\n\t\n\t  function empty() {\n\t    return [];\n\t  }\n\t\n\t  function selectorAll(selector) {\n\t    return selector == null ? empty : function() {\n\t      return this.querySelectorAll(selector);\n\t    };\n\t  }\n\t\n\t  function selection_selectAll(select) {\n\t    if (typeof select !== \"function\") select = selectorAll(select);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n\t        if (node = group[i]) {\n\t          subgroups.push(select.call(node, node.__data__, i, group));\n\t          parents.push(node);\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Selection(subgroups, parents);\n\t  }\n\t\n\t  function selection_filter(match) {\n\t    if (typeof match !== \"function\") match = matcher$1(match);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n\t        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n\t          subgroup.push(node);\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Selection(subgroups, this._parents);\n\t  }\n\t\n\t  function sparse(update) {\n\t    return new Array(update.length);\n\t  }\n\t\n\t  function selection_enter() {\n\t    return new Selection(this._enter || this._groups.map(sparse), this._parents);\n\t  }\n\t\n\t  function EnterNode(parent, datum) {\n\t    this.ownerDocument = parent.ownerDocument;\n\t    this.namespaceURI = parent.namespaceURI;\n\t    this._next = null;\n\t    this._parent = parent;\n\t    this.__data__ = datum;\n\t  }\n\t\n\t  EnterNode.prototype = {\n\t    constructor: EnterNode,\n\t    appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n\t    insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n\t    querySelector: function(selector) { return this._parent.querySelector(selector); },\n\t    querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n\t  };\n\t\n\t  function constant$4(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\t\n\t  function bindIndex(parent, group, enter, update, exit, data) {\n\t    var i = 0,\n\t        node,\n\t        groupLength = group.length,\n\t        dataLength = data.length;\n\t\n\t    // Put any non-null nodes that fit into update.\n\t    // Put any null nodes into enter.\n\t    // Put any remaining data into enter.\n\t    for (; i < dataLength; ++i) {\n\t      if (node = group[i]) {\n\t        node.__data__ = data[i];\n\t        update[i] = node;\n\t      } else {\n\t        enter[i] = new EnterNode(parent, data[i]);\n\t      }\n\t    }\n\t\n\t    // Put any non-null nodes that don’t fit into exit.\n\t    for (; i < groupLength; ++i) {\n\t      if (node = group[i]) {\n\t        exit[i] = node;\n\t      }\n\t    }\n\t  }\n\t\n\t  function bindKey(parent, group, enter, update, exit, data, key) {\n\t    var i,\n\t        node,\n\t        nodeByKeyValue = {},\n\t        groupLength = group.length,\n\t        dataLength = data.length,\n\t        keyValues = new Array(groupLength),\n\t        keyValue;\n\t\n\t    // Compute the key for each node.\n\t    // If multiple nodes have the same key, the duplicates are added to exit.\n\t    for (i = 0; i < groupLength; ++i) {\n\t      if (node = group[i]) {\n\t        keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n\t        if (keyValue in nodeByKeyValue) {\n\t          exit[i] = node;\n\t        } else {\n\t          nodeByKeyValue[keyValue] = node;\n\t        }\n\t      }\n\t    }\n\t\n\t    // Compute the key for each datum.\n\t    // If there a node associated with this key, join and add it to update.\n\t    // If there is not (or the key is a duplicate), add it to enter.\n\t    for (i = 0; i < dataLength; ++i) {\n\t      keyValue = keyPrefix + key.call(parent, data[i], i, data);\n\t      if (node = nodeByKeyValue[keyValue]) {\n\t        update[i] = node;\n\t        node.__data__ = data[i];\n\t        nodeByKeyValue[keyValue] = null;\n\t      } else {\n\t        enter[i] = new EnterNode(parent, data[i]);\n\t      }\n\t    }\n\t\n\t    // Add any remaining nodes that were not bound to data to exit.\n\t    for (i = 0; i < groupLength; ++i) {\n\t      if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n\t        exit[i] = node;\n\t      }\n\t    }\n\t  }\n\t\n\t  function selection_data(value, key) {\n\t    if (!value) {\n\t      data = new Array(this.size()), j = -1;\n\t      this.each(function(d) { data[++j] = d; });\n\t      return data;\n\t    }\n\t\n\t    var bind = key ? bindKey : bindIndex,\n\t        parents = this._parents,\n\t        groups = this._groups;\n\t\n\t    if (typeof value !== \"function\") value = constant$4(value);\n\t\n\t    for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n\t      var parent = parents[j],\n\t          group = groups[j],\n\t          groupLength = group.length,\n\t          data = value.call(parent, parent && parent.__data__, j, parents),\n\t          dataLength = data.length,\n\t          enterGroup = enter[j] = new Array(dataLength),\n\t          updateGroup = update[j] = new Array(dataLength),\n\t          exitGroup = exit[j] = new Array(groupLength);\n\t\n\t      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\t\n\t      // Now connect the enter nodes to their following update node, such that\n\t      // appendChild can insert the materialized enter node before this node,\n\t      // rather than at the end of the parent node.\n\t      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n\t        if (previous = enterGroup[i0]) {\n\t          if (i0 >= i1) i1 = i0 + 1;\n\t          while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n\t          previous._next = next || null;\n\t        }\n\t      }\n\t    }\n\t\n\t    update = new Selection(update, parents);\n\t    update._enter = enter;\n\t    update._exit = exit;\n\t    return update;\n\t  }\n\t\n\t  function selection_exit() {\n\t    return new Selection(this._exit || this._groups.map(sparse), this._parents);\n\t  }\n\t\n\t  function selection_merge(selection) {\n\t\n\t    for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n\t      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n\t        if (node = group0[i] || group1[i]) {\n\t          merge[i] = node;\n\t        }\n\t      }\n\t    }\n\t\n\t    for (; j < m0; ++j) {\n\t      merges[j] = groups0[j];\n\t    }\n\t\n\t    return new Selection(merges, this._parents);\n\t  }\n\t\n\t  function selection_order() {\n\t\n\t    for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n\t      for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n\t        if (node = group[i]) {\n\t          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n\t          next = node;\n\t        }\n\t      }\n\t    }\n\t\n\t    return this;\n\t  }\n\t\n\t  function selection_sort(compare) {\n\t    if (!compare) compare = ascending$2;\n\t\n\t    function compareNode(a, b) {\n\t      return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n\t    }\n\t\n\t    for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n\t        if (node = group[i]) {\n\t          sortgroup[i] = node;\n\t        }\n\t      }\n\t      sortgroup.sort(compareNode);\n\t    }\n\t\n\t    return new Selection(sortgroups, this._parents).order();\n\t  }\n\t\n\t  function ascending$2(a, b) {\n\t    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n\t  }\n\t\n\t  function selection_call() {\n\t    var callback = arguments[0];\n\t    arguments[0] = this;\n\t    callback.apply(null, arguments);\n\t    return this;\n\t  }\n\t\n\t  function selection_nodes() {\n\t    var nodes = new Array(this.size()), i = -1;\n\t    this.each(function() { nodes[++i] = this; });\n\t    return nodes;\n\t  }\n\t\n\t  function selection_node() {\n\t\n\t    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n\t      for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n\t        var node = group[i];\n\t        if (node) return node;\n\t      }\n\t    }\n\t\n\t    return null;\n\t  }\n\t\n\t  function selection_size() {\n\t    var size = 0;\n\t    this.each(function() { ++size; });\n\t    return size;\n\t  }\n\t\n\t  function selection_empty() {\n\t    return !this.node();\n\t  }\n\t\n\t  function selection_each(callback) {\n\t\n\t    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n\t      for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n\t        if (node = group[i]) callback.call(node, node.__data__, i, group);\n\t      }\n\t    }\n\t\n\t    return this;\n\t  }\n\t\n\t  function attrRemove(name) {\n\t    return function() {\n\t      this.removeAttribute(name);\n\t    };\n\t  }\n\t\n\t  function attrRemoveNS(fullname) {\n\t    return function() {\n\t      this.removeAttributeNS(fullname.space, fullname.local);\n\t    };\n\t  }\n\t\n\t  function attrConstant(name, value) {\n\t    return function() {\n\t      this.setAttribute(name, value);\n\t    };\n\t  }\n\t\n\t  function attrConstantNS(fullname, value) {\n\t    return function() {\n\t      this.setAttributeNS(fullname.space, fullname.local, value);\n\t    };\n\t  }\n\t\n\t  function attrFunction(name, value) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      if (v == null) this.removeAttribute(name);\n\t      else this.setAttribute(name, v);\n\t    };\n\t  }\n\t\n\t  function attrFunctionNS(fullname, value) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n\t      else this.setAttributeNS(fullname.space, fullname.local, v);\n\t    };\n\t  }\n\t\n\t  function selection_attr(name, value) {\n\t    var fullname = namespace(name);\n\t\n\t    if (arguments.length < 2) {\n\t      var node = this.node();\n\t      return fullname.local\n\t          ? node.getAttributeNS(fullname.space, fullname.local)\n\t          : node.getAttribute(fullname);\n\t    }\n\t\n\t    return this.each((value == null\n\t        ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n\t        ? (fullname.local ? attrFunctionNS : attrFunction)\n\t        : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n\t  }\n\t\n\t  function window(node) {\n\t    return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n\t        || (node.document && node) // node is a Window\n\t        || node.defaultView; // node is a Document\n\t  }\n\t\n\t  function styleRemove(name) {\n\t    return function() {\n\t      this.style.removeProperty(name);\n\t    };\n\t  }\n\t\n\t  function styleConstant(name, value, priority) {\n\t    return function() {\n\t      this.style.setProperty(name, value, priority);\n\t    };\n\t  }\n\t\n\t  function styleFunction(name, value, priority) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      if (v == null) this.style.removeProperty(name);\n\t      else this.style.setProperty(name, v, priority);\n\t    };\n\t  }\n\t\n\t  function selection_style(name, value, priority) {\n\t    var node;\n\t    return arguments.length > 1\n\t        ? this.each((value == null\n\t              ? styleRemove : typeof value === \"function\"\n\t              ? styleFunction\n\t              : styleConstant)(name, value, priority == null ? \"\" : priority))\n\t        : window(node = this.node())\n\t            .getComputedStyle(node, null)\n\t            .getPropertyValue(name);\n\t  }\n\t\n\t  function propertyRemove(name) {\n\t    return function() {\n\t      delete this[name];\n\t    };\n\t  }\n\t\n\t  function propertyConstant(name, value) {\n\t    return function() {\n\t      this[name] = value;\n\t    };\n\t  }\n\t\n\t  function propertyFunction(name, value) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      if (v == null) delete this[name];\n\t      else this[name] = v;\n\t    };\n\t  }\n\t\n\t  function selection_property(name, value) {\n\t    return arguments.length > 1\n\t        ? this.each((value == null\n\t            ? propertyRemove : typeof value === \"function\"\n\t            ? propertyFunction\n\t            : propertyConstant)(name, value))\n\t        : this.node()[name];\n\t  }\n\t\n\t  function classArray(string) {\n\t    return string.trim().split(/^|\\s+/);\n\t  }\n\t\n\t  function classList(node) {\n\t    return node.classList || new ClassList(node);\n\t  }\n\t\n\t  function ClassList(node) {\n\t    this._node = node;\n\t    this._names = classArray(node.getAttribute(\"class\") || \"\");\n\t  }\n\t\n\t  ClassList.prototype = {\n\t    add: function(name) {\n\t      var i = this._names.indexOf(name);\n\t      if (i < 0) {\n\t        this._names.push(name);\n\t        this._node.setAttribute(\"class\", this._names.join(\" \"));\n\t      }\n\t    },\n\t    remove: function(name) {\n\t      var i = this._names.indexOf(name);\n\t      if (i >= 0) {\n\t        this._names.splice(i, 1);\n\t        this._node.setAttribute(\"class\", this._names.join(\" \"));\n\t      }\n\t    },\n\t    contains: function(name) {\n\t      return this._names.indexOf(name) >= 0;\n\t    }\n\t  };\n\t\n\t  function classedAdd(node, names) {\n\t    var list = classList(node), i = -1, n = names.length;\n\t    while (++i < n) list.add(names[i]);\n\t  }\n\t\n\t  function classedRemove(node, names) {\n\t    var list = classList(node), i = -1, n = names.length;\n\t    while (++i < n) list.remove(names[i]);\n\t  }\n\t\n\t  function classedTrue(names) {\n\t    return function() {\n\t      classedAdd(this, names);\n\t    };\n\t  }\n\t\n\t  function classedFalse(names) {\n\t    return function() {\n\t      classedRemove(this, names);\n\t    };\n\t  }\n\t\n\t  function classedFunction(names, value) {\n\t    return function() {\n\t      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n\t    };\n\t  }\n\t\n\t  function selection_classed(name, value) {\n\t    var names = classArray(name + \"\");\n\t\n\t    if (arguments.length < 2) {\n\t      var list = classList(this.node()), i = -1, n = names.length;\n\t      while (++i < n) if (!list.contains(names[i])) return false;\n\t      return true;\n\t    }\n\t\n\t    return this.each((typeof value === \"function\"\n\t        ? classedFunction : value\n\t        ? classedTrue\n\t        : classedFalse)(names, value));\n\t  }\n\t\n\t  function textRemove() {\n\t    this.textContent = \"\";\n\t  }\n\t\n\t  function textConstant(value) {\n\t    return function() {\n\t      this.textContent = value;\n\t    };\n\t  }\n\t\n\t  function textFunction(value) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      this.textContent = v == null ? \"\" : v;\n\t    };\n\t  }\n\t\n\t  function selection_text(value) {\n\t    return arguments.length\n\t        ? this.each(value == null\n\t            ? textRemove : (typeof value === \"function\"\n\t            ? textFunction\n\t            : textConstant)(value))\n\t        : this.node().textContent;\n\t  }\n\t\n\t  function htmlRemove() {\n\t    this.innerHTML = \"\";\n\t  }\n\t\n\t  function htmlConstant(value) {\n\t    return function() {\n\t      this.innerHTML = value;\n\t    };\n\t  }\n\t\n\t  function htmlFunction(value) {\n\t    return function() {\n\t      var v = value.apply(this, arguments);\n\t      this.innerHTML = v == null ? \"\" : v;\n\t    };\n\t  }\n\t\n\t  function selection_html(value) {\n\t    return arguments.length\n\t        ? this.each(value == null\n\t            ? htmlRemove : (typeof value === \"function\"\n\t            ? htmlFunction\n\t            : htmlConstant)(value))\n\t        : this.node().innerHTML;\n\t  }\n\t\n\t  function raise$1() {\n\t    if (this.nextSibling) this.parentNode.appendChild(this);\n\t  }\n\t\n\t  function selection_raise() {\n\t    return this.each(raise$1);\n\t  }\n\t\n\t  function lower() {\n\t    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n\t  }\n\t\n\t  function selection_lower() {\n\t    return this.each(lower);\n\t  }\n\t\n\t  function selection_append(name) {\n\t    var create = typeof name === \"function\" ? name : creator(name);\n\t    return this.select(function() {\n\t      return this.appendChild(create.apply(this, arguments));\n\t    });\n\t  }\n\t\n\t  function constantNull() {\n\t    return null;\n\t  }\n\t\n\t  function selection_insert(name, before) {\n\t    var create = typeof name === \"function\" ? name : creator(name),\n\t        select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n\t    return this.select(function() {\n\t      return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n\t    });\n\t  }\n\t\n\t  function remove() {\n\t    var parent = this.parentNode;\n\t    if (parent) parent.removeChild(this);\n\t  }\n\t\n\t  function selection_remove() {\n\t    return this.each(remove);\n\t  }\n\t\n\t  function selection_datum(value) {\n\t    return arguments.length\n\t        ? this.property(\"__data__\", value)\n\t        : this.node().__data__;\n\t  }\n\t\n\t  function dispatchEvent(node, type, params) {\n\t    var window$$ = window(node),\n\t        event = window$$.CustomEvent;\n\t\n\t    if (event) {\n\t      event = new event(type, params);\n\t    } else {\n\t      event = window$$.document.createEvent(\"Event\");\n\t      if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n\t      else event.initEvent(type, false, false);\n\t    }\n\t\n\t    node.dispatchEvent(event);\n\t  }\n\t\n\t  function dispatchConstant(type, params) {\n\t    return function() {\n\t      return dispatchEvent(this, type, params);\n\t    };\n\t  }\n\t\n\t  function dispatchFunction(type, params) {\n\t    return function() {\n\t      return dispatchEvent(this, type, params.apply(this, arguments));\n\t    };\n\t  }\n\t\n\t  function selection_dispatch(type, params) {\n\t    return this.each((typeof params === \"function\"\n\t        ? dispatchFunction\n\t        : dispatchConstant)(type, params));\n\t  }\n\t\n\t  var root = [null];\n\t\n\t  function Selection(groups, parents) {\n\t    this._groups = groups;\n\t    this._parents = parents;\n\t  }\n\t\n\t  function selection() {\n\t    return new Selection([[document.documentElement]], root);\n\t  }\n\t\n\t  Selection.prototype = selection.prototype = {\n\t    constructor: Selection,\n\t    select: selection_select,\n\t    selectAll: selection_selectAll,\n\t    filter: selection_filter,\n\t    data: selection_data,\n\t    enter: selection_enter,\n\t    exit: selection_exit,\n\t    merge: selection_merge,\n\t    order: selection_order,\n\t    sort: selection_sort,\n\t    call: selection_call,\n\t    nodes: selection_nodes,\n\t    node: selection_node,\n\t    size: selection_size,\n\t    empty: selection_empty,\n\t    each: selection_each,\n\t    attr: selection_attr,\n\t    style: selection_style,\n\t    property: selection_property,\n\t    classed: selection_classed,\n\t    text: selection_text,\n\t    html: selection_html,\n\t    raise: selection_raise,\n\t    lower: selection_lower,\n\t    append: selection_append,\n\t    insert: selection_insert,\n\t    remove: selection_remove,\n\t    datum: selection_datum,\n\t    on: selection_on,\n\t    dispatch: selection_dispatch\n\t  };\n\t\n\t  function select(selector) {\n\t    return typeof selector === \"string\"\n\t        ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n\t        : new Selection([[selector]], root);\n\t  }\n\t\n\t  function selectAll(selector) {\n\t    return typeof selector === \"string\"\n\t        ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n\t        : new Selection([selector == null ? [] : selector], root);\n\t  }\n\t\n\t  function touch(node, touches, identifier) {\n\t    if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\t\n\t    for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n\t      if ((touch = touches[i]).identifier === identifier) {\n\t        return point$5(node, touch);\n\t      }\n\t    }\n\t\n\t    return null;\n\t  }\n\t\n\t  function touches(node, touches) {\n\t    if (touches == null) touches = sourceEvent().touches;\n\t\n\t    for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n\t      points[i] = point$5(node, touches[i]);\n\t    }\n\t\n\t    return points;\n\t  }\n\t\n\t  var emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\n\t  var emptyTween = [];\n\t\n\t  var CREATED = 0;\n\t  var SCHEDULED = 1;\n\t  var STARTING = 2;\n\t  var STARTED = 3;\n\t  var ENDING = 4;\n\t  var ENDED = 5;\n\t\n\t  function schedule(node, name, id, index, group, timing) {\n\t    var schedules = node.__transition;\n\t    if (!schedules) node.__transition = {};\n\t    else if (id in schedules) return;\n\t    create(node, id, {\n\t      name: name,\n\t      index: index, // For context during callback.\n\t      group: group, // For context during callback.\n\t      on: emptyOn,\n\t      tween: emptyTween,\n\t      time: timing.time,\n\t      delay: timing.delay,\n\t      duration: timing.duration,\n\t      ease: timing.ease,\n\t      timer: null,\n\t      state: CREATED\n\t    });\n\t  }\n\t\n\t  function init(node, id) {\n\t    var schedule = node.__transition;\n\t    if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error(\"too late\");\n\t    return schedule;\n\t  }\n\t\n\t  function set$2(node, id) {\n\t    var schedule = node.__transition;\n\t    if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error(\"too late\");\n\t    return schedule;\n\t  }\n\t\n\t  function get$1(node, id) {\n\t    var schedule = node.__transition;\n\t    if (!schedule || !(schedule = schedule[id])) throw new Error(\"too late\");\n\t    return schedule;\n\t  }\n\t\n\t  function create(node, id, self) {\n\t    var schedules = node.__transition,\n\t        tween;\n\t\n\t    // Initialize the self timer when the transition is created.\n\t    // Note the actual delay is not known until the first callback!\n\t    schedules[id] = self;\n\t    self.timer = timer(schedule, 0, self.time);\n\t\n\t    // If the delay is greater than this first sleep, sleep some more;\n\t    // otherwise, start immediately.\n\t    function schedule(elapsed) {\n\t      self.state = SCHEDULED;\n\t      if (self.delay <= elapsed) start(elapsed - self.delay);\n\t      else self.timer.restart(start, self.delay, self.time);\n\t    }\n\t\n\t    function start(elapsed) {\n\t      var i, j, n, o;\n\t\n\t      for (i in schedules) {\n\t        o = schedules[i];\n\t        if (o.name !== self.name) continue;\n\t\n\t        // Interrupt the active transition, if any.\n\t        // Dispatch the interrupt event.\n\t        if (o.state === STARTED) {\n\t          o.state = ENDED;\n\t          o.timer.stop();\n\t          o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n\t          delete schedules[i];\n\t        }\n\t\n\t        // Cancel any pre-empted transitions. No interrupt event is dispatched\n\t        // because the cancelled transitions never started. Note that this also\n\t        // removes this transition from the pending list!\n\t        else if (+i < id) {\n\t          o.state = ENDED;\n\t          o.timer.stop();\n\t          delete schedules[i];\n\t        }\n\t      }\n\t\n\t      // Defer the first tick to end of the current frame; see mbostock/d3#1576.\n\t      // Note the transition may be canceled after start and before the first tick!\n\t      // Note this must be scheduled before the start event; see d3/d3-transition#16!\n\t      // Assuming this is successful, subsequent callbacks go straight to tick.\n\t      timeout$1(function() {\n\t        if (self.state === STARTED) {\n\t          self.timer.restart(tick, self.delay, self.time);\n\t          tick(elapsed);\n\t        }\n\t      });\n\t\n\t      // Dispatch the start event.\n\t      // Note this must be done before the tween are initialized.\n\t      self.state = STARTING;\n\t      self.on.call(\"start\", node, node.__data__, self.index, self.group);\n\t      if (self.state !== STARTING) return; // interrupted\n\t      self.state = STARTED;\n\t\n\t      // Initialize the tween, deleting null tween.\n\t      tween = new Array(n = self.tween.length);\n\t      for (i = 0, j = -1; i < n; ++i) {\n\t        if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n\t          tween[++j] = o;\n\t        }\n\t      }\n\t      tween.length = j + 1;\n\t    }\n\t\n\t    function tick(elapsed) {\n\t      var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.state = ENDING, 1),\n\t          i = -1,\n\t          n = tween.length;\n\t\n\t      while (++i < n) {\n\t        tween[i].call(null, t);\n\t      }\n\t\n\t      // Dispatch the end event.\n\t      if (self.state === ENDING) {\n\t        self.state = ENDED;\n\t        self.timer.stop();\n\t        self.on.call(\"end\", node, node.__data__, self.index, self.group);\n\t        for (i in schedules) if (+i !== id) return void delete schedules[id];\n\t        delete node.__transition;\n\t      }\n\t    }\n\t  }\n\t\n\t  function interrupt(node, name) {\n\t    var schedules = node.__transition,\n\t        schedule,\n\t        active,\n\t        empty = true,\n\t        i;\n\t\n\t    if (!schedules) return;\n\t\n\t    name = name == null ? null : name + \"\";\n\t\n\t    for (i in schedules) {\n\t      if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n\t      active = schedule.state === STARTED;\n\t      schedule.state = ENDED;\n\t      schedule.timer.stop();\n\t      if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n\t      delete schedules[i];\n\t    }\n\t\n\t    if (empty) delete node.__transition;\n\t  }\n\t\n\t  function selection_interrupt(name) {\n\t    return this.each(function() {\n\t      interrupt(this, name);\n\t    });\n\t  }\n\t\n\t  function tweenRemove(id, name) {\n\t    var tween0, tween1;\n\t    return function() {\n\t      var schedule = set$2(this, id),\n\t          tween = schedule.tween;\n\t\n\t      // If this node shared tween with the previous node,\n\t      // just assign the updated shared tween and we’re done!\n\t      // Otherwise, copy-on-write.\n\t      if (tween !== tween0) {\n\t        tween1 = tween0 = tween;\n\t        for (var i = 0, n = tween1.length; i < n; ++i) {\n\t          if (tween1[i].name === name) {\n\t            tween1 = tween1.slice();\n\t            tween1.splice(i, 1);\n\t            break;\n\t          }\n\t        }\n\t      }\n\t\n\t      schedule.tween = tween1;\n\t    };\n\t  }\n\t\n\t  function tweenFunction(id, name, value) {\n\t    var tween0, tween1;\n\t    if (typeof value !== \"function\") throw new Error;\n\t    return function() {\n\t      var schedule = set$2(this, id),\n\t          tween = schedule.tween;\n\t\n\t      // If this node shared tween with the previous node,\n\t      // just assign the updated shared tween and we’re done!\n\t      // Otherwise, copy-on-write.\n\t      if (tween !== tween0) {\n\t        tween1 = (tween0 = tween).slice();\n\t        for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n\t          if (tween1[i].name === name) {\n\t            tween1[i] = t;\n\t            break;\n\t          }\n\t        }\n\t        if (i === n) tween1.push(t);\n\t      }\n\t\n\t      schedule.tween = tween1;\n\t    };\n\t  }\n\t\n\t  function transition_tween(name, value) {\n\t    var id = this._id;\n\t\n\t    name += \"\";\n\t\n\t    if (arguments.length < 2) {\n\t      var tween = get$1(this.node(), id).tween;\n\t      for (var i = 0, n = tween.length, t; i < n; ++i) {\n\t        if ((t = tween[i]).name === name) {\n\t          return t.value;\n\t        }\n\t      }\n\t      return null;\n\t    }\n\t\n\t    return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n\t  }\n\t\n\t  function tweenValue(transition, name, value) {\n\t    var id = transition._id;\n\t\n\t    transition.each(function() {\n\t      var schedule = set$2(this, id);\n\t      (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n\t    });\n\t\n\t    return function(node) {\n\t      return get$1(node, id).value[name];\n\t    };\n\t  }\n\t\n\t  function interpolate$1(a, b) {\n\t    var c;\n\t    return (typeof b === \"number\" ? interpolateNumber\n\t        : b instanceof color ? interpolateRgb\n\t        : (c = color(b)) ? (b = c, interpolateRgb)\n\t        : interpolateString)(a, b);\n\t  }\n\t\n\t  function attrRemove$1(name) {\n\t    return function() {\n\t      this.removeAttribute(name);\n\t    };\n\t  }\n\t\n\t  function attrRemoveNS$1(fullname) {\n\t    return function() {\n\t      this.removeAttributeNS(fullname.space, fullname.local);\n\t    };\n\t  }\n\t\n\t  function attrConstant$1(name, interpolate, value1) {\n\t    var value00,\n\t        interpolate0;\n\t    return function() {\n\t      var value0 = this.getAttribute(name);\n\t      return value0 === value1 ? null\n\t          : value0 === value00 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value1);\n\t    };\n\t  }\n\t\n\t  function attrConstantNS$1(fullname, interpolate, value1) {\n\t    var value00,\n\t        interpolate0;\n\t    return function() {\n\t      var value0 = this.getAttributeNS(fullname.space, fullname.local);\n\t      return value0 === value1 ? null\n\t          : value0 === value00 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value1);\n\t    };\n\t  }\n\t\n\t  function attrFunction$1(name, interpolate, value) {\n\t    var value00,\n\t        value10,\n\t        interpolate0;\n\t    return function() {\n\t      var value0, value1 = value(this);\n\t      if (value1 == null) return void this.removeAttribute(name);\n\t      value0 = this.getAttribute(name);\n\t      return value0 === value1 ? null\n\t          : value0 === value00 && value1 === value10 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n\t    };\n\t  }\n\t\n\t  function attrFunctionNS$1(fullname, interpolate, value) {\n\t    var value00,\n\t        value10,\n\t        interpolate0;\n\t    return function() {\n\t      var value0, value1 = value(this);\n\t      if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n\t      value0 = this.getAttributeNS(fullname.space, fullname.local);\n\t      return value0 === value1 ? null\n\t          : value0 === value00 && value1 === value10 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n\t    };\n\t  }\n\t\n\t  function transition_attr(name, value) {\n\t    var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform$2 : interpolate$1;\n\t    return this.attrTween(name, typeof value === \"function\"\n\t        ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n\t        : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)\n\t        : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));\n\t  }\n\t\n\t  function attrTweenNS(fullname, value) {\n\t    function tween() {\n\t      var node = this, i = value.apply(node, arguments);\n\t      return i && function(t) {\n\t        node.setAttributeNS(fullname.space, fullname.local, i(t));\n\t      };\n\t    }\n\t    tween._value = value;\n\t    return tween;\n\t  }\n\t\n\t  function attrTween(name, value) {\n\t    function tween() {\n\t      var node = this, i = value.apply(node, arguments);\n\t      return i && function(t) {\n\t        node.setAttribute(name, i(t));\n\t      };\n\t    }\n\t    tween._value = value;\n\t    return tween;\n\t  }\n\t\n\t  function transition_attrTween(name, value) {\n\t    var key = \"attr.\" + name;\n\t    if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n\t    if (value == null) return this.tween(key, null);\n\t    if (typeof value !== \"function\") throw new Error;\n\t    var fullname = namespace(name);\n\t    return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n\t  }\n\t\n\t  function delayFunction(id, value) {\n\t    return function() {\n\t      init(this, id).delay = +value.apply(this, arguments);\n\t    };\n\t  }\n\t\n\t  function delayConstant(id, value) {\n\t    return value = +value, function() {\n\t      init(this, id).delay = value;\n\t    };\n\t  }\n\t\n\t  function transition_delay(value) {\n\t    var id = this._id;\n\t\n\t    return arguments.length\n\t        ? this.each((typeof value === \"function\"\n\t            ? delayFunction\n\t            : delayConstant)(id, value))\n\t        : get$1(this.node(), id).delay;\n\t  }\n\t\n\t  function durationFunction(id, value) {\n\t    return function() {\n\t      set$2(this, id).duration = +value.apply(this, arguments);\n\t    };\n\t  }\n\t\n\t  function durationConstant(id, value) {\n\t    return value = +value, function() {\n\t      set$2(this, id).duration = value;\n\t    };\n\t  }\n\t\n\t  function transition_duration(value) {\n\t    var id = this._id;\n\t\n\t    return arguments.length\n\t        ? this.each((typeof value === \"function\"\n\t            ? durationFunction\n\t            : durationConstant)(id, value))\n\t        : get$1(this.node(), id).duration;\n\t  }\n\t\n\t  function easeConstant(id, value) {\n\t    if (typeof value !== \"function\") throw new Error;\n\t    return function() {\n\t      set$2(this, id).ease = value;\n\t    };\n\t  }\n\t\n\t  function transition_ease(value) {\n\t    var id = this._id;\n\t\n\t    return arguments.length\n\t        ? this.each(easeConstant(id, value))\n\t        : get$1(this.node(), id).ease;\n\t  }\n\t\n\t  function transition_filter(match) {\n\t    if (typeof match !== \"function\") match = matcher$1(match);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n\t        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n\t          subgroup.push(node);\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Transition(subgroups, this._parents, this._name, this._id);\n\t  }\n\t\n\t  function transition_merge(transition) {\n\t    if (transition._id !== this._id) throw new Error;\n\t\n\t    for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n\t      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n\t        if (node = group0[i] || group1[i]) {\n\t          merge[i] = node;\n\t        }\n\t      }\n\t    }\n\t\n\t    for (; j < m0; ++j) {\n\t      merges[j] = groups0[j];\n\t    }\n\t\n\t    return new Transition(merges, this._parents, this._name, this._id);\n\t  }\n\t\n\t  function start$1(name) {\n\t    return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n\t      var i = t.indexOf(\".\");\n\t      if (i >= 0) t = t.slice(0, i);\n\t      return !t || t === \"start\";\n\t    });\n\t  }\n\t\n\t  function onFunction(id, name, listener) {\n\t    var on0, on1, sit = start$1(name) ? init : set$2;\n\t    return function() {\n\t      var schedule = sit(this, id),\n\t          on = schedule.on;\n\t\n\t      // If this node shared a dispatch with the previous node,\n\t      // just assign the updated shared dispatch and we’re done!\n\t      // Otherwise, copy-on-write.\n\t      if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\t\n\t      schedule.on = on1;\n\t    };\n\t  }\n\t\n\t  function transition_on(name, listener) {\n\t    var id = this._id;\n\t\n\t    return arguments.length < 2\n\t        ? get$1(this.node(), id).on.on(name)\n\t        : this.each(onFunction(id, name, listener));\n\t  }\n\t\n\t  function removeFunction(id) {\n\t    return function() {\n\t      var parent = this.parentNode;\n\t      for (var i in this.__transition) if (+i !== id) return;\n\t      if (parent) parent.removeChild(this);\n\t    };\n\t  }\n\t\n\t  function transition_remove() {\n\t    return this.on(\"end.remove\", removeFunction(this._id));\n\t  }\n\t\n\t  function transition_select(select) {\n\t    var name = this._name,\n\t        id = this._id;\n\t\n\t    if (typeof select !== \"function\") select = selector(select);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n\t        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n\t          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n\t          subgroup[i] = subnode;\n\t          schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Transition(subgroups, this._parents, name, id);\n\t  }\n\t\n\t  function transition_selectAll(select) {\n\t    var name = this._name,\n\t        id = this._id;\n\t\n\t    if (typeof select !== \"function\") select = selectorAll(select);\n\t\n\t    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n\t        if (node = group[i]) {\n\t          for (var children = select.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {\n\t            if (child = children[k]) {\n\t              schedule(child, name, id, k, children, inherit);\n\t            }\n\t          }\n\t          subgroups.push(children);\n\t          parents.push(node);\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Transition(subgroups, parents, name, id);\n\t  }\n\t\n\t  var Selection$1 = selection.prototype.constructor;\n\t\n\t  function transition_selection() {\n\t    return new Selection$1(this._groups, this._parents);\n\t  }\n\t\n\t  function styleRemove$1(name, interpolate) {\n\t    var value00,\n\t        value10,\n\t        interpolate0;\n\t    return function() {\n\t      var style = window(this).getComputedStyle(this, null),\n\t          value0 = style.getPropertyValue(name),\n\t          value1 = (this.style.removeProperty(name), style.getPropertyValue(name));\n\t      return value0 === value1 ? null\n\t          : value0 === value00 && value1 === value10 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n\t    };\n\t  }\n\t\n\t  function styleRemoveEnd(name) {\n\t    return function() {\n\t      this.style.removeProperty(name);\n\t    };\n\t  }\n\t\n\t  function styleConstant$1(name, interpolate, value1) {\n\t    var value00,\n\t        interpolate0;\n\t    return function() {\n\t      var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);\n\t      return value0 === value1 ? null\n\t          : value0 === value00 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value1);\n\t    };\n\t  }\n\t\n\t  function styleFunction$1(name, interpolate, value) {\n\t    var value00,\n\t        value10,\n\t        interpolate0;\n\t    return function() {\n\t      var style = window(this).getComputedStyle(this, null),\n\t          value0 = style.getPropertyValue(name),\n\t          value1 = value(this);\n\t      if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));\n\t      return value0 === value1 ? null\n\t          : value0 === value00 && value1 === value10 ? interpolate0\n\t          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n\t    };\n\t  }\n\t\n\t  function transition_style(name, value, priority) {\n\t    var i = (name += \"\") === \"transform\" ? interpolateTransform$1 : interpolate$1;\n\t    return value == null ? this\n\t            .styleTween(name, styleRemove$1(name, i))\n\t            .on(\"end.style.\" + name, styleRemoveEnd(name))\n\t        : this.styleTween(name, typeof value === \"function\"\n\t            ? styleFunction$1(name, i, tweenValue(this, \"style.\" + name, value))\n\t            : styleConstant$1(name, i, value), priority);\n\t  }\n\t\n\t  function styleTween(name, value, priority) {\n\t    function tween() {\n\t      var node = this, i = value.apply(node, arguments);\n\t      return i && function(t) {\n\t        node.style.setProperty(name, i(t), priority);\n\t      };\n\t    }\n\t    tween._value = value;\n\t    return tween;\n\t  }\n\t\n\t  function transition_styleTween(name, value, priority) {\n\t    var key = \"style.\" + (name += \"\");\n\t    if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n\t    if (value == null) return this.tween(key, null);\n\t    if (typeof value !== \"function\") throw new Error;\n\t    return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n\t  }\n\t\n\t  function textConstant$1(value) {\n\t    return function() {\n\t      this.textContent = value;\n\t    };\n\t  }\n\t\n\t  function textFunction$1(value) {\n\t    return function() {\n\t      var value1 = value(this);\n\t      this.textContent = value1 == null ? \"\" : value1;\n\t    };\n\t  }\n\t\n\t  function transition_text(value) {\n\t    return this.tween(\"text\", typeof value === \"function\"\n\t        ? textFunction$1(tweenValue(this, \"text\", value))\n\t        : textConstant$1(value == null ? \"\" : value + \"\"));\n\t  }\n\t\n\t  function transition_transition() {\n\t    var name = this._name,\n\t        id0 = this._id,\n\t        id1 = newId();\n\t\n\t    for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n\t        if (node = group[i]) {\n\t          var inherit = get$1(node, id0);\n\t          schedule(node, name, id1, i, group, {\n\t            time: inherit.time + inherit.delay + inherit.duration,\n\t            delay: 0,\n\t            duration: inherit.duration,\n\t            ease: inherit.ease\n\t          });\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Transition(groups, this._parents, name, id1);\n\t  }\n\t\n\t  var id = 0;\n\t\n\t  function Transition(groups, parents, name, id) {\n\t    this._groups = groups;\n\t    this._parents = parents;\n\t    this._name = name;\n\t    this._id = id;\n\t  }\n\t\n\t  function transition(name) {\n\t    return selection().transition(name);\n\t  }\n\t\n\t  function newId() {\n\t    return ++id;\n\t  }\n\t\n\t  var selection_prototype = selection.prototype;\n\t\n\t  Transition.prototype = transition.prototype = {\n\t    constructor: Transition,\n\t    select: transition_select,\n\t    selectAll: transition_selectAll,\n\t    filter: transition_filter,\n\t    merge: transition_merge,\n\t    selection: transition_selection,\n\t    transition: transition_transition,\n\t    call: selection_prototype.call,\n\t    nodes: selection_prototype.nodes,\n\t    node: selection_prototype.node,\n\t    size: selection_prototype.size,\n\t    empty: selection_prototype.empty,\n\t    each: selection_prototype.each,\n\t    on: transition_on,\n\t    attr: transition_attr,\n\t    attrTween: transition_attrTween,\n\t    style: transition_style,\n\t    styleTween: transition_styleTween,\n\t    text: transition_text,\n\t    remove: transition_remove,\n\t    tween: transition_tween,\n\t    delay: transition_delay,\n\t    duration: transition_duration,\n\t    ease: transition_ease\n\t  };\n\t\n\t  var defaultTiming = {\n\t    time: null, // Set on use.\n\t    delay: 0,\n\t    duration: 250,\n\t    ease: easeCubicInOut\n\t  };\n\t\n\t  function inherit(node, id) {\n\t    var timing;\n\t    while (!(timing = node.__transition) || !(timing = timing[id])) {\n\t      if (!(node = node.parentNode)) {\n\t        return defaultTiming.time = now(), defaultTiming;\n\t      }\n\t    }\n\t    return timing;\n\t  }\n\t\n\t  function selection_transition(name) {\n\t    var id,\n\t        timing;\n\t\n\t    if (name instanceof Transition) {\n\t      id = name._id, name = name._name;\n\t    } else {\n\t      id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n\t    }\n\t\n\t    for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n\t      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n\t        if (node = group[i]) {\n\t          schedule(node, name, id, i, group, timing || inherit(node, id));\n\t        }\n\t      }\n\t    }\n\t\n\t    return new Transition(groups, this._parents, name, id);\n\t  }\n\t\n\t  selection.prototype.interrupt = selection_interrupt;\n\t  selection.prototype.transition = selection_transition;\n\t\n\t  var root$1 = [null];\n\t\n\t  function active(node, name) {\n\t    var schedules = node.__transition,\n\t        schedule,\n\t        i;\n\t\n\t    if (schedules) {\n\t      name = name == null ? null : name + \"\";\n\t      for (i in schedules) {\n\t        if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n\t          return new Transition([[node]], root$1, name, +i);\n\t        }\n\t      }\n\t    }\n\t\n\t    return null;\n\t  }\n\t\n\t  var slice$4 = Array.prototype.slice;\n\t\n\t  function identity$5(x) {\n\t    return x;\n\t  }\n\t\n\t  var top = 1;\n\t  var right = 2;\n\t  var bottom = 3;\n\t  var left = 4;\n\tvar   epsilon$2 = 1e-6;\n\t  function translateX(scale0, scale1, d) {\n\t    var x = scale0(d);\n\t    return \"translate(\" + (isFinite(x) ? x : scale1(d)) + \",0)\";\n\t  }\n\t\n\t  function translateY(scale0, scale1, d) {\n\t    var y = scale0(d);\n\t    return \"translate(0,\" + (isFinite(y) ? y : scale1(d)) + \")\";\n\t  }\n\t\n\t  function center(scale) {\n\t    var offset = scale.bandwidth() / 2;\n\t    if (scale.round()) offset = Math.round(offset);\n\t    return function(d) {\n\t      return scale(d) + offset;\n\t    };\n\t  }\n\t\n\t  function entering() {\n\t    return !this.__axis;\n\t  }\n\t\n\t  function axis(orient, scale) {\n\t    var tickArguments = [],\n\t        tickValues = null,\n\t        tickFormat = null,\n\t        tickSizeInner = 6,\n\t        tickSizeOuter = 6,\n\t        tickPadding = 3;\n\t\n\t    function axis(context) {\n\t      var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n\t          format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,\n\t          spacing = Math.max(tickSizeInner, 0) + tickPadding,\n\t          transform = orient === top || orient === bottom ? translateX : translateY,\n\t          range = scale.range(),\n\t          range0 = range[0] + 0.5,\n\t          range1 = range[range.length - 1] + 0.5,\n\t          position = (scale.bandwidth ? center : identity$5)(scale.copy()),\n\t          selection = context.selection ? context.selection() : context,\n\t          path = selection.selectAll(\".domain\").data([null]),\n\t          tick = selection.selectAll(\".tick\").data(values, scale).order(),\n\t          tickExit = tick.exit(),\n\t          tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n\t          line = tick.select(\"line\"),\n\t          text = tick.select(\"text\"),\n\t          k = orient === top || orient === left ? -1 : 1,\n\t          x, y = orient === left || orient === right ? (x = \"x\", \"y\") : (x = \"y\", \"x\");\n\t\n\t      path = path.merge(path.enter().insert(\"path\", \".tick\")\n\t          .attr(\"class\", \"domain\")\n\t          .attr(\"stroke\", \"#000\"));\n\t\n\t      tick = tick.merge(tickEnter);\n\t\n\t      line = line.merge(tickEnter.append(\"line\")\n\t          .attr(\"stroke\", \"#000\")\n\t          .attr(x + \"2\", k * tickSizeInner)\n\t          .attr(y + \"1\", 0.5)\n\t          .attr(y + \"2\", 0.5));\n\t\n\t      text = text.merge(tickEnter.append(\"text\")\n\t          .attr(\"fill\", \"#000\")\n\t          .attr(x, k * spacing)\n\t          .attr(y, 0.5)\n\t          .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\t\n\t      if (context !== selection) {\n\t        path = path.transition(context);\n\t        tick = tick.transition(context);\n\t        line = line.transition(context);\n\t        text = text.transition(context);\n\t\n\t        tickExit = tickExit.transition(context)\n\t            .attr(\"opacity\", epsilon$2)\n\t            .attr(\"transform\", function(d) { return transform(position, this.parentNode.__axis || position, d); });\n\t\n\t        tickEnter\n\t            .attr(\"opacity\", epsilon$2)\n\t            .attr(\"transform\", function(d) { return transform(this.parentNode.__axis || position, position, d); });\n\t      }\n\t\n\t      tickExit.remove();\n\t\n\t      path\n\t          .attr(\"d\", orient === left || orient == right\n\t              ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n\t              : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\t\n\t      tick\n\t          .attr(\"opacity\", 1)\n\t          .attr(\"transform\", function(d) { return transform(position, position, d); });\n\t\n\t      line\n\t          .attr(x + \"2\", k * tickSizeInner);\n\t\n\t      text\n\t          .attr(x, k * spacing)\n\t          .text(format);\n\t\n\t      selection.filter(entering)\n\t          .attr(\"fill\", \"none\")\n\t          .attr(\"font-size\", 10)\n\t          .attr(\"font-family\", \"sans-serif\")\n\t          .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\t\n\t      selection\n\t          .each(function() { this.__axis = position; });\n\t    }\n\t\n\t    axis.scale = function(_) {\n\t      return arguments.length ? (scale = _, axis) : scale;\n\t    };\n\t\n\t    axis.ticks = function() {\n\t      return tickArguments = slice$4.call(arguments), axis;\n\t    };\n\t\n\t    axis.tickArguments = function(_) {\n\t      return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();\n\t    };\n\t\n\t    axis.tickValues = function(_) {\n\t      return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();\n\t    };\n\t\n\t    axis.tickFormat = function(_) {\n\t      return arguments.length ? (tickFormat = _, axis) : tickFormat;\n\t    };\n\t\n\t    axis.tickSize = function(_) {\n\t      return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n\t    };\n\t\n\t    axis.tickSizeInner = function(_) {\n\t      return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n\t    };\n\t\n\t    axis.tickSizeOuter = function(_) {\n\t      return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n\t    };\n\t\n\t    axis.tickPadding = function(_) {\n\t      return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n\t    };\n\t\n\t    return axis;\n\t  }\n\t\n\t  function axisTop(scale) {\n\t    return axis(top, scale);\n\t  }\n\t\n\t  function axisRight(scale) {\n\t    return axis(right, scale);\n\t  }\n\t\n\t  function axisBottom(scale) {\n\t    return axis(bottom, scale);\n\t  }\n\t\n\t  function axisLeft(scale) {\n\t    return axis(left, scale);\n\t  }\n\t\n\t  function defaultSeparation(a, b) {\n\t    return a.parent === b.parent ? 1 : 2;\n\t  }\n\t\n\t  function meanX(children) {\n\t    return children.reduce(meanXReduce, 0) / children.length;\n\t  }\n\t\n\t  function meanXReduce(x, c) {\n\t    return x + c.x;\n\t  }\n\t\n\t  function maxY(children) {\n\t    return 1 + children.reduce(maxYReduce, 0);\n\t  }\n\t\n\t  function maxYReduce(y, c) {\n\t    return Math.max(y, c.y);\n\t  }\n\t\n\t  function leafLeft(node) {\n\t    var children;\n\t    while (children = node.children) node = children[0];\n\t    return node;\n\t  }\n\t\n\t  function leafRight(node) {\n\t    var children;\n\t    while (children = node.children) node = children[children.length - 1];\n\t    return node;\n\t  }\n\t\n\t  function cluster() {\n\t    var separation = defaultSeparation,\n\t        dx = 1,\n\t        dy = 1,\n\t        nodeSize = false;\n\t\n\t    function cluster(root) {\n\t      var previousNode,\n\t          x = 0;\n\t\n\t      // First walk, computing the initial x & y values.\n\t      root.eachAfter(function(node) {\n\t        var children = node.children;\n\t        if (children) {\n\t          node.x = meanX(children);\n\t          node.y = maxY(children);\n\t        } else {\n\t          node.x = previousNode ? x += separation(node, previousNode) : 0;\n\t          node.y = 0;\n\t          previousNode = node;\n\t        }\n\t      });\n\t\n\t      var left = leafLeft(root),\n\t          right = leafRight(root),\n\t          x0 = left.x - separation(left, right) / 2,\n\t          x1 = right.x + separation(right, left) / 2;\n\t\n\t      // Second walk, normalizing x & y to the desired size.\n\t      return root.eachAfter(nodeSize ? function(node) {\n\t        node.x = (node.x - root.x) * dx;\n\t        node.y = (root.y - node.y) * dy;\n\t      } : function(node) {\n\t        node.x = (node.x - x0) / (x1 - x0) * dx;\n\t        node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n\t      });\n\t    }\n\t\n\t    cluster.separation = function(x) {\n\t      return arguments.length ? (separation = x, cluster) : separation;\n\t    };\n\t\n\t    cluster.size = function(x) {\n\t      return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n\t    };\n\t\n\t    cluster.nodeSize = function(x) {\n\t      return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n\t    };\n\t\n\t    return cluster;\n\t  }\n\t\n\t  function node_each(callback) {\n\t    var node = this, current, next = [node], children, i, n;\n\t    do {\n\t      current = next.reverse(), next = [];\n\t      while (node = current.pop()) {\n\t        callback(node), children = node.children;\n\t        if (children) for (i = 0, n = children.length; i < n; ++i) {\n\t          next.push(children[i]);\n\t        }\n\t      }\n\t    } while (next.length);\n\t    return this;\n\t  }\n\t\n\t  function node_eachBefore(callback) {\n\t    var node = this, nodes = [node], children, i;\n\t    while (node = nodes.pop()) {\n\t      callback(node), children = node.children;\n\t      if (children) for (i = children.length - 1; i >= 0; --i) {\n\t        nodes.push(children[i]);\n\t      }\n\t    }\n\t    return this;\n\t  }\n\t\n\t  function node_eachAfter(callback) {\n\t    var node = this, nodes = [node], next = [], children, i, n;\n\t    while (node = nodes.pop()) {\n\t      next.push(node), children = node.children;\n\t      if (children) for (i = 0, n = children.length; i < n; ++i) {\n\t        nodes.push(children[i]);\n\t      }\n\t    }\n\t    while (node = next.pop()) {\n\t      callback(node);\n\t    }\n\t    return this;\n\t  }\n\t\n\t  function node_sum(value) {\n\t    return this.eachAfter(function(node) {\n\t      var sum = +value(node.data) || 0,\n\t          children = node.children,\n\t          i = children && children.length;\n\t      while (--i >= 0) sum += children[i].value;\n\t      node.value = sum;\n\t    });\n\t  }\n\t\n\t  function node_sort(compare) {\n\t    return this.eachBefore(function(node) {\n\t      if (node.children) {\n\t        node.children.sort(compare);\n\t      }\n\t    });\n\t  }\n\t\n\t  function node_path(end) {\n\t    var start = this,\n\t        ancestor = leastCommonAncestor(start, end),\n\t        nodes = [start];\n\t    while (start !== ancestor) {\n\t      start = start.parent;\n\t      nodes.push(start);\n\t    }\n\t    var k = nodes.length;\n\t    while (end !== ancestor) {\n\t      nodes.splice(k, 0, end);\n\t      end = end.parent;\n\t    }\n\t    return nodes;\n\t  }\n\t\n\t  function leastCommonAncestor(a, b) {\n\t    if (a === b) return a;\n\t    var aNodes = a.ancestors(),\n\t        bNodes = b.ancestors(),\n\t        c = null;\n\t    a = aNodes.pop();\n\t    b = bNodes.pop();\n\t    while (a === b) {\n\t      c = a;\n\t      a = aNodes.pop();\n\t      b = bNodes.pop();\n\t    }\n\t    return c;\n\t  }\n\t\n\t  function node_ancestors() {\n\t    var node = this, nodes = [node];\n\t    while (node = node.parent) {\n\t      nodes.push(node);\n\t    }\n\t    return nodes;\n\t  }\n\t\n\t  function node_descendants() {\n\t    var nodes = [];\n\t    this.each(function(node) {\n\t      nodes.push(node);\n\t    });\n\t    return nodes;\n\t  }\n\t\n\t  function node_leaves() {\n\t    var leaves = [];\n\t    this.eachBefore(function(node) {\n\t      if (!node.children) {\n\t        leaves.push(node);\n\t      }\n\t    });\n\t    return leaves;\n\t  }\n\t\n\t  function node_links() {\n\t    var root = this, links = [];\n\t    root.each(function(node) {\n\t      if (node !== root) { // Don’t include the root’s parent, if any.\n\t        links.push({source: node.parent, target: node});\n\t      }\n\t    });\n\t    return links;\n\t  }\n\t\n\t  function hierarchy(data, children) {\n\t    var root = new Node(data),\n\t        valued = +data.value && (root.value = data.value),\n\t        node,\n\t        nodes = [root],\n\t        child,\n\t        childs,\n\t        i,\n\t        n;\n\t\n\t    if (children == null) children = defaultChildren;\n\t\n\t    while (node = nodes.pop()) {\n\t      if (valued) node.value = +node.data.value;\n\t      if ((childs = children(node.data)) && (n = childs.length)) {\n\t        node.children = new Array(n);\n\t        for (i = n - 1; i >= 0; --i) {\n\t          nodes.push(child = node.children[i] = new Node(childs[i]));\n\t          child.parent = node;\n\t          child.depth = node.depth + 1;\n\t        }\n\t      }\n\t    }\n\t\n\t    return root.eachBefore(computeHeight);\n\t  }\n\t\n\t  function node_copy() {\n\t    return hierarchy(this).eachBefore(copyData);\n\t  }\n\t\n\t  function defaultChildren(d) {\n\t    return d.children;\n\t  }\n\t\n\t  function copyData(node) {\n\t    node.data = node.data.data;\n\t  }\n\t\n\t  function computeHeight(node) {\n\t    var height = 0;\n\t    do node.height = height;\n\t    while ((node = node.parent) && (node.height < ++height));\n\t  }\n\t\n\t  function Node(data) {\n\t    this.data = data;\n\t    this.depth =\n\t    this.height = 0;\n\t    this.parent = null;\n\t  }\n\t\n\t  Node.prototype = hierarchy.prototype = {\n\t    constructor: Node,\n\t    each: node_each,\n\t    eachAfter: node_eachAfter,\n\t    eachBefore: node_eachBefore,\n\t    sum: node_sum,\n\t    sort: node_sort,\n\t    path: node_path,\n\t    ancestors: node_ancestors,\n\t    descendants: node_descendants,\n\t    leaves: node_leaves,\n\t    links: node_links,\n\t    copy: node_copy\n\t  };\n\t\n\t  function Node$2(value) {\n\t    this._ = value;\n\t    this.next = null;\n\t  }\n\t\n\t  function shuffle$1(array) {\n\t    var i,\n\t        n = (array = array.slice()).length,\n\t        head = null,\n\t        node = head;\n\t\n\t    while (n) {\n\t      var next = new Node$2(array[n - 1]);\n\t      if (node) node = node.next = next;\n\t      else node = head = next;\n\t      array[i] = array[--n];\n\t    }\n\t\n\t    return {\n\t      head: head,\n\t      tail: node\n\t    };\n\t  }\n\t\n\t  function enclose(circles) {\n\t    return encloseN(shuffle$1(circles), []);\n\t  }\n\t\n\t  function encloses(a, b) {\n\t    var dx = b.x - a.x,\n\t        dy = b.y - a.y,\n\t        dr = a.r - b.r;\n\t    return dr * dr + 1e-6 > dx * dx + dy * dy;\n\t  }\n\t\n\t  // Returns the smallest circle that contains circles L and intersects circles B.\n\t  function encloseN(L, B) {\n\t    var circle,\n\t        l0 = null,\n\t        l1 = L.head,\n\t        l2,\n\t        p1;\n\t\n\t    switch (B.length) {\n\t      case 1: circle = enclose1(B[0]); break;\n\t      case 2: circle = enclose2(B[0], B[1]); break;\n\t      case 3: circle = enclose3(B[0], B[1], B[2]); break;\n\t    }\n\t\n\t    while (l1) {\n\t      p1 = l1._, l2 = l1.next;\n\t      if (!circle || !encloses(circle, p1)) {\n\t\n\t        // Temporarily truncate L before l1.\n\t        if (l0) L.tail = l0, l0.next = null;\n\t        else L.head = L.tail = null;\n\t\n\t        B.push(p1);\n\t        circle = encloseN(L, B); // Note: reorders L!\n\t        B.pop();\n\t\n\t        // Move l1 to the front of L and reconnect the truncated list L.\n\t        if (L.head) l1.next = L.head, L.head = l1;\n\t        else l1.next = null, L.head = L.tail = l1;\n\t        l0 = L.tail, l0.next = l2;\n\t\n\t      } else {\n\t        l0 = l1;\n\t      }\n\t      l1 = l2;\n\t    }\n\t\n\t    L.tail = l0;\n\t    return circle;\n\t  }\n\t\n\t  function enclose1(a) {\n\t    return {\n\t      x: a.x,\n\t      y: a.y,\n\t      r: a.r\n\t    };\n\t  }\n\t\n\t  function enclose2(a, b) {\n\t    var x1 = a.x, y1 = a.y, r1 = a.r,\n\t        x2 = b.x, y2 = b.y, r2 = b.r,\n\t        x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n\t        l = Math.sqrt(x21 * x21 + y21 * y21);\n\t    return {\n\t      x: (x1 + x2 + x21 / l * r21) / 2,\n\t      y: (y1 + y2 + y21 / l * r21) / 2,\n\t      r: (l + r1 + r2) / 2\n\t    };\n\t  }\n\t\n\t  function enclose3(a, b, c) {\n\t    var x1 = a.x, y1 = a.y, r1 = a.r,\n\t        x2 = b.x, y2 = b.y, r2 = b.r,\n\t        x3 = c.x, y3 = c.y, r3 = c.r,\n\t        a2 = 2 * (x1 - x2),\n\t        b2 = 2 * (y1 - y2),\n\t        c2 = 2 * (r2 - r1),\n\t        d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,\n\t        a3 = 2 * (x1 - x3),\n\t        b3 = 2 * (y1 - y3),\n\t        c3 = 2 * (r3 - r1),\n\t        d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,\n\t        ab = a3 * b2 - a2 * b3,\n\t        xa = (b2 * d3 - b3 * d2) / ab - x1,\n\t        xb = (b3 * c2 - b2 * c3) / ab,\n\t        ya = (a3 * d2 - a2 * d3) / ab - y1,\n\t        yb = (a2 * c3 - a3 * c2) / ab,\n\t        A = xb * xb + yb * yb - 1,\n\t        B = 2 * (xa * xb + ya * yb + r1),\n\t        C = xa * xa + ya * ya - r1 * r1,\n\t        r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);\n\t    return {\n\t      x: xa + xb * r + x1,\n\t      y: ya + yb * r + y1,\n\t      r: r\n\t    };\n\t  }\n\t\n\t  function place(a, b, c) {\n\t    var ax = a.x,\n\t        ay = a.y,\n\t        da = b.r + c.r,\n\t        db = a.r + c.r,\n\t        dx = b.x - ax,\n\t        dy = b.y - ay,\n\t        dc = dx * dx + dy * dy;\n\t    if (dc) {\n\t      var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),\n\t          y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n\t      c.x = ax + x * dx + y * dy;\n\t      c.y = ay + x * dy - y * dx;\n\t    } else {\n\t      c.x = ax + db;\n\t      c.y = ay;\n\t    }\n\t  }\n\t\n\t  function intersects(a, b) {\n\t    var dx = b.x - a.x,\n\t        dy = b.y - a.y,\n\t        dr = a.r + b.r;\n\t    return dr * dr > dx * dx + dy * dy;\n\t  }\n\t\n\t  function distance2(circle, x, y) {\n\t    var dx = circle.x - x,\n\t        dy = circle.y - y;\n\t    return dx * dx + dy * dy;\n\t  }\n\t\n\t  function Node$1(circle) {\n\t    this._ = circle;\n\t    this.next = null;\n\t    this.previous = null;\n\t  }\n\t\n\t  function packEnclose(circles) {\n\t    if (!(n = circles.length)) return 0;\n\t\n\t    var a, b, c, n;\n\t\n\t    // Place the first circle.\n\t    a = circles[0], a.x = 0, a.y = 0;\n\t    if (!(n > 1)) return a.r;\n\t\n\t    // Place the second circle.\n\t    b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n\t    if (!(n > 2)) return a.r + b.r;\n\t\n\t    // Place the third circle.\n\t    place(b, a, c = circles[2]);\n\t\n\t    // Initialize the weighted centroid.\n\t    var aa = a.r * a.r,\n\t        ba = b.r * b.r,\n\t        ca = c.r * c.r,\n\t        oa = aa + ba + ca,\n\t        ox = aa * a.x + ba * b.x + ca * c.x,\n\t        oy = aa * a.y + ba * b.y + ca * c.y,\n\t        cx, cy, i, j, k, sj, sk;\n\t\n\t    // Initialize the front-chain using the first three circles a, b and c.\n\t    a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n\t    a.next = c.previous = b;\n\t    b.next = a.previous = c;\n\t    c.next = b.previous = a;\n\t\n\t    // Attempt to place each remaining circle…\n\t    pack: for (i = 3; i < n; ++i) {\n\t      place(a._, b._, c = circles[i]), c = new Node$1(c);\n\t\n\t      // If there are only three elements in the front-chain…\n\t      if ((k = a.previous) === (j = b.next)) {\n\t        // If the new circle intersects the third circle,\n\t        // rotate the front chain to try the next position.\n\t        if (intersects(j._, c._)) {\n\t          a = b, b = j, --i;\n\t          continue pack;\n\t        }\n\t      }\n\t\n\t      // Find the closest intersecting circle on the front-chain, if any.\n\t      else {\n\t        sj = j._.r, sk = k._.r;\n\t        do {\n\t          if (sj <= sk) {\n\t            if (intersects(j._, c._)) {\n\t              b = j, a.next = b, b.previous = a, --i;\n\t              continue pack;\n\t            }\n\t            j = j.next, sj += j._.r;\n\t          } else {\n\t            if (intersects(k._, c._)) {\n\t              a = k, a.next = b, b.previous = a, --i;\n\t              continue pack;\n\t            }\n\t            k = k.previous, sk += k._.r;\n\t          }\n\t        } while (j !== k.next);\n\t      }\n\t\n\t      // Success! Insert the new circle c between a and b.\n\t      c.previous = a, c.next = b, a.next = b.previous = b = c;\n\t\n\t      // Update the weighted centroid.\n\t      oa += ca = c._.r * c._.r;\n\t      ox += ca * c._.x;\n\t      oy += ca * c._.y;\n\t\n\t      // Compute the new closest circle a to centroid.\n\t      aa = distance2(a._, cx = ox / oa, cy = oy / oa);\n\t      while ((c = c.next) !== b) {\n\t        if ((ca = distance2(c._, cx, cy)) < aa) {\n\t          a = c, aa = ca;\n\t        }\n\t      }\n\t      b = a.next;\n\t    }\n\t\n\t    // Compute the enclosing circle of the front chain.\n\t    a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\t\n\t    // Translate the circles to put the enclosing circle around the origin.\n\t    for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\t\n\t    return c.r;\n\t  }\n\t\n\t  function siblings(circles) {\n\t    packEnclose(circles);\n\t    return circles;\n\t  }\n\t\n\t  function optional(f) {\n\t    return f == null ? null : required(f);\n\t  }\n\t\n\t  function required(f) {\n\t    if (typeof f !== \"function\") throw new Error;\n\t    return f;\n\t  }\n\t\n\t  function constantZero() {\n\t    return 0;\n\t  }\n\t\n\t  function constant$5(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function defaultRadius(d) {\n\t    return Math.sqrt(d.value);\n\t  }\n\t\n\t  function index() {\n\t    var radius = null,\n\t        dx = 1,\n\t        dy = 1,\n\t        padding = constantZero;\n\t\n\t    function pack(root) {\n\t      root.x = dx / 2, root.y = dy / 2;\n\t      if (radius) {\n\t        root.eachBefore(radiusLeaf(radius))\n\t            .eachAfter(packChildren(padding, 0.5))\n\t            .eachBefore(translateChild(1));\n\t      } else {\n\t        root.eachBefore(radiusLeaf(defaultRadius))\n\t            .eachAfter(packChildren(constantZero, 1))\n\t            .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n\t            .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n\t      }\n\t      return root;\n\t    }\n\t\n\t    pack.radius = function(x) {\n\t      return arguments.length ? (radius = optional(x), pack) : radius;\n\t    };\n\t\n\t    pack.size = function(x) {\n\t      return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n\t    };\n\t\n\t    pack.padding = function(x) {\n\t      return arguments.length ? (padding = typeof x === \"function\" ? x : constant$5(+x), pack) : padding;\n\t    };\n\t\n\t    return pack;\n\t  }\n\t\n\t  function radiusLeaf(radius) {\n\t    return function(node) {\n\t      if (!node.children) {\n\t        node.r = Math.max(0, +radius(node) || 0);\n\t      }\n\t    };\n\t  }\n\t\n\t  function packChildren(padding, k) {\n\t    return function(node) {\n\t      if (children = node.children) {\n\t        var children,\n\t            i,\n\t            n = children.length,\n\t            r = padding(node) * k || 0,\n\t            e;\n\t\n\t        if (r) for (i = 0; i < n; ++i) children[i].r += r;\n\t        e = packEnclose(children);\n\t        if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n\t        node.r = e + r;\n\t      }\n\t    };\n\t  }\n\t\n\t  function translateChild(k) {\n\t    return function(node) {\n\t      var parent = node.parent;\n\t      node.r *= k;\n\t      if (parent) {\n\t        node.x = parent.x + k * node.x;\n\t        node.y = parent.y + k * node.y;\n\t      }\n\t    };\n\t  }\n\t\n\t  function roundNode(node) {\n\t    node.x0 = Math.round(node.x0);\n\t    node.y0 = Math.round(node.y0);\n\t    node.x1 = Math.round(node.x1);\n\t    node.y1 = Math.round(node.y1);\n\t  }\n\t\n\t  function treemapDice(parent, x0, y0, x1, y1) {\n\t    var nodes = parent.children,\n\t        node,\n\t        i = -1,\n\t        n = nodes.length,\n\t        k = parent.value && (x1 - x0) / parent.value;\n\t\n\t    while (++i < n) {\n\t      node = nodes[i], node.y0 = y0, node.y1 = y1;\n\t      node.x0 = x0, node.x1 = x0 += node.value * k;\n\t    }\n\t  }\n\t\n\t  function partition() {\n\t    var dx = 1,\n\t        dy = 1,\n\t        padding = 0,\n\t        round = false;\n\t\n\t    function partition(root) {\n\t      var n = root.height + 1;\n\t      root.x0 =\n\t      root.y0 = padding;\n\t      root.x1 = dx;\n\t      root.y1 = dy / n;\n\t      root.eachBefore(positionNode(dy, n));\n\t      if (round) root.eachBefore(roundNode);\n\t      return root;\n\t    }\n\t\n\t    function positionNode(dy, n) {\n\t      return function(node) {\n\t        if (node.children) {\n\t          treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n\t        }\n\t        var x0 = node.x0,\n\t            y0 = node.y0,\n\t            x1 = node.x1 - padding,\n\t            y1 = node.y1 - padding;\n\t        if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n\t        if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n\t        node.x0 = x0;\n\t        node.y0 = y0;\n\t        node.x1 = x1;\n\t        node.y1 = y1;\n\t      };\n\t    }\n\t\n\t    partition.round = function(x) {\n\t      return arguments.length ? (round = !!x, partition) : round;\n\t    };\n\t\n\t    partition.size = function(x) {\n\t      return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n\t    };\n\t\n\t    partition.padding = function(x) {\n\t      return arguments.length ? (padding = +x, partition) : padding;\n\t    };\n\t\n\t    return partition;\n\t  }\n\t\n\tvar   keyPrefix$1 = \"$\";\n\t  var preroot = {depth: -1};\n\t  var ambiguous = {};\n\t  function defaultId(d) {\n\t    return d.id;\n\t  }\n\t\n\t  function defaultParentId(d) {\n\t    return d.parentId;\n\t  }\n\t\n\t  function stratify() {\n\t    var id = defaultId,\n\t        parentId = defaultParentId;\n\t\n\t    function stratify(data) {\n\t      var d,\n\t          i,\n\t          n = data.length,\n\t          root,\n\t          parent,\n\t          node,\n\t          nodes = new Array(n),\n\t          nodeId,\n\t          nodeKey,\n\t          nodeByKey = {};\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        d = data[i], node = nodes[i] = new Node(d);\n\t        if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n\t          nodeKey = keyPrefix$1 + (node.id = nodeId);\n\t          nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n\t        }\n\t      }\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        node = nodes[i], nodeId = parentId(data[i], i, data);\n\t        if (nodeId == null || !(nodeId += \"\")) {\n\t          if (root) throw new Error(\"multiple roots\");\n\t          root = node;\n\t        } else {\n\t          parent = nodeByKey[keyPrefix$1 + nodeId];\n\t          if (!parent) throw new Error(\"missing: \" + nodeId);\n\t          if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n\t          if (parent.children) parent.children.push(node);\n\t          else parent.children = [node];\n\t          node.parent = parent;\n\t        }\n\t      }\n\t\n\t      if (!root) throw new Error(\"no root\");\n\t      root.parent = preroot;\n\t      root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n\t      root.parent = null;\n\t      if (n > 0) throw new Error(\"cycle\");\n\t\n\t      return root;\n\t    }\n\t\n\t    stratify.id = function(x) {\n\t      return arguments.length ? (id = required(x), stratify) : id;\n\t    };\n\t\n\t    stratify.parentId = function(x) {\n\t      return arguments.length ? (parentId = required(x), stratify) : parentId;\n\t    };\n\t\n\t    return stratify;\n\t  }\n\t\n\t  function defaultSeparation$1(a, b) {\n\t    return a.parent === b.parent ? 1 : 2;\n\t  }\n\t\n\t  // function radialSeparation(a, b) {\n\t  //   return (a.parent === b.parent ? 1 : 2) / a.depth;\n\t  // }\n\t\n\t  // This function is used to traverse the left contour of a subtree (or\n\t  // subforest). It returns the successor of v on this contour. This successor is\n\t  // either given by the leftmost child of v or by the thread of v. The function\n\t  // returns null if and only if v is on the highest level of its subtree.\n\t  function nextLeft(v) {\n\t    var children = v.children;\n\t    return children ? children[0] : v.t;\n\t  }\n\t\n\t  // This function works analogously to nextLeft.\n\t  function nextRight(v) {\n\t    var children = v.children;\n\t    return children ? children[children.length - 1] : v.t;\n\t  }\n\t\n\t  // Shifts the current subtree rooted at w+. This is done by increasing\n\t  // prelim(w+) and mod(w+) by shift.\n\t  function moveSubtree(wm, wp, shift) {\n\t    var change = shift / (wp.i - wm.i);\n\t    wp.c -= change;\n\t    wp.s += shift;\n\t    wm.c += change;\n\t    wp.z += shift;\n\t    wp.m += shift;\n\t  }\n\t\n\t  // All other shifts, applied to the smaller subtrees between w- and w+, are\n\t  // performed by this function. To prepare the shifts, we have to adjust\n\t  // change(w+), shift(w+), and change(w-).\n\t  function executeShifts(v) {\n\t    var shift = 0,\n\t        change = 0,\n\t        children = v.children,\n\t        i = children.length,\n\t        w;\n\t    while (--i >= 0) {\n\t      w = children[i];\n\t      w.z += shift;\n\t      w.m += shift;\n\t      shift += w.s + (change += w.c);\n\t    }\n\t  }\n\t\n\t  // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n\t  // returns the specified (default) ancestor.\n\t  function nextAncestor(vim, v, ancestor) {\n\t    return vim.a.parent === v.parent ? vim.a : ancestor;\n\t  }\n\t\n\t  function TreeNode(node, i) {\n\t    this._ = node;\n\t    this.parent = null;\n\t    this.children = null;\n\t    this.A = null; // default ancestor\n\t    this.a = this; // ancestor\n\t    this.z = 0; // prelim\n\t    this.m = 0; // mod\n\t    this.c = 0; // change\n\t    this.s = 0; // shift\n\t    this.t = null; // thread\n\t    this.i = i; // number\n\t  }\n\t\n\t  TreeNode.prototype = Object.create(Node.prototype);\n\t\n\t  function treeRoot(root) {\n\t    var tree = new TreeNode(root, 0),\n\t        node,\n\t        nodes = [tree],\n\t        child,\n\t        children,\n\t        i,\n\t        n;\n\t\n\t    while (node = nodes.pop()) {\n\t      if (children = node._.children) {\n\t        node.children = new Array(n = children.length);\n\t        for (i = n - 1; i >= 0; --i) {\n\t          nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n\t          child.parent = node;\n\t        }\n\t      }\n\t    }\n\t\n\t    (tree.parent = new TreeNode(null, 0)).children = [tree];\n\t    return tree;\n\t  }\n\t\n\t  // Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\n\t  function tree() {\n\t    var separation = defaultSeparation$1,\n\t        dx = 1,\n\t        dy = 1,\n\t        nodeSize = null;\n\t\n\t    function tree(root) {\n\t      var t = treeRoot(root);\n\t\n\t      // Compute the layout using Buchheim et al.’s algorithm.\n\t      t.eachAfter(firstWalk), t.parent.m = -t.z;\n\t      t.eachBefore(secondWalk);\n\t\n\t      // If a fixed node size is specified, scale x and y.\n\t      if (nodeSize) root.eachBefore(sizeNode);\n\t\n\t      // If a fixed tree size is specified, scale x and y based on the extent.\n\t      // Compute the left-most, right-most, and depth-most nodes for extents.\n\t      else {\n\t        var left = root,\n\t            right = root,\n\t            bottom = root;\n\t        root.eachBefore(function(node) {\n\t          if (node.x < left.x) left = node;\n\t          if (node.x > right.x) right = node;\n\t          if (node.depth > bottom.depth) bottom = node;\n\t        });\n\t        var s = left === right ? 1 : separation(left, right) / 2,\n\t            tx = s - left.x,\n\t            kx = dx / (right.x + s + tx),\n\t            ky = dy / (bottom.depth || 1);\n\t        root.eachBefore(function(node) {\n\t          node.x = (node.x + tx) * kx;\n\t          node.y = node.depth * ky;\n\t        });\n\t      }\n\t\n\t      return root;\n\t    }\n\t\n\t    // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n\t    // applied recursively to the children of v, as well as the function\n\t    // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n\t    // node v is placed to the midpoint of its outermost children.\n\t    function firstWalk(v) {\n\t      var children = v.children,\n\t          siblings = v.parent.children,\n\t          w = v.i ? siblings[v.i - 1] : null;\n\t      if (children) {\n\t        executeShifts(v);\n\t        var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n\t        if (w) {\n\t          v.z = w.z + separation(v._, w._);\n\t          v.m = v.z - midpoint;\n\t        } else {\n\t          v.z = midpoint;\n\t        }\n\t      } else if (w) {\n\t        v.z = w.z + separation(v._, w._);\n\t      }\n\t      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n\t    }\n\t\n\t    // Computes all real x-coordinates by summing up the modifiers recursively.\n\t    function secondWalk(v) {\n\t      v._.x = v.z + v.parent.m;\n\t      v.m += v.parent.m;\n\t    }\n\t\n\t    // The core of the algorithm. Here, a new subtree is combined with the\n\t    // previous subtrees. Threads are used to traverse the inside and outside\n\t    // contours of the left and right subtree up to the highest common level. The\n\t    // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n\t    // superscript o means outside and i means inside, the subscript - means left\n\t    // subtree and + means right subtree. For summing up the modifiers along the\n\t    // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n\t    // nodes of the inside contours conflict, we compute the left one of the\n\t    // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n\t    // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n\t    // Finally, we add a new thread (if necessary).\n\t    function apportion(v, w, ancestor) {\n\t      if (w) {\n\t        var vip = v,\n\t            vop = v,\n\t            vim = w,\n\t            vom = vip.parent.children[0],\n\t            sip = vip.m,\n\t            sop = vop.m,\n\t            sim = vim.m,\n\t            som = vom.m,\n\t            shift;\n\t        while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n\t          vom = nextLeft(vom);\n\t          vop = nextRight(vop);\n\t          vop.a = v;\n\t          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n\t          if (shift > 0) {\n\t            moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n\t            sip += shift;\n\t            sop += shift;\n\t          }\n\t          sim += vim.m;\n\t          sip += vip.m;\n\t          som += vom.m;\n\t          sop += vop.m;\n\t        }\n\t        if (vim && !nextRight(vop)) {\n\t          vop.t = vim;\n\t          vop.m += sim - sop;\n\t        }\n\t        if (vip && !nextLeft(vom)) {\n\t          vom.t = vip;\n\t          vom.m += sip - som;\n\t          ancestor = v;\n\t        }\n\t      }\n\t      return ancestor;\n\t    }\n\t\n\t    function sizeNode(node) {\n\t      node.x *= dx;\n\t      node.y = node.depth * dy;\n\t    }\n\t\n\t    tree.separation = function(x) {\n\t      return arguments.length ? (separation = x, tree) : separation;\n\t    };\n\t\n\t    tree.size = function(x) {\n\t      return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n\t    };\n\t\n\t    tree.nodeSize = function(x) {\n\t      return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n\t    };\n\t\n\t    return tree;\n\t  }\n\t\n\t  function treemapSlice(parent, x0, y0, x1, y1) {\n\t    var nodes = parent.children,\n\t        node,\n\t        i = -1,\n\t        n = nodes.length,\n\t        k = parent.value && (y1 - y0) / parent.value;\n\t\n\t    while (++i < n) {\n\t      node = nodes[i], node.x0 = x0, node.x1 = x1;\n\t      node.y0 = y0, node.y1 = y0 += node.value * k;\n\t    }\n\t  }\n\t\n\t  var phi = (1 + Math.sqrt(5)) / 2;\n\t\n\t  function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n\t    var rows = [],\n\t        nodes = parent.children,\n\t        row,\n\t        nodeValue,\n\t        i0 = 0,\n\t        i1,\n\t        n = nodes.length,\n\t        dx, dy,\n\t        value = parent.value,\n\t        sumValue,\n\t        minValue,\n\t        maxValue,\n\t        newRatio,\n\t        minRatio,\n\t        alpha,\n\t        beta;\n\t\n\t    while (i0 < n) {\n\t      dx = x1 - x0, dy = y1 - y0;\n\t      minValue = maxValue = sumValue = nodes[i0].value;\n\t      alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n\t      beta = sumValue * sumValue * alpha;\n\t      minRatio = Math.max(maxValue / beta, beta / minValue);\n\t\n\t      // Keep adding nodes while the aspect ratio maintains or improves.\n\t      for (i1 = i0 + 1; i1 < n; ++i1) {\n\t        sumValue += nodeValue = nodes[i1].value;\n\t        if (nodeValue < minValue) minValue = nodeValue;\n\t        if (nodeValue > maxValue) maxValue = nodeValue;\n\t        beta = sumValue * sumValue * alpha;\n\t        newRatio = Math.max(maxValue / beta, beta / minValue);\n\t        if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n\t        minRatio = newRatio;\n\t      }\n\t\n\t      // Position and record the row orientation.\n\t      rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n\t      if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n\t      else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n\t      value -= sumValue, i0 = i1;\n\t    }\n\t\n\t    return rows;\n\t  }\n\t\n\t  var squarify = (function custom(ratio) {\n\t\n\t    function squarify(parent, x0, y0, x1, y1) {\n\t      squarifyRatio(ratio, parent, x0, y0, x1, y1);\n\t    }\n\t\n\t    squarify.ratio = function(x) {\n\t      return custom((x = +x) > 1 ? x : 1);\n\t    };\n\t\n\t    return squarify;\n\t  })(phi);\n\t\n\t  function index$1() {\n\t    var tile = squarify,\n\t        round = false,\n\t        dx = 1,\n\t        dy = 1,\n\t        paddingStack = [0],\n\t        paddingInner = constantZero,\n\t        paddingTop = constantZero,\n\t        paddingRight = constantZero,\n\t        paddingBottom = constantZero,\n\t        paddingLeft = constantZero;\n\t\n\t    function treemap(root) {\n\t      root.x0 =\n\t      root.y0 = 0;\n\t      root.x1 = dx;\n\t      root.y1 = dy;\n\t      root.eachBefore(positionNode);\n\t      paddingStack = [0];\n\t      if (round) root.eachBefore(roundNode);\n\t      return root;\n\t    }\n\t\n\t    function positionNode(node) {\n\t      var p = paddingStack[node.depth],\n\t          x0 = node.x0 + p,\n\t          y0 = node.y0 + p,\n\t          x1 = node.x1 - p,\n\t          y1 = node.y1 - p;\n\t      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n\t      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n\t      node.x0 = x0;\n\t      node.y0 = y0;\n\t      node.x1 = x1;\n\t      node.y1 = y1;\n\t      if (node.children) {\n\t        p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n\t        x0 += paddingLeft(node) - p;\n\t        y0 += paddingTop(node) - p;\n\t        x1 -= paddingRight(node) - p;\n\t        y1 -= paddingBottom(node) - p;\n\t        if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n\t        if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n\t        tile(node, x0, y0, x1, y1);\n\t      }\n\t    }\n\t\n\t    treemap.round = function(x) {\n\t      return arguments.length ? (round = !!x, treemap) : round;\n\t    };\n\t\n\t    treemap.size = function(x) {\n\t      return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n\t    };\n\t\n\t    treemap.tile = function(x) {\n\t      return arguments.length ? (tile = required(x), treemap) : tile;\n\t    };\n\t\n\t    treemap.padding = function(x) {\n\t      return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n\t    };\n\t\n\t    treemap.paddingInner = function(x) {\n\t      return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingInner;\n\t    };\n\t\n\t    treemap.paddingOuter = function(x) {\n\t      return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n\t    };\n\t\n\t    treemap.paddingTop = function(x) {\n\t      return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingTop;\n\t    };\n\t\n\t    treemap.paddingRight = function(x) {\n\t      return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingRight;\n\t    };\n\t\n\t    treemap.paddingBottom = function(x) {\n\t      return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingBottom;\n\t    };\n\t\n\t    treemap.paddingLeft = function(x) {\n\t      return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingLeft;\n\t    };\n\t\n\t    return treemap;\n\t  }\n\t\n\t  function binary(parent, x0, y0, x1, y1) {\n\t    var nodes = parent.children,\n\t        i, n = nodes.length,\n\t        sum, sums = new Array(n + 1);\n\t\n\t    for (sums[0] = sum = i = 0; i < n; ++i) {\n\t      sums[i + 1] = sum += nodes[i].value;\n\t    }\n\t\n\t    partition(0, n, parent.value, x0, y0, x1, y1);\n\t\n\t    function partition(i, j, value, x0, y0, x1, y1) {\n\t      if (i >= j - 1) {\n\t        var node = nodes[i];\n\t        node.x0 = x0, node.y0 = y0;\n\t        node.x1 = x1, node.y1 = y1;\n\t        return;\n\t      }\n\t\n\t      var valueOffset = sums[i],\n\t          valueTarget = (value / 2) + valueOffset,\n\t          k = i + 1,\n\t          hi = j - 1;\n\t\n\t      while (k < hi) {\n\t        var mid = k + hi >>> 1;\n\t        if (sums[mid] < valueTarget) k = mid + 1;\n\t        else hi = mid;\n\t      }\n\t\n\t      var valueLeft = sums[k] - valueOffset,\n\t          valueRight = value - valueLeft;\n\t\n\t      if ((y1 - y0) > (x1 - x0)) {\n\t        var yk = (y0 * valueRight + y1 * valueLeft) / value;\n\t        partition(i, k, valueLeft, x0, y0, x1, yk);\n\t        partition(k, j, valueRight, x0, yk, x1, y1);\n\t      } else {\n\t        var xk = (x0 * valueRight + x1 * valueLeft) / value;\n\t        partition(i, k, valueLeft, x0, y0, xk, y1);\n\t        partition(k, j, valueRight, xk, y0, x1, y1);\n\t      }\n\t    }\n\t  }\n\t\n\t  function sliceDice(parent, x0, y0, x1, y1) {\n\t    (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n\t  }\n\t\n\t  var resquarify = (function custom(ratio) {\n\t\n\t    function resquarify(parent, x0, y0, x1, y1) {\n\t      if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n\t        var rows,\n\t            row,\n\t            nodes,\n\t            i,\n\t            j = -1,\n\t            n,\n\t            m = rows.length,\n\t            value = parent.value;\n\t\n\t        while (++j < m) {\n\t          row = rows[j], nodes = row.children;\n\t          for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n\t          if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n\t          else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n\t          value -= row.value;\n\t        }\n\t      } else {\n\t        parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n\t        rows.ratio = ratio;\n\t      }\n\t    }\n\t\n\t    resquarify.ratio = function(x) {\n\t      return custom((x = +x) > 1 ? x : 1);\n\t    };\n\t\n\t    return resquarify;\n\t  })(phi);\n\t\n\t  function center$1(x, y) {\n\t    var nodes;\n\t\n\t    if (x == null) x = 0;\n\t    if (y == null) y = 0;\n\t\n\t    function force() {\n\t      var i,\n\t          n = nodes.length,\n\t          node,\n\t          sx = 0,\n\t          sy = 0;\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        node = nodes[i], sx += node.x, sy += node.y;\n\t      }\n\t\n\t      for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n\t        node = nodes[i], node.x -= sx, node.y -= sy;\n\t      }\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      nodes = _;\n\t    };\n\t\n\t    force.x = function(_) {\n\t      return arguments.length ? (x = +_, force) : x;\n\t    };\n\t\n\t    force.y = function(_) {\n\t      return arguments.length ? (y = +_, force) : y;\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function constant$6(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function jiggle() {\n\t    return (Math.random() - 0.5) * 1e-6;\n\t  }\n\t\n\t  function x$1(d) {\n\t    return d.x + d.vx;\n\t  }\n\t\n\t  function y$1(d) {\n\t    return d.y + d.vy;\n\t  }\n\t\n\t  function collide(radius) {\n\t    var nodes,\n\t        radii,\n\t        strength = 1,\n\t        iterations = 1;\n\t\n\t    if (typeof radius !== \"function\") radius = constant$6(radius == null ? 1 : +radius);\n\t\n\t    function force() {\n\t      var i, n = nodes.length,\n\t          tree,\n\t          node,\n\t          xi,\n\t          yi,\n\t          ri,\n\t          ri2;\n\t\n\t      for (var k = 0; k < iterations; ++k) {\n\t        tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);\n\t        for (i = 0; i < n; ++i) {\n\t          node = nodes[i];\n\t          ri = radii[i], ri2 = ri * ri;\n\t          xi = node.x + node.vx;\n\t          yi = node.y + node.vy;\n\t          tree.visit(apply);\n\t        }\n\t      }\n\t\n\t      function apply(quad, x0, y0, x1, y1) {\n\t        var data = quad.data, rj = quad.r, r = ri + rj;\n\t        if (data) {\n\t          if (data.index > i) {\n\t            var x = xi - data.x - data.vx,\n\t                y = yi - data.y - data.vy,\n\t                l = x * x + y * y;\n\t            if (l < r * r) {\n\t              if (x === 0) x = jiggle(), l += x * x;\n\t              if (y === 0) y = jiggle(), l += y * y;\n\t              l = (r - (l = Math.sqrt(l))) / l * strength;\n\t              node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n\t              node.vy += (y *= l) * r;\n\t              data.vx -= x * (r = 1 - r);\n\t              data.vy -= y * r;\n\t            }\n\t          }\n\t          return;\n\t        }\n\t        return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n\t      }\n\t    }\n\t\n\t    function prepare(quad) {\n\t      if (quad.data) return quad.r = radii[quad.data.index];\n\t      for (var i = quad.r = 0; i < 4; ++i) {\n\t        if (quad[i] && quad[i].r > quad.r) {\n\t          quad.r = quad[i].r;\n\t        }\n\t      }\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      var i, n = (nodes = _).length; radii = new Array(n);\n\t      for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);\n\t    };\n\t\n\t    force.iterations = function(_) {\n\t      return arguments.length ? (iterations = +_, force) : iterations;\n\t    };\n\t\n\t    force.strength = function(_) {\n\t      return arguments.length ? (strength = +_, force) : strength;\n\t    };\n\t\n\t    force.radius = function(_) {\n\t      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$6(+_), force) : radius;\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function index$2(d, i) {\n\t    return i;\n\t  }\n\t\n\t  function link(links) {\n\t    var id = index$2,\n\t        strength = defaultStrength,\n\t        strengths,\n\t        distance = constant$6(30),\n\t        distances,\n\t        nodes,\n\t        count,\n\t        bias,\n\t        iterations = 1;\n\t\n\t    if (links == null) links = [];\n\t\n\t    function defaultStrength(link) {\n\t      return 1 / Math.min(count[link.source.index], count[link.target.index]);\n\t    }\n\t\n\t    function force(alpha) {\n\t      for (var k = 0, n = links.length; k < iterations; ++k) {\n\t        for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n\t          link = links[i], source = link.source, target = link.target;\n\t          x = target.x + target.vx - source.x - source.vx || jiggle();\n\t          y = target.y + target.vy - source.y - source.vy || jiggle();\n\t          l = Math.sqrt(x * x + y * y);\n\t          l = (l - distances[i]) / l * alpha * strengths[i];\n\t          x *= l, y *= l;\n\t          target.vx -= x * (b = bias[i]);\n\t          target.vy -= y * b;\n\t          source.vx += x * (b = 1 - b);\n\t          source.vy += y * b;\n\t        }\n\t      }\n\t    }\n\t\n\t    function initialize() {\n\t      if (!nodes) return;\n\t\n\t      var i,\n\t          n = nodes.length,\n\t          m = links.length,\n\t          nodeById = map$1(nodes, id),\n\t          link;\n\t\n\t      for (i = 0, count = new Array(n); i < n; ++i) {\n\t        count[i] = 0;\n\t      }\n\t\n\t      for (i = 0; i < m; ++i) {\n\t        link = links[i], link.index = i;\n\t        if (typeof link.source !== \"object\") link.source = nodeById.get(link.source);\n\t        if (typeof link.target !== \"object\") link.target = nodeById.get(link.target);\n\t        ++count[link.source.index], ++count[link.target.index];\n\t      }\n\t\n\t      for (i = 0, bias = new Array(m); i < m; ++i) {\n\t        link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n\t      }\n\t\n\t      strengths = new Array(m), initializeStrength();\n\t      distances = new Array(m), initializeDistance();\n\t    }\n\t\n\t    function initializeStrength() {\n\t      if (!nodes) return;\n\t\n\t      for (var i = 0, n = links.length; i < n; ++i) {\n\t        strengths[i] = +strength(links[i], i, links);\n\t      }\n\t    }\n\t\n\t    function initializeDistance() {\n\t      if (!nodes) return;\n\t\n\t      for (var i = 0, n = links.length; i < n; ++i) {\n\t        distances[i] = +distance(links[i], i, links);\n\t      }\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      nodes = _;\n\t      initialize();\n\t    };\n\t\n\t    force.links = function(_) {\n\t      return arguments.length ? (links = _, initialize(), force) : links;\n\t    };\n\t\n\t    force.id = function(_) {\n\t      return arguments.length ? (id = _, force) : id;\n\t    };\n\t\n\t    force.iterations = function(_) {\n\t      return arguments.length ? (iterations = +_, force) : iterations;\n\t    };\n\t\n\t    force.strength = function(_) {\n\t      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initializeStrength(), force) : strength;\n\t    };\n\t\n\t    force.distance = function(_) {\n\t      return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$6(+_), initializeDistance(), force) : distance;\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function x$2(d) {\n\t    return d.x;\n\t  }\n\t\n\t  function y$2(d) {\n\t    return d.y;\n\t  }\n\t\n\t  var initialRadius = 10;\n\t  var initialAngle = Math.PI * (3 - Math.sqrt(5));\n\t  function simulation(nodes) {\n\t    var simulation,\n\t        alpha = 1,\n\t        alphaMin = 0.001,\n\t        alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n\t        alphaTarget = 0,\n\t        velocityDecay = 0.6,\n\t        forces = map$1(),\n\t        stepper = timer(step),\n\t        event = dispatch(\"tick\", \"end\");\n\t\n\t    if (nodes == null) nodes = [];\n\t\n\t    function step() {\n\t      tick();\n\t      event.call(\"tick\", simulation);\n\t      if (alpha < alphaMin) {\n\t        stepper.stop();\n\t        event.call(\"end\", simulation);\n\t      }\n\t    }\n\t\n\t    function tick() {\n\t      var i, n = nodes.length, node;\n\t\n\t      alpha += (alphaTarget - alpha) * alphaDecay;\n\t\n\t      forces.each(function(force) {\n\t        force(alpha);\n\t      });\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        node = nodes[i];\n\t        if (node.fx == null) node.x += node.vx *= velocityDecay;\n\t        else node.x = node.fx, node.vx = 0;\n\t        if (node.fy == null) node.y += node.vy *= velocityDecay;\n\t        else node.y = node.fy, node.vy = 0;\n\t      }\n\t    }\n\t\n\t    function initializeNodes() {\n\t      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n\t        node = nodes[i], node.index = i;\n\t        if (isNaN(node.x) || isNaN(node.y)) {\n\t          var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n\t          node.x = radius * Math.cos(angle);\n\t          node.y = radius * Math.sin(angle);\n\t        }\n\t        if (isNaN(node.vx) || isNaN(node.vy)) {\n\t          node.vx = node.vy = 0;\n\t        }\n\t      }\n\t    }\n\t\n\t    function initializeForce(force) {\n\t      if (force.initialize) force.initialize(nodes);\n\t      return force;\n\t    }\n\t\n\t    initializeNodes();\n\t\n\t    return simulation = {\n\t      tick: tick,\n\t\n\t      restart: function() {\n\t        return stepper.restart(step), simulation;\n\t      },\n\t\n\t      stop: function() {\n\t        return stepper.stop(), simulation;\n\t      },\n\t\n\t      nodes: function(_) {\n\t        return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n\t      },\n\t\n\t      alpha: function(_) {\n\t        return arguments.length ? (alpha = +_, simulation) : alpha;\n\t      },\n\t\n\t      alphaMin: function(_) {\n\t        return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n\t      },\n\t\n\t      alphaDecay: function(_) {\n\t        return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n\t      },\n\t\n\t      alphaTarget: function(_) {\n\t        return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n\t      },\n\t\n\t      velocityDecay: function(_) {\n\t        return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n\t      },\n\t\n\t      force: function(name, _) {\n\t        return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n\t      },\n\t\n\t      find: function(x, y, radius) {\n\t        var i = 0,\n\t            n = nodes.length,\n\t            dx,\n\t            dy,\n\t            d2,\n\t            node,\n\t            closest;\n\t\n\t        if (radius == null) radius = Infinity;\n\t        else radius *= radius;\n\t\n\t        for (i = 0; i < n; ++i) {\n\t          node = nodes[i];\n\t          dx = x - node.x;\n\t          dy = y - node.y;\n\t          d2 = dx * dx + dy * dy;\n\t          if (d2 < radius) closest = node, radius = d2;\n\t        }\n\t\n\t        return closest;\n\t      },\n\t\n\t      on: function(name, _) {\n\t        return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n\t      }\n\t    };\n\t  }\n\t\n\t  function manyBody() {\n\t    var nodes,\n\t        node,\n\t        alpha,\n\t        strength = constant$6(-30),\n\t        strengths,\n\t        distanceMin2 = 1,\n\t        distanceMax2 = Infinity,\n\t        theta2 = 0.81;\n\t\n\t    function force(_) {\n\t      var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);\n\t      for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n\t    }\n\t\n\t    function initialize() {\n\t      if (!nodes) return;\n\t      var i, n = nodes.length;\n\t      strengths = new Array(n);\n\t      for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);\n\t    }\n\t\n\t    function accumulate(quad) {\n\t      var strength = 0, q, c, x, y, i;\n\t\n\t      // For internal nodes, accumulate forces from child quadrants.\n\t      if (quad.length) {\n\t        for (x = y = i = 0; i < 4; ++i) {\n\t          if ((q = quad[i]) && (c = q.value)) {\n\t            strength += c, x += c * q.x, y += c * q.y;\n\t          }\n\t        }\n\t        quad.x = x / strength;\n\t        quad.y = y / strength;\n\t      }\n\t\n\t      // For leaf nodes, accumulate forces from coincident quadrants.\n\t      else {\n\t        q = quad;\n\t        q.x = q.data.x;\n\t        q.y = q.data.y;\n\t        do strength += strengths[q.data.index];\n\t        while (q = q.next);\n\t      }\n\t\n\t      quad.value = strength;\n\t    }\n\t\n\t    function apply(quad, x1, _, x2) {\n\t      if (!quad.value) return true;\n\t\n\t      var x = quad.x - node.x,\n\t          y = quad.y - node.y,\n\t          w = x2 - x1,\n\t          l = x * x + y * y;\n\t\n\t      // Apply the Barnes-Hut approximation if possible.\n\t      // Limit forces for very close nodes; randomize direction if coincident.\n\t      if (w * w / theta2 < l) {\n\t        if (l < distanceMax2) {\n\t          if (x === 0) x = jiggle(), l += x * x;\n\t          if (y === 0) y = jiggle(), l += y * y;\n\t          if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n\t          node.vx += x * quad.value * alpha / l;\n\t          node.vy += y * quad.value * alpha / l;\n\t        }\n\t        return true;\n\t      }\n\t\n\t      // Otherwise, process points directly.\n\t      else if (quad.length || l >= distanceMax2) return;\n\t\n\t      // Limit forces for very close nodes; randomize direction if coincident.\n\t      if (quad.data !== node || quad.next) {\n\t        if (x === 0) x = jiggle(), l += x * x;\n\t        if (y === 0) y = jiggle(), l += y * y;\n\t        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n\t      }\n\t\n\t      do if (quad.data !== node) {\n\t        w = strengths[quad.data.index] * alpha / l;\n\t        node.vx += x * w;\n\t        node.vy += y * w;\n\t      } while (quad = quad.next);\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      nodes = _;\n\t      initialize();\n\t    };\n\t\n\t    force.strength = function(_) {\n\t      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n\t    };\n\t\n\t    force.distanceMin = function(_) {\n\t      return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n\t    };\n\t\n\t    force.distanceMax = function(_) {\n\t      return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n\t    };\n\t\n\t    force.theta = function(_) {\n\t      return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function x$3(x) {\n\t    var strength = constant$6(0.1),\n\t        nodes,\n\t        strengths,\n\t        xz;\n\t\n\t    if (typeof x !== \"function\") x = constant$6(x == null ? 0 : +x);\n\t\n\t    function force(alpha) {\n\t      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n\t        node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n\t      }\n\t    }\n\t\n\t    function initialize() {\n\t      if (!nodes) return;\n\t      var i, n = nodes.length;\n\t      strengths = new Array(n);\n\t      xz = new Array(n);\n\t      for (i = 0; i < n; ++i) {\n\t        strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n\t      }\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      nodes = _;\n\t      initialize();\n\t    };\n\t\n\t    force.strength = function(_) {\n\t      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n\t    };\n\t\n\t    force.x = function(_) {\n\t      return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : x;\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function y$3(y) {\n\t    var strength = constant$6(0.1),\n\t        nodes,\n\t        strengths,\n\t        yz;\n\t\n\t    if (typeof y !== \"function\") y = constant$6(y == null ? 0 : +y);\n\t\n\t    function force(alpha) {\n\t      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n\t        node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n\t      }\n\t    }\n\t\n\t    function initialize() {\n\t      if (!nodes) return;\n\t      var i, n = nodes.length;\n\t      strengths = new Array(n);\n\t      yz = new Array(n);\n\t      for (i = 0; i < n; ++i) {\n\t        strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n\t      }\n\t    }\n\t\n\t    force.initialize = function(_) {\n\t      nodes = _;\n\t      initialize();\n\t    };\n\t\n\t    force.strength = function(_) {\n\t      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n\t    };\n\t\n\t    force.y = function(_) {\n\t      return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : y;\n\t    };\n\t\n\t    return force;\n\t  }\n\t\n\t  function nopropagation() {\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  function noevent() {\n\t    exports.event.preventDefault();\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  function dragDisable(view) {\n\t    var root = view.document.documentElement,\n\t        selection = select(view).on(\"dragstart.drag\", noevent, true);\n\t    if (\"onselectstart\" in root) {\n\t      selection.on(\"selectstart.drag\", noevent, true);\n\t    } else {\n\t      root.__noselect = root.style.MozUserSelect;\n\t      root.style.MozUserSelect = \"none\";\n\t    }\n\t  }\n\t\n\t  function dragEnable(view, noclick) {\n\t    var root = view.document.documentElement,\n\t        selection = select(view).on(\"dragstart.drag\", null);\n\t    if (noclick) {\n\t      selection.on(\"click.drag\", noevent, true);\n\t      setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n\t    }\n\t    if (\"onselectstart\" in root) {\n\t      selection.on(\"selectstart.drag\", null);\n\t    } else {\n\t      root.style.MozUserSelect = root.__noselect;\n\t      delete root.__noselect;\n\t    }\n\t  }\n\t\n\t  function constant$7(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n\t    this.target = target;\n\t    this.type = type;\n\t    this.subject = subject;\n\t    this.identifier = id;\n\t    this.active = active;\n\t    this.x = x;\n\t    this.y = y;\n\t    this.dx = dx;\n\t    this.dy = dy;\n\t    this._ = dispatch;\n\t  }\n\t\n\t  DragEvent.prototype.on = function() {\n\t    var value = this._.on.apply(this._, arguments);\n\t    return value === this._ ? this : value;\n\t  };\n\t\n\t  // Ignore right-click, since that should open the context menu.\n\t  function defaultFilter() {\n\t    return !exports.event.button;\n\t  }\n\t\n\t  function defaultContainer() {\n\t    return this.parentNode;\n\t  }\n\t\n\t  function defaultSubject(d) {\n\t    return d == null ? {x: exports.event.x, y: exports.event.y} : d;\n\t  }\n\t\n\t  function drag() {\n\t    var filter = defaultFilter,\n\t        container = defaultContainer,\n\t        subject = defaultSubject,\n\t        gestures = {},\n\t        listeners = dispatch(\"start\", \"drag\", \"end\"),\n\t        active = 0,\n\t        mousemoving,\n\t        touchending;\n\t\n\t    function drag(selection) {\n\t      selection\n\t          .on(\"mousedown.drag\", mousedowned)\n\t          .on(\"touchstart.drag\", touchstarted)\n\t          .on(\"touchmove.drag\", touchmoved)\n\t          .on(\"touchend.drag touchcancel.drag\", touchended)\n\t          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n\t    }\n\t\n\t    function mousedowned() {\n\t      if (touchending || !filter.apply(this, arguments)) return;\n\t      var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n\t      if (!gesture) return;\n\t      select(exports.event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n\t      dragDisable(exports.event.view);\n\t      nopropagation();\n\t      mousemoving = false;\n\t      gesture(\"start\");\n\t    }\n\t\n\t    function mousemoved() {\n\t      noevent();\n\t      mousemoving = true;\n\t      gestures.mouse(\"drag\");\n\t    }\n\t\n\t    function mouseupped() {\n\t      select(exports.event.view).on(\"mousemove.drag mouseup.drag\", null);\n\t      dragEnable(exports.event.view, mousemoving);\n\t      noevent();\n\t      gestures.mouse(\"end\");\n\t    }\n\t\n\t    function touchstarted() {\n\t      if (!filter.apply(this, arguments)) return;\n\t      var touches = exports.event.changedTouches,\n\t          c = container.apply(this, arguments),\n\t          n = touches.length, i, gesture;\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n\t          nopropagation();\n\t          gesture(\"start\");\n\t        }\n\t      }\n\t    }\n\t\n\t    function touchmoved() {\n\t      var touches = exports.event.changedTouches,\n\t          n = touches.length, i, gesture;\n\t\n\t      for (i = 0; i < n; ++i) {\n\t        if (gesture = gestures[touches[i].identifier]) {\n\t          noevent();\n\t          gesture(\"drag\");\n\t        }\n\t      }\n\t    }\n\t\n\t    function touchended() {\n\t      var touches = exports.event.changedTouches,\n\t          n = touches.length, i, gesture;\n\t\n\t      if (touchending) clearTimeout(touchending);\n\t      touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n\t      for (i = 0; i < n; ++i) {\n\t        if (gesture = gestures[touches[i].identifier]) {\n\t          nopropagation();\n\t          gesture(\"end\");\n\t        }\n\t      }\n\t    }\n\t\n\t    function beforestart(id, container, point, that, args) {\n\t      var p = point(container, id), s, dx, dy,\n\t          sublisteners = listeners.copy();\n\t\n\t      if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n\t        if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;\n\t        dx = s.x - p[0] || 0;\n\t        dy = s.y - p[1] || 0;\n\t        return true;\n\t      })) return;\n\t\n\t      return function gesture(type) {\n\t        var p0 = p, n;\n\t        switch (type) {\n\t          case \"start\": gestures[id] = gesture, n = active++; break;\n\t          case \"end\": delete gestures[id], --active; // nobreak\n\t          case \"drag\": p = point(container, id), n = active; break;\n\t        }\n\t        customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n\t      };\n\t    }\n\t\n\t    drag.filter = function(_) {\n\t      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$7(!!_), drag) : filter;\n\t    };\n\t\n\t    drag.container = function(_) {\n\t      return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$7(_), drag) : container;\n\t    };\n\t\n\t    drag.subject = function(_) {\n\t      return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$7(_), drag) : subject;\n\t    };\n\t\n\t    drag.on = function() {\n\t      var value = listeners.on.apply(listeners, arguments);\n\t      return value === listeners ? drag : value;\n\t    };\n\t\n\t    return drag;\n\t  }\n\t\n\t  function constant$8(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function x$4(d) {\n\t    return d[0];\n\t  }\n\t\n\t  function y$4(d) {\n\t    return d[1];\n\t  }\n\t\n\t  function RedBlackTree() {\n\t    this._ = null; // root node\n\t  }\n\t\n\t  function RedBlackNode(node) {\n\t    node.U = // parent node\n\t    node.C = // color - true for red, false for black\n\t    node.L = // left node\n\t    node.R = // right node\n\t    node.P = // previous node\n\t    node.N = null; // next node\n\t  }\n\t\n\t  RedBlackTree.prototype = {\n\t    constructor: RedBlackTree,\n\t\n\t    insert: function(after, node) {\n\t      var parent, grandpa, uncle;\n\t\n\t      if (after) {\n\t        node.P = after;\n\t        node.N = after.N;\n\t        if (after.N) after.N.P = node;\n\t        after.N = node;\n\t        if (after.R) {\n\t          after = after.R;\n\t          while (after.L) after = after.L;\n\t          after.L = node;\n\t        } else {\n\t          after.R = node;\n\t        }\n\t        parent = after;\n\t      } else if (this._) {\n\t        after = RedBlackFirst(this._);\n\t        node.P = null;\n\t        node.N = after;\n\t        after.P = after.L = node;\n\t        parent = after;\n\t      } else {\n\t        node.P = node.N = null;\n\t        this._ = node;\n\t        parent = null;\n\t      }\n\t      node.L = node.R = null;\n\t      node.U = parent;\n\t      node.C = true;\n\t\n\t      after = node;\n\t      while (parent && parent.C) {\n\t        grandpa = parent.U;\n\t        if (parent === grandpa.L) {\n\t          uncle = grandpa.R;\n\t          if (uncle && uncle.C) {\n\t            parent.C = uncle.C = false;\n\t            grandpa.C = true;\n\t            after = grandpa;\n\t          } else {\n\t            if (after === parent.R) {\n\t              RedBlackRotateLeft(this, parent);\n\t              after = parent;\n\t              parent = after.U;\n\t            }\n\t            parent.C = false;\n\t            grandpa.C = true;\n\t            RedBlackRotateRight(this, grandpa);\n\t          }\n\t        } else {\n\t          uncle = grandpa.L;\n\t          if (uncle && uncle.C) {\n\t            parent.C = uncle.C = false;\n\t            grandpa.C = true;\n\t            after = grandpa;\n\t          } else {\n\t            if (after === parent.L) {\n\t              RedBlackRotateRight(this, parent);\n\t              after = parent;\n\t              parent = after.U;\n\t            }\n\t            parent.C = false;\n\t            grandpa.C = true;\n\t            RedBlackRotateLeft(this, grandpa);\n\t          }\n\t        }\n\t        parent = after.U;\n\t      }\n\t      this._.C = false;\n\t    },\n\t\n\t    remove: function(node) {\n\t      if (node.N) node.N.P = node.P;\n\t      if (node.P) node.P.N = node.N;\n\t      node.N = node.P = null;\n\t\n\t      var parent = node.U,\n\t          sibling,\n\t          left = node.L,\n\t          right = node.R,\n\t          next,\n\t          red;\n\t\n\t      if (!left) next = right;\n\t      else if (!right) next = left;\n\t      else next = RedBlackFirst(right);\n\t\n\t      if (parent) {\n\t        if (parent.L === node) parent.L = next;\n\t        else parent.R = next;\n\t      } else {\n\t        this._ = next;\n\t      }\n\t\n\t      if (left && right) {\n\t        red = next.C;\n\t        next.C = node.C;\n\t        next.L = left;\n\t        left.U = next;\n\t        if (next !== right) {\n\t          parent = next.U;\n\t          next.U = node.U;\n\t          node = next.R;\n\t          parent.L = node;\n\t          next.R = right;\n\t          right.U = next;\n\t        } else {\n\t          next.U = parent;\n\t          parent = next;\n\t          node = next.R;\n\t        }\n\t      } else {\n\t        red = node.C;\n\t        node = next;\n\t      }\n\t\n\t      if (node) node.U = parent;\n\t      if (red) return;\n\t      if (node && node.C) { node.C = false; return; }\n\t\n\t      do {\n\t        if (node === this._) break;\n\t        if (node === parent.L) {\n\t          sibling = parent.R;\n\t          if (sibling.C) {\n\t            sibling.C = false;\n\t            parent.C = true;\n\t            RedBlackRotateLeft(this, parent);\n\t            sibling = parent.R;\n\t          }\n\t          if ((sibling.L && sibling.L.C)\n\t              || (sibling.R && sibling.R.C)) {\n\t            if (!sibling.R || !sibling.R.C) {\n\t              sibling.L.C = false;\n\t              sibling.C = true;\n\t              RedBlackRotateRight(this, sibling);\n\t              sibling = parent.R;\n\t            }\n\t            sibling.C = parent.C;\n\t            parent.C = sibling.R.C = false;\n\t            RedBlackRotateLeft(this, parent);\n\t            node = this._;\n\t            break;\n\t          }\n\t        } else {\n\t          sibling = parent.L;\n\t          if (sibling.C) {\n\t            sibling.C = false;\n\t            parent.C = true;\n\t            RedBlackRotateRight(this, parent);\n\t            sibling = parent.L;\n\t          }\n\t          if ((sibling.L && sibling.L.C)\n\t            || (sibling.R && sibling.R.C)) {\n\t            if (!sibling.L || !sibling.L.C) {\n\t              sibling.R.C = false;\n\t              sibling.C = true;\n\t              RedBlackRotateLeft(this, sibling);\n\t              sibling = parent.L;\n\t            }\n\t            sibling.C = parent.C;\n\t            parent.C = sibling.L.C = false;\n\t            RedBlackRotateRight(this, parent);\n\t            node = this._;\n\t            break;\n\t          }\n\t        }\n\t        sibling.C = true;\n\t        node = parent;\n\t        parent = parent.U;\n\t      } while (!node.C);\n\t\n\t      if (node) node.C = false;\n\t    }\n\t  };\n\t\n\t  function RedBlackRotateLeft(tree, node) {\n\t    var p = node,\n\t        q = node.R,\n\t        parent = p.U;\n\t\n\t    if (parent) {\n\t      if (parent.L === p) parent.L = q;\n\t      else parent.R = q;\n\t    } else {\n\t      tree._ = q;\n\t    }\n\t\n\t    q.U = parent;\n\t    p.U = q;\n\t    p.R = q.L;\n\t    if (p.R) p.R.U = p;\n\t    q.L = p;\n\t  }\n\t\n\t  function RedBlackRotateRight(tree, node) {\n\t    var p = node,\n\t        q = node.L,\n\t        parent = p.U;\n\t\n\t    if (parent) {\n\t      if (parent.L === p) parent.L = q;\n\t      else parent.R = q;\n\t    } else {\n\t      tree._ = q;\n\t    }\n\t\n\t    q.U = parent;\n\t    p.U = q;\n\t    p.L = q.R;\n\t    if (p.L) p.L.U = p;\n\t    q.R = p;\n\t  }\n\t\n\t  function RedBlackFirst(node) {\n\t    while (node.L) node = node.L;\n\t    return node;\n\t  }\n\t\n\t  function createEdge(left, right, v0, v1) {\n\t    var edge = [null, null],\n\t        index = edges.push(edge) - 1;\n\t    edge.left = left;\n\t    edge.right = right;\n\t    if (v0) setEdgeEnd(edge, left, right, v0);\n\t    if (v1) setEdgeEnd(edge, right, left, v1);\n\t    cells[left.index].halfedges.push(index);\n\t    cells[right.index].halfedges.push(index);\n\t    return edge;\n\t  }\n\t\n\t  function createBorderEdge(left, v0, v1) {\n\t    var edge = [v0, v1];\n\t    edge.left = left;\n\t    return edge;\n\t  }\n\t\n\t  function setEdgeEnd(edge, left, right, vertex) {\n\t    if (!edge[0] && !edge[1]) {\n\t      edge[0] = vertex;\n\t      edge.left = left;\n\t      edge.right = right;\n\t    } else if (edge.left === right) {\n\t      edge[1] = vertex;\n\t    } else {\n\t      edge[0] = vertex;\n\t    }\n\t  }\n\t\n\t  // Liang–Barsky line clipping.\n\t  function clipEdge(edge, x0, y0, x1, y1) {\n\t    var a = edge[0],\n\t        b = edge[1],\n\t        ax = a[0],\n\t        ay = a[1],\n\t        bx = b[0],\n\t        by = b[1],\n\t        t0 = 0,\n\t        t1 = 1,\n\t        dx = bx - ax,\n\t        dy = by - ay,\n\t        r;\n\t\n\t    r = x0 - ax;\n\t    if (!dx && r > 0) return;\n\t    r /= dx;\n\t    if (dx < 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    } else if (dx > 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    }\n\t\n\t    r = x1 - ax;\n\t    if (!dx && r < 0) return;\n\t    r /= dx;\n\t    if (dx < 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    } else if (dx > 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    }\n\t\n\t    r = y0 - ay;\n\t    if (!dy && r > 0) return;\n\t    r /= dy;\n\t    if (dy < 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    } else if (dy > 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    }\n\t\n\t    r = y1 - ay;\n\t    if (!dy && r < 0) return;\n\t    r /= dy;\n\t    if (dy < 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    } else if (dy > 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    }\n\t\n\t    if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\t\n\t    if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n\t    if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n\t    return true;\n\t  }\n\t\n\t  function connectEdge(edge, x0, y0, x1, y1) {\n\t    var v1 = edge[1];\n\t    if (v1) return true;\n\t\n\t    var v0 = edge[0],\n\t        left = edge.left,\n\t        right = edge.right,\n\t        lx = left[0],\n\t        ly = left[1],\n\t        rx = right[0],\n\t        ry = right[1],\n\t        fx = (lx + rx) / 2,\n\t        fy = (ly + ry) / 2,\n\t        fm,\n\t        fb;\n\t\n\t    if (ry === ly) {\n\t      if (fx < x0 || fx >= x1) return;\n\t      if (lx > rx) {\n\t        if (!v0) v0 = [fx, y0];\n\t        else if (v0[1] >= y1) return;\n\t        v1 = [fx, y1];\n\t      } else {\n\t        if (!v0) v0 = [fx, y1];\n\t        else if (v0[1] < y0) return;\n\t        v1 = [fx, y0];\n\t      }\n\t    } else {\n\t      fm = (lx - rx) / (ry - ly);\n\t      fb = fy - fm * fx;\n\t      if (fm < -1 || fm > 1) {\n\t        if (lx > rx) {\n\t          if (!v0) v0 = [(y0 - fb) / fm, y0];\n\t          else if (v0[1] >= y1) return;\n\t          v1 = [(y1 - fb) / fm, y1];\n\t        } else {\n\t          if (!v0) v0 = [(y1 - fb) / fm, y1];\n\t          else if (v0[1] < y0) return;\n\t          v1 = [(y0 - fb) / fm, y0];\n\t        }\n\t      } else {\n\t        if (ly < ry) {\n\t          if (!v0) v0 = [x0, fm * x0 + fb];\n\t          else if (v0[0] >= x1) return;\n\t          v1 = [x1, fm * x1 + fb];\n\t        } else {\n\t          if (!v0) v0 = [x1, fm * x1 + fb];\n\t          else if (v0[0] < x0) return;\n\t          v1 = [x0, fm * x0 + fb];\n\t        }\n\t      }\n\t    }\n\t\n\t    edge[0] = v0;\n\t    edge[1] = v1;\n\t    return true;\n\t  }\n\t\n\t  function clipEdges(x0, y0, x1, y1) {\n\t    var i = edges.length,\n\t        edge;\n\t\n\t    while (i--) {\n\t      if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n\t          || !clipEdge(edge, x0, y0, x1, y1)\n\t          || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3\n\t              || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {\n\t        delete edges[i];\n\t      }\n\t    }\n\t  }\n\t\n\t  function createCell(site) {\n\t    return cells[site.index] = {\n\t      site: site,\n\t      halfedges: []\n\t    };\n\t  }\n\t\n\t  function cellHalfedgeAngle(cell, edge) {\n\t    var site = cell.site,\n\t        va = edge.left,\n\t        vb = edge.right;\n\t    if (site === vb) vb = va, va = site;\n\t    if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n\t    if (site === va) va = edge[1], vb = edge[0];\n\t    else va = edge[0], vb = edge[1];\n\t    return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n\t  }\n\t\n\t  function cellHalfedgeStart(cell, edge) {\n\t    return edge[+(edge.left !== cell.site)];\n\t  }\n\t\n\t  function cellHalfedgeEnd(cell, edge) {\n\t    return edge[+(edge.left === cell.site)];\n\t  }\n\t\n\t  function sortCellHalfedges() {\n\t    for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n\t      if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n\t        var index = new Array(m),\n\t            array = new Array(m);\n\t        for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n\t        index.sort(function(i, j) { return array[j] - array[i]; });\n\t        for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n\t        for (j = 0; j < m; ++j) halfedges[j] = array[j];\n\t      }\n\t    }\n\t  }\n\t\n\t  function clipCells(x0, y0, x1, y1) {\n\t    var nCells = cells.length,\n\t        iCell,\n\t        cell,\n\t        site,\n\t        iHalfedge,\n\t        halfedges,\n\t        nHalfedges,\n\t        start,\n\t        startX,\n\t        startY,\n\t        end,\n\t        endX,\n\t        endY,\n\t        cover = true;\n\t\n\t    for (iCell = 0; iCell < nCells; ++iCell) {\n\t      if (cell = cells[iCell]) {\n\t        site = cell.site;\n\t        halfedges = cell.halfedges;\n\t        iHalfedge = halfedges.length;\n\t\n\t        // Remove any dangling clipped edges.\n\t        while (iHalfedge--) {\n\t          if (!edges[halfedges[iHalfedge]]) {\n\t            halfedges.splice(iHalfedge, 1);\n\t          }\n\t        }\n\t\n\t        // Insert any border edges as necessary.\n\t        iHalfedge = 0, nHalfedges = halfedges.length;\n\t        while (iHalfedge < nHalfedges) {\n\t          end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n\t          start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n\t          if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {\n\t            halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n\t                Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]\n\t                : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]\n\t                : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]\n\t                : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]\n\t                : null)) - 1);\n\t            ++nHalfedges;\n\t          }\n\t        }\n\t\n\t        if (nHalfedges) cover = false;\n\t      }\n\t    }\n\t\n\t    // If there weren’t any edges, have the closest site cover the extent.\n\t    // It doesn’t matter which corner of the extent we measure!\n\t    if (cover) {\n\t      var dx, dy, d2, dc = Infinity;\n\t\n\t      for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n\t        if (cell = cells[iCell]) {\n\t          site = cell.site;\n\t          dx = site[0] - x0;\n\t          dy = site[1] - y0;\n\t          d2 = dx * dx + dy * dy;\n\t          if (d2 < dc) dc = d2, cover = cell;\n\t        }\n\t      }\n\t\n\t      if (cover) {\n\t        var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n\t        cover.halfedges.push(\n\t          edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n\t          edges.push(createBorderEdge(site, v01, v11)) - 1,\n\t          edges.push(createBorderEdge(site, v11, v10)) - 1,\n\t          edges.push(createBorderEdge(site, v10, v00)) - 1\n\t        );\n\t      }\n\t    }\n\t\n\t    // Lastly delete any cells with no edges; these were entirely clipped.\n\t    for (iCell = 0; iCell < nCells; ++iCell) {\n\t      if (cell = cells[iCell]) {\n\t        if (!cell.halfedges.length) {\n\t          delete cells[iCell];\n\t        }\n\t      }\n\t    }\n\t  }\n\t\n\t  var circlePool = [];\n\t\n\t  var firstCircle;\n\t\n\t  function Circle() {\n\t    RedBlackNode(this);\n\t    this.x =\n\t    this.y =\n\t    this.arc =\n\t    this.site =\n\t    this.cy = null;\n\t  }\n\t\n\t  function attachCircle(arc) {\n\t    var lArc = arc.P,\n\t        rArc = arc.N;\n\t\n\t    if (!lArc || !rArc) return;\n\t\n\t    var lSite = lArc.site,\n\t        cSite = arc.site,\n\t        rSite = rArc.site;\n\t\n\t    if (lSite === rSite) return;\n\t\n\t    var bx = cSite[0],\n\t        by = cSite[1],\n\t        ax = lSite[0] - bx,\n\t        ay = lSite[1] - by,\n\t        cx = rSite[0] - bx,\n\t        cy = rSite[1] - by;\n\t\n\t    var d = 2 * (ax * cy - ay * cx);\n\t    if (d >= -epsilon2$1) return;\n\t\n\t    var ha = ax * ax + ay * ay,\n\t        hc = cx * cx + cy * cy,\n\t        x = (cy * ha - ay * hc) / d,\n\t        y = (ax * hc - cx * ha) / d;\n\t\n\t    var circle = circlePool.pop() || new Circle;\n\t    circle.arc = arc;\n\t    circle.site = cSite;\n\t    circle.x = x + bx;\n\t    circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\t\n\t    arc.circle = circle;\n\t\n\t    var before = null,\n\t        node = circles._;\n\t\n\t    while (node) {\n\t      if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n\t        if (node.L) node = node.L;\n\t        else { before = node.P; break; }\n\t      } else {\n\t        if (node.R) node = node.R;\n\t        else { before = node; break; }\n\t      }\n\t    }\n\t\n\t    circles.insert(before, circle);\n\t    if (!before) firstCircle = circle;\n\t  }\n\t\n\t  function detachCircle(arc) {\n\t    var circle = arc.circle;\n\t    if (circle) {\n\t      if (!circle.P) firstCircle = circle.N;\n\t      circles.remove(circle);\n\t      circlePool.push(circle);\n\t      RedBlackNode(circle);\n\t      arc.circle = null;\n\t    }\n\t  }\n\t\n\t  var beachPool = [];\n\t\n\t  function Beach() {\n\t    RedBlackNode(this);\n\t    this.edge =\n\t    this.site =\n\t    this.circle = null;\n\t  }\n\t\n\t  function createBeach(site) {\n\t    var beach = beachPool.pop() || new Beach;\n\t    beach.site = site;\n\t    return beach;\n\t  }\n\t\n\t  function detachBeach(beach) {\n\t    detachCircle(beach);\n\t    beaches.remove(beach);\n\t    beachPool.push(beach);\n\t    RedBlackNode(beach);\n\t  }\n\t\n\t  function removeBeach(beach) {\n\t    var circle = beach.circle,\n\t        x = circle.x,\n\t        y = circle.cy,\n\t        vertex = [x, y],\n\t        previous = beach.P,\n\t        next = beach.N,\n\t        disappearing = [beach];\n\t\n\t    detachBeach(beach);\n\t\n\t    var lArc = previous;\n\t    while (lArc.circle\n\t        && Math.abs(x - lArc.circle.x) < epsilon$3\n\t        && Math.abs(y - lArc.circle.cy) < epsilon$3) {\n\t      previous = lArc.P;\n\t      disappearing.unshift(lArc);\n\t      detachBeach(lArc);\n\t      lArc = previous;\n\t    }\n\t\n\t    disappearing.unshift(lArc);\n\t    detachCircle(lArc);\n\t\n\t    var rArc = next;\n\t    while (rArc.circle\n\t        && Math.abs(x - rArc.circle.x) < epsilon$3\n\t        && Math.abs(y - rArc.circle.cy) < epsilon$3) {\n\t      next = rArc.N;\n\t      disappearing.push(rArc);\n\t      detachBeach(rArc);\n\t      rArc = next;\n\t    }\n\t\n\t    disappearing.push(rArc);\n\t    detachCircle(rArc);\n\t\n\t    var nArcs = disappearing.length,\n\t        iArc;\n\t    for (iArc = 1; iArc < nArcs; ++iArc) {\n\t      rArc = disappearing[iArc];\n\t      lArc = disappearing[iArc - 1];\n\t      setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n\t    }\n\t\n\t    lArc = disappearing[0];\n\t    rArc = disappearing[nArcs - 1];\n\t    rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\t\n\t    attachCircle(lArc);\n\t    attachCircle(rArc);\n\t  }\n\t\n\t  function addBeach(site) {\n\t    var x = site[0],\n\t        directrix = site[1],\n\t        lArc,\n\t        rArc,\n\t        dxl,\n\t        dxr,\n\t        node = beaches._;\n\t\n\t    while (node) {\n\t      dxl = leftBreakPoint(node, directrix) - x;\n\t      if (dxl > epsilon$3) node = node.L; else {\n\t        dxr = x - rightBreakPoint(node, directrix);\n\t        if (dxr > epsilon$3) {\n\t          if (!node.R) {\n\t            lArc = node;\n\t            break;\n\t          }\n\t          node = node.R;\n\t        } else {\n\t          if (dxl > -epsilon$3) {\n\t            lArc = node.P;\n\t            rArc = node;\n\t          } else if (dxr > -epsilon$3) {\n\t            lArc = node;\n\t            rArc = node.N;\n\t          } else {\n\t            lArc = rArc = node;\n\t          }\n\t          break;\n\t        }\n\t      }\n\t    }\n\t\n\t    createCell(site);\n\t    var newArc = createBeach(site);\n\t    beaches.insert(lArc, newArc);\n\t\n\t    if (!lArc && !rArc) return;\n\t\n\t    if (lArc === rArc) {\n\t      detachCircle(lArc);\n\t      rArc = createBeach(lArc.site);\n\t      beaches.insert(newArc, rArc);\n\t      newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n\t      attachCircle(lArc);\n\t      attachCircle(rArc);\n\t      return;\n\t    }\n\t\n\t    if (!rArc) { // && lArc\n\t      newArc.edge = createEdge(lArc.site, newArc.site);\n\t      return;\n\t    }\n\t\n\t    // else lArc !== rArc\n\t    detachCircle(lArc);\n\t    detachCircle(rArc);\n\t\n\t    var lSite = lArc.site,\n\t        ax = lSite[0],\n\t        ay = lSite[1],\n\t        bx = site[0] - ax,\n\t        by = site[1] - ay,\n\t        rSite = rArc.site,\n\t        cx = rSite[0] - ax,\n\t        cy = rSite[1] - ay,\n\t        d = 2 * (bx * cy - by * cx),\n\t        hb = bx * bx + by * by,\n\t        hc = cx * cx + cy * cy,\n\t        vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\t\n\t    setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n\t    newArc.edge = createEdge(lSite, site, null, vertex);\n\t    rArc.edge = createEdge(site, rSite, null, vertex);\n\t    attachCircle(lArc);\n\t    attachCircle(rArc);\n\t  }\n\t\n\t  function leftBreakPoint(arc, directrix) {\n\t    var site = arc.site,\n\t        rfocx = site[0],\n\t        rfocy = site[1],\n\t        pby2 = rfocy - directrix;\n\t\n\t    if (!pby2) return rfocx;\n\t\n\t    var lArc = arc.P;\n\t    if (!lArc) return -Infinity;\n\t\n\t    site = lArc.site;\n\t    var lfocx = site[0],\n\t        lfocy = site[1],\n\t        plby2 = lfocy - directrix;\n\t\n\t    if (!plby2) return lfocx;\n\t\n\t    var hl = lfocx - rfocx,\n\t        aby2 = 1 / pby2 - 1 / plby2,\n\t        b = hl / plby2;\n\t\n\t    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\t\n\t    return (rfocx + lfocx) / 2;\n\t  }\n\t\n\t  function rightBreakPoint(arc, directrix) {\n\t    var rArc = arc.N;\n\t    if (rArc) return leftBreakPoint(rArc, directrix);\n\t    var site = arc.site;\n\t    return site[1] === directrix ? site[0] : Infinity;\n\t  }\n\t\n\t  var epsilon$3 = 1e-6;\n\t  var epsilon2$1 = 1e-12;\n\t  var beaches;\n\t  var cells;\n\t  var circles;\n\t  var edges;\n\t\n\t  function triangleArea(a, b, c) {\n\t    return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n\t  }\n\t\n\t  function lexicographic(a, b) {\n\t    return b[1] - a[1]\n\t        || b[0] - a[0];\n\t  }\n\t\n\t  function Diagram(sites, extent) {\n\t    var site = sites.sort(lexicographic).pop(),\n\t        x,\n\t        y,\n\t        circle;\n\t\n\t    edges = [];\n\t    cells = new Array(sites.length);\n\t    beaches = new RedBlackTree;\n\t    circles = new RedBlackTree;\n\t\n\t    while (true) {\n\t      circle = firstCircle;\n\t      if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n\t        if (site[0] !== x || site[1] !== y) {\n\t          addBeach(site);\n\t          x = site[0], y = site[1];\n\t        }\n\t        site = sites.pop();\n\t      } else if (circle) {\n\t        removeBeach(circle.arc);\n\t      } else {\n\t        break;\n\t      }\n\t    }\n\t\n\t    sortCellHalfedges();\n\t\n\t    if (extent) {\n\t      var x0 = +extent[0][0],\n\t          y0 = +extent[0][1],\n\t          x1 = +extent[1][0],\n\t          y1 = +extent[1][1];\n\t      clipEdges(x0, y0, x1, y1);\n\t      clipCells(x0, y0, x1, y1);\n\t    }\n\t\n\t    this.edges = edges;\n\t    this.cells = cells;\n\t\n\t    beaches =\n\t    circles =\n\t    edges =\n\t    cells = null;\n\t  }\n\t\n\t  Diagram.prototype = {\n\t    constructor: Diagram,\n\t\n\t    polygons: function() {\n\t      var edges = this.edges;\n\t\n\t      return this.cells.map(function(cell) {\n\t        var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n\t        polygon.data = cell.site.data;\n\t        return polygon;\n\t      });\n\t    },\n\t\n\t    triangles: function() {\n\t      var triangles = [],\n\t          edges = this.edges;\n\t\n\t      this.cells.forEach(function(cell, i) {\n\t        var site = cell.site,\n\t            halfedges = cell.halfedges,\n\t            j = -1,\n\t            m = halfedges.length,\n\t            s0,\n\t            e1 = edges[halfedges[m - 1]],\n\t            s1 = e1.left === site ? e1.right : e1.left;\n\t\n\t        while (++j < m) {\n\t          s0 = s1;\n\t          e1 = edges[halfedges[j]];\n\t          s1 = e1.left === site ? e1.right : e1.left;\n\t          if (i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n\t            triangles.push([site.data, s0.data, s1.data]);\n\t          }\n\t        }\n\t      });\n\t\n\t      return triangles;\n\t    },\n\t\n\t    links: function() {\n\t      return this.edges.filter(function(edge) {\n\t        return edge.right;\n\t      }).map(function(edge) {\n\t        return {\n\t          source: edge.left.data,\n\t          target: edge.right.data\n\t        };\n\t      });\n\t    }\n\t  }\n\t\n\t  function voronoi() {\n\t    var x = x$4,\n\t        y = y$4,\n\t        extent = null;\n\t\n\t    function voronoi(data) {\n\t      return new Diagram(data.map(function(d, i) {\n\t        var s = [Math.round(x(d, i, data) / epsilon$3) * epsilon$3, Math.round(y(d, i, data) / epsilon$3) * epsilon$3];\n\t        s.index = i;\n\t        s.data = d;\n\t        return s;\n\t      }), extent);\n\t    }\n\t\n\t    voronoi.polygons = function(data) {\n\t      return voronoi(data).polygons();\n\t    };\n\t\n\t    voronoi.links = function(data) {\n\t      return voronoi(data).links();\n\t    };\n\t\n\t    voronoi.triangles = function(data) {\n\t      return voronoi(data).triangles();\n\t    };\n\t\n\t    voronoi.x = function(_) {\n\t      return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$8(+_), voronoi) : x;\n\t    };\n\t\n\t    voronoi.y = function(_) {\n\t      return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$8(+_), voronoi) : y;\n\t    };\n\t\n\t    voronoi.extent = function(_) {\n\t      return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n\t    };\n\t\n\t    voronoi.size = function(_) {\n\t      return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n\t    };\n\t\n\t    return voronoi;\n\t  }\n\t\n\t  function constant$9(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function ZoomEvent(target, type, transform) {\n\t    this.target = target;\n\t    this.type = type;\n\t    this.transform = transform;\n\t  }\n\t\n\t  function Transform(k, x, y) {\n\t    this.k = k;\n\t    this.x = x;\n\t    this.y = y;\n\t  }\n\t\n\t  Transform.prototype = {\n\t    constructor: Transform,\n\t    scale: function(k) {\n\t      return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n\t    },\n\t    translate: function(x, y) {\n\t      return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n\t    },\n\t    apply: function(point) {\n\t      return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n\t    },\n\t    applyX: function(x) {\n\t      return x * this.k + this.x;\n\t    },\n\t    applyY: function(y) {\n\t      return y * this.k + this.y;\n\t    },\n\t    invert: function(location) {\n\t      return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n\t    },\n\t    invertX: function(x) {\n\t      return (x - this.x) / this.k;\n\t    },\n\t    invertY: function(y) {\n\t      return (y - this.y) / this.k;\n\t    },\n\t    rescaleX: function(x) {\n\t      return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n\t    },\n\t    rescaleY: function(y) {\n\t      return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n\t    },\n\t    toString: function() {\n\t      return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n\t    }\n\t  };\n\t\n\t  var identity$6 = new Transform(1, 0, 0);\n\t\n\t  transform.prototype = Transform.prototype;\n\t\n\t  function transform(node) {\n\t    return node.__zoom || identity$6;\n\t  }\n\t\n\t  function nopropagation$1() {\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  function noevent$1() {\n\t    exports.event.preventDefault();\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  // Ignore right-click, since that should open the context menu.\n\t  function defaultFilter$1() {\n\t    return !exports.event.button;\n\t  }\n\t\n\t  function defaultExtent() {\n\t    var e = this, w, h;\n\t    if (e instanceof SVGElement) {\n\t      e = e.ownerSVGElement || e;\n\t      w = e.width.baseVal.value;\n\t      h = e.height.baseVal.value;\n\t    } else {\n\t      w = e.clientWidth;\n\t      h = e.clientHeight;\n\t    }\n\t    return [[0, 0], [w, h]];\n\t  }\n\t\n\t  function defaultTransform() {\n\t    return this.__zoom || identity$6;\n\t  }\n\t\n\t  function zoom() {\n\t    var filter = defaultFilter$1,\n\t        extent = defaultExtent,\n\t        k0 = 0,\n\t        k1 = Infinity,\n\t        x0 = -k1,\n\t        x1 = k1,\n\t        y0 = x0,\n\t        y1 = x1,\n\t        duration = 250,\n\t        gestures = [],\n\t        listeners = dispatch(\"start\", \"zoom\", \"end\"),\n\t        touchstarting,\n\t        touchending,\n\t        touchDelay = 500,\n\t        wheelDelay = 150;\n\t\n\t    function zoom(selection) {\n\t      selection\n\t          .on(\"wheel.zoom\", wheeled)\n\t          .on(\"mousedown.zoom\", mousedowned)\n\t          .on(\"dblclick.zoom\", dblclicked)\n\t          .on(\"touchstart.zoom\", touchstarted)\n\t          .on(\"touchmove.zoom\", touchmoved)\n\t          .on(\"touchend.zoom touchcancel.zoom\", touchended)\n\t          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n\t          .property(\"__zoom\", defaultTransform);\n\t    }\n\t\n\t    zoom.transform = function(collection, transform) {\n\t      var selection = collection.selection ? collection.selection() : collection;\n\t      selection.property(\"__zoom\", defaultTransform);\n\t      if (collection !== selection) {\n\t        schedule(collection, transform);\n\t      } else {\n\t        selection.interrupt().each(function() {\n\t          gesture(this, arguments)\n\t              .start()\n\t              .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n\t              .end();\n\t        });\n\t      }\n\t    };\n\t\n\t    zoom.scaleBy = function(selection, k) {\n\t      zoom.scaleTo(selection, function() {\n\t        var k0 = this.__zoom.k,\n\t            k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n\t        return k0 * k1;\n\t      });\n\t    };\n\t\n\t    zoom.scaleTo = function(selection, k) {\n\t      zoom.transform(selection, function() {\n\t        var e = extent.apply(this, arguments),\n\t            t0 = this.__zoom,\n\t            p0 = centroid(e),\n\t            p1 = t0.invert(p0),\n\t            k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n\t        return constrain(translate(scale(t0, k1), p0, p1), e);\n\t      });\n\t    };\n\t\n\t    zoom.translateBy = function(selection, x, y) {\n\t      zoom.transform(selection, function() {\n\t        return constrain(this.__zoom.translate(\n\t          typeof x === \"function\" ? x.apply(this, arguments) : x,\n\t          typeof y === \"function\" ? y.apply(this, arguments) : y\n\t        ), extent.apply(this, arguments));\n\t      });\n\t    };\n\t\n\t    function scale(transform, k) {\n\t      k = Math.max(k0, Math.min(k1, k));\n\t      return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n\t    }\n\t\n\t    function translate(transform, p0, p1) {\n\t      var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n\t      return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n\t    }\n\t\n\t    function constrain(transform, extent) {\n\t      var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),\n\t          dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);\n\t      return dx || dy ? transform.translate(dx, dy) : transform;\n\t    }\n\t\n\t    function centroid(extent) {\n\t      return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n\t    }\n\t\n\t    function schedule(transition, transform, center) {\n\t      transition\n\t          .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n\t          .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n\t          .tween(\"zoom\", function() {\n\t            var that = this,\n\t                args = arguments,\n\t                g = gesture(that, args),\n\t                e = extent.apply(that, args),\n\t                p = center || centroid(e),\n\t                w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n\t                a = that.__zoom,\n\t                b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n\t                i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n\t            return function(t) {\n\t              if (t === 1) t = b; // Avoid rounding error on end.\n\t              else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n\t              g.zoom(null, t);\n\t            };\n\t          });\n\t    }\n\t\n\t    function gesture(that, args) {\n\t      for (var i = 0, n = gestures.length, g; i < n; ++i) {\n\t        if ((g = gestures[i]).that === that) {\n\t          return g;\n\t        }\n\t      }\n\t      return new Gesture(that, args);\n\t    }\n\t\n\t    function Gesture(that, args) {\n\t      this.that = that;\n\t      this.args = args;\n\t      this.index = -1;\n\t      this.active = 0;\n\t      this.extent = extent.apply(that, args);\n\t    }\n\t\n\t    Gesture.prototype = {\n\t      start: function() {\n\t        if (++this.active === 1) {\n\t          this.index = gestures.push(this) - 1;\n\t          this.emit(\"start\");\n\t        }\n\t        return this;\n\t      },\n\t      zoom: function(key, transform) {\n\t        if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n\t        if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n\t        if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n\t        this.that.__zoom = transform;\n\t        this.emit(\"zoom\");\n\t        return this;\n\t      },\n\t      end: function() {\n\t        if (--this.active === 0) {\n\t          gestures.splice(this.index, 1);\n\t          this.index = -1;\n\t          this.emit(\"end\");\n\t        }\n\t        return this;\n\t      },\n\t      emit: function(type) {\n\t        customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n\t      }\n\t    };\n\t\n\t    function wheeled() {\n\t      if (!filter.apply(this, arguments)) return;\n\t      var g = gesture(this, arguments),\n\t          t = this.__zoom,\n\t          k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),\n\t          p = mouse(this);\n\t\n\t      // If the mouse is in the same location as before, reuse it.\n\t      // If there were recent wheel events, reset the wheel idle timeout.\n\t      if (g.wheel) {\n\t        if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n\t          g.mouse[1] = t.invert(g.mouse[0] = p);\n\t        }\n\t        clearTimeout(g.wheel);\n\t      }\n\t\n\t      // If this wheel event won’t trigger a transform change, ignore it.\n\t      else if (t.k === k) return;\n\t\n\t      // Otherwise, capture the mouse point and location at the start.\n\t      else {\n\t        g.mouse = [p, t.invert(p)];\n\t        interrupt(this);\n\t        g.start();\n\t      }\n\t\n\t      noevent$1();\n\t      g.wheel = setTimeout(wheelidled, wheelDelay);\n\t      g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));\n\t\n\t      function wheelidled() {\n\t        g.wheel = null;\n\t        g.end();\n\t      }\n\t    }\n\t\n\t    function mousedowned() {\n\t      if (touchending || !filter.apply(this, arguments)) return;\n\t      var g = gesture(this, arguments),\n\t          v = select(exports.event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n\t          p = mouse(this);\n\t\n\t      dragDisable(exports.event.view);\n\t      nopropagation$1();\n\t      g.mouse = [p, this.__zoom.invert(p)];\n\t      interrupt(this);\n\t      g.start();\n\t\n\t      function mousemoved() {\n\t        noevent$1();\n\t        g.moved = true;\n\t        g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));\n\t      }\n\t\n\t      function mouseupped() {\n\t        v.on(\"mousemove.zoom mouseup.zoom\", null);\n\t        dragEnable(exports.event.view, g.moved);\n\t        noevent$1();\n\t        g.end();\n\t      }\n\t    }\n\t\n\t    function dblclicked() {\n\t      if (!filter.apply(this, arguments)) return;\n\t      var t0 = this.__zoom,\n\t          p0 = mouse(this),\n\t          p1 = t0.invert(p0),\n\t          k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),\n\t          t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));\n\t\n\t      noevent$1();\n\t      if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n\t      else select(this).call(zoom.transform, t1);\n\t    }\n\t\n\t    function touchstarted() {\n\t      if (!filter.apply(this, arguments)) return;\n\t      var g = gesture(this, arguments),\n\t          touches = exports.event.changedTouches,\n\t          n = touches.length, i, t, p;\n\t\n\t      nopropagation$1();\n\t      for (i = 0; i < n; ++i) {\n\t        t = touches[i], p = touch(this, touches, t.identifier);\n\t        p = [p, this.__zoom.invert(p), t.identifier];\n\t        if (!g.touch0) g.touch0 = p;\n\t        else if (!g.touch1) g.touch1 = p;\n\t      }\n\t      if (touchstarting) {\n\t        touchstarting = clearTimeout(touchstarting);\n\t        if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);\n\t      }\n\t      if (exports.event.touches.length === n) {\n\t        touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n\t        interrupt(this);\n\t        g.start();\n\t      }\n\t    }\n\t\n\t    function touchmoved() {\n\t      var g = gesture(this, arguments),\n\t          touches = exports.event.changedTouches,\n\t          n = touches.length, i, t, p, l;\n\t\n\t      noevent$1();\n\t      if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\t      for (i = 0; i < n; ++i) {\n\t        t = touches[i], p = touch(this, touches, t.identifier);\n\t        if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n\t        else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n\t      }\n\t      t = g.that.__zoom;\n\t      if (g.touch1) {\n\t        var p0 = g.touch0[0], l0 = g.touch0[1],\n\t            p1 = g.touch1[0], l1 = g.touch1[1],\n\t            dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n\t            dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n\t        t = scale(t, Math.sqrt(dp / dl));\n\t        p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n\t        l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n\t      }\n\t      else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n\t      else return;\n\t      g.zoom(\"touch\", constrain(translate(t, p, l), g.extent));\n\t    }\n\t\n\t    function touchended() {\n\t      var g = gesture(this, arguments),\n\t          touches = exports.event.changedTouches,\n\t          n = touches.length, i, t;\n\t\n\t      nopropagation$1();\n\t      if (touchending) clearTimeout(touchending);\n\t      touchending = setTimeout(function() { touchending = null; }, touchDelay);\n\t      for (i = 0; i < n; ++i) {\n\t        t = touches[i];\n\t        if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n\t        else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n\t      }\n\t      if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n\t      if (!g.touch0) g.end();\n\t    }\n\t\n\t    zoom.filter = function(_) {\n\t      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$9(!!_), zoom) : filter;\n\t    };\n\t\n\t    zoom.extent = function(_) {\n\t      return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$9([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n\t    };\n\t\n\t    zoom.scaleExtent = function(_) {\n\t      return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];\n\t    };\n\t\n\t    zoom.translateExtent = function(_) {\n\t      return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];\n\t    };\n\t\n\t    zoom.duration = function(_) {\n\t      return arguments.length ? (duration = +_, zoom) : duration;\n\t    };\n\t\n\t    zoom.on = function() {\n\t      var value = listeners.on.apply(listeners, arguments);\n\t      return value === listeners ? zoom : value;\n\t    };\n\t\n\t    return zoom;\n\t  }\n\t\n\t  function constant$10(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function BrushEvent(target, type, selection) {\n\t    this.target = target;\n\t    this.type = type;\n\t    this.selection = selection;\n\t  }\n\t\n\t  function nopropagation$2() {\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  function noevent$2() {\n\t    exports.event.preventDefault();\n\t    exports.event.stopImmediatePropagation();\n\t  }\n\t\n\t  var MODE_DRAG = {name: \"drag\"};\n\t  var MODE_SPACE = {name: \"space\"};\n\t  var MODE_HANDLE = {name: \"handle\"};\n\t  var MODE_CENTER = {name: \"center\"};\n\t  var X = {\n\t    name: \"x\",\n\t    handles: [\"e\", \"w\"].map(type$1),\n\t    input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n\t    output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n\t  };\n\t\n\t  var Y = {\n\t    name: \"y\",\n\t    handles: [\"n\", \"s\"].map(type$1),\n\t    input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n\t    output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n\t  };\n\t\n\t  var XY = {\n\t    name: \"xy\",\n\t    handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type$1),\n\t    input: function(xy) { return xy; },\n\t    output: function(xy) { return xy; }\n\t  };\n\t\n\t  var cursors = {\n\t    overlay: \"crosshair\",\n\t    selection: \"move\",\n\t    n: \"ns-resize\",\n\t    e: \"ew-resize\",\n\t    s: \"ns-resize\",\n\t    w: \"ew-resize\",\n\t    nw: \"nwse-resize\",\n\t    ne: \"nesw-resize\",\n\t    se: \"nwse-resize\",\n\t    sw: \"nesw-resize\"\n\t  };\n\t\n\t  var flipX = {\n\t    e: \"w\",\n\t    w: \"e\",\n\t    nw: \"ne\",\n\t    ne: \"nw\",\n\t    se: \"sw\",\n\t    sw: \"se\"\n\t  };\n\t\n\t  var flipY = {\n\t    n: \"s\",\n\t    s: \"n\",\n\t    nw: \"sw\",\n\t    ne: \"se\",\n\t    se: \"ne\",\n\t    sw: \"nw\"\n\t  };\n\t\n\t  var signsX = {\n\t    overlay: +1,\n\t    selection: +1,\n\t    n: null,\n\t    e: +1,\n\t    s: null,\n\t    w: -1,\n\t    nw: -1,\n\t    ne: +1,\n\t    se: +1,\n\t    sw: -1\n\t  };\n\t\n\t  var signsY = {\n\t    overlay: +1,\n\t    selection: +1,\n\t    n: -1,\n\t    e: null,\n\t    s: +1,\n\t    w: null,\n\t    nw: -1,\n\t    ne: -1,\n\t    se: +1,\n\t    sw: +1\n\t  };\n\t\n\t  function type$1(t) {\n\t    return {type: t};\n\t  }\n\t\n\t  // Ignore right-click, since that should open the context menu.\n\t  function defaultFilter$2() {\n\t    return !exports.event.button;\n\t  }\n\t\n\t  function defaultExtent$1() {\n\t    var svg = this.ownerSVGElement || this;\n\t    return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n\t  }\n\t\n\t  // Like d3.local, but with the name “__brush” rather than auto-generated.\n\t  function local$1(node) {\n\t    while (!node.__brush) if (!(node = node.parentNode)) return;\n\t    return node.__brush;\n\t  }\n\t\n\t  function empty$1(extent) {\n\t    return extent[0][0] === extent[1][0]\n\t        || extent[0][1] === extent[1][1];\n\t  }\n\t\n\t  function brushSelection(node) {\n\t    var state = node.__brush;\n\t    return state ? state.dim.output(state.selection) : null;\n\t  }\n\t\n\t  function brushX() {\n\t    return brush$1(X);\n\t  }\n\t\n\t  function brushY() {\n\t    return brush$1(Y);\n\t  }\n\t\n\t  function brush() {\n\t    return brush$1(XY);\n\t  }\n\t\n\t  function brush$1(dim) {\n\t    var extent = defaultExtent$1,\n\t        filter = defaultFilter$2,\n\t        listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n\t        handleSize = 6,\n\t        touchending;\n\t\n\t    function brush(group) {\n\t      var overlay = group\n\t          .property(\"__brush\", initialize)\n\t        .selectAll(\".overlay\")\n\t        .data([type$1(\"overlay\")]);\n\t\n\t      overlay.enter().append(\"rect\")\n\t          .attr(\"class\", \"overlay\")\n\t          .attr(\"pointer-events\", \"all\")\n\t          .attr(\"cursor\", cursors.overlay)\n\t        .merge(overlay)\n\t          .each(function() {\n\t            var extent = local$1(this).extent;\n\t            select(this)\n\t                .attr(\"x\", extent[0][0])\n\t                .attr(\"y\", extent[0][1])\n\t                .attr(\"width\", extent[1][0] - extent[0][0])\n\t                .attr(\"height\", extent[1][1] - extent[0][1]);\n\t          });\n\t\n\t      group.selectAll(\".selection\")\n\t        .data([type$1(\"selection\")])\n\t        .enter().append(\"rect\")\n\t          .attr(\"class\", \"selection\")\n\t          .attr(\"cursor\", cursors.selection)\n\t          .attr(\"fill\", \"#777\")\n\t          .attr(\"fill-opacity\", 0.3)\n\t          .attr(\"stroke\", \"#fff\")\n\t          .attr(\"shape-rendering\", \"crispEdges\");\n\t\n\t      var handle = group.selectAll(\".handle\")\n\t        .data(dim.handles, function(d) { return d.type; });\n\t\n\t      handle.exit().remove();\n\t\n\t      handle.enter().append(\"rect\")\n\t          .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n\t          .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\t\n\t      group\n\t          .each(redraw)\n\t          .attr(\"fill\", \"none\")\n\t          .attr(\"pointer-events\", \"all\")\n\t          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n\t          .on(\"mousedown.brush touchstart.brush\", started);\n\t    }\n\t\n\t    brush.move = function(group, selection) {\n\t      if (group.selection) {\n\t        group\n\t            .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n\t            .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n\t            .tween(\"brush\", function() {\n\t              var that = this,\n\t                  state = that.__brush,\n\t                  emit = emitter(that, arguments),\n\t                  selection0 = state.selection,\n\t                  selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n\t                  i = interpolate(selection0, selection1);\n\t\n\t              function tween(t) {\n\t                state.selection = t === 1 && empty$1(selection1) ? null : i(t);\n\t                redraw.call(that);\n\t                emit.brush();\n\t              }\n\t\n\t              return selection0 && selection1 ? tween : tween(1);\n\t            });\n\t      } else {\n\t        group\n\t            .each(function() {\n\t              var that = this,\n\t                  args = arguments,\n\t                  state = that.__brush,\n\t                  selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n\t                  emit = emitter(that, args).beforestart();\n\t\n\t              interrupt(that);\n\t              state.selection = selection1 == null || empty$1(selection1) ? null : selection1;\n\t              redraw.call(that);\n\t              emit.start().brush().end();\n\t            });\n\t      }\n\t    };\n\t\n\t    function redraw() {\n\t      var group = select(this),\n\t          selection = local$1(this).selection;\n\t\n\t      if (selection) {\n\t        group.selectAll(\".selection\")\n\t            .style(\"display\", null)\n\t            .attr(\"x\", selection[0][0])\n\t            .attr(\"y\", selection[0][1])\n\t            .attr(\"width\", selection[1][0] - selection[0][0])\n\t            .attr(\"height\", selection[1][1] - selection[0][1]);\n\t\n\t        group.selectAll(\".handle\")\n\t            .style(\"display\", null)\n\t            .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n\t            .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n\t            .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n\t            .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n\t      }\n\t\n\t      else {\n\t        group.selectAll(\".selection,.handle\")\n\t            .style(\"display\", \"none\")\n\t            .attr(\"x\", null)\n\t            .attr(\"y\", null)\n\t            .attr(\"width\", null)\n\t            .attr(\"height\", null);\n\t      }\n\t    }\n\t\n\t    function emitter(that, args) {\n\t      return that.__brush.emitter || new Emitter(that, args);\n\t    }\n\t\n\t    function Emitter(that, args) {\n\t      this.that = that;\n\t      this.args = args;\n\t      this.state = that.__brush;\n\t      this.active = 0;\n\t    }\n\t\n\t    Emitter.prototype = {\n\t      beforestart: function() {\n\t        if (++this.active === 1) this.state.emitter = this, this.starting = true;\n\t        return this;\n\t      },\n\t      start: function() {\n\t        if (this.starting) this.starting = false, this.emit(\"start\");\n\t        return this;\n\t      },\n\t      brush: function() {\n\t        this.emit(\"brush\");\n\t        return this;\n\t      },\n\t      end: function() {\n\t        if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n\t        return this;\n\t      },\n\t      emit: function(type) {\n\t        customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n\t      }\n\t    };\n\t\n\t    function started() {\n\t      if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }\n\t      else if (touchending) return;\n\t      if (!filter.apply(this, arguments)) return;\n\t\n\t      var that = this,\n\t          type = exports.event.target.__data__.type,\n\t          mode = (exports.event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),\n\t          signX = dim === Y ? null : signsX[type],\n\t          signY = dim === X ? null : signsY[type],\n\t          state = local$1(that),\n\t          extent = state.extent,\n\t          selection = state.selection,\n\t          W = extent[0][0], w0, w1,\n\t          N = extent[0][1], n0, n1,\n\t          E = extent[1][0], e0, e1,\n\t          S = extent[1][1], s0, s1,\n\t          dx,\n\t          dy,\n\t          moving,\n\t          shifting = signX && signY && exports.event.shiftKey,\n\t          lockX,\n\t          lockY,\n\t          point0 = mouse(that),\n\t          point = point0,\n\t          emit = emitter(that, arguments).beforestart();\n\t\n\t      if (type === \"overlay\") {\n\t        state.selection = selection = [\n\t          [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n\t          [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n\t        ];\n\t      } else {\n\t        w0 = selection[0][0];\n\t        n0 = selection[0][1];\n\t        e0 = selection[1][0];\n\t        s0 = selection[1][1];\n\t      }\n\t\n\t      w1 = w0;\n\t      n1 = n0;\n\t      e1 = e0;\n\t      s1 = s0;\n\t\n\t      var group = select(that)\n\t          .attr(\"pointer-events\", \"none\");\n\t\n\t      var overlay = group.selectAll(\".overlay\")\n\t          .attr(\"cursor\", cursors[type]);\n\t\n\t      if (exports.event.touches) {\n\t        group\n\t            .on(\"touchmove.brush\", moved, true)\n\t            .on(\"touchend.brush touchcancel.brush\", ended, true);\n\t      } else {\n\t        var view = select(exports.event.view)\n\t            .on(\"keydown.brush\", keydowned, true)\n\t            .on(\"keyup.brush\", keyupped, true)\n\t            .on(\"mousemove.brush\", moved, true)\n\t            .on(\"mouseup.brush\", ended, true);\n\t\n\t        dragDisable(exports.event.view);\n\t      }\n\t\n\t      nopropagation$2();\n\t      interrupt(that);\n\t      redraw.call(that);\n\t      emit.start();\n\t\n\t      function moved() {\n\t        var point1 = mouse(that);\n\t        if (shifting && !lockX && !lockY) {\n\t          if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n\t          else lockX = true;\n\t        }\n\t        point = point1;\n\t        moving = true;\n\t        noevent$2();\n\t        move();\n\t      }\n\t\n\t      function move() {\n\t        var t;\n\t\n\t        dx = point[0] - point0[0];\n\t        dy = point[1] - point0[1];\n\t\n\t        switch (mode) {\n\t          case MODE_SPACE:\n\t          case MODE_DRAG: {\n\t            if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n\t            if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n\t            break;\n\t          }\n\t          case MODE_HANDLE: {\n\t            if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n\t            else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n\t            if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n\t            else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n\t            break;\n\t          }\n\t          case MODE_CENTER: {\n\t            if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n\t            if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n\t            break;\n\t          }\n\t        }\n\t\n\t        if (e1 < w1) {\n\t          signX *= -1;\n\t          t = w0, w0 = e0, e0 = t;\n\t          t = w1, w1 = e1, e1 = t;\n\t          if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n\t        }\n\t\n\t        if (s1 < n1) {\n\t          signY *= -1;\n\t          t = n0, n0 = s0, s0 = t;\n\t          t = n1, n1 = s1, s1 = t;\n\t          if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n\t        }\n\t\n\t        selection = state.selection; // May be set by brush.move!\n\t\n\t        if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n\t        if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\t\n\t        if (selection[0][0] !== w1\n\t            || selection[0][1] !== n1\n\t            || selection[1][0] !== e1\n\t            || selection[1][1] !== s1) {\n\t          state.selection = [[w1, n1], [e1, s1]];\n\t          redraw.call(that);\n\t          emit.brush();\n\t        }\n\t      }\n\t\n\t      function ended() {\n\t        nopropagation$2();\n\t        if (exports.event.touches) {\n\t          if (exports.event.touches.length) return;\n\t          if (touchending) clearTimeout(touchending);\n\t          touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n\t          group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n\t        } else {\n\t          dragEnable(exports.event.view, moving);\n\t          view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n\t        }\n\t        group.attr(\"pointer-events\", \"all\");\n\t        overlay.attr(\"cursor\", cursors.overlay);\n\t        if (empty$1(selection)) state.selection = null, redraw.call(that);\n\t        emit.end();\n\t      }\n\t\n\t      function keydowned() {\n\t        switch (exports.event.keyCode) {\n\t          case 16: { // SHIFT\n\t            shifting = signX && signY;\n\t            break;\n\t          }\n\t          case 18: { // ALT\n\t            if (mode === MODE_HANDLE) {\n\t              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n\t              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n\t              mode = MODE_CENTER;\n\t              move();\n\t            }\n\t            break;\n\t          }\n\t          case 32: { // SPACE; takes priority over ALT\n\t            if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n\t              if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n\t              if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n\t              mode = MODE_SPACE;\n\t              overlay.attr(\"cursor\", cursors.selection);\n\t              move();\n\t            }\n\t            break;\n\t          }\n\t          default: return;\n\t        }\n\t        noevent$2();\n\t      }\n\t\n\t      function keyupped() {\n\t        switch (exports.event.keyCode) {\n\t          case 16: { // SHIFT\n\t            if (shifting) {\n\t              lockX = lockY = shifting = false;\n\t              move();\n\t            }\n\t            break;\n\t          }\n\t          case 18: { // ALT\n\t            if (mode === MODE_CENTER) {\n\t              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n\t              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n\t              mode = MODE_HANDLE;\n\t              move();\n\t            }\n\t            break;\n\t          }\n\t          case 32: { // SPACE\n\t            if (mode === MODE_SPACE) {\n\t              if (exports.event.altKey) {\n\t                if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n\t                if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n\t                mode = MODE_CENTER;\n\t              } else {\n\t                if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n\t                if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n\t                mode = MODE_HANDLE;\n\t              }\n\t              overlay.attr(\"cursor\", cursors[type]);\n\t              move();\n\t            }\n\t            break;\n\t          }\n\t          default: return;\n\t        }\n\t        noevent$2();\n\t      }\n\t    }\n\t\n\t    function initialize() {\n\t      var state = this.__brush || {selection: null};\n\t      state.extent = extent.apply(this, arguments);\n\t      state.dim = dim;\n\t      return state;\n\t    }\n\t\n\t    brush.extent = function(_) {\n\t      return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n\t    };\n\t\n\t    brush.filter = function(_) {\n\t      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$10(!!_), brush) : filter;\n\t    };\n\t\n\t    brush.handleSize = function(_) {\n\t      return arguments.length ? (handleSize = +_, brush) : handleSize;\n\t    };\n\t\n\t    brush.on = function() {\n\t      var value = listeners.on.apply(listeners, arguments);\n\t      return value === listeners ? brush : value;\n\t    };\n\t\n\t    return brush;\n\t  }\n\t\n\t  var cos = Math.cos;\n\t  var sin = Math.sin;\n\t  var pi$3 = Math.PI;\n\t  var halfPi$2 = pi$3 / 2;\n\t  var tau$3 = pi$3 * 2;\n\t  var max$1 = Math.max;\n\t\n\t  function compareValue(compare) {\n\t    return function(a, b) {\n\t      return compare(\n\t        a.source.value + a.target.value,\n\t        b.source.value + b.target.value\n\t      );\n\t    };\n\t  }\n\t\n\t  function chord() {\n\t    var padAngle = 0,\n\t        sortGroups = null,\n\t        sortSubgroups = null,\n\t        sortChords = null;\n\t\n\t    function chord(matrix) {\n\t      var n = matrix.length,\n\t          groupSums = [],\n\t          groupIndex = range(n),\n\t          subgroupIndex = [],\n\t          chords = [],\n\t          groups = chords.groups = new Array(n),\n\t          subgroups = new Array(n * n),\n\t          k,\n\t          x,\n\t          x0,\n\t          dx,\n\t          i,\n\t          j;\n\t\n\t      // Compute the sum.\n\t      k = 0, i = -1; while (++i < n) {\n\t        x = 0, j = -1; while (++j < n) {\n\t          x += matrix[i][j];\n\t        }\n\t        groupSums.push(x);\n\t        subgroupIndex.push(range(n));\n\t        k += x;\n\t      }\n\t\n\t      // Sort groups…\n\t      if (sortGroups) groupIndex.sort(function(a, b) {\n\t        return sortGroups(groupSums[a], groupSums[b]);\n\t      });\n\t\n\t      // Sort subgroups…\n\t      if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n\t        d.sort(function(a, b) {\n\t          return sortSubgroups(matrix[i][a], matrix[i][b]);\n\t        });\n\t      });\n\t\n\t      // Convert the sum to scaling factor for [0, 2pi].\n\t      // TODO Allow start and end angle to be specified?\n\t      // TODO Allow padding to be specified as percentage?\n\t      k = max$1(0, tau$3 - padAngle * n) / k;\n\t      dx = k ? padAngle : tau$3 / n;\n\t\n\t      // Compute the start and end angle for each group and subgroup.\n\t      // Note: Opera has a bug reordering object literal properties!\n\t      x = 0, i = -1; while (++i < n) {\n\t        x0 = x, j = -1; while (++j < n) {\n\t          var di = groupIndex[i],\n\t              dj = subgroupIndex[di][j],\n\t              v = matrix[di][dj],\n\t              a0 = x,\n\t              a1 = x += v * k;\n\t          subgroups[dj * n + di] = {\n\t            index: di,\n\t            subindex: dj,\n\t            startAngle: a0,\n\t            endAngle: a1,\n\t            value: v\n\t          };\n\t        }\n\t        groups[di] = {\n\t          index: di,\n\t          startAngle: x0,\n\t          endAngle: x,\n\t          value: groupSums[di]\n\t        };\n\t        x += dx;\n\t      }\n\t\n\t      // Generate chords for each (non-empty) subgroup-subgroup link.\n\t      i = -1; while (++i < n) {\n\t        j = i - 1; while (++j < n) {\n\t          var source = subgroups[j * n + i],\n\t              target = subgroups[i * n + j];\n\t          if (source.value || target.value) {\n\t            chords.push(source.value < target.value\n\t                ? {source: target, target: source}\n\t                : {source: source, target: target});\n\t          }\n\t        }\n\t      }\n\t\n\t      return sortChords ? chords.sort(sortChords) : chords;\n\t    }\n\t\n\t    chord.padAngle = function(_) {\n\t      return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;\n\t    };\n\t\n\t    chord.sortGroups = function(_) {\n\t      return arguments.length ? (sortGroups = _, chord) : sortGroups;\n\t    };\n\t\n\t    chord.sortSubgroups = function(_) {\n\t      return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n\t    };\n\t\n\t    chord.sortChords = function(_) {\n\t      return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n\t    };\n\t\n\t    return chord;\n\t  }\n\t\n\t  var slice$5 = Array.prototype.slice;\n\t\n\t  function constant$11(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function defaultSource(d) {\n\t    return d.source;\n\t  }\n\t\n\t  function defaultTarget(d) {\n\t    return d.target;\n\t  }\n\t\n\t  function defaultRadius$1(d) {\n\t    return d.radius;\n\t  }\n\t\n\t  function defaultStartAngle(d) {\n\t    return d.startAngle;\n\t  }\n\t\n\t  function defaultEndAngle(d) {\n\t    return d.endAngle;\n\t  }\n\t\n\t  function ribbon() {\n\t    var source = defaultSource,\n\t        target = defaultTarget,\n\t        radius = defaultRadius$1,\n\t        startAngle = defaultStartAngle,\n\t        endAngle = defaultEndAngle,\n\t        context = null;\n\t\n\t    function ribbon() {\n\t      var buffer,\n\t          argv = slice$5.call(arguments),\n\t          s = source.apply(this, argv),\n\t          t = target.apply(this, argv),\n\t          sr = +radius.apply(this, (argv[0] = s, argv)),\n\t          sa0 = startAngle.apply(this, argv) - halfPi$2,\n\t          sa1 = endAngle.apply(this, argv) - halfPi$2,\n\t          sx0 = sr * cos(sa0),\n\t          sy0 = sr * sin(sa0),\n\t          tr = +radius.apply(this, (argv[0] = t, argv)),\n\t          ta0 = startAngle.apply(this, argv) - halfPi$2,\n\t          ta1 = endAngle.apply(this, argv) - halfPi$2;\n\t\n\t      if (!context) context = buffer = path();\n\t\n\t      context.moveTo(sx0, sy0);\n\t      context.arc(0, 0, sr, sa0, sa1);\n\t      if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n\t        context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n\t        context.arc(0, 0, tr, ta0, ta1);\n\t      }\n\t      context.quadraticCurveTo(0, 0, sx0, sy0);\n\t      context.closePath();\n\t\n\t      if (buffer) return context = null, buffer + \"\" || null;\n\t    }\n\t\n\t    ribbon.radius = function(_) {\n\t      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : radius;\n\t    };\n\t\n\t    ribbon.startAngle = function(_) {\n\t      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : startAngle;\n\t    };\n\t\n\t    ribbon.endAngle = function(_) {\n\t      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : endAngle;\n\t    };\n\t\n\t    ribbon.source = function(_) {\n\t      return arguments.length ? (source = _, ribbon) : source;\n\t    };\n\t\n\t    ribbon.target = function(_) {\n\t      return arguments.length ? (target = _, ribbon) : target;\n\t    };\n\t\n\t    ribbon.context = function(_) {\n\t      return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n\t    };\n\t\n\t    return ribbon;\n\t  }\n\t\n\t  // Adds floating point numbers with twice the normal precision.\n\t  // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n\t  // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n\t  // 305–363 (1997).\n\t  // Code adapted from GeographicLib by Charles F. F. Karney,\n\t  // http://geographiclib.sourceforge.net/\n\t\n\t  function adder() {\n\t    return new Adder;\n\t  }\n\t\n\t  function Adder() {\n\t    this.reset();\n\t  }\n\t\n\t  Adder.prototype = {\n\t    constructor: Adder,\n\t    reset: function() {\n\t      this.s = // rounded value\n\t      this.t = 0; // exact error\n\t    },\n\t    add: function(y) {\n\t      add$1(temp, y, this.t);\n\t      add$1(this, temp.s, this.s);\n\t      if (this.s) this.t += temp.t;\n\t      else this.s = temp.t;\n\t    },\n\t    valueOf: function() {\n\t      return this.s;\n\t    }\n\t  };\n\t\n\t  var temp = new Adder;\n\t\n\t  function add$1(adder, a, b) {\n\t    var x = adder.s = a + b,\n\t        bv = x - a,\n\t        av = x - bv;\n\t    adder.t = (a - av) + (b - bv);\n\t  }\n\t\n\t  var epsilon$4 = 1e-6;\n\t  var epsilon2$2 = 1e-12;\n\t  var pi$4 = Math.PI;\n\t  var halfPi$3 = pi$4 / 2;\n\t  var quarterPi = pi$4 / 4;\n\t  var tau$4 = pi$4 * 2;\n\t\n\t  var degrees$1 = 180 / pi$4;\n\t  var radians = pi$4 / 180;\n\t\n\t  var abs = Math.abs;\n\t  var atan = Math.atan;\n\t  var atan2 = Math.atan2;\n\t  var cos$1 = Math.cos;\n\t  var ceil = Math.ceil;\n\t  var exp = Math.exp;\n\t  var log$1 = Math.log;\n\t  var pow$1 = Math.pow;\n\t  var sin$1 = Math.sin;\n\t  var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\n\t  var sqrt$1 = Math.sqrt;\n\t  var tan = Math.tan;\n\t\n\t  function acos(x) {\n\t    return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);\n\t  }\n\t\n\t  function asin$1(x) {\n\t    return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);\n\t  }\n\t\n\t  function haversin(x) {\n\t    return (x = sin$1(x / 2)) * x;\n\t  }\n\t\n\t  function noop$2() {}\n\t\n\t  function streamGeometry(geometry, stream) {\n\t    if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n\t      streamGeometryType[geometry.type](geometry, stream);\n\t    }\n\t  }\n\t\n\t  var streamObjectType = {\n\t    Feature: function(feature, stream) {\n\t      streamGeometry(feature.geometry, stream);\n\t    },\n\t    FeatureCollection: function(object, stream) {\n\t      var features = object.features, i = -1, n = features.length;\n\t      while (++i < n) streamGeometry(features[i].geometry, stream);\n\t    }\n\t  };\n\t\n\t  var streamGeometryType = {\n\t    Sphere: function(object, stream) {\n\t      stream.sphere();\n\t    },\n\t    Point: function(object, stream) {\n\t      object = object.coordinates;\n\t      stream.point(object[0], object[1], object[2]);\n\t    },\n\t    MultiPoint: function(object, stream) {\n\t      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n\t      while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n\t    },\n\t    LineString: function(object, stream) {\n\t      streamLine(object.coordinates, stream, 0);\n\t    },\n\t    MultiLineString: function(object, stream) {\n\t      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n\t      while (++i < n) streamLine(coordinates[i], stream, 0);\n\t    },\n\t    Polygon: function(object, stream) {\n\t      streamPolygon(object.coordinates, stream);\n\t    },\n\t    MultiPolygon: function(object, stream) {\n\t      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n\t      while (++i < n) streamPolygon(coordinates[i], stream);\n\t    },\n\t    GeometryCollection: function(object, stream) {\n\t      var geometries = object.geometries, i = -1, n = geometries.length;\n\t      while (++i < n) streamGeometry(geometries[i], stream);\n\t    }\n\t  };\n\t\n\t  function streamLine(coordinates, stream, closed) {\n\t    var i = -1, n = coordinates.length - closed, coordinate;\n\t    stream.lineStart();\n\t    while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n\t    stream.lineEnd();\n\t  }\n\t\n\t  function streamPolygon(coordinates, stream) {\n\t    var i = -1, n = coordinates.length;\n\t    stream.polygonStart();\n\t    while (++i < n) streamLine(coordinates[i], stream, 1);\n\t    stream.polygonEnd();\n\t  }\n\t\n\t  function geoStream(object, stream) {\n\t    if (object && streamObjectType.hasOwnProperty(object.type)) {\n\t      streamObjectType[object.type](object, stream);\n\t    } else {\n\t      streamGeometry(object, stream);\n\t    }\n\t  }\n\t\n\t  var areaRingSum = adder();\n\t\n\t  var areaSum = adder();\n\t  var lambda00;\n\t  var phi00;\n\t  var lambda0;\n\t  var cosPhi0;\n\t  var sinPhi0;\n\t  var areaStream = {\n\t    point: noop$2,\n\t    lineStart: noop$2,\n\t    lineEnd: noop$2,\n\t    polygonStart: function() {\n\t      areaRingSum.reset();\n\t      areaStream.lineStart = areaRingStart;\n\t      areaStream.lineEnd = areaRingEnd;\n\t    },\n\t    polygonEnd: function() {\n\t      var areaRing = +areaRingSum;\n\t      areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);\n\t      this.lineStart = this.lineEnd = this.point = noop$2;\n\t    },\n\t    sphere: function() {\n\t      areaSum.add(tau$4);\n\t    }\n\t  };\n\t\n\t  function areaRingStart() {\n\t    areaStream.point = areaPointFirst;\n\t  }\n\t\n\t  function areaRingEnd() {\n\t    areaPoint(lambda00, phi00);\n\t  }\n\t\n\t  function areaPointFirst(lambda, phi) {\n\t    areaStream.point = areaPoint;\n\t    lambda00 = lambda, phi00 = phi;\n\t    lambda *= radians, phi *= radians;\n\t    lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);\n\t  }\n\t\n\t  function areaPoint(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\t\n\t    // Spherical excess E for a spherical triangle with vertices: south pole,\n\t    // previous point, current point.  Uses a formula derived from Cagnoli’s\n\t    // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n\t    var dLambda = lambda - lambda0,\n\t        sdLambda = dLambda >= 0 ? 1 : -1,\n\t        adLambda = sdLambda * dLambda,\n\t        cosPhi = cos$1(phi),\n\t        sinPhi = sin$1(phi),\n\t        k = sinPhi0 * sinPhi,\n\t        u = cosPhi0 * cosPhi + k * cos$1(adLambda),\n\t        v = k * sdLambda * sin$1(adLambda);\n\t    areaRingSum.add(atan2(v, u));\n\t\n\t    // Advance the previous points.\n\t    lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n\t  }\n\t\n\t  function area$2(object) {\n\t    areaSum.reset();\n\t    geoStream(object, areaStream);\n\t    return areaSum * 2;\n\t  }\n\t\n\t  function spherical(cartesian) {\n\t    return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];\n\t  }\n\t\n\t  function cartesian(spherical) {\n\t    var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n\t    return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n\t  }\n\t\n\t  function cartesianDot(a, b) {\n\t    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t  }\n\t\n\t  function cartesianCross(a, b) {\n\t    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n\t  }\n\t\n\t  // TODO return a\n\t  function cartesianAddInPlace(a, b) {\n\t    a[0] += b[0], a[1] += b[1], a[2] += b[2];\n\t  }\n\t\n\t  function cartesianScale(vector, k) {\n\t    return [vector[0] * k, vector[1] * k, vector[2] * k];\n\t  }\n\t\n\t  // TODO return d\n\t  function cartesianNormalizeInPlace(d) {\n\t    var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n\t    d[0] /= l, d[1] /= l, d[2] /= l;\n\t  }\n\t\n\tvar   lambda0$1;\n\t  var phi0;\n\t  var lambda1;\n\t  var phi1;\n\t  var lambda2;\n\tvar   lambda00$1;\n\tvar   phi00$1;\n\t  var p0;\n\t  var deltaSum = adder();\n\t  var ranges;\n\tvar   range$1;\n\t  var boundsStream = {\n\t    point: boundsPoint,\n\t    lineStart: boundsLineStart,\n\t    lineEnd: boundsLineEnd,\n\t    polygonStart: function() {\n\t      boundsStream.point = boundsRingPoint;\n\t      boundsStream.lineStart = boundsRingStart;\n\t      boundsStream.lineEnd = boundsRingEnd;\n\t      deltaSum.reset();\n\t      areaStream.polygonStart();\n\t    },\n\t    polygonEnd: function() {\n\t      areaStream.polygonEnd();\n\t      boundsStream.point = boundsPoint;\n\t      boundsStream.lineStart = boundsLineStart;\n\t      boundsStream.lineEnd = boundsLineEnd;\n\t      if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n\t      else if (deltaSum > epsilon$4) phi1 = 90;\n\t      else if (deltaSum < -epsilon$4) phi0 = -90;\n\t      range$1[0] = lambda0$1, range$1[1] = lambda1;\n\t    }\n\t  };\n\t\n\t  function boundsPoint(lambda, phi) {\n\t    ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);\n\t    if (phi < phi0) phi0 = phi;\n\t    if (phi > phi1) phi1 = phi;\n\t  }\n\t\n\t  function linePoint(lambda, phi) {\n\t    var p = cartesian([lambda * radians, phi * radians]);\n\t    if (p0) {\n\t      var normal = cartesianCross(p0, p),\n\t          equatorial = [normal[1], -normal[0], 0],\n\t          inflection = cartesianCross(equatorial, normal);\n\t      cartesianNormalizeInPlace(inflection);\n\t      inflection = spherical(inflection);\n\t      var delta = lambda - lambda2,\n\t          sign = delta > 0 ? 1 : -1,\n\t          lambdai = inflection[0] * degrees$1 * sign,\n\t          phii,\n\t          antimeridian = abs(delta) > 180;\n\t      if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n\t        phii = inflection[1] * degrees$1;\n\t        if (phii > phi1) phi1 = phii;\n\t      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n\t        phii = -inflection[1] * degrees$1;\n\t        if (phii < phi0) phi0 = phii;\n\t      } else {\n\t        if (phi < phi0) phi0 = phi;\n\t        if (phi > phi1) phi1 = phi;\n\t      }\n\t      if (antimeridian) {\n\t        if (lambda < lambda2) {\n\t          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n\t        } else {\n\t          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n\t        }\n\t      } else {\n\t        if (lambda1 >= lambda0$1) {\n\t          if (lambda < lambda0$1) lambda0$1 = lambda;\n\t          if (lambda > lambda1) lambda1 = lambda;\n\t        } else {\n\t          if (lambda > lambda2) {\n\t            if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n\t          } else {\n\t            if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n\t          }\n\t        }\n\t      }\n\t    } else {\n\t      boundsPoint(lambda, phi);\n\t    }\n\t    p0 = p, lambda2 = lambda;\n\t  }\n\t\n\t  function boundsLineStart() {\n\t    boundsStream.point = linePoint;\n\t  }\n\t\n\t  function boundsLineEnd() {\n\t    range$1[0] = lambda0$1, range$1[1] = lambda1;\n\t    boundsStream.point = boundsPoint;\n\t    p0 = null;\n\t  }\n\t\n\t  function boundsRingPoint(lambda, phi) {\n\t    if (p0) {\n\t      var delta = lambda - lambda2;\n\t      deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n\t    } else {\n\t      lambda00$1 = lambda, phi00$1 = phi;\n\t    }\n\t    areaStream.point(lambda, phi);\n\t    linePoint(lambda, phi);\n\t  }\n\t\n\t  function boundsRingStart() {\n\t    areaStream.lineStart();\n\t  }\n\t\n\t  function boundsRingEnd() {\n\t    boundsRingPoint(lambda00$1, phi00$1);\n\t    areaStream.lineEnd();\n\t    if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);\n\t    range$1[0] = lambda0$1, range$1[1] = lambda1;\n\t    p0 = null;\n\t  }\n\t\n\t  // Finds the left-right distance between two longitudes.\n\t  // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n\t  // the distance between ±180° to be 360°.\n\t  function angle(lambda0, lambda1) {\n\t    return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n\t  }\n\t\n\t  function rangeCompare(a, b) {\n\t    return a[0] - b[0];\n\t  }\n\t\n\t  function rangeContains(range, x) {\n\t    return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n\t  }\n\t\n\t  function bounds(feature) {\n\t    var i, n, a, b, merged, deltaMax, delta;\n\t\n\t    phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n\t    ranges = [];\n\t    geoStream(feature, boundsStream);\n\t\n\t    // First, sort ranges by their minimum longitudes.\n\t    if (n = ranges.length) {\n\t      ranges.sort(rangeCompare);\n\t\n\t      // Then, merge any ranges that overlap.\n\t      for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n\t        b = ranges[i];\n\t        if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n\t          if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n\t          if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n\t        } else {\n\t          merged.push(a = b);\n\t        }\n\t      }\n\t\n\t      // Finally, find the largest gap between the merged ranges.\n\t      // The final bounding box will be the inverse of this gap.\n\t      for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n\t        b = merged[i];\n\t        if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n\t      }\n\t    }\n\t\n\t    ranges = range$1 = null;\n\t\n\t    return lambda0$1 === Infinity || phi0 === Infinity\n\t        ? [[NaN, NaN], [NaN, NaN]]\n\t        : [[lambda0$1, phi0], [lambda1, phi1]];\n\t  }\n\t\n\t  var W0;\n\t  var W1;\n\t  var X0;\n\t  var Y0;\n\t  var Z0;\n\t  var X1;\n\t  var Y1;\n\t  var Z1;\n\t  var X2;\n\t  var Y2;\n\t  var Z2;\n\tvar   lambda00$2;\n\tvar   phi00$2;\n\t  var x0;\n\t  var y0;\n\t  var z0;\n\t  // previous point\n\t\n\t  var centroidStream = {\n\t    sphere: noop$2,\n\t    point: centroidPoint,\n\t    lineStart: centroidLineStart,\n\t    lineEnd: centroidLineEnd,\n\t    polygonStart: function() {\n\t      centroidStream.lineStart = centroidRingStart;\n\t      centroidStream.lineEnd = centroidRingEnd;\n\t    },\n\t    polygonEnd: function() {\n\t      centroidStream.lineStart = centroidLineStart;\n\t      centroidStream.lineEnd = centroidLineEnd;\n\t    }\n\t  };\n\t\n\t  // Arithmetic mean of Cartesian vectors.\n\t  function centroidPoint(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    var cosPhi = cos$1(phi);\n\t    centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n\t  }\n\t\n\t  function centroidPointCartesian(x, y, z) {\n\t    ++W0;\n\t    X0 += (x - X0) / W0;\n\t    Y0 += (y - Y0) / W0;\n\t    Z0 += (z - Z0) / W0;\n\t  }\n\t\n\t  function centroidLineStart() {\n\t    centroidStream.point = centroidLinePointFirst;\n\t  }\n\t\n\t  function centroidLinePointFirst(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    var cosPhi = cos$1(phi);\n\t    x0 = cosPhi * cos$1(lambda);\n\t    y0 = cosPhi * sin$1(lambda);\n\t    z0 = sin$1(phi);\n\t    centroidStream.point = centroidLinePoint;\n\t    centroidPointCartesian(x0, y0, z0);\n\t  }\n\t\n\t  function centroidLinePoint(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    var cosPhi = cos$1(phi),\n\t        x = cosPhi * cos$1(lambda),\n\t        y = cosPhi * sin$1(lambda),\n\t        z = sin$1(phi),\n\t        w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n\t    W1 += w;\n\t    X1 += w * (x0 + (x0 = x));\n\t    Y1 += w * (y0 + (y0 = y));\n\t    Z1 += w * (z0 + (z0 = z));\n\t    centroidPointCartesian(x0, y0, z0);\n\t  }\n\t\n\t  function centroidLineEnd() {\n\t    centroidStream.point = centroidPoint;\n\t  }\n\t\n\t  // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n\t  // J. Applied Mechanics 42, 239 (1975).\n\t  function centroidRingStart() {\n\t    centroidStream.point = centroidRingPointFirst;\n\t  }\n\t\n\t  function centroidRingEnd() {\n\t    centroidRingPoint(lambda00$2, phi00$2);\n\t    centroidStream.point = centroidPoint;\n\t  }\n\t\n\t  function centroidRingPointFirst(lambda, phi) {\n\t    lambda00$2 = lambda, phi00$2 = phi;\n\t    lambda *= radians, phi *= radians;\n\t    centroidStream.point = centroidRingPoint;\n\t    var cosPhi = cos$1(phi);\n\t    x0 = cosPhi * cos$1(lambda);\n\t    y0 = cosPhi * sin$1(lambda);\n\t    z0 = sin$1(phi);\n\t    centroidPointCartesian(x0, y0, z0);\n\t  }\n\t\n\t  function centroidRingPoint(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    var cosPhi = cos$1(phi),\n\t        x = cosPhi * cos$1(lambda),\n\t        y = cosPhi * sin$1(lambda),\n\t        z = sin$1(phi),\n\t        cx = y0 * z - z0 * y,\n\t        cy = z0 * x - x0 * z,\n\t        cz = x0 * y - y0 * x,\n\t        m = sqrt$1(cx * cx + cy * cy + cz * cz),\n\t        u = x0 * x + y0 * y + z0 * z,\n\t        v = m && -acos(u) / m, // area weight\n\t        w = atan2(m, u); // line weight\n\t    X2 += v * cx;\n\t    Y2 += v * cy;\n\t    Z2 += v * cz;\n\t    W1 += w;\n\t    X1 += w * (x0 + (x0 = x));\n\t    Y1 += w * (y0 + (y0 = y));\n\t    Z1 += w * (z0 + (z0 = z));\n\t    centroidPointCartesian(x0, y0, z0);\n\t  }\n\t\n\t  function centroid$1(object) {\n\t    W0 = W1 =\n\t    X0 = Y0 = Z0 =\n\t    X1 = Y1 = Z1 =\n\t    X2 = Y2 = Z2 = 0;\n\t    geoStream(object, centroidStream);\n\t\n\t    var x = X2,\n\t        y = Y2,\n\t        z = Z2,\n\t        m = x * x + y * y + z * z;\n\t\n\t    // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n\t    if (m < epsilon2$2) {\n\t      x = X1, y = Y1, z = Z1;\n\t      // If the feature has zero length, fall back to arithmetic mean of point vectors.\n\t      if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;\n\t      m = x * x + y * y + z * z;\n\t      // If the feature still has an undefined ccentroid, then return.\n\t      if (m < epsilon2$2) return [NaN, NaN];\n\t    }\n\t\n\t    return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];\n\t  }\n\t\n\t  function constant$12(x) {\n\t    return function() {\n\t      return x;\n\t    };\n\t  }\n\t\n\t  function compose(a, b) {\n\t\n\t    function compose(x, y) {\n\t      return x = a(x, y), b(x[0], x[1]);\n\t    }\n\t\n\t    if (a.invert && b.invert) compose.invert = function(x, y) {\n\t      return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n\t    };\n\t\n\t    return compose;\n\t  }\n\t\n\t  function rotationIdentity(lambda, phi) {\n\t    return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];\n\t  }\n\t\n\t  rotationIdentity.invert = rotationIdentity;\n\t\n\t  function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n\t    return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n\t      : rotationLambda(deltaLambda))\n\t      : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n\t      : rotationIdentity);\n\t  }\n\t\n\t  function forwardRotationLambda(deltaLambda) {\n\t    return function(lambda, phi) {\n\t      return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];\n\t    };\n\t  }\n\t\n\t  function rotationLambda(deltaLambda) {\n\t    var rotation = forwardRotationLambda(deltaLambda);\n\t    rotation.invert = forwardRotationLambda(-deltaLambda);\n\t    return rotation;\n\t  }\n\t\n\t  function rotationPhiGamma(deltaPhi, deltaGamma) {\n\t    var cosDeltaPhi = cos$1(deltaPhi),\n\t        sinDeltaPhi = sin$1(deltaPhi),\n\t        cosDeltaGamma = cos$1(deltaGamma),\n\t        sinDeltaGamma = sin$1(deltaGamma);\n\t\n\t    function rotation(lambda, phi) {\n\t      var cosPhi = cos$1(phi),\n\t          x = cos$1(lambda) * cosPhi,\n\t          y = sin$1(lambda) * cosPhi,\n\t          z = sin$1(phi),\n\t          k = z * cosDeltaPhi + x * sinDeltaPhi;\n\t      return [\n\t        atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n\t        asin$1(k * cosDeltaGamma + y * sinDeltaGamma)\n\t      ];\n\t    }\n\t\n\t    rotation.invert = function(lambda, phi) {\n\t      var cosPhi = cos$1(phi),\n\t          x = cos$1(lambda) * cosPhi,\n\t          y = sin$1(lambda) * cosPhi,\n\t          z = sin$1(phi),\n\t          k = z * cosDeltaGamma - y * sinDeltaGamma;\n\t      return [\n\t        atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n\t        asin$1(k * cosDeltaPhi - x * sinDeltaPhi)\n\t      ];\n\t    };\n\t\n\t    return rotation;\n\t  }\n\t\n\t  function rotation(rotate) {\n\t    rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\t\n\t    function forward(coordinates) {\n\t      coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n\t      return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n\t    }\n\t\n\t    forward.invert = function(coordinates) {\n\t      coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n\t      return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n\t    };\n\t\n\t    return forward;\n\t  }\n\t\n\t  // Generates a circle centered at [0°, 0°], with a given radius and precision.\n\t  function circleStream(stream, radius, delta, direction, t0, t1) {\n\t    if (!delta) return;\n\t    var cosRadius = cos$1(radius),\n\t        sinRadius = sin$1(radius),\n\t        step = direction * delta;\n\t    if (t0 == null) {\n\t      t0 = radius + direction * tau$4;\n\t      t1 = radius - step / 2;\n\t    } else {\n\t      t0 = circleRadius(cosRadius, t0);\n\t      t1 = circleRadius(cosRadius, t1);\n\t      if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;\n\t    }\n\t    for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n\t      point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n\t      stream.point(point[0], point[1]);\n\t    }\n\t  }\n\t\n\t  // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\n\t  function circleRadius(cosRadius, point) {\n\t    point = cartesian(point), point[0] -= cosRadius;\n\t    cartesianNormalizeInPlace(point);\n\t    var radius = acos(-point[1]);\n\t    return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;\n\t  }\n\t\n\t  function circle$1() {\n\t    var center = constant$12([0, 0]),\n\t        radius = constant$12(90),\n\t        precision = constant$12(6),\n\t        ring,\n\t        rotate,\n\t        stream = {point: point};\n\t\n\t    function point(x, y) {\n\t      ring.push(x = rotate(x, y));\n\t      x[0] *= degrees$1, x[1] *= degrees$1;\n\t    }\n\t\n\t    function circle() {\n\t      var c = center.apply(this, arguments),\n\t          r = radius.apply(this, arguments) * radians,\n\t          p = precision.apply(this, arguments) * radians;\n\t      ring = [];\n\t      rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n\t      circleStream(stream, r, p, 1);\n\t      c = {type: \"Polygon\", coordinates: [ring]};\n\t      ring = rotate = null;\n\t      return c;\n\t    }\n\t\n\t    circle.center = function(_) {\n\t      return arguments.length ? (center = typeof _ === \"function\" ? _ : constant$12([+_[0], +_[1]]), circle) : center;\n\t    };\n\t\n\t    circle.radius = function(_) {\n\t      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$12(+_), circle) : radius;\n\t    };\n\t\n\t    circle.precision = function(_) {\n\t      return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant$12(+_), circle) : precision;\n\t    };\n\t\n\t    return circle;\n\t  }\n\t\n\t  function clipBuffer() {\n\t    var lines = [],\n\t        line;\n\t    return {\n\t      point: function(x, y) {\n\t        line.push([x, y]);\n\t      },\n\t      lineStart: function() {\n\t        lines.push(line = []);\n\t      },\n\t      lineEnd: noop$2,\n\t      rejoin: function() {\n\t        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n\t      },\n\t      result: function() {\n\t        var result = lines;\n\t        lines = [];\n\t        line = null;\n\t        return result;\n\t      }\n\t    };\n\t  }\n\t\n\t  function clipLine(a, b, x0, y0, x1, y1) {\n\t    var ax = a[0],\n\t        ay = a[1],\n\t        bx = b[0],\n\t        by = b[1],\n\t        t0 = 0,\n\t        t1 = 1,\n\t        dx = bx - ax,\n\t        dy = by - ay,\n\t        r;\n\t\n\t    r = x0 - ax;\n\t    if (!dx && r > 0) return;\n\t    r /= dx;\n\t    if (dx < 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    } else if (dx > 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    }\n\t\n\t    r = x1 - ax;\n\t    if (!dx && r < 0) return;\n\t    r /= dx;\n\t    if (dx < 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    } else if (dx > 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    }\n\t\n\t    r = y0 - ay;\n\t    if (!dy && r > 0) return;\n\t    r /= dy;\n\t    if (dy < 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    } else if (dy > 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    }\n\t\n\t    r = y1 - ay;\n\t    if (!dy && r < 0) return;\n\t    r /= dy;\n\t    if (dy < 0) {\n\t      if (r > t1) return;\n\t      if (r > t0) t0 = r;\n\t    } else if (dy > 0) {\n\t      if (r < t0) return;\n\t      if (r < t1) t1 = r;\n\t    }\n\t\n\t    if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n\t    if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n\t    return true;\n\t  }\n\t\n\t  function pointEqual(a, b) {\n\t    return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;\n\t  }\n\t\n\t  function Intersection(point, points, other, entry) {\n\t    this.x = point;\n\t    this.z = points;\n\t    this.o = other; // another intersection\n\t    this.e = entry; // is an entry?\n\t    this.v = false; // visited\n\t    this.n = this.p = null; // next & previous\n\t  }\n\t\n\t  // A generalized polygon clipping algorithm: given a polygon that has been cut\n\t  // into its visible line segments, and rejoins the segments by interpolating\n\t  // along the clip edge.\n\t  function clipPolygon(segments, compareIntersection, startInside, interpolate, stream) {\n\t    var subject = [],\n\t        clip = [],\n\t        i,\n\t        n;\n\t\n\t    segments.forEach(function(segment) {\n\t      if ((n = segment.length - 1) <= 0) return;\n\t      var n, p0 = segment[0], p1 = segment[n], x;\n\t\n\t      // If the first and last points of a segment are coincident, then treat as a\n\t      // closed ring. TODO if all rings are closed, then the winding order of the\n\t      // exterior ring should be checked.\n\t      if (pointEqual(p0, p1)) {\n\t        stream.lineStart();\n\t        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n\t        stream.lineEnd();\n\t        return;\n\t      }\n\t\n\t      subject.push(x = new Intersection(p0, segment, null, true));\n\t      clip.push(x.o = new Intersection(p0, null, x, false));\n\t      subject.push(x = new Intersection(p1, segment, null, false));\n\t      clip.push(x.o = new Intersection(p1, null, x, true));\n\t    });\n\t\n\t    if (!subject.length) return;\n\t\n\t    clip.sort(compareIntersection);\n\t    link$1(subject);\n\t    link$1(clip);\n\t\n\t    for (i = 0, n = clip.length; i < n; ++i) {\n\t      clip[i].e = startInside = !startInside;\n\t    }\n\t\n\t    var start = subject[0],\n\t        points,\n\t        point;\n\t\n\t    while (1) {\n\t      // Find first unvisited intersection.\n\t      var current = start,\n\t          isSubject = true;\n\t      while (current.v) if ((current = current.n) === start) return;\n\t      points = current.z;\n\t      stream.lineStart();\n\t      do {\n\t        current.v = current.o.v = true;\n\t        if (current.e) {\n\t          if (isSubject) {\n\t            for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n\t          } else {\n\t            interpolate(current.x, current.n.x, 1, stream);\n\t          }\n\t          current = current.n;\n\t        } else {\n\t          if (isSubject) {\n\t            points = current.p.z;\n\t            for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n\t          } else {\n\t            interpolate(current.x, current.p.x, -1, stream);\n\t          }\n\t          current = current.p;\n\t        }\n\t        current = current.o;\n\t        points = current.z;\n\t        isSubject = !isSubject;\n\t      } while (!current.v);\n\t      stream.lineEnd();\n\t    }\n\t  }\n\t\n\t  function link$1(array) {\n\t    if (!(n = array.length)) return;\n\t    var n,\n\t        i = 0,\n\t        a = array[0],\n\t        b;\n\t    while (++i < n) {\n\t      a.n = b = array[i];\n\t      b.p = a;\n\t      a = b;\n\t    }\n\t    a.n = b = array[0];\n\t    b.p = a;\n\t  }\n\t\n\t  var clipMax = 1e9;\n\t  var clipMin = -clipMax;\n\t  // TODO Use d3-polygon’s polygonContains here for the ring check?\n\t  // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\t\n\t  function clipExtent(x0, y0, x1, y1) {\n\t\n\t    function visible(x, y) {\n\t      return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n\t    }\n\t\n\t    function interpolate(from, to, direction, stream) {\n\t      var a = 0, a1 = 0;\n\t      if (from == null\n\t          || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n\t          || comparePoint(from, to) < 0 ^ direction > 0) {\n\t        do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n\t        while ((a = (a + direction + 4) % 4) !== a1);\n\t      } else {\n\t        stream.point(to[0], to[1]);\n\t      }\n\t    }\n\t\n\t    function corner(p, direction) {\n\t      return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3\n\t          : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1\n\t          : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0\n\t          : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n\t    }\n\t\n\t    function compareIntersection(a, b) {\n\t      return comparePoint(a.x, b.x);\n\t    }\n\t\n\t    function comparePoint(a, b) {\n\t      var ca = corner(a, 1),\n\t          cb = corner(b, 1);\n\t      return ca !== cb ? ca - cb\n\t          : ca === 0 ? b[1] - a[1]\n\t          : ca === 1 ? a[0] - b[0]\n\t          : ca === 2 ? a[1] - b[1]\n\t          : b[0] - a[0];\n\t    }\n\t\n\t    return function(stream) {\n\t      var activeStream = stream,\n\t          bufferStream = clipBuffer(),\n\t          segments,\n\t          polygon,\n\t          ring,\n\t          x__, y__, v__, // first point\n\t          x_, y_, v_, // previous point\n\t          first,\n\t          clean;\n\t\n\t      var clipStream = {\n\t        point: point,\n\t        lineStart: lineStart,\n\t        lineEnd: lineEnd,\n\t        polygonStart: polygonStart,\n\t        polygonEnd: polygonEnd\n\t      };\n\t\n\t      function point(x, y) {\n\t        if (visible(x, y)) activeStream.point(x, y);\n\t      }\n\t\n\t      function polygonInside() {\n\t        var winding = 0;\n\t\n\t        for (var i = 0, n = polygon.length; i < n; ++i) {\n\t          for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n\t            a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n\t            if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n\t            else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n\t          }\n\t        }\n\t\n\t        return winding;\n\t      }\n\t\n\t      // Buffer geometry within a polygon and then clip it en masse.\n\t      function polygonStart() {\n\t        activeStream = bufferStream, segments = [], polygon = [], clean = true;\n\t      }\n\t\n\t      function polygonEnd() {\n\t        var startInside = polygonInside(),\n\t            cleanInside = clean && startInside,\n\t            visible = (segments = merge(segments)).length;\n\t        if (cleanInside || visible) {\n\t          stream.polygonStart();\n\t          if (cleanInside) {\n\t            stream.lineStart();\n\t            interpolate(null, null, 1, stream);\n\t            stream.lineEnd();\n\t          }\n\t          if (visible) {\n\t            clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n\t          }\n\t          stream.polygonEnd();\n\t        }\n\t        activeStream = stream, segments = polygon = ring = null;\n\t      }\n\t\n\t      function lineStart() {\n\t        clipStream.point = linePoint;\n\t        if (polygon) polygon.push(ring = []);\n\t        first = true;\n\t        v_ = false;\n\t        x_ = y_ = NaN;\n\t      }\n\t\n\t      // TODO rather than special-case polygons, simply handle them separately.\n\t      // Ideally, coincident intersection points should be jittered to avoid\n\t      // clipping issues.\n\t      function lineEnd() {\n\t        if (segments) {\n\t          linePoint(x__, y__);\n\t          if (v__ && v_) bufferStream.rejoin();\n\t          segments.push(bufferStream.result());\n\t        }\n\t        clipStream.point = point;\n\t        if (v_) activeStream.lineEnd();\n\t      }\n\t\n\t      function linePoint(x, y) {\n\t        var v = visible(x, y);\n\t        if (polygon) ring.push([x, y]);\n\t        if (first) {\n\t          x__ = x, y__ = y, v__ = v;\n\t          first = false;\n\t          if (v) {\n\t            activeStream.lineStart();\n\t            activeStream.point(x, y);\n\t          }\n\t        } else {\n\t          if (v && v_) activeStream.point(x, y);\n\t          else {\n\t            var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n\t                b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n\t            if (clipLine(a, b, x0, y0, x1, y1)) {\n\t              if (!v_) {\n\t                activeStream.lineStart();\n\t                activeStream.point(a[0], a[1]);\n\t              }\n\t              activeStream.point(b[0], b[1]);\n\t              if (!v) activeStream.lineEnd();\n\t              clean = false;\n\t            } else if (v) {\n\t              activeStream.lineStart();\n\t              activeStream.point(x, y);\n\t              clean = false;\n\t            }\n\t          }\n\t        }\n\t        x_ = x, y_ = y, v_ = v;\n\t      }\n\t\n\t      return clipStream;\n\t    };\n\t  }\n\t\n\t  function extent$1() {\n\t    var x0 = 0,\n\t        y0 = 0,\n\t        x1 = 960,\n\t        y1 = 500,\n\t        cache,\n\t        cacheStream,\n\t        clip;\n\t\n\t    return clip = {\n\t      stream: function(stream) {\n\t        return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n\t      },\n\t      extent: function(_) {\n\t        return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n\t      }\n\t    };\n\t  }\n\t\n\t  var lengthSum = adder();\n\tvar   lambda0$2;\n\tvar   sinPhi0$1;\n\tvar   cosPhi0$1;\n\t  var lengthStream = {\n\t    sphere: noop$2,\n\t    point: noop$2,\n\t    lineStart: lengthLineStart,\n\t    lineEnd: noop$2,\n\t    polygonStart: noop$2,\n\t    polygonEnd: noop$2\n\t  };\n\t\n\t  function lengthLineStart() {\n\t    lengthStream.point = lengthPointFirst;\n\t    lengthStream.lineEnd = lengthLineEnd;\n\t  }\n\t\n\t  function lengthLineEnd() {\n\t    lengthStream.point = lengthStream.lineEnd = noop$2;\n\t  }\n\t\n\t  function lengthPointFirst(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);\n\t    lengthStream.point = lengthPoint;\n\t  }\n\t\n\t  function lengthPoint(lambda, phi) {\n\t    lambda *= radians, phi *= radians;\n\t    var sinPhi = sin$1(phi),\n\t        cosPhi = cos$1(phi),\n\t        delta = abs(lambda - lambda0$2),\n\t        cosDelta = cos$1(delta),\n\t        sinDelta = sin$1(delta),\n\t        x = cosPhi * sinDelta,\n\t        y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n\t        z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n\t    lengthSum.add(atan2(sqrt$1(x * x + y * y), z));\n\t    lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n\t  }\n\t\n\t  function length$2(object) {\n\t    lengthSum.reset();\n\t    geoStream(object, lengthStream);\n\t    return +lengthSum;\n\t  }\n\t\n\t  var coordinates = [null, null];\n\tvar   object$1 = {type: \"LineString\", coordinates: coordinates};\n\t  function distance(a, b) {\n\t    coordinates[0] = a;\n\t    coordinates[1] = b;\n\t    return length$2(object$1);\n\t  }\n\t\n\t  function graticuleX(y0, y1, dy) {\n\t    var y = range(y0, y1 - epsilon$4, dy).concat(y1);\n\t    return function(x) { return y.map(function(y) { return [x, y]; }); };\n\t  }\n\t\n\t  function graticuleY(x0, x1, dx) {\n\t    var x = range(x0, x1 - epsilon$4, dx).concat(x1);\n\t    return function(y) { return x.map(function(x) { return [x, y]; }); };\n\t  }\n\t\n\t  function graticule() {\n\t    var x1, x0, X1, X0,\n\t        y1, y0, Y1, Y0,\n\t        dx = 10, dy = dx, DX = 90, DY = 360,\n\t        x, y, X, Y,\n\t        precision = 2.5;\n\t\n\t    function graticule() {\n\t      return {type: \"MultiLineString\", coordinates: lines()};\n\t    }\n\t\n\t    function lines() {\n\t      return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n\t          .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n\t          .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))\n\t          .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).map(y));\n\t    }\n\t\n\t    graticule.lines = function() {\n\t      return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n\t    };\n\t\n\t    graticule.outline = function() {\n\t      return {\n\t        type: \"Polygon\",\n\t        coordinates: [\n\t          X(X0).concat(\n\t          Y(Y1).slice(1),\n\t          X(X1).reverse().slice(1),\n\t          Y(Y0).reverse().slice(1))\n\t        ]\n\t      };\n\t    };\n\t\n\t    graticule.extent = function(_) {\n\t      if (!arguments.length) return graticule.extentMinor();\n\t      return graticule.extentMajor(_).extentMinor(_);\n\t    };\n\t\n\t    graticule.extentMajor = function(_) {\n\t      if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n\t      X0 = +_[0][0], X1 = +_[1][0];\n\t      Y0 = +_[0][1], Y1 = +_[1][1];\n\t      if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n\t      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n\t      return graticule.precision(precision);\n\t    };\n\t\n\t    graticule.extentMinor = function(_) {\n\t      if (!arguments.length) return [[x0, y0], [x1, y1]];\n\t      x0 = +_[0][0], x1 = +_[1][0];\n\t      y0 = +_[0][1], y1 = +_[1][1];\n\t      if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n\t      if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n\t      return graticule.precision(precision);\n\t    };\n\t\n\t    graticule.step = function(_) {\n\t      if (!arguments.length) return graticule.stepMinor();\n\t      return graticule.stepMajor(_).stepMinor(_);\n\t    };\n\t\n\t    graticule.stepMajor = function(_) {\n\t      if (!arguments.length) return [DX, DY];\n\t      DX = +_[0], DY = +_[1];\n\t      return graticule;\n\t    };\n\t\n\t    graticule.stepMinor = function(_) {\n\t      if (!arguments.length) return [dx, dy];\n\t      dx = +_[0], dy = +_[1];\n\t      return graticule;\n\t    };\n\t\n\t    graticule.precision = function(_) {\n\t      if (!arguments.length) return precision;\n\t      precision = +_;\n\t      x = graticuleX(y0, y1, 90);\n\t      y = graticuleY(x0, x1, precision);\n\t      X = graticuleX(Y0, Y1, 90);\n\t      Y = graticuleY(X0, X1, precision);\n\t      return graticule;\n\t    };\n\t\n\t    return graticule\n\t        .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])\n\t        .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);\n\t  }\n\t\n\t  function interpolate$2(a, b) {\n\t    var x0 = a[0] * radians,\n\t        y0 = a[1] * radians,\n\t        x1 = b[0] * radians,\n\t        y1 = b[1] * radians,\n\t        cy0 = cos$1(y0),\n\t        sy0 = sin$1(y0),\n\t        cy1 = cos$1(y1),\n\t        sy1 = sin$1(y1),\n\t        kx0 = cy0 * cos$1(x0),\n\t        ky0 = cy0 * sin$1(x0),\n\t        kx1 = cy1 * cos$1(x1),\n\t        ky1 = cy1 * sin$1(x1),\n\t        d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n\t        k = sin$1(d);\n\t\n\t    var interpolate = d ? function(t) {\n\t      var B = sin$1(t *= d) / k,\n\t          A = sin$1(d - t) / k,\n\t          x = A * kx0 + B * kx1,\n\t          y = A * ky0 + B * ky1,\n\t          z = A * sy0 + B * sy1;\n\t      return [\n\t        atan2(y, x) * degrees$1,\n\t        atan2(z, sqrt$1(x * x + y * y)) * degrees$1\n\t      ];\n\t    } : function() {\n\t      return [x0 * degrees$1, y0 * degrees$1];\n\t    };\n\t\n\t    interpolate.distance = d;\n\t\n\t    return interpolate;\n\t  }\n\t\n\t  function identity$7(x) {\n\t    return x;\n\t  }\n\t\n\tvar   areaSum$1 = adder();\n\tvar   areaRingSum$1 = adder();\n\t  var x00;\n\t  var y00;\n\tvar   x0$1;\n\tvar   y0$1;\n\t  var areaStream$1 = {\n\t    point: noop$2,\n\t    lineStart: noop$2,\n\t    lineEnd: noop$2,\n\t    polygonStart: function() {\n\t      areaStream$1.lineStart = areaRingStart$1;\n\t      areaStream$1.lineEnd = areaRingEnd$1;\n\t    },\n\t    polygonEnd: function() {\n\t      areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;\n\t      areaSum$1.add(abs(areaRingSum$1));\n\t      areaRingSum$1.reset();\n\t    },\n\t    result: function() {\n\t      var area = areaSum$1 / 2;\n\t      areaSum$1.reset();\n\t      return area;\n\t    }\n\t  };\n\t\n\t  function areaRingStart$1() {\n\t    areaStream$1.point = areaPointFirst$1;\n\t  }\n\t\n\t  function areaPointFirst$1(x, y) {\n\t    areaStream$1.point = areaPoint$1;\n\t    x00 = x0$1 = x, y00 = y0$1 = y;\n\t  }\n\t\n\t  function areaPoint$1(x, y) {\n\t    areaRingSum$1.add(y0$1 * x - x0$1 * y);\n\t    x0$1 = x, y0$1 = y;\n\t  }\n\t\n\t  function areaRingEnd$1() {\n\t    areaPoint$1(x00, y00);\n\t  }\n\t\n\tvar   x0$2 = Infinity;\n\tvar   y0$2 = x0$2;\n\t  var x1 = -x0$2;\n\t  var y1 = x1;\n\t  var boundsStream$1 = {\n\t    point: boundsPoint$1,\n\t    lineStart: noop$2,\n\t    lineEnd: noop$2,\n\t    polygonStart: noop$2,\n\t    polygonEnd: noop$2,\n\t    result: function() {\n\t      var bounds = [[x0$2, y0$2], [x1, y1]];\n\t      x1 = y1 = -(y0$2 = x0$2 = Infinity);\n\t      return bounds;\n\t    }\n\t  };\n\t\n\t  function boundsPoint$1(x, y) {\n\t    if (x < x0$2) x0$2 = x;\n\t    if (x > x1) x1 = x;\n\t    if (y < y0$2) y0$2 = y;\n\t    if (y > y1) y1 = y;\n\t  }\n\t\n\tvar   X0$1 = 0;\n\tvar   Y0$1 = 0;\n\tvar   Z0$1 = 0;\n\tvar   X1$1 = 0;\n\tvar   Y1$1 = 0;\n\tvar   Z1$1 = 0;\n\tvar   X2$1 = 0;\n\tvar   Y2$1 = 0;\n\tvar   Z2$1 = 0;\n\tvar   x00$1;\n\tvar   y00$1;\n\tvar   x0$3;\n\tvar   y0$3;\n\t  var centroidStream$1 = {\n\t    point: centroidPoint$1,\n\t    lineStart: centroidLineStart$1,\n\t    lineEnd: centroidLineEnd$1,\n\t    polygonStart: function() {\n\t      centroidStream$1.lineStart = centroidRingStart$1;\n\t      centroidStream$1.lineEnd = centroidRingEnd$1;\n\t    },\n\t    polygonEnd: function() {\n\t      centroidStream$1.point = centroidPoint$1;\n\t      centroidStream$1.lineStart = centroidLineStart$1;\n\t      centroidStream$1.lineEnd = centroidLineEnd$1;\n\t    },\n\t    result: function() {\n\t      var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n\t          : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n\t          : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n\t          : [NaN, NaN];\n\t      X0$1 = Y0$1 = Z0$1 =\n\t      X1$1 = Y1$1 = Z1$1 =\n\t      X2$1 = Y2$1 = Z2$1 = 0;\n\t      return centroid;\n\t    }\n\t  };\n\t\n\t  function centroidPoint$1(x, y) {\n\t    X0$1 += x;\n\t    Y0$1 += y;\n\t    ++Z0$1;\n\t  }\n\t\n\t  function centroidLineStart$1() {\n\t    centroidStream$1.point = centroidPointFirstLine;\n\t  }\n\t\n\t  function centroidPointFirstLine(x, y) {\n\t    centroidStream$1.point = centroidPointLine;\n\t    centroidPoint$1(x0$3 = x, y0$3 = y);\n\t  }\n\t\n\t  function centroidPointLine(x, y) {\n\t    var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);\n\t    X1$1 += z * (x0$3 + x) / 2;\n\t    Y1$1 += z * (y0$3 + y) / 2;\n\t    Z1$1 += z;\n\t    centroidPoint$1(x0$3 = x, y0$3 = y);\n\t  }\n\t\n\t  function centroidLineEnd$1() {\n\t    centroidStream$1.point = centroidPoint$1;\n\t  }\n\t\n\t  function centroidRingStart$1() {\n\t    centroidStream$1.point = centroidPointFirstRing;\n\t  }\n\t\n\t  function centroidRingEnd$1() {\n\t    centroidPointRing(x00$1, y00$1);\n\t  }\n\t\n\t  function centroidPointFirstRing(x, y) {\n\t    centroidStream$1.point = centroidPointRing;\n\t    centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n\t  }\n\t\n\t  function centroidPointRing(x, y) {\n\t    var dx = x - x0$3,\n\t        dy = y - y0$3,\n\t        z = sqrt$1(dx * dx + dy * dy);\n\t\n\t    X1$1 += z * (x0$3 + x) / 2;\n\t    Y1$1 += z * (y0$3 + y) / 2;\n\t    Z1$1 += z;\n\t\n\t    z = y0$3 * x - x0$3 * y;\n\t    X2$1 += z * (x0$3 + x);\n\t    Y2$1 += z * (y0$3 + y);\n\t    Z2$1 += z * 3;\n\t    centroidPoint$1(x0$3 = x, y0$3 = y);\n\t  }\n\t\n\t  function PathContext(context) {\n\t    var pointRadius = 4.5;\n\t\n\t    var stream = {\n\t      point: point,\n\t\n\t      // While inside a line, override point to moveTo then lineTo.\n\t      lineStart: function() { stream.point = pointLineStart; },\n\t      lineEnd: lineEnd,\n\t\n\t      // While inside a polygon, override lineEnd to closePath.\n\t      polygonStart: function() { stream.lineEnd = lineEndPolygon; },\n\t      polygonEnd: function() { stream.lineEnd = lineEnd; stream.point = point; },\n\t\n\t      pointRadius: function(_) {\n\t        pointRadius = _;\n\t        return stream;\n\t      },\n\t\n\t      result: noop$2\n\t    };\n\t\n\t    function point(x, y) {\n\t      context.moveTo(x + pointRadius, y);\n\t      context.arc(x, y, pointRadius, 0, tau$4);\n\t    }\n\t\n\t    function pointLineStart(x, y) {\n\t      context.moveTo(x, y);\n\t      stream.point = pointLine;\n\t    }\n\t\n\t    function pointLine(x, y) {\n\t      context.lineTo(x, y);\n\t    }\n\t\n\t    function lineEnd() {\n\t      stream.point = point;\n\t    }\n\t\n\t    function lineEndPolygon() {\n\t      context.closePath();\n\t    }\n\t\n\t    return stream;\n\t  }\n\t\n\t  function PathString() {\n\t    var pointCircle = circle$2(4.5),\n\t        string = [];\n\t\n\t    var stream = {\n\t      point: point,\n\t      lineStart: lineStart,\n\t      lineEnd: lineEnd,\n\t      polygonStart: function() {\n\t        stream.lineEnd = lineEndPolygon;\n\t      },\n\t      polygonEnd: function() {\n\t        stream.lineEnd = lineEnd;\n\t        stream.point = point;\n\t      },\n\t      pointRadius: function(_) {\n\t        pointCircle = circle$2(_);\n\t        return stream;\n\t      },\n\t      result: function() {\n\t        if (string.length) {\n\t          var result = string.join(\"\");\n\t          string = [];\n\t          return result;\n\t        }\n\t      }\n\t    };\n\t\n\t    function point(x, y) {\n\t      string.push(\"M\", x, \",\", y, pointCircle);\n\t    }\n\t\n\t    function pointLineStart(x, y) {\n\t      string.push(\"M\", x, \",\", y);\n\t      stream.point = pointLine;\n\t    }\n\t\n\t    function pointLine(x, y) {\n\t      string.push(\"L\", x, \",\", y);\n\t    }\n\t\n\t    function lineStart() {\n\t      stream.point = pointLineStart;\n\t    }\n\t\n\t    function lineEnd() {\n\t      stream.point = point;\n\t    }\n\t\n\t    function lineEndPolygon() {\n\t      string.push(\"Z\");\n\t    }\n\t\n\t    return stream;\n\t  }\n\t\n\t  function circle$2(radius) {\n\t    return \"m0,\" + radius\n\t        + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n\t        + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n\t        + \"z\";\n\t  }\n\t\n\t  function index$3() {\n\t    var pointRadius = 4.5,\n\t        projection,\n\t        projectionStream,\n\t        context,\n\t        contextStream;\n\t\n\t    function path(object) {\n\t      if (object) {\n\t        if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n\t        geoStream(object, projectionStream(contextStream));\n\t      }\n\t      return contextStream.result();\n\t    }\n\t\n\t    path.area = function(object) {\n\t      geoStream(object, projectionStream(areaStream$1));\n\t      return areaStream$1.result();\n\t    };\n\t\n\t    path.bounds = function(object) {\n\t      geoStream(object, projectionStream(boundsStream$1));\n\t      return boundsStream$1.result();\n\t    };\n\t\n\t    path.centroid = function(object) {\n\t      geoStream(object, projectionStream(centroidStream$1));\n\t      return centroidStream$1.result();\n\t    };\n\t\n\t    path.projection = function(_) {\n\t      return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;\n\t    };\n\t\n\t    path.context = function(_) {\n\t      if (!arguments.length) return context;\n\t      contextStream = (context = _) == null ? new PathString : new PathContext(_);\n\t      if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n\t      return path;\n\t    };\n\t\n\t    path.pointRadius = function(_) {\n\t      if (!arguments.length) return pointRadius;\n\t      pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n\t      return path;\n\t    };\n\t\n\t    return path.projection(null).context(null);\n\t  }\n\t\n\t  var sum$2 = adder();\n\t\n\t  function polygonContains(polygon, point) {\n\t    var lambda = point[0],\n\t        phi = point[1],\n\t        normal = [sin$1(lambda), -cos$1(lambda), 0],\n\t        angle = 0,\n\t        winding = 0;\n\t\n\t    sum$2.reset();\n\t\n\t    for (var i = 0, n = polygon.length; i < n; ++i) {\n\t      if (!(m = (ring = polygon[i]).length)) continue;\n\t      var ring,\n\t          m,\n\t          point0 = ring[m - 1],\n\t          lambda0 = point0[0],\n\t          phi0 = point0[1] / 2 + quarterPi,\n\t          sinPhi0 = sin$1(phi0),\n\t          cosPhi0 = cos$1(phi0);\n\t\n\t      for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n\t        var point1 = ring[j],\n\t            lambda1 = point1[0],\n\t            phi1 = point1[1] / 2 + quarterPi,\n\t            sinPhi1 = sin$1(phi1),\n\t            cosPhi1 = cos$1(phi1),\n\t            delta = lambda1 - lambda0,\n\t            sign = delta >= 0 ? 1 : -1,\n\t            absDelta = sign * delta,\n\t            antimeridian = absDelta > pi$4,\n\t            k = sinPhi0 * sinPhi1;\n\t\n\t        sum$2.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n\t        angle += antimeridian ? delta + sign * tau$4 : delta;\n\t\n\t        // Are the longitudes either side of the point’s meridian (lambda),\n\t        // and are the latitudes smaller than the parallel (phi)?\n\t        if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n\t          var arc = cartesianCross(cartesian(point0), cartesian(point1));\n\t          cartesianNormalizeInPlace(arc);\n\t          var intersection = cartesianCross(normal, arc);\n\t          cartesianNormalizeInPlace(intersection);\n\t          var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);\n\t          if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n\t            winding += antimeridian ^ delta >= 0 ? 1 : -1;\n\t          }\n\t        }\n\t      }\n\t    }\n\t\n\t    // First, determine whether the South pole is inside or outside:\n\t    //\n\t    // It is inside if:\n\t    // * the polygon winds around it in a clockwise direction.\n\t    // * the polygon does not (cumulatively) wind around it, but has a negative\n\t    //   (counter-clockwise) area.\n\t    //\n\t    // Second, count the (signed) number of times a segment crosses a lambda\n\t    // from the point to the South pole.  If it is zero, then the point is the\n\t    // same side as the South pole.\n\t\n\t    return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);\n\t  }\n\t\n\t  function clip(pointVisible, clipLine, interpolate, start) {\n\t    return function(rotate, sink) {\n\t      var line = clipLine(sink),\n\t          rotatedStart = rotate.invert(start[0], start[1]),\n\t          ringBuffer = clipBuffer(),\n\t          ringSink = clipLine(ringBuffer),\n\t          polygonStarted = false,\n\t          polygon,\n\t          segments,\n\t          ring;\n\t\n\t      var clip = {\n\t        point: point,\n\t        lineStart: lineStart,\n\t        lineEnd: lineEnd,\n\t        polygonStart: function() {\n\t          clip.point = pointRing;\n\t          clip.lineStart = ringStart;\n\t          clip.lineEnd = ringEnd;\n\t          segments = [];\n\t          polygon = [];\n\t        },\n\t        polygonEnd: function() {\n\t          clip.point = point;\n\t          clip.lineStart = lineStart;\n\t          clip.lineEnd = lineEnd;\n\t          segments = merge(segments);\n\t          var startInside = polygonContains(polygon, rotatedStart);\n\t          if (segments.length) {\n\t            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n\t            clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n\t          } else if (startInside) {\n\t            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n\t            sink.lineStart();\n\t            interpolate(null, null, 1, sink);\n\t            sink.lineEnd();\n\t          }\n\t          if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n\t          segments = polygon = null;\n\t        },\n\t        sphere: function() {\n\t          sink.polygonStart();\n\t          sink.lineStart();\n\t          interpolate(null, null, 1, sink);\n\t          sink.lineEnd();\n\t          sink.polygonEnd();\n\t        }\n\t      };\n\t\n\t      function point(lambda, phi) {\n\t        var point = rotate(lambda, phi);\n\t        if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n\t      }\n\t\n\t      function pointLine(lambda, phi) {\n\t        var point = rotate(lambda, phi);\n\t        line.point(point[0], point[1]);\n\t      }\n\t\n\t      function lineStart() {\n\t        clip.point = pointLine;\n\t        line.lineStart();\n\t      }\n\t\n\t      function lineEnd() {\n\t        clip.point = point;\n\t        line.lineEnd();\n\t      }\n\t\n\t      function pointRing(lambda, phi) {\n\t        ring.push([lambda, phi]);\n\t        var point = rotate(lambda, phi);\n\t        ringSink.point(point[0], point[1]);\n\t      }\n\t\n\t      function ringStart() {\n\t        ringSink.lineStart();\n\t        ring = [];\n\t      }\n\t\n\t      function ringEnd() {\n\t        pointRing(ring[0][0], ring[0][1]);\n\t        ringSink.lineEnd();\n\t\n\t        var clean = ringSink.clean(),\n\t            ringSegments = ringBuffer.result(),\n\t            i, n = ringSegments.length, m,\n\t            segment,\n\t            point;\n\t\n\t        ring.pop();\n\t        polygon.push(ring);\n\t        ring = null;\n\t\n\t        if (!n) return;\n\t\n\t        // No intersections.\n\t        if (clean & 1) {\n\t          segment = ringSegments[0];\n\t          if ((m = segment.length - 1) > 0) {\n\t            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n\t            sink.lineStart();\n\t            for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n\t            sink.lineEnd();\n\t          }\n\t          return;\n\t        }\n\t\n\t        // Rejoin connected segments.\n\t        // TODO reuse ringBuffer.rejoin()?\n\t        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\t\n\t        segments.push(ringSegments.filter(validSegment));\n\t      }\n\t\n\t      return clip;\n\t    };\n\t  }\n\t\n\t  function validSegment(segment) {\n\t    return segment.length > 1;\n\t  }\n\t\n\t  // Intersections are sorted along the clip edge. For both antimeridian cutting\n\t  // and circle clipping, the same comparison is used.\n\t  function compareIntersection(a, b) {\n\t    return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])\n\t         - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);\n\t  }\n\t\n\t  var clipAntimeridian = clip(\n\t    function() { return true; },\n\t    clipAntimeridianLine,\n\t    clipAntimeridianInterpolate,\n\t    [-pi$4, -halfPi$3]\n\t  );\n\t\n\t  // Takes a line and cuts into visible segments. Return values: 0 - there were\n\t  // intersections or the line was empty; 1 - no intersections; 2 - there were\n\t  // intersections, and the first and last segments should be rejoined.\n\t  function clipAntimeridianLine(stream) {\n\t    var lambda0 = NaN,\n\t        phi0 = NaN,\n\t        sign0 = NaN,\n\t        clean; // no intersections\n\t\n\t    return {\n\t      lineStart: function() {\n\t        stream.lineStart();\n\t        clean = 1;\n\t      },\n\t      point: function(lambda1, phi1) {\n\t        var sign1 = lambda1 > 0 ? pi$4 : -pi$4,\n\t            delta = abs(lambda1 - lambda0);\n\t        if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole\n\t          stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);\n\t          stream.point(sign0, phi0);\n\t          stream.lineEnd();\n\t          stream.lineStart();\n\t          stream.point(sign1, phi0);\n\t          stream.point(lambda1, phi0);\n\t          clean = 0;\n\t        } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian\n\t          if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies\n\t          if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;\n\t          phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n\t          stream.point(sign0, phi0);\n\t          stream.lineEnd();\n\t          stream.lineStart();\n\t          stream.point(sign1, phi0);\n\t          clean = 0;\n\t        }\n\t        stream.point(lambda0 = lambda1, phi0 = phi1);\n\t        sign0 = sign1;\n\t      },\n\t      lineEnd: function() {\n\t        stream.lineEnd();\n\t        lambda0 = phi0 = NaN;\n\t      },\n\t      clean: function() {\n\t        return 2 - clean; // if intersections, rejoin first and last segments\n\t      }\n\t    };\n\t  }\n\t\n\t  function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n\t    var cosPhi0,\n\t        cosPhi1,\n\t        sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n\t    return abs(sinLambda0Lambda1) > epsilon$4\n\t        ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n\t            - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n\t            / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n\t        : (phi0 + phi1) / 2;\n\t  }\n\t\n\t  function clipAntimeridianInterpolate(from, to, direction, stream) {\n\t    var phi;\n\t    if (from == null) {\n\t      phi = direction * halfPi$3;\n\t      stream.point(-pi$4, phi);\n\t      stream.point(0, phi);\n\t      stream.point(pi$4, phi);\n\t      stream.point(pi$4, 0);\n\t      stream.point(pi$4, -phi);\n\t      stream.point(0, -phi);\n\t      stream.point(-pi$4, -phi);\n\t      stream.point(-pi$4, 0);\n\t      stream.point(-pi$4, phi);\n\t    } else if (abs(from[0] - to[0]) > epsilon$4) {\n\t      var lambda = from[0] < to[0] ? pi$4 : -pi$4;\n\t      phi = direction * lambda / 2;\n\t      stream.point(-lambda, phi);\n\t      stream.point(0, phi);\n\t      stream.point(lambda, phi);\n\t    } else {\n\t      stream.point(to[0], to[1]);\n\t    }\n\t  }\n\t\n\t  function clipCircle(radius, delta) {\n\t    var cr = cos$1(radius),\n\t        smallRadius = cr > 0,\n\t        notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case\n\t\n\t    function interpolate(from, to, direction, stream) {\n\t      circleStream(stream, radius, delta, direction, from, to);\n\t    }\n\t\n\t    function visible(lambda, phi) {\n\t      return cos$1(lambda) * cos$1(phi) > cr;\n\t    }\n\t\n\t    // Takes a line and cuts into visible segments. Return values used for polygon\n\t    // clipping: 0 - there were intersections or the line was empty; 1 - no\n\t    // intersections 2 - there were intersections, and the first and last segments\n\t    // should be rejoined.\n\t    function clipLine(stream) {\n\t      var point0, // previous point\n\t          c0, // code for previous point\n\t          v0, // visibility of previous point\n\t          v00, // visibility of first point\n\t          clean; // no intersections\n\t      return {\n\t        lineStart: function() {\n\t          v00 = v0 = false;\n\t          clean = 1;\n\t        },\n\t        point: function(lambda, phi) {\n\t          var point1 = [lambda, phi],\n\t              point2,\n\t              v = visible(lambda, phi),\n\t              c = smallRadius\n\t                ? v ? 0 : code(lambda, phi)\n\t                : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;\n\t          if (!point0 && (v00 = v0 = v)) stream.lineStart();\n\t          // Handle degeneracies.\n\t          // TODO ignore if not clipping polygons.\n\t          if (v !== v0) {\n\t            point2 = intersect(point0, point1);\n\t            if (pointEqual(point0, point2) || pointEqual(point1, point2)) {\n\t              point1[0] += epsilon$4;\n\t              point1[1] += epsilon$4;\n\t              v = visible(point1[0], point1[1]);\n\t            }\n\t          }\n\t          if (v !== v0) {\n\t            clean = 0;\n\t            if (v) {\n\t              // outside going in\n\t              stream.lineStart();\n\t              point2 = intersect(point1, point0);\n\t              stream.point(point2[0], point2[1]);\n\t            } else {\n\t              // inside going out\n\t              point2 = intersect(point0, point1);\n\t              stream.point(point2[0], point2[1]);\n\t              stream.lineEnd();\n\t            }\n\t            point0 = point2;\n\t          } else if (notHemisphere && point0 && smallRadius ^ v) {\n\t            var t;\n\t            // If the codes for two points are different, or are both zero,\n\t            // and there this segment intersects with the small circle.\n\t            if (!(c & c0) && (t = intersect(point1, point0, true))) {\n\t              clean = 0;\n\t              if (smallRadius) {\n\t                stream.lineStart();\n\t                stream.point(t[0][0], t[0][1]);\n\t                stream.point(t[1][0], t[1][1]);\n\t                stream.lineEnd();\n\t              } else {\n\t                stream.point(t[1][0], t[1][1]);\n\t                stream.lineEnd();\n\t                stream.lineStart();\n\t                stream.point(t[0][0], t[0][1]);\n\t              }\n\t            }\n\t          }\n\t          if (v && (!point0 || !pointEqual(point0, point1))) {\n\t            stream.point(point1[0], point1[1]);\n\t          }\n\t          point0 = point1, v0 = v, c0 = c;\n\t        },\n\t        lineEnd: function() {\n\t          if (v0) stream.lineEnd();\n\t          point0 = null;\n\t        },\n\t        // Rejoin first and last segments if there were intersections and the first\n\t        // and last points were visible.\n\t        clean: function() {\n\t          return clean | ((v00 && v0) << 1);\n\t        }\n\t      };\n\t    }\n\t\n\t    // Intersects the great circle between a and b with the clip circle.\n\t    function intersect(a, b, two) {\n\t      var pa = cartesian(a),\n\t          pb = cartesian(b);\n\t\n\t      // We have two planes, n1.p = d1 and n2.p = d2.\n\t      // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n\t      var n1 = [1, 0, 0], // normal\n\t          n2 = cartesianCross(pa, pb),\n\t          n2n2 = cartesianDot(n2, n2),\n\t          n1n2 = n2[0], // cartesianDot(n1, n2),\n\t          determinant = n2n2 - n1n2 * n1n2;\n\t\n\t      // Two polar points.\n\t      if (!determinant) return !two && a;\n\t\n\t      var c1 =  cr * n2n2 / determinant,\n\t          c2 = -cr * n1n2 / determinant,\n\t          n1xn2 = cartesianCross(n1, n2),\n\t          A = cartesianScale(n1, c1),\n\t          B = cartesianScale(n2, c2);\n\t      cartesianAddInPlace(A, B);\n\t\n\t      // Solve |p(t)|^2 = 1.\n\t      var u = n1xn2,\n\t          w = cartesianDot(A, u),\n\t          uu = cartesianDot(u, u),\n\t          t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\t\n\t      if (t2 < 0) return;\n\t\n\t      var t = sqrt$1(t2),\n\t          q = cartesianScale(u, (-w - t) / uu);\n\t      cartesianAddInPlace(q, A);\n\t      q = spherical(q);\n\t\n\t      if (!two) return q;\n\t\n\t      // Two intersection points.\n\t      var lambda0 = a[0],\n\t          lambda1 = b[0],\n\t          phi0 = a[1],\n\t          phi1 = b[1],\n\t          z;\n\t\n\t      if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\t\n\t      var delta = lambda1 - lambda0,\n\t          polar = abs(delta - pi$4) < epsilon$4,\n\t          meridian = polar || delta < epsilon$4;\n\t\n\t      if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\t\n\t      // Check that the first point is between a and b.\n\t      if (meridian\n\t          ? polar\n\t            ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)\n\t            : phi0 <= q[1] && q[1] <= phi1\n\t          : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n\t        var q1 = cartesianScale(u, (-w + t) / uu);\n\t        cartesianAddInPlace(q1, A);\n\t        return [q, spherical(q1)];\n\t      }\n\t    }\n\t\n\t    // Generates a 4-bit vector representing the location of a point relative to\n\t    // the small circle's bounding box.\n\t    function code(lambda, phi) {\n\t      var r = smallRadius ? radius : pi$4 - radius,\n\t          code = 0;\n\t      if (lambda < -r) code |= 1; // left\n\t      else if (lambda > r) code |= 2; // right\n\t      if (phi < -r) code |= 4; // below\n\t      else if (phi > r) code |= 8; // above\n\t      return code;\n\t    }\n\t\n\t    return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);\n\t  }\n\t\n\t  function transform$1(prototype) {\n\t    return {\n\t      stream: transform$2(prototype)\n\t    };\n\t  }\n\t\n\t  function transform$2(prototype) {\n\t    function T() {}\n\t    var p = T.prototype = Object.create(Transform$1.prototype);\n\t    for (var k in prototype) p[k] = prototype[k];\n\t    return function(stream) {\n\t      var t = new T;\n\t      t.stream = stream;\n\t      return t;\n\t    };\n\t  }\n\t\n\t  function Transform$1() {}\n\t\n\t  Transform$1.prototype = {\n\t    point: function(x, y) { this.stream.point(x, y); },\n\t    sphere: function() { this.stream.sphere(); },\n\t    lineStart: function() { this.stream.lineStart(); },\n\t    lineEnd: function() { this.stream.lineEnd(); },\n\t    polygonStart: function() { this.stream.polygonStart(); },\n\t    polygonEnd: function() { this.stream.polygonEnd(); }\n\t  };\n\t\n\t  function fit(project, extent, object) {\n\t    var w = extent[1][0] - extent[0][0],\n\t        h = extent[1][1] - extent[0][1],\n\t        clip = project.clipExtent && project.clipExtent();\n\t\n\t    project\n\t        .scale(150)\n\t        .translate([0, 0]);\n\t\n\t    if (clip != null) project.clipExtent(null);\n\t\n\t    geoStream(object, project.stream(boundsStream$1));\n\t\n\t    var b = boundsStream$1.result(),\n\t        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n\t        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n\t        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\t\n\t    if (clip != null) project.clipExtent(clip);\n\t\n\t    return project\n\t        .scale(k * 150)\n\t        .translate([x, y]);\n\t  }\n\t\n\t  function fitSize(project) {\n\t    return function(size, object) {\n\t      return fit(project, [[0, 0], size], object);\n\t    };\n\t  }\n\t\n\t  function fitExtent(project) {\n\t    return function(extent, object) {\n\t      return fit(project, extent, object);\n\t    };\n\t  }\n\t\n\t  var maxDepth = 16;\n\t  var cosMinDistance = cos$1(30 * radians);\n\t  // cos(minimum angular distance)\n\t\n\t  function resample(project, delta2) {\n\t    return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n\t  }\n\t\n\t  function resampleNone(project) {\n\t    return transform$2({\n\t      point: function(x, y) {\n\t        x = project(x, y);\n\t        this.stream.point(x[0], x[1]);\n\t      }\n\t    });\n\t  }\n\t\n\t  function resample$1(project, delta2) {\n\t\n\t    function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n\t      var dx = x1 - x0,\n\t          dy = y1 - y0,\n\t          d2 = dx * dx + dy * dy;\n\t      if (d2 > 4 * delta2 && depth--) {\n\t        var a = a0 + a1,\n\t            b = b0 + b1,\n\t            c = c0 + c1,\n\t            m = sqrt$1(a * a + b * b + c * c),\n\t            phi2 = asin$1(c /= m),\n\t            lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),\n\t            p = project(lambda2, phi2),\n\t            x2 = p[0],\n\t            y2 = p[1],\n\t            dx2 = x2 - x0,\n\t            dy2 = y2 - y0,\n\t            dz = dy * dx2 - dx * dy2;\n\t        if (dz * dz / d2 > delta2 // perpendicular projected distance\n\t            || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n\t            || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n\t          resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n\t          stream.point(x2, y2);\n\t          resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n\t        }\n\t      }\n\t    }\n\t    return function(stream) {\n\t      var lambda00, x00, y00, a00, b00, c00, // first point\n\t          lambda0, x0, y0, a0, b0, c0; // previous point\n\t\n\t      var resampleStream = {\n\t        point: point,\n\t        lineStart: lineStart,\n\t        lineEnd: lineEnd,\n\t        polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n\t        polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n\t      };\n\t\n\t      function point(x, y) {\n\t        x = project(x, y);\n\t        stream.point(x[0], x[1]);\n\t      }\n\t\n\t      function lineStart() {\n\t        x0 = NaN;\n\t        resampleStream.point = linePoint;\n\t        stream.lineStart();\n\t      }\n\t\n\t      function linePoint(lambda, phi) {\n\t        var c = cartesian([lambda, phi]), p = project(lambda, phi);\n\t        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n\t        stream.point(x0, y0);\n\t      }\n\t\n\t      function lineEnd() {\n\t        resampleStream.point = point;\n\t        stream.lineEnd();\n\t      }\n\t\n\t      function ringStart() {\n\t        lineStart();\n\t        resampleStream.point = ringPoint;\n\t        resampleStream.lineEnd = ringEnd;\n\t      }\n\t\n\t      function ringPoint(lambda, phi) {\n\t        linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n\t        resampleStream.point = linePoint;\n\t      }\n\t\n\t      function ringEnd() {\n\t        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n\t        resampleStream.lineEnd = lineEnd;\n\t        lineEnd();\n\t      }\n\t\n\t      return resampleStream;\n\t    };\n\t  }\n\t\n\t  var transformRadians = transform$2({\n\t    point: function(x, y) {\n\t      this.stream.point(x * radians, y * radians);\n\t    }\n\t  });\n\t\n\t  function projection(project) {\n\t    return projectionMutator(function() { return project; })();\n\t  }\n\t\n\t  function projectionMutator(projectAt) {\n\t    var project,\n\t        k = 150, // scale\n\t        x = 480, y = 250, // translate\n\t        dx, dy, lambda = 0, phi = 0, // center\n\t        deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n\t        theta = null, preclip = clipAntimeridian, // clip angle\n\t        x0 = null, y0, x1, y1, postclip = identity$7, // clip extent\n\t        delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n\t        cache,\n\t        cacheStream;\n\t\n\t    function projection(point) {\n\t      point = projectRotate(point[0] * radians, point[1] * radians);\n\t      return [point[0] * k + dx, dy - point[1] * k];\n\t    }\n\t\n\t    function invert(point) {\n\t      point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n\t      return point && [point[0] * degrees$1, point[1] * degrees$1];\n\t    }\n\t\n\t    function projectTransform(x, y) {\n\t      return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n\t    }\n\t\n\t    projection.stream = function(stream) {\n\t      return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n\t    };\n\t\n\t    projection.clipAngle = function(_) {\n\t      return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;\n\t    };\n\t\n\t    projection.clipExtent = function(_) {\n\t      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n\t    };\n\t\n\t    projection.scale = function(_) {\n\t      return arguments.length ? (k = +_, recenter()) : k;\n\t    };\n\t\n\t    projection.translate = function(_) {\n\t      return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n\t    };\n\t\n\t    projection.center = function(_) {\n\t      return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];\n\t    };\n\t\n\t    projection.rotate = function(_) {\n\t      return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];\n\t    };\n\t\n\t    projection.precision = function(_) {\n\t      return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);\n\t    };\n\t\n\t    projection.fitExtent = fitExtent(projection);\n\t\n\t    projection.fitSize = fitSize(projection);\n\t\n\t    function recenter() {\n\t      projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n\t      var center = project(lambda, phi);\n\t      dx = x - center[0] * k;\n\t      dy = y + center[1] * k;\n\t      return reset();\n\t    }\n\t\n\t    function reset() {\n\t      cache = cacheStream = null;\n\t      return projection;\n\t    }\n\t\n\t    return function() {\n\t      project = projectAt.apply(this, arguments);\n\t      projection.invert = project.invert && invert;\n\t      return recenter();\n\t    };\n\t  }\n\t\n\t  function conicProjection(projectAt) {\n\t    var phi0 = 0,\n\t        phi1 = pi$4 / 3,\n\t        m = projectionMutator(projectAt),\n\t        p = m(phi0, phi1);\n\t\n\t    p.parallels = function(_) {\n\t      return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];\n\t    };\n\t\n\t    return p;\n\t  }\n\t\n\t  function conicEqualAreaRaw(y0, y1) {\n\t    var sy0 = sin$1(y0),\n\t        n = (sy0 + sin$1(y1)) / 2,\n\t        c = 1 + sy0 * (2 * n - sy0),\n\t        r0 = sqrt$1(c) / n;\n\t\n\t    function project(x, y) {\n\t      var r = sqrt$1(c - 2 * n * sin$1(y)) / n;\n\t      return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n\t    }\n\t\n\t    project.invert = function(x, y) {\n\t      var r0y = r0 - y;\n\t      return [atan2(x, r0y) / n, asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n\t    };\n\t\n\t    return project;\n\t  }\n\t\n\t  function conicEqualArea() {\n\t    return conicProjection(conicEqualAreaRaw)\n\t        .scale(155.424)\n\t        .center([0, 33.6442]);\n\t  }\n\t\n\t  function albers() {\n\t    return conicEqualArea()\n\t        .parallels([29.5, 45.5])\n\t        .scale(1070)\n\t        .translate([480, 250])\n\t        .rotate([96, 0])\n\t        .center([-0.6, 38.7]);\n\t  }\n\t\n\t  // The projections must have mutually exclusive clip regions on the sphere,\n\t  // as this will avoid emitting interleaving lines and polygons.\n\t  function multiplex(streams) {\n\t    var n = streams.length;\n\t    return {\n\t      point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n\t      sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n\t      lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n\t      lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n\t      polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n\t      polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n\t    };\n\t  }\n\t\n\t  // A composite projection for the United States, configured by default for\n\t  // 960×500. The projection also works quite well at 960×600 if you change the\n\t  // scale to 1285 and adjust the translate accordingly. The set of standard\n\t  // parallels for each region comes from USGS, which is published here:\n\t  // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n\t  function albersUsa() {\n\t    var cache,\n\t        cacheStream,\n\t        lower48 = albers(), lower48Point,\n\t        alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n\t        hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n\t        point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\t\n\t    function albersUsa(coordinates) {\n\t      var x = coordinates[0], y = coordinates[1];\n\t      return point = null,\n\t          (lower48Point.point(x, y), point)\n\t          || (alaskaPoint.point(x, y), point)\n\t          || (hawaiiPoint.point(x, y), point);\n\t    }\n\t\n\t    albersUsa.invert = function(coordinates) {\n\t      var k = lower48.scale(),\n\t          t = lower48.translate(),\n\t          x = (coordinates[0] - t[0]) / k,\n\t          y = (coordinates[1] - t[1]) / k;\n\t      return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n\t          : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n\t          : lower48).invert(coordinates);\n\t    };\n\t\n\t    albersUsa.stream = function(stream) {\n\t      return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n\t    };\n\t\n\t    albersUsa.precision = function(_) {\n\t      if (!arguments.length) return lower48.precision();\n\t      lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n\t      return albersUsa;\n\t    };\n\t\n\t    albersUsa.scale = function(_) {\n\t      if (!arguments.length) return lower48.scale();\n\t      lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n\t      return albersUsa.translate(lower48.translate());\n\t    };\n\t\n\t    albersUsa.translate = function(_) {\n\t      if (!arguments.length) return lower48.translate();\n\t      var k = lower48.scale(), x = +_[0], y = +_[1];\n\t\n\t      lower48Point = lower48\n\t          .translate(_)\n\t          .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n\t          .stream(pointStream);\n\t\n\t      alaskaPoint = alaska\n\t          .translate([x - 0.307 * k, y + 0.201 * k])\n\t          .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])\n\t          .stream(pointStream);\n\t\n\t      hawaiiPoint = hawaii\n\t          .translate([x - 0.205 * k, y + 0.212 * k])\n\t          .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])\n\t          .stream(pointStream);\n\t\n\t      return albersUsa;\n\t    };\n\t\n\t    albersUsa.fitExtent = fitExtent(albersUsa);\n\t\n\t    albersUsa.fitSize = fitSize(albersUsa);\n\t\n\t    return albersUsa.scale(1070);\n\t  }\n\t\n\t  function azimuthalRaw(scale) {\n\t    return function(x, y) {\n\t      var cx = cos$1(x),\n\t          cy = cos$1(y),\n\t          k = scale(cx * cy);\n\t      return [\n\t        k * cy * sin$1(x),\n\t        k * sin$1(y)\n\t      ];\n\t    }\n\t  }\n\t\n\t  function azimuthalInvert(angle) {\n\t    return function(x, y) {\n\t      var z = sqrt$1(x * x + y * y),\n\t          c = angle(z),\n\t          sc = sin$1(c),\n\t          cc = cos$1(c);\n\t      return [\n\t        atan2(x * sc, z * cc),\n\t        asin$1(z && y * sc / z)\n\t      ];\n\t    }\n\t  }\n\t\n\t  var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n\t    return sqrt$1(2 / (1 + cxcy));\n\t  });\n\t\n\t  azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n\t    return 2 * asin$1(z / 2);\n\t  });\n\t\n\t  function azimuthalEqualArea() {\n\t    return projection(azimuthalEqualAreaRaw)\n\t        .scale(124.75)\n\t        .clipAngle(180 - 1e-3);\n\t  }\n\t\n\t  var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n\t    return (c = acos(c)) && c / sin$1(c);\n\t  });\n\t\n\t  azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n\t    return z;\n\t  });\n\t\n\t  function azimuthalEquidistant() {\n\t    return projection(azimuthalEquidistantRaw)\n\t        .scale(79.4188)\n\t        .clipAngle(180 - 1e-3);\n\t  }\n\t\n\t  function mercatorRaw(lambda, phi) {\n\t    return [lambda, log$1(tan((halfPi$3 + phi) / 2))];\n\t  }\n\t\n\t  mercatorRaw.invert = function(x, y) {\n\t    return [x, 2 * atan(exp(y)) - halfPi$3];\n\t  };\n\t\n\t  function mercator() {\n\t    return mercatorProjection(mercatorRaw)\n\t        .scale(961 / tau$4);\n\t  }\n\t\n\t  function mercatorProjection(project) {\n\t    var m = projection(project),\n\t        scale = m.scale,\n\t        translate = m.translate,\n\t        clipExtent = m.clipExtent,\n\t        clipAuto;\n\t\n\t    m.scale = function(_) {\n\t      return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();\n\t    };\n\t\n\t    m.translate = function(_) {\n\t      return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();\n\t    };\n\t\n\t    m.clipExtent = function(_) {\n\t      if (!arguments.length) return clipAuto ? null : clipExtent();\n\t      if (clipAuto = _ == null) {\n\t        var k = pi$4 * scale(),\n\t            t = translate();\n\t        _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];\n\t      }\n\t      clipExtent(_);\n\t      return m;\n\t    };\n\t\n\t    return m.clipExtent(null);\n\t  }\n\t\n\t  function tany(y) {\n\t    return tan((halfPi$3 + y) / 2);\n\t  }\n\t\n\t  function conicConformalRaw(y0, y1) {\n\t    var cy0 = cos$1(y0),\n\t        n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),\n\t        f = cy0 * pow$1(tany(y0), n) / n;\n\t\n\t    if (!n) return mercatorRaw;\n\t\n\t    function project(x, y) {\n\t      if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }\n\t      else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }\n\t      var r = f / pow$1(tany(y), n);\n\t      return [r * sin$1(n * x), f - r * cos$1(n * x)];\n\t    }\n\t\n\t    project.invert = function(x, y) {\n\t      var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);\n\t      return [atan2(x, fy) / n, 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];\n\t    };\n\t\n\t    return project;\n\t  }\n\t\n\t  function conicConformal() {\n\t    return conicProjection(conicConformalRaw)\n\t        .scale(109.5)\n\t        .parallels([30, 30]);\n\t  }\n\t\n\t  function equirectangularRaw(lambda, phi) {\n\t    return [lambda, phi];\n\t  }\n\t\n\t  equirectangularRaw.invert = equirectangularRaw;\n\t\n\t  function equirectangular() {\n\t    return projection(equirectangularRaw)\n\t        .scale(152.63);\n\t  }\n\t\n\t  function conicEquidistantRaw(y0, y1) {\n\t    var cy0 = cos$1(y0),\n\t        n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n\t        g = cy0 / n + y0;\n\t\n\t    if (abs(n) < epsilon$4) return equirectangularRaw;\n\t\n\t    function project(x, y) {\n\t      var gy = g - y, nx = n * x;\n\t      return [gy * sin$1(nx), g - gy * cos$1(nx)];\n\t    }\n\t\n\t    project.invert = function(x, y) {\n\t      var gy = g - y;\n\t      return [atan2(x, gy) / n, g - sign$1(n) * sqrt$1(x * x + gy * gy)];\n\t    };\n\t\n\t    return project;\n\t  }\n\t\n\t  function conicEquidistant() {\n\t    return conicProjection(conicEquidistantRaw)\n\t        .scale(131.154)\n\t        .center([0, 13.9389]);\n\t  }\n\t\n\t  function gnomonicRaw(x, y) {\n\t    var cy = cos$1(y), k = cos$1(x) * cy;\n\t    return [cy * sin$1(x) / k, sin$1(y) / k];\n\t  }\n\t\n\t  gnomonicRaw.invert = azimuthalInvert(atan);\n\t\n\t  function gnomonic() {\n\t    return projection(gnomonicRaw)\n\t        .scale(144.049)\n\t        .clipAngle(60);\n\t  }\n\t\n\t  function orthographicRaw(x, y) {\n\t    return [cos$1(y) * sin$1(x), sin$1(y)];\n\t  }\n\t\n\t  orthographicRaw.invert = azimuthalInvert(asin$1);\n\t\n\t  function orthographic() {\n\t    return projection(orthographicRaw)\n\t        .scale(249.5)\n\t        .clipAngle(90 + epsilon$4);\n\t  }\n\t\n\t  function stereographicRaw(x, y) {\n\t    var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n\t    return [cy * sin$1(x) / k, sin$1(y) / k];\n\t  }\n\t\n\t  stereographicRaw.invert = azimuthalInvert(function(z) {\n\t    return 2 + atan(z);\n\t  });\n\t\n\t  function stereographic() {\n\t    return projection(stereographicRaw)\n\t        .scale(250)\n\t        .clipAngle(142);\n\t  }\n\t\n\t  function transverseMercatorRaw(lambda, phi) {\n\t    return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];\n\t  }\n\t\n\t  transverseMercatorRaw.invert = function(x, y) {\n\t    return [-y, 2 * atan(exp(x)) - halfPi$3];\n\t  };\n\t\n\t  function transverseMercator() {\n\t    var m = mercatorProjection(transverseMercatorRaw),\n\t        center = m.center,\n\t        rotate = m.rotate;\n\t\n\t    m.center = function(_) {\n\t      return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n\t    };\n\t\n\t    m.rotate = function(_) {\n\t      return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n\t    };\n\t\n\t    return rotate([0, 0, 90])\n\t        .scale(159.155);\n\t  }\n\t\n\t  exports.version = version;\n\t  exports.bisect = bisectRight;\n\t  exports.bisectRight = bisectRight;\n\t  exports.bisectLeft = bisectLeft;\n\t  exports.ascending = ascending;\n\t  exports.bisector = bisector;\n\t  exports.descending = descending;\n\t  exports.deviation = deviation;\n\t  exports.extent = extent;\n\t  exports.histogram = histogram;\n\t  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n\t  exports.thresholdScott = scott;\n\t  exports.thresholdSturges = sturges;\n\t  exports.max = max;\n\t  exports.mean = mean;\n\t  exports.median = median;\n\t  exports.merge = merge;\n\t  exports.min = min;\n\t  exports.pairs = pairs;\n\t  exports.permute = permute;\n\t  exports.quantile = threshold;\n\t  exports.range = range;\n\t  exports.scan = scan;\n\t  exports.shuffle = shuffle;\n\t  exports.sum = sum;\n\t  exports.ticks = ticks;\n\t  exports.tickStep = tickStep;\n\t  exports.transpose = transpose;\n\t  exports.variance = variance;\n\t  exports.zip = zip;\n\t  exports.entries = entries;\n\t  exports.keys = keys;\n\t  exports.values = values;\n\t  exports.map = map$1;\n\t  exports.set = set;\n\t  exports.nest = nest;\n\t  exports.randomUniform = uniform;\n\t  exports.randomNormal = normal;\n\t  exports.randomLogNormal = logNormal;\n\t  exports.randomBates = bates;\n\t  exports.randomIrwinHall = irwinHall;\n\t  exports.randomExponential = exponential;\n\t  exports.easeLinear = linear;\n\t  exports.easeQuad = quadInOut;\n\t  exports.easeQuadIn = quadIn;\n\t  exports.easeQuadOut = quadOut;\n\t  exports.easeQuadInOut = quadInOut;\n\t  exports.easeCubic = easeCubicInOut;\n\t  exports.easeCubicIn = cubicIn;\n\t  exports.easeCubicOut = cubicOut;\n\t  exports.easeCubicInOut = easeCubicInOut;\n\t  exports.easePoly = polyInOut;\n\t  exports.easePolyIn = polyIn;\n\t  exports.easePolyOut = polyOut;\n\t  exports.easePolyInOut = polyInOut;\n\t  exports.easeSin = sinInOut;\n\t  exports.easeSinIn = sinIn;\n\t  exports.easeSinOut = sinOut;\n\t  exports.easeSinInOut = sinInOut;\n\t  exports.easeExp = expInOut;\n\t  exports.easeExpIn = expIn;\n\t  exports.easeExpOut = expOut;\n\t  exports.easeExpInOut = expInOut;\n\t  exports.easeCircle = circleInOut;\n\t  exports.easeCircleIn = circleIn;\n\t  exports.easeCircleOut = circleOut;\n\t  exports.easeCircleInOut = circleInOut;\n\t  exports.easeBounce = bounceOut;\n\t  exports.easeBounceIn = bounceIn;\n\t  exports.easeBounceOut = bounceOut;\n\t  exports.easeBounceInOut = bounceInOut;\n\t  exports.easeBack = backInOut;\n\t  exports.easeBackIn = backIn;\n\t  exports.easeBackOut = backOut;\n\t  exports.easeBackInOut = backInOut;\n\t  exports.easeElastic = elasticOut;\n\t  exports.easeElasticIn = elasticIn;\n\t  exports.easeElasticOut = elasticOut;\n\t  exports.easeElasticInOut = elasticInOut;\n\t  exports.polygonArea = area;\n\t  exports.polygonCentroid = centroid;\n\t  exports.polygonHull = hull;\n\t  exports.polygonContains = contains;\n\t  exports.polygonLength = length$1;\n\t  exports.path = path;\n\t  exports.quadtree = quadtree;\n\t  exports.queue = queue;\n\t  exports.arc = arc;\n\t  exports.area = area$1;\n\t  exports.line = line;\n\t  exports.pie = pie;\n\t  exports.radialArea = radialArea;\n\t  exports.radialLine = radialLine$1;\n\t  exports.symbol = symbol;\n\t  exports.symbols = symbols;\n\t  exports.symbolCircle = circle;\n\t  exports.symbolCross = cross$1;\n\t  exports.symbolDiamond = diamond;\n\t  exports.symbolSquare = square;\n\t  exports.symbolStar = star;\n\t  exports.symbolTriangle = triangle;\n\t  exports.symbolWye = wye;\n\t  exports.curveBasisClosed = basisClosed;\n\t  exports.curveBasisOpen = basisOpen;\n\t  exports.curveBasis = basis;\n\t  exports.curveBundle = bundle;\n\t  exports.curveCardinalClosed = cardinalClosed;\n\t  exports.curveCardinalOpen = cardinalOpen;\n\t  exports.curveCardinal = cardinal;\n\t  exports.curveCatmullRomClosed = catmullRomClosed;\n\t  exports.curveCatmullRomOpen = catmullRomOpen;\n\t  exports.curveCatmullRom = catmullRom;\n\t  exports.curveLinearClosed = linearClosed;\n\t  exports.curveLinear = curveLinear;\n\t  exports.curveMonotoneX = monotoneX;\n\t  exports.curveMonotoneY = monotoneY;\n\t  exports.curveNatural = natural;\n\t  exports.curveStep = step;\n\t  exports.curveStepAfter = stepAfter;\n\t  exports.curveStepBefore = stepBefore;\n\t  exports.stack = stack;\n\t  exports.stackOffsetExpand = expand;\n\t  exports.stackOffsetNone = none;\n\t  exports.stackOffsetSilhouette = silhouette;\n\t  exports.stackOffsetWiggle = wiggle;\n\t  exports.stackOrderAscending = ascending$1;\n\t  exports.stackOrderDescending = descending$2;\n\t  exports.stackOrderInsideOut = insideOut;\n\t  exports.stackOrderNone = none$1;\n\t  exports.stackOrderReverse = reverse;\n\t  exports.color = color;\n\t  exports.rgb = colorRgb;\n\t  exports.hsl = colorHsl;\n\t  exports.lab = lab;\n\t  exports.hcl = colorHcl;\n\t  exports.cubehelix = cubehelix;\n\t  exports.interpolate = interpolate;\n\t  exports.interpolateArray = array$1;\n\t  exports.interpolateDate = date;\n\t  exports.interpolateNumber = interpolateNumber;\n\t  exports.interpolateObject = object;\n\t  exports.interpolateRound = interpolateRound;\n\t  exports.interpolateString = interpolateString;\n\t  exports.interpolateTransformCss = interpolateTransform$1;\n\t  exports.interpolateTransformSvg = interpolateTransform$2;\n\t  exports.interpolateZoom = interpolateZoom;\n\t  exports.interpolateRgb = interpolateRgb;\n\t  exports.interpolateRgbBasis = rgbBasis;\n\t  exports.interpolateRgbBasisClosed = rgbBasisClosed;\n\t  exports.interpolateHsl = hsl$1;\n\t  exports.interpolateHslLong = hslLong;\n\t  exports.interpolateLab = lab$1;\n\t  exports.interpolateHcl = hcl$1;\n\t  exports.interpolateHclLong = hclLong;\n\t  exports.interpolateCubehelix = cubehelix$2;\n\t  exports.interpolateCubehelixLong = interpolateCubehelixLong;\n\t  exports.interpolateBasis = basis$2;\n\t  exports.interpolateBasisClosed = basisClosed$1;\n\t  exports.quantize = quantize;\n\t  exports.dispatch = dispatch;\n\t  exports.dsvFormat = dsv;\n\t  exports.csvParse = csvParse;\n\t  exports.csvParseRows = csvParseRows;\n\t  exports.csvFormat = csvFormat;\n\t  exports.csvFormatRows = csvFormatRows;\n\t  exports.tsvParse = tsvParse;\n\t  exports.tsvParseRows = tsvParseRows;\n\t  exports.tsvFormat = tsvFormat;\n\t  exports.tsvFormatRows = tsvFormatRows;\n\t  exports.request = request;\n\t  exports.html = html;\n\t  exports.json = json;\n\t  exports.text = text;\n\t  exports.xml = xml;\n\t  exports.csv = csv$1;\n\t  exports.tsv = tsv$1;\n\t  exports.now = now;\n\t  exports.timer = timer;\n\t  exports.timerFlush = timerFlush;\n\t  exports.timeout = timeout$1;\n\t  exports.interval = interval$1;\n\t  exports.timeInterval = newInterval;\n\t  exports.timeMillisecond = millisecond;\n\t  exports.timeMilliseconds = milliseconds;\n\t  exports.timeSecond = second;\n\t  exports.timeSeconds = seconds;\n\t  exports.timeMinute = minute;\n\t  exports.timeMinutes = minutes;\n\t  exports.timeHour = hour;\n\t  exports.timeHours = hours;\n\t  exports.timeDay = day;\n\t  exports.timeDays = days;\n\t  exports.timeWeek = timeWeek;\n\t  exports.timeWeeks = sundays;\n\t  exports.timeSunday = timeWeek;\n\t  exports.timeSundays = sundays;\n\t  exports.timeMonday = timeMonday;\n\t  exports.timeMondays = mondays;\n\t  exports.timeTuesday = tuesday;\n\t  exports.timeTuesdays = tuesdays;\n\t  exports.timeWednesday = wednesday;\n\t  exports.timeWednesdays = wednesdays;\n\t  exports.timeThursday = thursday;\n\t  exports.timeThursdays = thursdays;\n\t  exports.timeFriday = friday;\n\t  exports.timeFridays = fridays;\n\t  exports.timeSaturday = saturday;\n\t  exports.timeSaturdays = saturdays;\n\t  exports.timeMonth = month;\n\t  exports.timeMonths = months;\n\t  exports.timeYear = year;\n\t  exports.timeYears = years;\n\t  exports.utcMillisecond = millisecond;\n\t  exports.utcMilliseconds = milliseconds;\n\t  exports.utcSecond = second;\n\t  exports.utcSeconds = seconds;\n\t  exports.utcMinute = utcMinute;\n\t  exports.utcMinutes = utcMinutes;\n\t  exports.utcHour = utcHour;\n\t  exports.utcHours = utcHours;\n\t  exports.utcDay = utcDay;\n\t  exports.utcDays = utcDays;\n\t  exports.utcWeek = utcWeek;\n\t  exports.utcWeeks = utcSundays;\n\t  exports.utcSunday = utcWeek;\n\t  exports.utcSundays = utcSundays;\n\t  exports.utcMonday = utcMonday;\n\t  exports.utcMondays = utcMondays;\n\t  exports.utcTuesday = utcTuesday;\n\t  exports.utcTuesdays = utcTuesdays;\n\t  exports.utcWednesday = utcWednesday;\n\t  exports.utcWednesdays = utcWednesdays;\n\t  exports.utcThursday = utcThursday;\n\t  exports.utcThursdays = utcThursdays;\n\t  exports.utcFriday = utcFriday;\n\t  exports.utcFridays = utcFridays;\n\t  exports.utcSaturday = utcSaturday;\n\t  exports.utcSaturdays = utcSaturdays;\n\t  exports.utcMonth = utcMonth;\n\t  exports.utcMonths = utcMonths;\n\t  exports.utcYear = utcYear;\n\t  exports.utcYears = utcYears;\n\t  exports.formatLocale = formatLocale;\n\t  exports.formatDefaultLocale = defaultLocale;\n\t  exports.formatSpecifier = formatSpecifier;\n\t  exports.precisionFixed = precisionFixed;\n\t  exports.precisionPrefix = precisionPrefix;\n\t  exports.precisionRound = precisionRound;\n\t  exports.isoFormat = formatIso;\n\t  exports.isoParse = parseIso;\n\t  exports.timeFormatLocale = formatLocale$1;\n\t  exports.timeFormatDefaultLocale = defaultLocale$1;\n\t  exports.scaleBand = band;\n\t  exports.scalePoint = point$4;\n\t  exports.scaleIdentity = identity$4;\n\t  exports.scaleLinear = linear$2;\n\t  exports.scaleLog = log;\n\t  exports.scaleOrdinal = ordinal;\n\t  exports.scaleImplicit = implicit;\n\t  exports.scalePow = pow;\n\t  exports.scaleSqrt = sqrt;\n\t  exports.scaleQuantile = quantile;\n\t  exports.scaleQuantize = quantize$1;\n\t  exports.scaleThreshold = threshold$1;\n\t  exports.scaleTime = time;\n\t  exports.scaleUtc = utcTime;\n\t  exports.schemeCategory10 = category10;\n\t  exports.schemeCategory20b = category20b;\n\t  exports.schemeCategory20c = category20c;\n\t  exports.schemeCategory20 = category20;\n\t  exports.scaleSequential = sequential;\n\t  exports.interpolateCubehelixDefault = cubehelix$3;\n\t  exports.interpolateRainbow = rainbow$1;\n\t  exports.interpolateWarm = warm;\n\t  exports.interpolateCool = cool;\n\t  exports.interpolateViridis = viridis;\n\t  exports.interpolateMagma = magma;\n\t  exports.interpolateInferno = inferno;\n\t  exports.interpolatePlasma = plasma;\n\t  exports.creator = creator;\n\t  exports.customEvent = customEvent;\n\t  exports.local = local;\n\t  exports.matcher = matcher$1;\n\t  exports.mouse = mouse;\n\t  exports.namespace = namespace;\n\t  exports.namespaces = namespaces;\n\t  exports.select = select;\n\t  exports.selectAll = selectAll;\n\t  exports.selection = selection;\n\t  exports.selector = selector;\n\t  exports.selectorAll = selectorAll;\n\t  exports.touch = touch;\n\t  exports.touches = touches;\n\t  exports.window = window;\n\t  exports.active = active;\n\t  exports.interrupt = interrupt;\n\t  exports.transition = transition;\n\t  exports.axisTop = axisTop;\n\t  exports.axisRight = axisRight;\n\t  exports.axisBottom = axisBottom;\n\t  exports.axisLeft = axisLeft;\n\t  exports.cluster = cluster;\n\t  exports.hierarchy = hierarchy;\n\t  exports.pack = index;\n\t  exports.packSiblings = siblings;\n\t  exports.packEnclose = enclose;\n\t  exports.partition = partition;\n\t  exports.stratify = stratify;\n\t  exports.tree = tree;\n\t  exports.treemap = index$1;\n\t  exports.treemapBinary = binary;\n\t  exports.treemapDice = treemapDice;\n\t  exports.treemapSlice = treemapSlice;\n\t  exports.treemapSliceDice = sliceDice;\n\t  exports.treemapSquarify = squarify;\n\t  exports.treemapResquarify = resquarify;\n\t  exports.forceCenter = center$1;\n\t  exports.forceCollide = collide;\n\t  exports.forceLink = link;\n\t  exports.forceManyBody = manyBody;\n\t  exports.forceSimulation = simulation;\n\t  exports.forceX = x$3;\n\t  exports.forceY = y$3;\n\t  exports.drag = drag;\n\t  exports.dragDisable = dragDisable;\n\t  exports.dragEnable = dragEnable;\n\t  exports.voronoi = voronoi;\n\t  exports.zoom = zoom;\n\t  exports.zoomIdentity = identity$6;\n\t  exports.zoomTransform = transform;\n\t  exports.brush = brush;\n\t  exports.brushX = brushX;\n\t  exports.brushY = brushY;\n\t  exports.brushSelection = brushSelection;\n\t  exports.chord = chord;\n\t  exports.ribbon = ribbon;\n\t  exports.geoAlbers = albers;\n\t  exports.geoAlbersUsa = albersUsa;\n\t  exports.geoArea = area$2;\n\t  exports.geoAzimuthalEqualArea = azimuthalEqualArea;\n\t  exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\n\t  exports.geoAzimuthalEquidistant = azimuthalEquidistant;\n\t  exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\n\t  exports.geoBounds = bounds;\n\t  exports.geoCentroid = centroid$1;\n\t  exports.geoCircle = circle$1;\n\t  exports.geoClipExtent = extent$1;\n\t  exports.geoConicConformal = conicConformal;\n\t  exports.geoConicConformalRaw = conicConformalRaw;\n\t  exports.geoConicEqualArea = conicEqualArea;\n\t  exports.geoConicEqualAreaRaw = conicEqualAreaRaw;\n\t  exports.geoConicEquidistant = conicEquidistant;\n\t  exports.geoConicEquidistantRaw = conicEquidistantRaw;\n\t  exports.geoDistance = distance;\n\t  exports.geoEquirectangular = equirectangular;\n\t  exports.geoEquirectangularRaw = equirectangularRaw;\n\t  exports.geoGnomonic = gnomonic;\n\t  exports.geoGnomonicRaw = gnomonicRaw;\n\t  exports.geoGraticule = graticule;\n\t  exports.geoInterpolate = interpolate$2;\n\t  exports.geoLength = length$2;\n\t  exports.geoMercator = mercator;\n\t  exports.geoMercatorRaw = mercatorRaw;\n\t  exports.geoOrthographic = orthographic;\n\t  exports.geoOrthographicRaw = orthographicRaw;\n\t  exports.geoPath = index$3;\n\t  exports.geoProjection = projection;\n\t  exports.geoProjectionMutator = projectionMutator;\n\t  exports.geoRotation = rotation;\n\t  exports.geoStereographic = stereographic;\n\t  exports.geoStereographicRaw = stereographicRaw;\n\t  exports.geoStream = geoStream;\n\t  exports.geoTransform = transform$1;\n\t  exports.geoTransverseMercator = transverseMercator;\n\t  exports.geoTransverseMercatorRaw = transverseMercatorRaw;\n\t\n\t  Object.defineProperty(exports, '__esModule', { value: true });\n\t\n\t}));\n\n/***/ },\n/* 157 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar ResponsiveComponentsUtils_1 = __webpack_require__(141);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Facet_1 = __webpack_require__(158);\n\tvar FacetSlider_1 = __webpack_require__(146);\n\tvar ResponsiveDropdown_1 = __webpack_require__(145);\n\tvar ResponsiveDropdownContent_1 = __webpack_require__(143);\n\tvar ResponsiveDropdownHeader_1 = __webpack_require__(144);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar ResponsiveComponents_1 = __webpack_require__(19);\n\tvar _ = __webpack_require__(16);\n\tvar ResponsiveFacets = (function () {\n\t    function ResponsiveFacets(coveoRoot, ID, options, responsiveDropdown) {\n\t        this.coveoRoot = coveoRoot;\n\t        this.ID = ID;\n\t        this.facets = [];\n\t        this.facetSliders = [];\n\t        this.preservePositionOriginalValues = [];\n\t        this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n\t        this.dropdown = this.buildDropdown(responsiveDropdown);\n\t        this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n\t        this.bindDropdownContentEvents();\n\t        this.registerOnOpenHandler();\n\t        this.registerOnCloseHandler();\n\t        this.registerQueryEvents();\n\t        this.logger = new Logger_1.Logger(this);\n\t        if (Utils_1.Utils.isNullOrUndefined(options.responsiveBreakpoint)) {\n\t            this.breakpoint = this.searchInterface ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : new ResponsiveComponents_1.ResponsiveComponents().getMediumScreenWidth();\n\t        }\n\t        else {\n\t            this.breakpoint = options.responsiveBreakpoint;\n\t        }\n\t    }\n\t    ResponsiveFacets.init = function (root, component, options) {\n\t        if (!Dom_1.$$(root).find('.coveo-facet-column')) {\n\t            var logger = new Logger_1.Logger('ResponsiveFacets');\n\t            logger.info('No element with class coveo-facet-column. Responsive facets cannot be enabled');\n\t            return;\n\t        }\n\t        ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveFacets, Dom_1.$$(root), Facet_1.Facet.ID, component, options);\n\t    };\n\t    ResponsiveFacets.prototype.registerComponent = function (accept) {\n\t        if (accept instanceof Facet_1.Facet) {\n\t            this.facets.push(accept);\n\t            this.preservePositionOriginalValues.push(accept.options.preservePosition);\n\t            return true;\n\t        }\n\t        else if (accept instanceof FacetSlider_1.FacetSlider) {\n\t            this.facetSliders.push(accept);\n\t            return false;\n\t        }\n\t        return false;\n\t    };\n\t    ResponsiveFacets.prototype.needDropdownWrapper = function () {\n\t        return this.needSmallMode();\n\t    };\n\t    ResponsiveFacets.prototype.handleResizeEvent = function () {\n\t        if (this.needSmallMode() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n\t            this.changeToSmallMode();\n\t        }\n\t        else if (!this.needSmallMode() && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n\t            this.changeToLargeMode();\n\t        }\n\t        if (this.dropdown.isOpened) {\n\t            this.dropdown.dropdownContent.positionDropdown();\n\t        }\n\t    };\n\t    ResponsiveFacets.prototype.dismissFacetSearches = function () {\n\t        _.each(this.facets, function (facet) {\n\t            if (facet.facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n\t                facet.facetSearch.completelyDismissSearch();\n\t            }\n\t        });\n\t    };\n\t    ResponsiveFacets.prototype.drawFacetSliderGraphs = function () {\n\t        _.each(this.facetSliders, function (facetSlider) { return facetSlider.drawDelayedGraphData(); });\n\t    };\n\t    ResponsiveFacets.prototype.needSmallMode = function () {\n\t        return this.coveoRoot.width() <= this.breakpoint;\n\t    };\n\t    ResponsiveFacets.prototype.changeToSmallMode = function () {\n\t        this.dropdown.close();\n\t        this.disableFacetPreservePosition();\n\t        Dom_1.$$(this.coveoRoot.find(\".\" + ResponsiveComponentsManager_1.ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS)).append(this.dropdown.dropdownHeader.element.el);\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallFacet(this.coveoRoot);\n\t    };\n\t    ResponsiveFacets.prototype.changeToLargeMode = function () {\n\t        this.restoreFacetPreservePositionValue();\n\t        this.dropdown.cleanUp();\n\t        ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallFacet(this.coveoRoot);\n\t    };\n\t    ResponsiveFacets.prototype.buildDropdown = function (responsiveDropdown) {\n\t        var dropdownContent = this.buildDropdownContent();\n\t        var dropdownHeader = this.buildDropdownHeader();\n\t        var dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown_1.ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n\t        return dropdown;\n\t    };\n\t    ResponsiveFacets.prototype.buildDropdownContent = function () {\n\t        var dropdownContentElement = Dom_1.$$(this.coveoRoot.find('.coveo-facet-column'));\n\t        var filterByContainer = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by-container', style: 'display: none' });\n\t        var filterBy = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by' });\n\t        filterBy.text(Strings_1.l('Filter by:'));\n\t        filterByContainer.append(filterBy.el);\n\t        dropdownContentElement.prepend(filterByContainer.el);\n\t        var dropdownContent = new ResponsiveDropdownContent_1.ResponsiveDropdownContent('facet', dropdownContentElement, this.coveoRoot, ResponsiveFacets.DROPDOWN_MIN_WIDTH, ResponsiveFacets.DROPDOWN_WIDTH_RATIO);\n\t        return dropdownContent;\n\t    };\n\t    ResponsiveFacets.prototype.buildDropdownHeader = function () {\n\t        var dropdownHeaderElement = Dom_1.$$('a');\n\t        var content = Dom_1.$$('p');\n\t        content.text(this.dropdownHeaderLabel);\n\t        dropdownHeaderElement.el.appendChild(content.el);\n\t        var dropdownHeader = new ResponsiveDropdownHeader_1.ResponsiveDropdownHeader('facet', dropdownHeaderElement);\n\t        return dropdownHeader;\n\t    };\n\t    ResponsiveFacets.prototype.registerOnOpenHandler = function () {\n\t        this.dropdown.registerOnOpenHandler(this.drawFacetSliderGraphs, this);\n\t    };\n\t    ResponsiveFacets.prototype.registerOnCloseHandler = function () {\n\t        this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n\t    };\n\t    ResponsiveFacets.prototype.registerQueryEvents = function () {\n\t        var _this = this;\n\t        this.coveoRoot.on(QueryEvents_1.QueryEvents.noResults, function () { return _this.handleNoResults(); });\n\t        this.coveoRoot.on(QueryEvents_1.QueryEvents.querySuccess, function (e, data) { return _this.handleQuerySuccess(data); });\n\t        this.coveoRoot.on(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleQueryError(); });\n\t    };\n\t    ResponsiveFacets.prototype.bindDropdownContentEvents = function () {\n\t        var _this = this;\n\t        this.dropdown.dropdownContent.element.on('scroll', _.debounce(function () {\n\t            _.each(_this.facets, function (facet) {\n\t                var facetSearch = facet.facetSearch;\n\t                if (facetSearch && facetSearch.currentlyDisplayedResults && !_this.isFacetSearchScrolledIntoView(facetSearch.search)) {\n\t                    facet.facetSearch.positionSearchResults(_this.dropdown.dropdownContent.element.el);\n\t                }\n\t                else if (facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n\t                    facet.facetSearch.positionSearchResults();\n\t                }\n\t            });\n\t        }, ResponsiveFacets.DEBOUNCE_SCROLL_WAIT));\n\t    };\n\t    ResponsiveFacets.prototype.restoreFacetPreservePositionValue = function () {\n\t        var _this = this;\n\t        _.each(this.facets, function (facet, index) { return facet.options.preservePosition = _this.preservePositionOriginalValues[index]; });\n\t    };\n\t    ResponsiveFacets.prototype.disableFacetPreservePosition = function () {\n\t        _.each(this.facets, function (facet) { return facet.options.preservePosition = false; });\n\t    };\n\t    ResponsiveFacets.prototype.isFacetSearchScrolledIntoView = function (facetSearchElement) {\n\t        var facetTop = facetSearchElement.getBoundingClientRect().top;\n\t        var facetBottom = facetSearchElement.getBoundingClientRect().bottom;\n\t        var dropdownTop = this.dropdown.dropdownContent.element.el.getBoundingClientRect().top;\n\t        var dropdownBottom = this.dropdown.dropdownContent.element.el.getBoundingClientRect().bottom;\n\t        dropdownTop = dropdownTop >= 0 ? dropdownTop : 0;\n\t        return (facetTop >= dropdownTop) && (facetBottom <= dropdownBottom);\n\t    };\n\t    ResponsiveFacets.prototype.getDropdownHeaderLabel = function () {\n\t        var dropdownHeaderLabel;\n\t        var selector = \".\" + Component_1.Component.computeCssClassName(Facet_1.Facet) + \", .\" + Component_1.Component.computeCssClassName(FacetSlider_1.FacetSlider);\n\t        _.each(Dom_1.$$(this.coveoRoot.find('.coveo-facet-column')).findAll(selector), function (facetElement) {\n\t            var facet;\n\t            if (Dom_1.$$(facetElement).hasClass(Component_1.Component.computeCssClassName(Facet_1.Facet))) {\n\t                facet = Component_1.Component.get(facetElement, Facet_1.Facet);\n\t            }\n\t            else {\n\t                facet = Component_1.Component.get(facetElement, FacetSlider_1.FacetSlider);\n\t            }\n\t            if (!dropdownHeaderLabel && facet.options.dropdownHeaderLabel) {\n\t                dropdownHeaderLabel = facet.options.dropdownHeaderLabel;\n\t            }\n\t        });\n\t        if (!dropdownHeaderLabel) {\n\t            dropdownHeaderLabel = Strings_1.l(ResponsiveFacets.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n\t        }\n\t        return dropdownHeaderLabel;\n\t    };\n\t    ResponsiveFacets.prototype.handleNoResults = function () {\n\t        this.dropdown.dropdownHeader.hide();\n\t    };\n\t    ResponsiveFacets.prototype.handleQueryError = function () {\n\t        this.dropdown.dropdownHeader.hide();\n\t    };\n\t    ResponsiveFacets.prototype.handleQuerySuccess = function (data) {\n\t        if (data.results.totalCount === 0) {\n\t            this.dropdown.dropdownHeader.hide();\n\t        }\n\t        else {\n\t            this.dropdown.dropdownHeader.show();\n\t        }\n\t    };\n\t    return ResponsiveFacets;\n\t}());\n\tResponsiveFacets.DEBOUNCE_SCROLL_WAIT = 250;\n\tResponsiveFacets.DROPDOWN_MIN_WIDTH = 280;\n\tResponsiveFacets.DROPDOWN_WIDTH_RATIO = 0.35; // Used to set the width relative to the coveo root.\n\tResponsiveFacets.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'Filters';\n\texports.ResponsiveFacets = ResponsiveFacets;\n\n\n/***/ },\n/* 158 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../../controllers/HierarchicalFacetQueryController.ts\" />\n\t/// <reference path=\"../../controllers/FacetQueryController.ts\" />\n\t/// <reference path=\"FacetSearch.ts\" />\n\t/// <reference path=\"FacetSettings.ts\" />\n\t/// <reference path=\"FacetSort.ts\" />\n\t/// <reference path=\"FacetHeader.ts\" />\n\t/// <reference path=\"BreadcrumbValueElement.ts\" />\n\t/// <reference path=\"ValueElementRenderer.ts\" />\n\t/// <reference path=\"FacetSearchParameters.ts\" />\n\t/// <reference path=\"../HierarchicalFacet/HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar FacetValues_1 = __webpack_require__(159);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar FacetQueryController_1 = __webpack_require__(93);\n\tvar FacetSearch_1 = __webpack_require__(160);\n\tvar FacetSettings_1 = __webpack_require__(165);\n\tvar FacetSort_1 = __webpack_require__(166);\n\tvar FacetValuesList_1 = __webpack_require__(167);\n\tvar FacetHeader_1 = __webpack_require__(168);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar BreadcrumbValueElement_1 = __webpack_require__(169);\n\tvar BreadcrumbValuesList_1 = __webpack_require__(170);\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\tvar FacetSearchValuesList_1 = __webpack_require__(171);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Model_1 = __webpack_require__(100);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar OmniboxValueElement_1 = __webpack_require__(172);\n\tvar OmniboxValuesList_1 = __webpack_require__(173);\n\tvar ValueElementRenderer_1 = __webpack_require__(163);\n\tvar FacetSearchParameters_1 = __webpack_require__(94);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar ResponsiveFacets_1 = __webpack_require__(157);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar FacetValuesOrder_1 = __webpack_require__(164);\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Facet component displays a *facet* of the results for the current query. A facet consists of a list of values for\n\t * a given field occurring in the results, ordered using a configurable criteria.\n\t *\n\t * The list of values is obtained using an {@link IGroupByRequest} operation performed at the same time as the main\n\t * query.\n\t *\n\t * The Facet component allows the user to drill down inside results by restricting them to certain field values. It also\n\t * allows filtering out values from the Facet itself, and can provide a search box to look for specific values inside\n\t * larger sets.\n\t *\n\t * This is probably the most complex component in the Coveo JavaScript Search Framework and as such, it allows for many\n\t * different configuration options.\n\t *\n\t * See also {@link FacetRange} and {@link HierarchicalFacet} (which extend this component), and {@link FacetSlider}\n\t * (which does not properly extend this component, but is very similar).\n\t */\n\tvar Facet = (function (_super) {\n\t    __extends(Facet, _super);\n\t    /**\n\t     * Creates a new Facet component. Binds multiple query events as well.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Facet component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param facetClassId The ID to use for this facet (as Facet inherited from by other component\n\t     * (e.g.: {@link FacetRange}). Default value is `Facet`.\n\t     */\n\t    function Facet(element, options, bindings, facetClassId) {\n\t        if (facetClassId === void 0) { facetClassId = Facet.ID; }\n\t        var _this = _super.call(this, element, facetClassId, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.keepDisplayedValuesNextTime = false;\n\t        _this.values = new FacetValues_1.FacetValues();\n\t        _this.currentPage = 0;\n\t        _this.firstQuery = true;\n\t        _this.canFetchMore = true;\n\t        _this.showingWaitAnimation = false;\n\t        _this.listenToQueryStateChange = true;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Facet, options);\n\t        if (_this.options.valueCaption != null) {\n\t            _this.options.availableSorts = _.filter(_this.options.availableSorts, function (sort) { return !/^alpha.*$/.test(sort); });\n\t        }\n\t        ResponsiveFacets_1.ResponsiveFacets.init(_this.root, _this, _this.options);\n\t        // Serves as a way to render facet in the omnibox in the order in which they are instantiated\n\t        _this.omniboxZIndex = Facet.omniboxIndex;\n\t        Facet.omniboxIndex--;\n\t        _this.checkForComputedFieldAndSort();\n\t        _this.checkForValueCaptionType();\n\t        _this.checkForCustomSort();\n\t        _this.initFacetQueryController();\n\t        _this.initQueryEvents();\n\t        _this.initQueryStateEvents();\n\t        _this.initComponentStateEvents();\n\t        _this.initOmniboxEvents();\n\t        _this.initBreadCrumbEvents();\n\t        _this.initSearchAlertEvents();\n\t        _this.updateNumberOfValues();\n\t        _this.resize = function () {\n\t            if (!_this.disabled) {\n\t                FacetUtils_1.FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(_this);\n\t            }\n\t        };\n\t        window.addEventListener('resize', _.debounce(_this.resize, 200));\n\t        _this.bind.onRootElement(InitializationEvents_1.InitializationEvents.nuke, function () { return _this.handleNuke(); });\n\t        _this.bind.oneRootElement(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t            _this.firstQuery = false;\n\t        });\n\t        return _this;\n\t    }\n\t    Facet.prototype.createDom = function () {\n\t        var _this = this;\n\t        this.initBottomAndTopSpacer();\n\t        this.buildFacetContent();\n\t        this.updateAppearanceDependingOnState();\n\t        // After the facet has been created (and before the first query is applied)\n\t        // Try to load a state from the setting, if it's available\n\t        // Execute only _.once (only the first query, or the first time the user switch to a tab that contains a newly set of active facet)\n\t        if (this.facetSettings && this.options.enableSettingsFacetState) {\n\t            var loadOnce = _.once(function () {\n\t                _this.facetSettings.loadSavedState.apply(_this.facetSettings);\n\t            });\n\t            this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, loadOnce);\n\t        }\n\t    };\n\t    Facet.prototype.selectValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Selecting facet value', this.facetValuesList.select(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.selectMultipleValues = function (values) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(values);\n\t        this.ensureDom();\n\t        _.each(values, function (value) {\n\t            _this.logger.info('Selecting facet value', _this.facetValuesList.select(value));\n\t        });\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.deselectValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Deselecting facet value', this.facetValuesList.unselect(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.deselectMultipleValues = function (values) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(values);\n\t        this.ensureDom();\n\t        _.each(values, function (value) {\n\t            _this.logger.info('Deselecting facet value', _this.facetValuesList.unselect(value));\n\t        });\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.excludeValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Excluding facet value', this.facetValuesList.exclude(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.excludeMultipleValues = function (values) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(values);\n\t        this.ensureDom();\n\t        _.each(values, function (value) {\n\t            _this.logger.info('Excluding facet value', _this.facetValuesList.exclude(value));\n\t        });\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.unexcludeValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Unexcluding facet value', this.facetValuesList.unExclude(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.unexcludeMultipleValues = function (values) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(values);\n\t        this.ensureDom();\n\t        _.each(values, function (value) {\n\t            _this.logger.info('Unexcluding facet value', _this.facetValuesList.unExclude(value));\n\t        });\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.toggleSelectValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Toggle select facet value', this.facetValuesList.toggleSelect(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    Facet.prototype.toggleExcludeValue = function (value) {\n\t        Assert_1.Assert.exists(value);\n\t        this.ensureDom();\n\t        this.logger.info('Toggle exclude facet value', this.facetValuesList.toggleExclude(value));\n\t        this.facetValueHasChanged();\n\t    };\n\t    /**\n\t     * Returns the currently displayed values as a string array.\n\t     *\n\t     * @returns {any[]} The currently displayed values.\n\t     */\n\t    Facet.prototype.getDisplayedValues = function () {\n\t        return _.pluck(this.getDisplayedFacetValues(), 'value');\n\t    };\n\t    /**\n\t     * Returns the currently displayed values as an array of {@link FacetValue}.\n\t     *\n\t     * @returns {T[]} The currently displayed values.\n\t     */\n\t    Facet.prototype.getDisplayedFacetValues = function () {\n\t        this.ensureDom();\n\t        var displayed = this.facetValuesList.getAllCurrentlyDisplayed();\n\t        return _.map(displayed, function (value) {\n\t            return value.facetValue;\n\t        });\n\t    };\n\t    /**\n\t     * Returns the currently selected values as an array of string.\n\t     * @returns {string[]} The currently selected values.\n\t     */\n\t    Facet.prototype.getSelectedValues = function () {\n\t        this.ensureDom();\n\t        return _.map(this.values.getSelected(), function (value) { return value.value; });\n\t    };\n\t    /**\n\t     * Returns the currently excluded values as an array of string.\n\t     * @returns {string[]} The currently excluded values.\n\t     */\n\t    Facet.prototype.getExcludedValues = function () {\n\t        this.ensureDom();\n\t        return _.map(this.values.getExcluded(), function (value) { return value.value; });\n\t    };\n\t    /**\n\t     * Resets the Facet by un-selecting all values, une-xcluding all values, and redrawing the Facet.\n\t     */\n\t    Facet.prototype.reset = function () {\n\t        this.ensureDom();\n\t        this.values.reset();\n\t        this.rebuildValueElements();\n\t        this.updateAppearanceDependingOnState();\n\t        this.updateQueryStateModel();\n\t    };\n\t    /**\n\t     * Switches the Facet to `AND` mode.\n\t     *\n\t     * See {@link Facet.options.useAnd} and {@link Facet.options.enableTogglingOperator}.\n\t     */\n\t    Facet.prototype.switchToAnd = function () {\n\t        this.ensureDom();\n\t        this.logger.info('Switching to AND');\n\t        this.facetHeader.switchToAnd();\n\t    };\n\t    /**\n\t     * Switches the Facet to `OR` mode.\n\t     *\n\t     * See {@link Facet.options.useAnd} and {@link Facet.options.enableTogglingOperator}.\n\t     */\n\t    Facet.prototype.switchToOr = function () {\n\t        this.ensureDom();\n\t        this.logger.info('Switching to OR');\n\t        this.facetHeader.switchToOr();\n\t    };\n\t    /**\n\t     * Returns the endpoint for the Facet.\n\t     * @returns {ISearchEndpoint} The endpoint for the Facet.\n\t     */\n\t    Facet.prototype.getEndpoint = function () {\n\t        return this.queryController.getEndpoint();\n\t    };\n\t    /**\n\t     * Changes the sort parameter for the Facet.\n\t     *\n\t     * See {@link Facet.options.availableSorts} for the list of possible values.\n\t     *\n\t     * Also triggers a new query.\n\t     *\n\t     * @param criteria The new sort parameter for the Facet.\n\t     */\n\t    Facet.prototype.updateSort = function (criteria) {\n\t        this.ensureDom();\n\t        if (this.options.sortCriteria != criteria) {\n\t            this.options.sortCriteria = criteria;\n\t            this.triggerNewQuery();\n\t        }\n\t    };\n\t    Facet.prototype.unfadeInactiveValuesInMainList = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-facet-fade');\n\t    };\n\t    Facet.prototype.fadeInactiveValuesInMainList = function (delay) {\n\t        Dom_1.$$(this.element).addClass('coveo-facet-fade');\n\t    };\n\t    /**\n\t     * Shows a waiting animation in the Facet header (a spinner).\n\t     */\n\t    Facet.prototype.showWaitingAnimation = function () {\n\t        this.ensureDom();\n\t        if (!this.showingWaitAnimation) {\n\t            // in old design : icon before the facet title needs to be hidden to show animation\n\t            // new design : no need to hide this icon since it's not there\n\t            if (!this.searchInterface.isNewDesign()) {\n\t                Dom_1.$$(this.headerElement).find('.coveo-icon').style.display = 'none';\n\t                Dom_1.$$(this.headerElement).find('.coveo-facet-header-wait-animation').style.display = '';\n\t            }\n\t            else {\n\t                Dom_1.$$(this.headerElement).find('.coveo-facet-header-wait-animation').style.visibility = 'visible';\n\t            }\n\t            this.showingWaitAnimation = true;\n\t        }\n\t    };\n\t    /**\n\t     * Hides the waiting animation in the Facet header.\n\t     */\n\t    Facet.prototype.hideWaitingAnimation = function () {\n\t        this.ensureDom();\n\t        if (this.showingWaitAnimation) {\n\t            Dom_1.$$(this.headerElement).find('.coveo-icon').style.display = '';\n\t            if (!this.searchInterface.isNewDesign()) {\n\t                Dom_1.$$(this.headerElement).find('.coveo-facet-header-wait-animation').style.display = 'none';\n\t            }\n\t            else {\n\t                Dom_1.$$(this.headerElement).find('.coveo-facet-header-wait-animation').style.visibility = 'hidden';\n\t            }\n\t            this.showingWaitAnimation = false;\n\t        }\n\t    };\n\t    Facet.prototype.processFacetSearchAllResultsSelected = function (facetValues) {\n\t        var _this = this;\n\t        var valuesForAnalytics = [];\n\t        _.each(facetValues, function (facetValue) {\n\t            _this.ensureFacetValueIsInList(facetValue);\n\t            valuesForAnalytics.push(facetValue.value);\n\t        });\n\t        // Calculate the correct number of values from the current selected/excluded values (those will stay no matter what next rendering)\n\t        // add the new one that will be selected (and are not already selected in the facet)\n\t        // The minimum number of values is the number of values set in the option\n\t        var valuesThatStays = this.values.getSelected().concat(this.values.getExcluded());\n\t        this.numberOfValues = valuesThatStays.length + _.difference(valuesThatStays, facetValues).length;\n\t        this.numberOfValues = Math.max(this.numberOfValues, this.options.numberOfValues);\n\t        // Then, we set current page as the last \"full\" page (math.floor)\n\t        // This is so there is no additional values displayed requested to fill the current page\n\t        // Also, when the user hit more, it will request the current page and fill it with more values\n\t        this.currentPage = Math.floor((this.numberOfValues - this.options.numberOfValues) / this.options.pageSize);\n\t        this.updateQueryStateModel();\n\t        this.triggerNewQuery(function () { return _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetSelectAll, {\n\t            facetId: _this.options.id,\n\t            facetTitle: _this.options.title\n\t        }); });\n\t    };\n\t    Facet.prototype.pinFacetPosition = function () {\n\t        if (this.options.preservePosition) {\n\t            this.pinnedViewportPosition = this.element.getBoundingClientRect().top;\n\t        }\n\t    };\n\t    Facet.prototype.getValueCaption = function (facetValue) {\n\t        Assert_1.Assert.exists(facetValue);\n\t        var lookupValue = facetValue.lookupValue || facetValue.value;\n\t        var ret = lookupValue;\n\t        ret = FacetUtils_1.FacetUtils.tryToGetTranslatedCaption(this.options.field, lookupValue);\n\t        if (Utils_1.Utils.exists(this.options.valueCaption)) {\n\t            if (typeof this.options.valueCaption == 'object') {\n\t                ret = this.options.valueCaption[lookupValue] || ret;\n\t            }\n\t            if (typeof this.options.valueCaption == 'function') {\n\t                this.values.get(lookupValue);\n\t                ret = this.options.valueCaption.call(this, this.facetValuesList.get(lookupValue).facetValue);\n\t            }\n\t        }\n\t        return ret;\n\t    };\n\t    /**\n\t     * Shows the next page of results in the Facet.\n\t     *\n\t     * Triggers a query if needed, or displays the already available values.\n\t     */\n\t    Facet.prototype.showMore = function () {\n\t        this.currentPage++;\n\t        this.updateNumberOfValues();\n\t        if (this.nbAvailableValues >= this.numberOfValues || !this.canFetchMore) {\n\t            this.rebuildValueElements();\n\t        }\n\t        else {\n\t            this.triggerMoreQuery();\n\t        }\n\t    };\n\t    /**\n\t     * Shows less elements in the Facet (up to the original number of values).\n\t     *\n\t     * See {@link Facet.options.numberOfValues}.\n\t     */\n\t    Facet.prototype.showLess = function () {\n\t        Dom_1.$$(this.lessElement).removeClass('coveo-active');\n\t        this.currentPage = 0;\n\t        this.updateNumberOfValues();\n\t        Dom_1.$$(this.moreElement).addClass('coveo-active');\n\t        this.values.sortValuesDependingOnStatus(this.numberOfValues);\n\t        this.rebuildValueElements();\n\t    };\n\t    /**\n\t     * Collapses the Facet.\n\t     */\n\t    Facet.prototype.collapse = function () {\n\t        this.ensureDom();\n\t        if (this.facetHeader) {\n\t            this.facetHeader.collapseFacet();\n\t        }\n\t    };\n\t    /**\n\t     * Expands the facet.\n\t     */\n\t    Facet.prototype.expand = function () {\n\t        this.ensureDom();\n\t        if (this.facetHeader) {\n\t            this.facetHeader.expandFacet();\n\t        }\n\t    };\n\t    Facet.prototype.triggerNewQuery = function (beforeExecuteQuery) {\n\t        if (!beforeExecuteQuery) {\n\t            this.queryController.executeQuery({ ignoreWarningSearchEvent: true });\n\t        }\n\t        else {\n\t            this.queryController.executeQuery({ beforeExecuteQuery: beforeExecuteQuery });\n\t        }\n\t        this.showWaitingAnimation();\n\t    };\n\t    Facet.prototype.handleDeferredQuerySuccess = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        this.unfadeInactiveValuesInMainList();\n\t        this.hideWaitingAnimation();\n\t        this.updateVisibilityBasedOnDependsOn();\n\t        var groupByResult = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n\t        this.facetQueryController.lastGroupByResult = groupByResult;\n\t        if (!groupByResult) {\n\t            this.keepDisplayedValuesNextTime = false;\n\t        }\n\t        this.processNewGroupByResults(groupByResult);\n\t    };\n\t    Facet.prototype.handlePopulateBreadcrumb = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        if (this.values.hasSelectedOrExcludedValues()) {\n\t            var element = new BreadcrumbValuesList_1.BreadcrumbValueList(this, this.values.getSelected().concat(this.values.getExcluded()), BreadcrumbValueElement_1.BreadcrumbValueElement).build();\n\t            args.breadcrumbs.push({\n\t                element: element\n\t            });\n\t        }\n\t    };\n\t    Facet.prototype.handlePopulateSearchAlerts = function (args) {\n\t        if (this.values.hasSelectedOrExcludedValues()) {\n\t            var excludedValues = this.values.getExcluded();\n\t            var selectedValues = this.values.getSelected();\n\t            if (!_.isEmpty(excludedValues)) {\n\t                args.text.push({\n\t                    value: new BreadcrumbValuesList_1.BreadcrumbValueList(this, excludedValues, BreadcrumbValueElement_1.BreadcrumbValueElement).buildAsString(),\n\t                    lineThrough: true\n\t                });\n\t            }\n\t            if (!_.isEmpty(selectedValues)) {\n\t                args.text.push({\n\t                    value: new BreadcrumbValuesList_1.BreadcrumbValueList(this, selectedValues, BreadcrumbValueElement_1.BreadcrumbValueElement).buildAsString(),\n\t                    lineThrough: false\n\t                });\n\t            }\n\t        }\n\t    };\n\t    Facet.prototype.initFacetQueryController = function () {\n\t        this.facetQueryController = new FacetQueryController_1.FacetQueryController(this);\n\t    };\n\t    Facet.prototype.initFacetValuesList = function () {\n\t        this.facetValuesList = new FacetValuesList_1.FacetValuesList(this, FacetValueElement_1.FacetValueElement);\n\t        this.element.appendChild(this.facetValuesList.build());\n\t    };\n\t    Facet.prototype.initFacetSearch = function () {\n\t        this.facetSearch = new FacetSearch_1.FacetSearch(this, FacetSearchValuesList_1.FacetSearchValuesList, this.root);\n\t        this.element.appendChild(this.facetSearch.build());\n\t    };\n\t    Facet.prototype.facetValueHasChanged = function () {\n\t        var _this = this;\n\t        this.updateQueryStateModel();\n\t        this.rebuildValueElements();\n\t        Defer_1.Defer.defer(function () {\n\t            _this.updateAppearanceDependingOnState();\n\t        });\n\t    };\n\t    Facet.prototype.updateAppearanceDependingOnState = function () {\n\t        Dom_1.$$(this.element).toggleClass('coveo-active', this.values.hasSelectedOrExcludedValues());\n\t        Dom_1.$$(this.element).toggleClass('coveo-facet-empty', !this.isAnyValueCurrentlyDisplayed());\n\t        if (this.searchInterface.isNewDesign()) {\n\t            Dom_1.$$(this.facetHeader.eraserElement).toggleClass('coveo-facet-header-eraser-visible', this.values.hasSelectedOrExcludedValues());\n\t        }\n\t        else {\n\t            Dom_1.$$(this.facetHeader.eraserElement).toggle(this.values.hasSelectedOrExcludedValues());\n\t        }\n\t    };\n\t    Facet.prototype.initQueryEvents = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function () { return _this.handleDuringQuery(); });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (args) { return _this.handleDoneBuildingQuery(args); });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function (args) { return _this.handleDeferredQuerySuccess(args); });\n\t    };\n\t    Facet.prototype.initQueryStateEvents = function () {\n\t        var _this = this;\n\t        this.includedAttributeId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id);\n\t        this.excludedAttributeId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id, false);\n\t        this.operatorAttributeId = QueryStateModel_1.QueryStateModel.getFacetOperator(this.options.id);\n\t        this.lookupValueAttributeId = QueryStateModel_1.QueryStateModel.getFacetLookupValue(this.options.id);\n\t        this.queryStateModel.registerNewAttribute(this.includedAttributeId, []);\n\t        this.queryStateModel.registerNewAttribute(this.excludedAttributeId, []);\n\t        this.queryStateModel.registerNewAttribute(this.operatorAttributeId, '');\n\t        this.queryStateModel.registerNewAttribute(this.lookupValueAttributeId, {});\n\t        this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE, undefined, function (args) { return _this.handleQueryStateChanged(args); });\n\t    };\n\t    Facet.prototype.initComponentStateEvents = function () {\n\t        this.componentStateId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.id);\n\t        this.componentStateModel.registerComponent(this.componentStateId, this);\n\t    };\n\t    Facet.prototype.initOmniboxEvents = function () {\n\t        var _this = this;\n\t        if (this.options.includeInOmnibox) {\n\t            this.bind.onRootElement(OmniboxEvents_1.OmniboxEvents.populateOmnibox, function (args) { return _this.handlePopulateOmnibox(args); });\n\t        }\n\t    };\n\t    Facet.prototype.initBreadCrumbEvents = function () {\n\t        var _this = this;\n\t        if (this.options.includeInBreadcrumb) {\n\t            this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) { return _this.handlePopulateBreadcrumb(args); });\n\t            this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function (args) { return _this.handleClearBreadcrumb(); });\n\t        }\n\t    };\n\t    Facet.prototype.initSearchAlertEvents = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsPopulateMessage, function (args) { return _this.handlePopulateSearchAlerts(args); });\n\t    };\n\t    Facet.prototype.handleOmniboxWithStaticValue = function (eventArg) {\n\t        var _this = this;\n\t        var regex = new RegExp('^' + eventArg.completeQueryExpression.regex.source, 'i');\n\t        var match = _.first(_.filter(this.getDisplayedValues(), function (displayedValue) {\n\t            var value = _this.getValueCaption(_this.facetValuesList.get(displayedValue).facetValue);\n\t            return regex.test(value);\n\t        }), this.options.numberOfValuesInOmnibox);\n\t        var facetValues = _.map(match, function (gotAMatch) {\n\t            return _this.facetValuesList.get(gotAMatch).facetValue;\n\t        });\n\t        var element = new OmniboxValuesList_1.OmniboxValuesList(this, facetValues, eventArg, OmniboxValueElement_1.OmniboxValueElement).build();\n\t        eventArg.rows.push({\n\t            element: element,\n\t            zIndex: this.omniboxZIndex\n\t        });\n\t    };\n\t    Facet.prototype.processNewGroupByResults = function (groupByResult) {\n\t        this.logger.trace('Displaying group by results', groupByResult);\n\t        if (groupByResult != undefined && groupByResult.values != undefined) {\n\t            this.nbAvailableValues = groupByResult.values.length;\n\t        }\n\t        var newFacetValues = new FacetValues_1.FacetValues(groupByResult);\n\t        this.updateValues(newFacetValues);\n\t        this.canFetchMore = this.numberOfValues < this.nbAvailableValues;\n\t        if (this.values.hasSelectedOrExcludedValues() && !this.options.useAnd && this.options.isMultiValueField) {\n\t            this.triggerUpdateDeltaQuery(_.filter(this.values.getAll(), function (facetValue) {\n\t                return !facetValue.selected && !facetValue.excluded;\n\t            }));\n\t        }\n\t        else if (this.values.getSelected().length > 0 && !this.options.useAnd) {\n\t            this.values.updateDeltaWithFilteredFacetValues(new FacetValues_1.FacetValues());\n\t        }\n\t        if (!this.values.hasSelectedOrExcludedValues() || this.options.useAnd || !this.options.isMultiValueField) {\n\t            this.rebuildValueElements();\n\t            this.updateAppearanceDependingOnState();\n\t            this.ensurePinnedFacetHasntMoved();\n\t        }\n\t        this.keepDisplayedValuesNextTime = false;\n\t    };\n\t    Facet.prototype.updateQueryStateModel = function () {\n\t        this.listenToQueryStateChange = false;\n\t        this.updateExcludedQueryStateModel();\n\t        this.updateIncludedQueryStateModel();\n\t        this.facetHeader.updateOperatorQueryStateModel();\n\t        this.updateLookupValueQueryStateModel();\n\t        this.listenToQueryStateChange = true;\n\t    };\n\t    Facet.prototype.rebuildValueElements = function () {\n\t        this.updateNumberOfValues();\n\t        this.facetValuesList.rebuild(this.numberOfValues);\n\t        if (this.searchInterface.isNewDesign()) {\n\t            if (this.shouldRenderMoreLess()) {\n\t                this.updateMoreLess();\n\t                if (this.shouldRenderFacetSearch()) {\n\t                    this.updateSearchInNewDesign(this.nbAvailableValues > this.numberOfValues);\n\t                }\n\t            }\n\t            else if (this.shouldRenderFacetSearch()) {\n\t                this.updateSearchInNewDesign();\n\t            }\n\t        }\n\t        else {\n\t            if (this.shouldRenderMoreLess()) {\n\t                this.updateMoreLess();\n\t            }\n\t        }\n\t    };\n\t    Facet.prototype.updateSearchInNewDesign = function (moreValuesAvailable) {\n\t        var _this = this;\n\t        if (moreValuesAvailable === void 0) { moreValuesAvailable = true; }\n\t        if (this.searchInterface.isNewDesign() && moreValuesAvailable) {\n\t            var renderer = new ValueElementRenderer_1.ValueElementRenderer(this, FacetValues_1.FacetValue.create(Strings_1.l('Search')));\n\t            var searchButton_1 = renderer.build().withNo([renderer.excludeIcon, renderer.icon]);\n\t            Dom_1.$$(searchButton_1.listItem).addClass('coveo-facet-search-button');\n\t            searchButton_1.stylishCheckbox.removeAttribute('tabindex');\n\t            // Mobile do not like label. Use click event\n\t            if (DeviceUtils_1.DeviceUtils.isMobileDevice()) {\n\t                Dom_1.$$(searchButton_1.label).on('click', function (e) {\n\t                    if (searchButton_1.checkbox.getAttribute('checked')) {\n\t                        searchButton_1.checkbox.removeAttribute('checked');\n\t                    }\n\t                    else {\n\t                        searchButton_1.checkbox.setAttribute('checked', 'checked');\n\t                    }\n\t                    Dom_1.$$(searchButton_1.checkbox).trigger('change');\n\t                    e.stopPropagation();\n\t                    e.preventDefault();\n\t                });\n\t            }\n\t            Dom_1.$$(searchButton_1.checkbox).on('change', function () {\n\t                Dom_1.$$(_this.element).addClass('coveo-facet-searching');\n\t                _this.facetSearch.focus();\n\t            });\n\t            this.facetValuesList.valueContainer.appendChild(searchButton_1.listItem);\n\t        }\n\t    };\n\t    Facet.prototype.updateMoreLess = function (lessElementIsShown, moreValuesAvailable) {\n\t        if (lessElementIsShown === void 0) { lessElementIsShown = this.getMinimumNumberOfValuesToDisplay() < this.numberOfValues; }\n\t        if (moreValuesAvailable === void 0) { moreValuesAvailable = this.nbAvailableValues > this.numberOfValues; }\n\t        if (lessElementIsShown) {\n\t            Dom_1.$$(this.lessElement).addClass('coveo-active');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.lessElement).removeClass('coveo-active');\n\t        }\n\t        if (moreValuesAvailable) {\n\t            Dom_1.$$(this.moreElement).addClass('coveo-active');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.moreElement).removeClass('coveo-active');\n\t        }\n\t        if (lessElementIsShown || moreValuesAvailable) {\n\t            Dom_1.$$(this.footerElement).removeClass('coveo-facet-empty');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.footerElement).addClass('coveo-facet-empty');\n\t        }\n\t    };\n\t    Facet.prototype.handleClickMore = function () {\n\t        this.showMore();\n\t    };\n\t    Facet.prototype.handleClickLess = function () {\n\t        this.showLess();\n\t    };\n\t    Facet.prototype.handleNuke = function () {\n\t        window.removeEventListener('resize', this.resize);\n\t    };\n\t    Facet.prototype.checkForComputedFieldAndSort = function () {\n\t        if (this.options.sortCriteria.toLowerCase().indexOf('computedfield') != -1 && Utils_1.Utils.isNullOrUndefined(this.options.computedField)) {\n\t            this.logger.warn('Sort criteria is specified as ComputedField, but the facet uses no computed field. Facet will always be empty !', this);\n\t        }\n\t    };\n\t    Facet.prototype.checkForValueCaptionType = function () {\n\t        if (this.options.valueCaption && typeof this.options.valueCaption == 'function') {\n\t            this.options.enableFacetSearch = false;\n\t            this.options.includeInOmnibox = false;\n\t            this.logger.warn('Using a function as valueCaption is now deprecated. Use a json key value pair instead. Facet search and omnibox has been disabled for this facet', this);\n\t        }\n\t    };\n\t    Facet.prototype.checkForCustomSort = function () {\n\t        if (this.options.customSort != undefined && !_.contains(this.options.availableSorts, 'custom')) {\n\t            this.options.availableSorts.unshift('custom');\n\t        }\n\t        if (this.options.availableSorts[0] == 'custom') {\n\t            this.options.sortCriteria = 'nosort';\n\t        }\n\t    };\n\t    Facet.prototype.initBottomAndTopSpacer = function () {\n\t        var _this = this;\n\t        var bottomSpace = Dom_1.$$(this.options.paddingContainer).find('.coveo-bottomSpace');\n\t        var topSpace = Dom_1.$$(this.options.paddingContainer).find('.coveo-topSpace');\n\t        if (this.options.preservePosition) {\n\t            Dom_1.$$(this.options.paddingContainer).on('mouseleave', function () { return _this.unpinFacetPosition(); });\n\t            this.pinnedTopSpace = topSpace;\n\t            this.pinnedBottomSpace = bottomSpace;\n\t            if (!this.pinnedTopSpace) {\n\t                this.pinnedTopSpace = document.createElement('div');\n\t                Dom_1.$$(this.pinnedTopSpace).addClass('coveo-topSpace');\n\t                Dom_1.$$(this.pinnedTopSpace).insertBefore(this.options.paddingContainer.firstChild);\n\t            }\n\t            if (!this.pinnedBottomSpace) {\n\t                this.pinnedBottomSpace = document.createElement('div');\n\t                Dom_1.$$(this.pinnedBottomSpace).addClass('coveo-bottomSpace');\n\t                this.options.paddingContainer.appendChild(this.pinnedBottomSpace);\n\t            }\n\t        }\n\t    };\n\t    Facet.prototype.updateIncludedQueryStateModel = function () {\n\t        var selectedValues = {\n\t            included: this.getSelectedValues(),\n\t            title: this.includedAttributeId\n\t        };\n\t        this.queryStateModel.set(this.includedAttributeId, selectedValues.included);\n\t    };\n\t    Facet.prototype.updateExcludedQueryStateModel = function () {\n\t        var excludedValues = {\n\t            title: this.excludedAttributeId,\n\t            excluded: this.getExcludedValues()\n\t        };\n\t        this.queryStateModel.set(this.excludedAttributeId, excludedValues.excluded);\n\t    };\n\t    Facet.prototype.updateLookupValueQueryStateModel = function () {\n\t        if (this.options.lookupField) {\n\t            var valueToSet_1 = {};\n\t            _.each(this.values.getSelected().concat(this.values.getExcluded()), function (value) {\n\t                valueToSet_1[value.value] = value.lookupValue;\n\t            });\n\t            this.queryStateModel.set(this.lookupValueAttributeId, valueToSet_1);\n\t        }\n\t    };\n\t    Facet.prototype.handleQueryStateChangedOperator = function (operator) {\n\t        if (operator == 'and') {\n\t            this.switchToAnd();\n\t        }\n\t        else if (operator == 'or') {\n\t            this.switchToOr();\n\t        }\n\t    };\n\t    Facet.prototype.handleQueryStateChangedIncluded = function (includedChanged) {\n\t        var toUnSelect = _.difference(this.getSelectedValues(), includedChanged);\n\t        if (Utils_1.Utils.isNonEmptyArray(toUnSelect)) {\n\t            this.deselectMultipleValues(toUnSelect);\n\t        }\n\t        if (!Utils_1.Utils.arrayEqual(this.getSelectedValues(), includedChanged, false)) {\n\t            this.selectMultipleValues(includedChanged);\n\t        }\n\t    };\n\t    Facet.prototype.handleQueryStateChangedExcluded = function (excludedChanged) {\n\t        var toUnExclude = _.difference(this.getExcludedValues(), excludedChanged);\n\t        if (Utils_1.Utils.isNonEmptyArray(toUnExclude)) {\n\t            this.unexcludeMultipleValues(toUnExclude);\n\t        }\n\t        if (!Utils_1.Utils.arrayEqual(this.getExcludedValues(), excludedChanged, false)) {\n\t            this.excludeMultipleValues(excludedChanged);\n\t        }\n\t    };\n\t    Facet.prototype.handleLookupvalueChanged = function (lookupFieldChanged) {\n\t        var _this = this;\n\t        _.each(lookupFieldChanged, function (lookupvalue, value) {\n\t            _this.facetValuesList.get(decodeURIComponent(value)).facetValue.lookupValue = decodeURIComponent(lookupvalue);\n\t        });\n\t    };\n\t    Facet.prototype.handleQueryStateChanged = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        this.ensureDom();\n\t        var queryStateAttributes = data.attributes;\n\t        var includedChanged = queryStateAttributes[this.includedAttributeId];\n\t        var excludedChanged = queryStateAttributes[this.excludedAttributeId];\n\t        var operator = queryStateAttributes[this.operatorAttributeId];\n\t        var lookupValueChanged = queryStateAttributes[this.lookupValueAttributeId];\n\t        if (this.listenToQueryStateChange) {\n\t            if (!Utils_1.Utils.isNullOrEmptyString(operator)) {\n\t                this.handleQueryStateChangedOperator(operator);\n\t            }\n\t            if (!Utils_1.Utils.isNullOrUndefined(includedChanged)) {\n\t                this.handleQueryStateChangedIncluded(includedChanged);\n\t            }\n\t            if (!Utils_1.Utils.isNullOrUndefined(excludedChanged)) {\n\t                this.handleQueryStateChangedExcluded(excludedChanged);\n\t            }\n\t            if (!Utils_1.Utils.isNullOrUndefined(lookupValueChanged)) {\n\t                this.handleLookupvalueChanged(lookupValueChanged);\n\t            }\n\t        }\n\t    };\n\t    Facet.prototype.handlePopulateOmnibox = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.completeQueryExpression);\n\t        // The omnibox calls can come in before a first query was executed (atypical, but\n\t        // if no query is auto-triggered on initialization). To ensure that we've got the\n\t        // proper filters, we ensure that at least a dumbshow query builder run occured\n\t        // before proceeding.\n\t        this.queryController.ensureCreatedQueryBuilder();\n\t        if (this.canFetchMore) {\n\t            this.handleOmniboxWithSearchInFacet(data);\n\t        }\n\t        else {\n\t            this.handleOmniboxWithStaticValue(data);\n\t        }\n\t    };\n\t    Facet.prototype.handleOmniboxWithSearchInFacet = function (eventArg) {\n\t        var _this = this;\n\t        var regex = new RegExp('^' + eventArg.completeQueryExpression.regex.source, 'i');\n\t        var promise = new Promise(function (resolve, reject) {\n\t            var searchParameters = new FacetSearchParameters_1.FacetSearchParameters(_this);\n\t            searchParameters.setValueToSearch(eventArg.completeQueryExpression.word);\n\t            searchParameters.nbResults = _this.options.numberOfValuesInOmnibox;\n\t            _this.facetQueryController.search(searchParameters).then(function (fieldValues) {\n\t                var facetValues = _.map(_.filter(fieldValues, function (fieldValue) {\n\t                    return regex.test(fieldValue.lookupValue);\n\t                }), function (fieldValue) {\n\t                    return _this.values.get(fieldValue.lookupValue) || FacetValues_1.FacetValue.create(fieldValue);\n\t                });\n\t                var element = new OmniboxValuesList_1.OmniboxValuesList(_this, facetValues, eventArg, OmniboxValueElement_1.OmniboxValueElement).build();\n\t                resolve({\n\t                    element: element,\n\t                    zIndex: _this.omniboxZIndex\n\t                });\n\t            }).catch(function () {\n\t                resolve({ element: undefined });\n\t            });\n\t        });\n\t        eventArg.rows.push({ deferred: promise });\n\t    };\n\t    Facet.prototype.handleDuringQuery = function () {\n\t        this.ensureDom();\n\t        if (!this.keepDisplayedValuesNextTime) {\n\t            this.fadeInactiveValuesInMainList(this.options.facetSearchDelay);\n\t        }\n\t    };\n\t    Facet.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.queryBuilder);\n\t        this.facetQueryController.prepareForNewQuery();\n\t        if (this.values.hasSelectedOrExcludedValues()) {\n\t            var expression = this.facetQueryController.computeOurFilterExpression();\n\t            this.logger.trace('Putting filter in query', expression);\n\t            data.queryBuilder.advancedExpression.add(expression);\n\t        }\n\t    };\n\t    Facet.prototype.handleDoneBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.queryBuilder);\n\t        var queryBuilder = data.queryBuilder;\n\t        this.facetQueryController.putGroupByIntoQueryBuilder(queryBuilder);\n\t    };\n\t    Facet.prototype.handleClearBreadcrumb = function () {\n\t        this.reset();\n\t    };\n\t    Facet.prototype.updateValues = function (facetValues) {\n\t        Assert_1.Assert.exists(facetValues);\n\t        if (this.keepDisplayedValuesNextTime) {\n\t            this.values.updateCountsFromNewValues(facetValues);\n\t        }\n\t        else {\n\t            facetValues.importActiveValuesFromOtherList(this.values);\n\t            facetValues.sortValuesDependingOnStatus(this.numberOfValues);\n\t            this.values = facetValues;\n\t        }\n\t        this.updateNumberOfValues();\n\t    };\n\t    Facet.prototype.ensureFacetValueIsInList = function (facetValue) {\n\t        Assert_1.Assert.exists(facetValue);\n\t        if (!this.values.contains(facetValue.value)) {\n\t            this.values.add(facetValue);\n\t        }\n\t    };\n\t    Facet.prototype.isAnyValueCurrentlyDisplayed = function () {\n\t        return !this.values.isEmpty();\n\t    };\n\t    Facet.prototype.buildFacetContent = function () {\n\t        this.headerElement = this.buildHeader();\n\t        this.element.appendChild(this.headerElement);\n\t        this.initFacetValuesList();\n\t        if (this.shouldRenderFacetSearch()) {\n\t            this.initFacetSearch();\n\t        }\n\t        if (this.shouldRenderMoreLess()) {\n\t            this.moreElement = this.buildMore();\n\t            this.lessElement = this.buildLess();\n\t        }\n\t        this.footerElement = this.buildFooter();\n\t        this.element.appendChild(this.footerElement);\n\t        if (this.searchInterface.isNewDesign() && this.lessElement && this.moreElement) {\n\t            this.footerElement.appendChild(this.lessElement);\n\t            this.footerElement.appendChild(this.moreElement);\n\t        }\n\t        else if (this.moreElement && this.lessElement) {\n\t            this.footerElement.appendChild(this.moreElement);\n\t            this.footerElement.appendChild(this.lessElement);\n\t        }\n\t    };\n\t    Facet.prototype.buildHeader = function () {\n\t        var icon = this.options.headerIcon;\n\t        if (this.searchInterface.isNewDesign() && this.options.headerIcon == this.options.field) {\n\t            icon = undefined;\n\t        }\n\t        this.facetHeader = new FacetHeader_1.FacetHeader({\n\t            facetElement: this.element,\n\t            title: this.options.title,\n\t            icon: icon,\n\t            field: this.options.field,\n\t            enableClearElement: true,\n\t            enableCollapseElement: this.options.enableCollapse,\n\t            facet: this,\n\t            settingsKlass: this.options.enableSettings ? FacetSettings_1.FacetSettings : undefined,\n\t            sortKlass: FacetSort_1.FacetSort,\n\t            availableSorts: this.options.availableSorts,\n\t            isNewDesign: this.getBindings().searchInterface.isNewDesign()\n\t        });\n\t        var built = this.facetHeader.build();\n\t        this.facetSettings = this.facetHeader.settings;\n\t        this.facetSort = this.facetHeader.sort;\n\t        return built;\n\t    };\n\t    Facet.prototype.unpinFacetPosition = function () {\n\t        if (this.shouldFacetUnpin() && this.options.preservePosition) {\n\t            Dom_1.$$(this.pinnedTopSpace).addClass('coveo-with-animation');\n\t            Dom_1.$$(this.pinnedBottomSpace).addClass('coveo-with-animation');\n\t            this.pinnedTopSpace.style.height = '0px';\n\t            this.pinnedBottomSpace.style.height = '0px';\n\t        }\n\t        this.unpinnedViewportPosition = undefined;\n\t        this.pinnedViewportPosition = undefined;\n\t    };\n\t    Facet.prototype.isFacetPinned = function () {\n\t        return Utils_1.Utils.exists(this.pinnedViewportPosition);\n\t    };\n\t    Facet.prototype.shouldFacetUnpin = function () {\n\t        return Utils_1.Utils.exists(this.unpinnedViewportPosition);\n\t    };\n\t    Facet.prototype.ensurePinnedFacetHasntMoved = function () {\n\t        var _this = this;\n\t        if (this.isFacetPinned()) {\n\t            Assert_1.Assert.exists(this.pinnedViewportPosition);\n\t            Dom_1.$$(this.pinnedTopSpace).removeClass('coveo-with-animation');\n\t            Dom_1.$$(this.pinnedBottomSpace).removeClass('coveo-with-animation');\n\t            this.pinnedTopSpace.style.height = '0px';\n\t            this.pinnedBottomSpace.style.height = '0px';\n\t            // Under firefox scrolling the body doesn't work, but window does\n\t            // on all browser, so we substitute those here when needed.\n\t            var elementToScroll_1 = this.options.scrollContainer == document.body ? window : this.options.scrollContainer;\n\t            var currentViewportPosition_1 = this.element.getBoundingClientRect().top;\n\t            var offset_1 = currentViewportPosition_1 - this.pinnedViewportPosition;\n\t            var scrollToOffset_1 = function () {\n\t                if (elementToScroll_1 instanceof Window) {\n\t                    window.scrollTo(0, window.scrollY + offset_1);\n\t                }\n\t                else {\n\t                    elementToScroll_1.scrollTop = elementToScroll_1.scrollTop + offset_1;\n\t                }\n\t            };\n\t            // First try to adjust position by scrolling the page\n\t            scrollToOffset_1();\n\t            currentViewportPosition_1 = this.element.getBoundingClientRect().top;\n\t            offset_1 = currentViewportPosition_1 - this.pinnedViewportPosition;\n\t            // If scrolling has worked (offset == 0), we're good to go, nothing to do anymore.\n\t            // Otherwise try other voodoo magic.\n\t            if (offset_1 < 0) {\n\t                // This means the facet element is scrolled up in the viewport,\n\t                // scroll it down by adding space in the top container\n\t                this.pinnedTopSpace.style.height = (offset_1 * -1) + 'px';\n\t            }\n\t            else {\n\t                // Here, this means the facet element is scrolled down in the viewport,\n\t                // and there is not enough scroll space in the page / window to scroll far enough\n\t                // we need to add space at the bottom so that we can finally scroll there.\n\t                _.defer(function () {\n\t                    var heightBottom = 0;\n\t                    var attempts = 0;\n\t                    while (offset_1 > 0 && attempts++ < 100) {\n\t                        heightBottom += 100;\n\t                        _this.pinnedBottomSpace.style.height = heightBottom + 'px';\n\t                        currentViewportPosition_1 = _this.element.getBoundingClientRect().top;\n\t                        offset_1 = currentViewportPosition_1 - _this.pinnedViewportPosition;\n\t                        scrollToOffset_1();\n\t                    }\n\t                });\n\t            }\n\t            this.unpinnedViewportPosition = this.pinnedViewportPosition;\n\t            this.pinnedViewportPosition = null;\n\t        }\n\t    };\n\t    Facet.prototype.buildFooter = function () {\n\t        return Dom_1.$$('div', { className: 'coveo-facet-footer' }).el;\n\t    };\n\t    Facet.prototype.buildMore = function () {\n\t        var _this = this;\n\t        var more;\n\t        if (this.searchInterface.isNewDesign()) {\n\t            more = Dom_1.$$('div', { className: 'coveo-facet-more', tabindex: 0 }, Dom_1.$$('span', { className: 'coveo-icon' })).el;\n\t        }\n\t        else {\n\t            more = Dom_1.$$('a', { className: 'coveo-facet-more' }, Strings_1.l('More')).el;\n\t        }\n\t        var moreAction = function () { return _this.handleClickMore(); };\n\t        Dom_1.$$(more).on('click', moreAction);\n\t        Dom_1.$$(more).on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, moreAction));\n\t        return more;\n\t    };\n\t    Facet.prototype.buildLess = function () {\n\t        var _this = this;\n\t        var less;\n\t        if (this.searchInterface.isNewDesign()) {\n\t            less = Dom_1.$$('div', { className: 'coveo-facet-less', tabindex: 0 }, Dom_1.$$('span', { className: 'coveo-icon' })).el;\n\t        }\n\t        else {\n\t            less = Dom_1.$$('a', { className: 'coveo-facet-less' }, Strings_1.l('Less')).el;\n\t        }\n\t        var lessAction = function () { return _this.handleClickLess(); };\n\t        Dom_1.$$(less).on('click', lessAction);\n\t        Dom_1.$$(less).on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, lessAction));\n\t        return less;\n\t    };\n\t    Facet.prototype.triggerMoreQuery = function () {\n\t        var _this = this;\n\t        this.logger.info('Triggering new facet more query');\n\t        this.showWaitingAnimation();\n\t        // fetch 1 more value than we need, so we can see if there is more value to fetch still or if we have reached\n\t        // the end of the availables values\n\t        this.facetQueryController.fetchMore(this.numberOfValues + 1).then(function (queryResults) {\n\t            var facetValues = new FacetValues_1.FacetValues(queryResults.groupByResults[0]);\n\t            facetValues.importActiveValuesFromOtherList(_this.values);\n\t            facetValues.sortValuesDependingOnStatus(_this.numberOfValues);\n\t            _this.values = facetValues;\n\t            _this.nbAvailableValues = _this.values.size();\n\t            _this.updateNumberOfValues();\n\t            _this.canFetchMore = _this.numberOfValues < _this.nbAvailableValues;\n\t            if (_this.values.hasSelectedOrExcludedValues() && !_this.options.useAnd && _this.options.isMultiValueField) {\n\t                _this.triggerUpdateDeltaQuery(_.filter(_this.values.getAll(), function (facetValue) { return !facetValue.selected && !facetValue.excluded; }));\n\t            }\n\t            else {\n\t                if (_this.values.hasSelectedOrExcludedValues() && !_this.options.useAnd) {\n\t                    _this.values.updateDeltaWithFilteredFacetValues(new FacetValues_1.FacetValues());\n\t                    _this.hideWaitingAnimation();\n\t                }\n\t                else {\n\t                    _this.hideWaitingAnimation();\n\t                }\n\t                _this.rebuildValueElements();\n\t            }\n\t        }).catch(function () { return _this.hideWaitingAnimation(); });\n\t    };\n\t    Facet.prototype.triggerUpdateDeltaQuery = function (facetValues) {\n\t        var _this = this;\n\t        this.showWaitingAnimation();\n\t        this.facetQueryController.searchInFacetToUpdateDelta(facetValues).then(function (queryResults) {\n\t            var values = new FacetValues_1.FacetValues();\n\t            _.each(queryResults.groupByResults, function (groupByResult) {\n\t                _.each(groupByResult.values, function (groupByValue) {\n\t                    if (!values.contains(groupByValue.value)) {\n\t                        values.add(FacetValues_1.FacetValue.createFromGroupByValue(groupByValue));\n\t                    }\n\t                });\n\t            });\n\t            _this.values.updateDeltaWithFilteredFacetValues(values);\n\t            _this.rebuildValueElements();\n\t            _this.hideWaitingAnimation();\n\t        });\n\t    };\n\t    Facet.prototype.updateNumberOfValues = function () {\n\t        if (this.currentPage <= 0) {\n\t            // We're on the first page, let's reset the number of values to a minimum.\n\t            this.currentPage = 0;\n\t            this.numberOfValues = 0;\n\t        }\n\t        else {\n\t            // Calculate the number of value with the current page.\n\t            this.numberOfValues = this.options.numberOfValues + (this.currentPage * this.options.pageSize);\n\t        }\n\t        // Make sure we have at least the absolute minimum of value to display.\n\t        this.numberOfValues = Math.max(this.numberOfValues, this.getMinimumNumberOfValuesToDisplay());\n\t    };\n\t    Facet.prototype.getMinimumNumberOfValuesToDisplay = function () {\n\t        // The min value is the number of used values.\n\t        var minValue = this.values.getExcluded().length + this.values.getSelected().length;\n\t        // When using a custom sort, we have to show all values between the selected ones.\n\t        // Thus, we must find the last selected value after a reorder and use that value as the number of value.\n\t        if (this.options.customSort != null && this.facetSort != null && this.options.customSort.length > 0) {\n\t            var lastSelectedValueIndex_1 = -1;\n\t            new FacetValuesOrder_1.FacetValuesOrder(this, this.facetSort).reorderValues(this.values.getAll()).forEach(function (facetValue, index) {\n\t                if (facetValue.selected) {\n\t                    lastSelectedValueIndex_1 = index;\n\t                }\n\t            });\n\t            minValue = lastSelectedValueIndex_1 + 1;\n\t        }\n\t        return Math.max(minValue, this.options.numberOfValues);\n\t    };\n\t    Facet.prototype.updateVisibilityBasedOnDependsOn = function () {\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.dependsOn)) {\n\t            Dom_1.$$(this.element).toggleClass('coveo-facet-dependent', !this.doesParentFacetHasSelectedValue() && !this.values.hasSelectedOrExcludedValues());\n\t        }\n\t    };\n\t    Facet.prototype.doesParentFacetHasSelectedValue = function () {\n\t        var id = QueryStateModel_1.QueryStateModel.getFacetId(this.options.dependsOn);\n\t        var values = this.queryStateModel.get(id);\n\t        return values != null && values.length != 0;\n\t    };\n\t    Facet.prototype.shouldRenderFacetSearch = function () {\n\t        return this.options.enableFacetSearch;\n\t    };\n\t    Facet.prototype.shouldRenderMoreLess = function () {\n\t        return this.options.enableMoreLess;\n\t    };\n\t    Facet.prototype.debugInfo = function () {\n\t        var info = {};\n\t        info[this['constructor']['ID']] = {\n\t            component: this,\n\t            groupByRequest: this.facetQueryController.lastGroupByRequest,\n\t            groupByResult: this.facetQueryController.lastGroupByResult\n\t        };\n\t        return info;\n\t    };\n\t    return Facet;\n\t}(Component_1.Component));\n\tFacet.ID = 'Facet';\n\tFacet.omniboxIndex = 50;\n\t/**\n\t * The possible options for a facet\n\t * @componentOptions\n\t */\n\tFacet.options = {\n\t    /**\n\t     * Specifies the title to display at the top of the Facet.\n\t     *\n\t     * Default value is the localized string for `\"NoTitle\"`.\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({\n\t        defaultValue: Strings_1.l('NoTitle'),\n\t        section: 'Identification',\n\t        priority: 10\n\t    }),\n\t    /**\n\t     * Specifies the index field whose values the Facet should use.\n\t     *\n\t     * This requires the given field to be configured correctly in the index as a Facet field (see\n\t     * [Adding Fields to a Source](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=137)).\n\t     *\n\t     * Specifying a value for this option is required for the Facet component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true, groupByField: true, section: 'Identification' }),\n\t    headerIcon: ComponentOptions_1.ComponentOptions.buildIconOption({ deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    /**\n\t     * Specifies a unique identifier for the Facet. Among other things, this identifier serves the purpose of saving the\n\t     * facet state in the URL hash.\n\t     *\n\t     * If you have two facets with the same field on the same page, you should specify an id value for at least one of\n\t     * those two facets. This id must be unique in the page.\n\t     *\n\t     * Default value is the {@link Facet.options.field} option value.\n\t     */\n\t    id: ComponentOptions_1.ComponentOptions.buildStringOption({\n\t        postProcessing: function (value, options) { return value || options.field; }\n\t    }),\n\t    /**\n\t     * Specifies whether the field is configured in the index as a multi-value field (semicolon separated values such as\n\t     * `abc;def;ghi`).\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    isMultiValueField: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    lookupField: ComponentOptions_1.ComponentOptions.buildFieldOption({ deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    /**\n\t     * Specifies whether to display the Facet **Settings** menu.\n\t     *\n\t     * See also {@link Facet.options.enableSettingsFacetState}, {@link Facet.options.availableSorts} and\n\t     * {@link Facet.options.enableCollapse}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableSettings: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'SettingsMenu', priority: 9 }),\n\t    /**\n\t     * If {@link Facet.options.enableSettings} is `true`, specifies whether the **Save state** menu option is available\n\t     * in the Facet **Settings** menu.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableSettingsFacetState: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableSettings' }),\n\t    /**\n\t     * If {@link Facet.options.enableSettings} is `true`, specifies the sort criteria options to display in the Facet\n\t     * **Settings** menu.\n\t     *\n\t     * Possible values are:\n\t     * - `\"occurrences\"`\n\t     * - `\"score\"`\n\t     * - `\"alphaAscending\"`\n\t     * - `alphaDescending`\n\t     * - `\"computedfieldascending\"`\n\t     * - `\"computedfielddescending\"`\n\t     * - `\"custom\"`\n\t     *\n\t     * Default value is `\"occurrences,score,alphaAscending,alphaDescending\"`.\n\t     */\n\t    availableSorts: ComponentOptions_1.ComponentOptions.buildListOption({\n\t        defaultValue: ['occurrences', 'score', 'alphaAscending', 'alphaDescending'],\n\t        values: ['Occurrences', 'Score', 'AlphaAscending', 'AlphaDescending', 'ComputedFieldAscending', 'ComputedFieldDescending', 'ChiSquare', 'NoSort'],\n\t        depend: 'enableSettings'\n\t    }),\n\t    /**\n\t     * Specifies the criteria to use to sort the Facet values.\n\t     *\n\t     * See {@link IGroupByRequest} for the list of possible values.\n\t     *\n\t     * Default value is the first sort criteria specified in the {@link Facet.options.availableSorts} option, or\n\t     * `\"occurrences\"` if no sort criteria is specified.\n\t     */\n\t    sortCriteria: ComponentOptions_1.ComponentOptions.buildStringOption({ postProcessing: function (value, options) { return value || (options.availableSorts.length > 0 ? options.availableSorts[0] : 'occurrences'); } }),\n\t    /**\n\t     * Specifies a custom order by which to sort the Facet values.\n\t     *\n\t     * For example, you could use this to specify a logical order for support tickets, such as\n\t     * `customSort : [\"New\",\"Opened\",\"Feedback\",\"Resolved\",\"Feedback\"]`\n\t     */\n\t    customSort: ComponentOptions_1.ComponentOptions.buildListOption({ section: 'Identification' }),\n\t    /**\n\t     * Specifies the maximum number of field values to display by default in the Facet before the user\n\t     * clicks **More**.\n\t     *\n\t     * Default value is `5`. Minimum value is `0`.\n\t     */\n\t    numberOfValues: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0, section: 'Identification' }),\n\t    /**\n\t     * Specifies the *injection depth* to use for the {@link IGroupByRequest} operation.\n\t     *\n\t     * The injection depth determines how many results to scan in the index to ensure that the facet lists all potential\n\t     * facet values. Increasing this value enhances the accuracy of the listed values at the cost of performance.\n\t     *\n\t     * Default value is `1000`. Minimum value is `0`.\n\t     */\n\t    injectionDepth: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 1000, min: 0 }),\n\t    showIcon: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    /**\n\t     * Specifies whether to use the `AND` operator in the resulting filter when multiple values are selected in the\n\t     * Facet.\n\t     *\n\t     * Setting this option to `true` means that documents must have all of the selected values to match the resulting\n\t     * query.\n\t     *\n\t     * Default value is `false`, which means that the filter uses the `OR` operator. Thus, by default, documents must\n\t     * have at least one of the selected values to match the query.\n\t     */\n\t    useAnd: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to allow the user to toggle between the `OR` and `AND` modes in the Facet.\n\t     *\n\t     * Setting this option to `true` displays an icon in the top right corner of the Facet. The user can click this icon\n\t     * to toggle between between the two modes.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableTogglingOperator: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, alias: 'allowTogglingOperator' }),\n\t    /**\n\t     * Specifies whether to display a search box at the bottom of the Facet for searching among the available values.\n\t     *\n\t     * See also {@link Facet.options.facetSearchDelay}, {@link Facet.options.facetSearchIgnoreAccents},\n\t     * {@link Facet.options.numberOfValuesInFacetSearch}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableFacetSearch: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'FacetSearch', priority: 8 }),\n\t    /**\n\t     * If {@link Facet.options.enableFacetSearch} is `true`, specifies the delay (in milliseconds) before sending a\n\t     * search request to the server when the user starts typing in the Facet search box.\n\t     *\n\t     * Specifying a smaller value means results will arrive faster. However, chances of having to cancel many requests\n\t     * sent to the server will increase as the user keeps on typing new characters.\n\t     *\n\t     * Default value is `100`. Minimum value is `0`.\n\t     */\n\t    facetSearchDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 100, min: 0, depend: 'enableFacetSearch' }),\n\t    /**\n\t     * If {@link Facet.options.enableFacetSearch} is `true`, specifies whether to ignore accents in the Facet search\n\t     * box.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    facetSearchIgnoreAccents: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableFacetSearch' }),\n\t    /**\n\t     * If {@link Facet.options.enableFacetSearch} is `true`, specifies the number of values to display in the Facet\n\t     * search results popup.\n\t     *\n\t     * Default value is `15`. Minimum value is `1`.\n\t     */\n\t    numberOfValuesInFacetSearch: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 15, min: 1 }),\n\t    /**\n\t     * Specifies whether the Facet should push data to the {@link Breadcrumb} component.\n\t     *\n\t     * See also {@link Facet.options.numberOfValuesInBreadcrumb}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    includeInBreadcrumb: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link Facet.options.includeInBreadcrumb} is `true`, specifies the maximum number of values that the Facet\n\t     * should display in the {@link Breadcrumb} before outputting a **See more** button.\n\t     *\n\t     * Default value is `5` on a desktop computer and `3` on a mobile device. Minimum value is `0`.\n\t     */\n\t    numberOfValuesInBreadcrumb: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultFunction: function () { return DeviceUtils_1.DeviceUtils.isMobileDevice() ? 3 : 5; }, min: 0, depend: 'includeInBreadcrumb' }),\n\t    includeInOmnibox: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    numberOfValuesInOmnibox: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultFunction: function () { return DeviceUtils_1.DeviceUtils.isMobileDevice() ? 3 : 5; }, min: 0, depend: 'includeInOmnibox', deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    /**\n\t     * Specifies the name of a field on which to execute an aggregate operation for all distinct values of the Facet\n\t     * field.\n\t     *\n\t     * The Facet displays the result of the operation along with the number of occurrences for each value.\n\t     *\n\t     * You can use this option to compute the sum of a field (like a money amount) for each listed Facet value.\n\t     *\n\t     * Works in conjunction with {@link Facet.options.computedFieldOperation},\n\t     * {@link Facet.options.computedFieldFormat} and {@link Facet.options.computedFieldCaption}.\n\t     */\n\t    computedField: ComponentOptions_1.ComponentOptions.buildFieldOption({ section: 'ComputedField', priority: 7 }),\n\t    /**\n\t     * Specifies the type of aggregate operation to perform on the {@link Facet.options.computedField}.\n\t     *\n\t     * The possible values are:\n\t     * - `\"sum\"` - Computes the sum of the computed field values.\n\t     * - `\"average\"` - Computes the average of the computed field values.\n\t     * - `\"minimum\"` - Finds the minimum value of the computed field values.\n\t     * - `\"maximum\"` - Finds the maximum value of the computed field values.\n\t     *\n\t     * Default value is `\"sum\"`.\n\t     */\n\t    computedFieldOperation: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'sum', section: 'ComputedField' }),\n\t    /**\n\t     * Specifies how to format the values resulting from a {@link Facet.options.computedFieldOperation}.\n\t     *\n\t     * The Globalize library defines all available formats (see\n\t     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-)).\n\t     *\n\t     * The most commonly used formats are:\n\t     * - `\"c0\"` - Formats the value as a currency.\n\t     * - `\"n0\"` - Formats the value as an integer.\n\t     * - `\"n2\"` - Formats the value as a floating point with 2 decimal digits.\n\t     *\n\t     * Default value is `\"c0\"`.\n\t     */\n\t    computedFieldFormat: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'c0', section: 'ComputedField' }),\n\t    /**\n\t     * Specifies what the caption of the {@link Facet.options.computedField} should be in the settings menu for sorting.\n\t     *\n\t     * For example, setting this option to `\"Money\"` will display `\"Money Ascending\"` for computed field ascending.\n\t     *\n\t     * Default value is the localized string for `\"ComputedField\"`.\n\t     */\n\t    computedFieldCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: Strings_1.l('ComputedField'), section: 'ComputedField' }),\n\t    /**\n\t     * Specifies whether the Facet should remain stable in its current position in the viewport while the mouse cursor\n\t     * is over it.\n\t     *\n\t     * Whenever the value selection changes in a facet, the search interface automatically performs a query. This new\n\t     * query might cause other elements in the page to resize themselves (typically, other facets above or below the\n\t     * one the user is interacting with).\n\t     *\n\t     * This option is responsible for adding the `<div class='coveo-topSpace'>` and\n\t     * `<div class='coveo-bottomSpace'>` around the Facet container. The Facet adjusts the scroll amount of the page to\n\t     * ensure that it does not move relatively to the mouse when the results are updated.\n\t     *\n\t     * In some cases, the Facet also adds margins to the scrollContainer, if scrolling alone is not enough to\n\t     * preserve position.\n\t     *\n\t     * See also {@link Facet.options.paddingContainer} and {@link Facet.options.scrollContainer}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    preservePosition: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the parent container of the facets.\n\t     *\n\t     * Used by the {@link Facet.options.preservePosition}.\n\t     *\n\t     * Default value is `element.parentElement`.\n\t     */\n\t    paddingContainer: ComponentOptions_1.ComponentOptions.buildSelectorOption({ defaultFunction: function (element) { return element.parentElement; } }),\n\t    /**\n\t     * Specifies the HTML element (through a CSS selector) whose scroll amount the Facet should adjust to preserve its\n\t     * position when results are updated.\n\t     *\n\t     * Used by {@link Facet.options.preservePosition}.\n\t     *\n\t     * Default value is `document.body`.\n\t     */\n\t    scrollContainer: ComponentOptions_1.ComponentOptions.buildSelectorOption({ defaultFunction: function (element) { return document.body; } }),\n\t    /**\n\t     * Specifies whether to enable the **More** and **Less** buttons in the Facet.\n\t     *\n\t     * See also {@link Facet.options.pageSize}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableMoreLess: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link Facet.options.enableMoreLess} is `true`, specifies the number of additional results to fetch when\n\t     * clicking on the **More** button in the Facet.\n\t     *\n\t     * Default value is `10`. Minimum value is `1`.\n\t     */\n\t    pageSize: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 10, min: 1, depend: 'enableMoreLess' }),\n\t    /**\n\t     * If {@link Facet.options.enableSettings} is `true`, specifies whether the **Collapse \\ Expand** menu option is\n\t     * available in the Facet **Settings** menu.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableCollapse: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, depend: 'enableSettings' }),\n\t    /**\n\t     * Specifies an explicit list of {@link IGroupByRequest.allowedValues} in the {@link IGroupByRequest}.\n\t     *\n\t     * This will whitelist the Facet content to some specific values.\n\t     *\n\t     * Example: `[\"File\", \"People\"]`.\n\t     */\n\t    allowedValues: ComponentOptions_1.ComponentOptions.buildListOption(),\n\t    /**\n\t     * Specifies an additional query expression (query override) to add to each {@link IGroupByRequest} that this Facet\n\t     * performs.\n\t     *\n\t     * Example: `@date>=2014/01/01`\n\t     */\n\t    additionalFilter: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies whether this Facet only appears when a value is selected in its \"parent\" Facet.\n\t     *\n\t     * To specify the parent Facet, use its [id]{@link Facet.options.id}.\n\t     *\n\t     * Remember that by default, a Facet id is the same as its [field]{@link Facet.options.field}.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * First case: the \"parent\" Facet has no custom `id`:\n\t     * ```html\n\t     * <!-- \"Parent\" Facet: -->\n\t     * <div class='CoveoFacet' data-field='@myfield' data-title='My Parent Facet'></div>\n\t     *\n\t     * <!-- The \"dependent\" Facet must refer to the default `id` of its \"parent\" Facet, which is the name of its field. -->\n\t     * <div class='CoveoFacet' data-field='@myotherfield' data-title='My Dependent Facet' data-depends-on='@myfield'></div>\n\t     * ```\n\t     *\n\t     * Second case: the \"parent\" Facet has a custom `id`:\n\t     * ```html\n\t     * <!-- \"Parent\" Facet: -->\n\t     * <div class='CoveoFacet' data-field='@myfield' data-title='My Parent Facet' data-id='myParentCustomId'></div>\n\t     *\n\t     * <!-- The \"dependent\" Facet must refer to the custom `id` of its \"parent\" Facet, which is 'myParentCustomId'. -->\n\t     * <div class='CoveoFacet' data-field='@myotherfield data-title='My Dependent Facet' data-depends-on='myParentCustomId'></div>\n\t     * ```\n\t     *\n\t     * Default value is `undefined`\n\t     */\n\t    dependsOn: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies a JSON object describing a mapping of Facet values to their desired captions.\n\t     *\n\t     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * Example:\n\t     * ```\n\t     * // Using a Facet for file types\n\t     * var myValueCaption = {  \"txt\": \"Text files\",\"html\": \"Web page\", [ etc ... ]};\n\t     *\n\t     * // You can set the option in the 'init' call using 'pure' JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    Facet : {\n\t     *      valueCaption: myValueCaption\n\t     *    }\n\t     * })\n\t     *\n\t     * // Or  the jQuery extension\n\t     * $(\"#search\").coveo(\"init\", {\n\t     *    Facet: {\n\t     *      valueCaption: myValueCaption\n\t     *    }\n\t     * })\n\t     * ```\n\t     */\n\t    valueCaption: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    }),\n\t    /**\n\t     * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any Facet or\n\t     * {@link FacetSlider} in a search interface disables responsive mode for all other facets in the search interface.\n\t     *\n\t     * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n\t     * the search interface is bound to reaches or falls behind a certain threshold (see\n\t     * {@link SearchInterface.responsiveComponents}).\n\t     *\n\t     * See also {@link Facet.options.dropdownHeaderLabel}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableResponsiveMode: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    responsiveBreakpoint: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 800, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\t    /**\n\t     * If {@link Facet.options.enableResponsiveMode} is `true` for all facets and\n\t     * {@link FacetSlider.options.enableResponsiveMode} is also `true` for all sliders, specifies the label of the\n\t     * dropdown button that allows to display the facets when in responsive mode.\n\t     *\n\t     * If more than one Facet or {@link FacetSlider} in the search interface specifies a value for this option, then the\n\t     * framework uses the first occurrence of the option.\n\t     *\n\t     * Default value is `Filters`.\n\t     */\n\t    dropdownHeaderLabel: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\texports.Facet = Facet;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Facet);\n\n\n/***/ },\n/* 159 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * A class which holds information and operation available on a single facet value returned by a {@link IGroupByRequest}.<br/>\n\t * This class is used extensibely in the {@link Facet} component.\n\t */\n\tvar FacetValue = (function () {\n\t    function FacetValue() {\n\t        this.selected = false;\n\t        this.excluded = false;\n\t        this.waitingForDelta = false;\n\t    }\n\t    FacetValue.prototype.reset = function () {\n\t        this.selected = false;\n\t        this.excluded = false;\n\t    };\n\t    FacetValue.prototype.updateCountsFromNewValue = function (newValue) {\n\t        Assert_1.Assert.exists(newValue);\n\t        this.occurrences = newValue.occurrences;\n\t        this.delta = newValue.delta;\n\t        this.computedField = newValue.computedField;\n\t    };\n\t    FacetValue.prototype.cloneWithZeroOccurrences = function () {\n\t        this.occurrences = 0;\n\t        this.computedField = undefined;\n\t        this.delta = undefined;\n\t        return this;\n\t    };\n\t    FacetValue.prototype.cloneWithDelta = function (count, delta) {\n\t        Assert_1.Assert.isLargerOrEqualsThan(0, count);\n\t        var clone = this.cloneWithZeroOccurrences();\n\t        clone.delta = delta;\n\t        clone.occurrences = count;\n\t        return clone;\n\t    };\n\t    FacetValue.prototype.getFormattedCount = function () {\n\t        var count = undefined;\n\t        if (Utils_1.Utils.exists(this.delta) && this.delta > 0) {\n\t            count = '+' + Globalize.format(this.delta, 'n0');\n\t        }\n\t        else {\n\t            if (this.occurrences > 0) {\n\t                count = Globalize.format(this.occurrences, 'n0');\n\t            }\n\t        }\n\t        return count;\n\t    };\n\t    FacetValue.prototype.getFormattedComputedField = function (format) {\n\t        if (this.computedField != 0) {\n\t            return Globalize.format(this.computedField, format);\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    FacetValue.create = function (value) {\n\t        if (_.isString(value)) {\n\t            return FacetValue.createFromValue(value);\n\t        }\n\t        else if (_.isObject(value)) {\n\t            if ('computedFieldResults' in value) {\n\t                return FacetValue.createFromGroupByValue(value);\n\t            }\n\t            else {\n\t                return FacetValue.createFromFieldValue(value);\n\t            }\n\t        }\n\t        else {\n\t            throw new Error('Can\\'t create value from ' + value);\n\t        }\n\t    };\n\t    FacetValue.createFromValue = function (value) {\n\t        Assert_1.Assert.isNonEmptyString(value);\n\t        var facetValue = new FacetValue();\n\t        facetValue.value = value;\n\t        facetValue.lookupValue = value;\n\t        return facetValue;\n\t    };\n\t    FacetValue.createFromGroupByValue = function (groupByValue) {\n\t        Assert_1.Assert.exists(groupByValue);\n\t        Assert_1.Assert.exists(groupByValue);\n\t        var facetValue = new FacetValue();\n\t        facetValue.value = groupByValue.value;\n\t        facetValue.lookupValue = Utils_1.Utils.exists(groupByValue.lookupValue) ? groupByValue.lookupValue : groupByValue.value;\n\t        facetValue.occurrences = groupByValue.numberOfResults;\n\t        facetValue.computedField = Utils_1.Utils.isNonEmptyArray(groupByValue.computedFieldResults) ? groupByValue.computedFieldResults[0] : undefined;\n\t        facetValue.score = groupByValue.score;\n\t        return facetValue;\n\t    };\n\t    FacetValue.createFromFieldValue = function (fieldValue) {\n\t        Assert_1.Assert.exists(fieldValue);\n\t        var facetValue = new FacetValue();\n\t        facetValue.value = fieldValue.value;\n\t        facetValue.lookupValue = fieldValue.lookupValue;\n\t        facetValue.occurrences = fieldValue.numberOfResults;\n\t        return facetValue;\n\t    };\n\t    return FacetValue;\n\t}());\n\texports.FacetValue = FacetValue;\n\tvar FacetValues = (function () {\n\t    function FacetValues(groupByResult) {\n\t        if (Utils_1.Utils.exists(groupByResult)) {\n\t            this.values = _.map(groupByResult.values, function (groupByValue) { return FacetValue.createFromGroupByValue(groupByValue); });\n\t        }\n\t        else {\n\t            this.values = [];\n\t        }\n\t    }\n\t    FacetValues.prototype.add = function (facetValue) {\n\t        Assert_1.Assert.exists(facetValue);\n\t        Assert_1.Assert.check(!this.contains(facetValue.value));\n\t        this.values.push(facetValue);\n\t    };\n\t    FacetValues.prototype.remove = function (value) {\n\t        Assert_1.Assert.isNonEmptyString(value);\n\t        value = value;\n\t        this.values = _.filter(this.values, function (elem) { return elem.value != value; });\n\t    };\n\t    FacetValues.prototype.size = function () {\n\t        return this.values.length;\n\t    };\n\t    FacetValues.prototype.isEmpty = function () {\n\t        return this.values.length == 0;\n\t    };\n\t    FacetValues.prototype.at = function (index) {\n\t        Assert_1.Assert.isLargerOrEqualsThan(0, index);\n\t        Assert_1.Assert.isSmallerThan(this.values.length, index);\n\t        return this.values[index];\n\t    };\n\t    FacetValues.prototype.get = function (value) {\n\t        return _.find(this.values, function (elem) { return elem.value.toLowerCase() == value.toLowerCase(); });\n\t    };\n\t    FacetValues.prototype.contains = function (value) {\n\t        return Utils_1.Utils.exists(this.get(value));\n\t    };\n\t    FacetValues.prototype.getAll = function () {\n\t        return this.values;\n\t    };\n\t    FacetValues.prototype.getSelected = function () {\n\t        return _.filter(this.values, function (value) { return value.selected; });\n\t    };\n\t    FacetValues.prototype.getExcluded = function () {\n\t        return _.filter(this.values, function (value) { return value.excluded; });\n\t    };\n\t    FacetValues.prototype.hasSelectedOrExcludedValues = function () {\n\t        return this.getSelected().length != 0 || this.getExcluded().length != 0;\n\t    };\n\t    FacetValues.prototype.reset = function () {\n\t        _.each(this.values, function (elem) { return elem.reset(); });\n\t    };\n\t    FacetValues.prototype.importActiveValuesFromOtherList = function (other) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(other);\n\t        _.each(other.getSelected(), function (otherValue) {\n\t            var myValue = _this.get(otherValue.value);\n\t            if (Utils_1.Utils.exists(myValue)) {\n\t                myValue.selected = true;\n\t            }\n\t            else {\n\t                _this.values.push(otherValue.cloneWithZeroOccurrences());\n\t            }\n\t        });\n\t        _.each(other.getExcluded(), function (otherValue) {\n\t            var myValue = _this.get(otherValue.value);\n\t            if (Utils_1.Utils.exists(myValue)) {\n\t                myValue.excluded = true;\n\t            }\n\t            else if (otherValue.occurrences != 0) {\n\t                var occurrences = otherValue.occurrences;\n\t                var clone = otherValue.cloneWithZeroOccurrences();\n\t                clone.occurrences = occurrences;\n\t                _this.values.push(clone);\n\t            }\n\t            else {\n\t                _this.values.push(otherValue.cloneWithZeroOccurrences());\n\t            }\n\t        });\n\t    };\n\t    FacetValues.prototype.updateCountsFromNewValues = function (newValues) {\n\t        Assert_1.Assert.exists(newValues);\n\t        this.values = _.map(this.values, function (myValue) {\n\t            var newValue = newValues.get(myValue.value);\n\t            if (Utils_1.Utils.exists(newValue)) {\n\t                myValue.updateCountsFromNewValue(newValue);\n\t                return myValue;\n\t            }\n\t            else {\n\t                return myValue.cloneWithZeroOccurrences();\n\t            }\n\t        });\n\t    };\n\t    FacetValues.prototype.updateDeltaWithFilteredFacetValues = function (filtered) {\n\t        Assert_1.Assert.exists(filtered);\n\t        _.each(this.values, function (unfilteredValue) {\n\t            var filteredValue = filtered.get(unfilteredValue.value);\n\t            unfilteredValue.waitingForDelta = false;\n\t            if (Utils_1.Utils.exists(filteredValue)) {\n\t                if (unfilteredValue.occurrences - filteredValue.occurrences > 0) {\n\t                    unfilteredValue.delta = unfilteredValue.occurrences - filteredValue.occurrences;\n\t                }\n\t                else {\n\t                    unfilteredValue.delta = null;\n\t                }\n\t            }\n\t            else if (!unfilteredValue.selected && !unfilteredValue.excluded) {\n\t                unfilteredValue.delta = unfilteredValue.occurrences;\n\t            }\n\t        });\n\t    };\n\t    FacetValues.prototype.mergeWithUnfilteredFacetValues = function (unfiltered) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(unfiltered);\n\t        var values = [];\n\t        _.each(unfiltered.values, function (unfilteredValue) {\n\t            var filteredValue = _this.get(unfilteredValue.value);\n\t            if (Utils_1.Utils.exists(filteredValue)) {\n\t                if (filteredValue.occurrences == unfilteredValue.occurrences) {\n\t                    values.push(filteredValue);\n\t                }\n\t                else {\n\t                    values.push(unfilteredValue.cloneWithDelta(unfilteredValue.occurrences, unfilteredValue.occurrences - filteredValue.occurrences));\n\t                }\n\t            }\n\t            else {\n\t                values.push(unfilteredValue.cloneWithDelta(unfilteredValue.occurrences, unfilteredValue.occurrences));\n\t            }\n\t        });\n\t        var index = 0;\n\t        _.each(this.values, function (value) {\n\t            var unfilteredValue = unfiltered.get(value.value);\n\t            if (!Utils_1.Utils.exists(unfilteredValue)) {\n\t                if (value.selected || value.excluded) {\n\t                    values.splice(index, 0, value);\n\t                    index++;\n\t                }\n\t            }\n\t            else {\n\t                for (var i = 0; i < values.length; i++) {\n\t                    if (values[i].value == value.value) {\n\t                        index = i + 1;\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t        });\n\t        this.values = values;\n\t    };\n\t    FacetValues.prototype.sortValuesDependingOnStatus = function (excludeLastIndex) {\n\t        this.values = _.sortBy(this.values, function (value) {\n\t            if (value.selected) {\n\t                return 1;\n\t            }\n\t            else if (value.excluded) {\n\t                return 3;\n\t            }\n\t            else {\n\t                return 2;\n\t            }\n\t        });\n\t        if (excludeLastIndex != null && excludeLastIndex < this.values.length) {\n\t            var nbExclude = this.getExcluded().length;\n\t            var excludes = this.values.splice(this.values.length - nbExclude, nbExclude);\n\t            Array.prototype.splice.apply(this.values, [excludeLastIndex - nbExclude, 0].concat(excludes));\n\t        }\n\t    };\n\t    return FacetValues;\n\t}());\n\texports.FacetValues = FacetValues;\n\n\n/***/ },\n/* 160 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Facet_1 = __webpack_require__(158);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar EventsUtils_1 = __webpack_require__(140);\n\tvar FacetSearchParameters_1 = __webpack_require__(94);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Component_1 = __webpack_require__(109);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar FacetValues_1 = __webpack_require__(159);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar ResponsiveComponentsUtils_1 = __webpack_require__(141);\n\tvar FacetValuesOrder_1 = __webpack_require__(164);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * Used by the {@link Facet} component to render and handle the facet search part of each facet.\n\t */\n\tvar FacetSearch = (function () {\n\t    function FacetSearch(facet, facetSearchValuesListKlass, root) {\n\t        var _this = this;\n\t        this.facet = facet;\n\t        this.facetSearchValuesListKlass = facetSearchValuesListKlass;\n\t        this.root = root;\n\t        this.showingFacetSearchWaitAnimation = false;\n\t        this.moreValuesToFetch = true;\n\t        this.searchBarIsAnimating = false;\n\t        this.lastSearchWasEmpty = true;\n\t        this.searchResults = document.createElement('ul');\n\t        Dom_1.$$(this.searchResults).addClass('coveo-facet-search-results');\n\t        this.onResize = _.debounce(function () {\n\t            // Mitigate issues in UT where the window in phantom js might get resized in the scope of another test.\n\t            // These would point to random instance of a test karma object, and not a real search interface.\n\t            if (_this.facet instanceof Facet_1.Facet && _this.facet.searchInterface instanceof SearchInterface_1.SearchInterface) {\n\t                if (_this.shouldPositionSearchResults()) {\n\t                    _this.positionSearchResults();\n\t                }\n\t            }\n\t        }, 250);\n\t        this.onDocumentClick = function (e) {\n\t            _this.handleClickElsewhere(e);\n\t        };\n\t        window.addEventListener('resize', function () { return _this.onResize(); });\n\t        document.addEventListener('click', function (e) { return _this.onDocumentClick(e); });\n\t        Dom_1.$$(facet.root).on(InitializationEvents_1.InitializationEvents.nuke, function () { return _this.handleNuke(); });\n\t    }\n\t    FacetSearch.prototype.isMobileDevice = function () {\n\t        return DeviceUtils_1.DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign();\n\t    };\n\t    /**\n\t     * Build the search component and return an `HTMLElement` which can be appended to the {@link Facet}.\n\t     * @returns {HTMLElement}\n\t     */\n\t    FacetSearch.prototype.build = function () {\n\t        if (this.isMobileDevice()) {\n\t            return this.buildSearchMobile();\n\t        }\n\t        else {\n\t            return this.buildBaseSearch();\n\t        }\n\t    };\n\t    /**\n\t     * Position the search results at the footer of the facet.\n\t     */\n\t    FacetSearch.prototype.positionSearchResults = function (nextTo) {\n\t        if (nextTo === void 0) { nextTo = this.search; }\n\t        if (this.searchResults != null) {\n\t            if (!this.isMobileDevice()) {\n\t                this.searchResults.style.display = 'block';\n\t                this.searchResults.style.width = this.facet.element.clientWidth - 40 + 'px';\n\t            }\n\t            if (Dom_1.$$(this.searchResults).css('display') == 'none') {\n\t                this.searchResults.style.display = '';\n\t            }\n\t            var searchBar = Dom_1.$$(this.search);\n\t            if (searchBar.css('display') == 'none' || this.searchBarIsAnimating) {\n\t                if (Dom_1.$$(this.searchResults).css('display') == 'none') {\n\t                    this.searchResults.style.display = '';\n\t                }\n\t                var self_1 = this;\n\t                EventsUtils_1.EventsUtils.addPrefixedEvent(this.search, 'AnimationEnd', function (evt) {\n\t                    PopupUtils_1.PopupUtils.positionPopup(self_1.searchResults, nextTo, self_1.root, { horizontal: PopupUtils_1.HorizontalAlignment.CENTER, vertical: PopupUtils_1.VerticalAlignment.BOTTOM });\n\t                    EventsUtils_1.EventsUtils.removePrefixedEvent(self_1.search, 'AnimationEnd', this);\n\t                });\n\t            }\n\t            else {\n\t                PopupUtils_1.PopupUtils.positionPopup(this.searchResults, nextTo, this.root, { horizontal: PopupUtils_1.HorizontalAlignment.CENTER, vertical: PopupUtils_1.VerticalAlignment.BOTTOM });\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Dismiss the search results\n\t     */\n\t    FacetSearch.prototype.completelyDismissSearch = function () {\n\t        this.cancelAnyPendingSearchOperation();\n\t        this.facet.unfadeInactiveValuesInMainList();\n\t        Dom_1.$$(this.searchResults).empty();\n\t        this.moreValuesToFetch = true;\n\t        Dom_1.$$(this.search).removeClass('coveo-facet-search-no-results');\n\t        Dom_1.$$(this.facet.element).removeClass('coveo-facet-searching');\n\t        this.hideSearchResultsElement();\n\t        this.input.value = '';\n\t        Dom_1.$$(this.clear).hide();\n\t        this.currentlyDisplayedResults = undefined;\n\t    };\n\t    /**\n\t     * Trigger a new facet search, and display the results.\n\t     * @param params\n\t     */\n\t    FacetSearch.prototype.triggerNewFacetSearch = function (params) {\n\t        var _this = this;\n\t        this.cancelAnyPendingSearchOperation();\n\t        this.showFacetSearchWaitingAnimation();\n\t        this.facet.logger.info('Triggering new facet search');\n\t        this.facetSearchPromise = this.facet.facetQueryController.search(params);\n\t        if (this.facetSearchPromise) {\n\t            this.facetSearchPromise.then(function (fieldValues) {\n\t                _this.facet.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetSearch, {\n\t                    facetId: _this.facet.options.id,\n\t                    facetTitle: _this.facet.options.title\n\t                }, _this.facet.root);\n\t                _this.facet.logger.debug('Received field values', fieldValues);\n\t                _this.processNewFacetSearchResults(fieldValues, params);\n\t                _this.hideFacetSearchWaitingAnimation();\n\t                _this.facetSearchPromise = undefined;\n\t            }).catch(function (error) {\n\t                // The request might be normally cancelled if another search is triggered.\n\t                // In this case we do not hide the animation to prevent flicking.\n\t                if (Utils_1.Utils.exists(error)) {\n\t                    _this.facet.logger.error('Error while retrieving facet values', error);\n\t                    _this.hideFacetSearchWaitingAnimation();\n\t                }\n\t                _this.facetSearchPromise = undefined;\n\t                return null;\n\t            });\n\t        }\n\t    };\n\t    /**\n\t     * Trigger the event associated with the focus of the search input.\n\t     */\n\t    FacetSearch.prototype.focus = function () {\n\t        this.input.focus();\n\t        this.handleFacetSearchFocus();\n\t    };\n\t    FacetSearch.prototype.shouldPositionSearchResults = function () {\n\t        return !this.isMobileDevice() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(Dom_1.$$(this.root))\n\t            && Dom_1.$$(this.facet.element).hasClass('coveo-facet-searching');\n\t    };\n\t    FacetSearch.prototype.buildBaseSearch = function () {\n\t        var _this = this;\n\t        this.search = document.createElement('div');\n\t        Dom_1.$$(this.search).addClass('coveo-facet-search');\n\t        this.magnifier = document.createElement('div');\n\t        Dom_1.$$(this.magnifier).addClass('coveo-facet-search-magnifier');\n\t        this.search.appendChild(this.magnifier);\n\t        this.wait = document.createElement('div');\n\t        Dom_1.$$(this.wait).addClass('coveo-facet-search-wait-animation');\n\t        this.search.appendChild(this.wait);\n\t        this.hideFacetSearchWaitingAnimation();\n\t        this.clear = document.createElement('div');\n\t        Dom_1.$$(this.clear).addClass('coveo-facet-search-clear');\n\t        this.clear.setAttribute('title', Strings_1.l('Clear', Strings_1.l('Search')));\n\t        this.clear.style.display = 'none';\n\t        this.search.appendChild(this.clear);\n\t        this.clearIcon = document.createElement('span');\n\t        Dom_1.$$(this.clearIcon).addClass('coveo-icon');\n\t        this.clear.appendChild(this.clearIcon);\n\t        this.middle = document.createElement('div');\n\t        Dom_1.$$(this.middle).addClass('coveo-facet-search-middle');\n\t        this.search.appendChild(this.middle);\n\t        this.input = document.createElement('input');\n\t        this.input.setAttribute('type', 'text');\n\t        this.input.setAttribute('autocapitalize', 'off');\n\t        this.input.setAttribute('autocorrect', 'off');\n\t        this.input.setAttribute('placeholder', this.facet.searchInterface.isNewDesign() ? '' : Strings_1.l('SearchIn', this.facet.options.title));\n\t        Dom_1.$$(this.input).addClass('coveo-facet-search-input');\n\t        Component_1.Component.pointElementsToDummyForm(this.input);\n\t        this.middle.appendChild(this.input);\n\t        Dom_1.$$(this.input).on('keyup', function (e) { return _this.handleFacetSearchKeyUp(e); });\n\t        Dom_1.$$(this.clear).on('click', function (e) { return _this.handleFacetSearchClear(); });\n\t        Dom_1.$$(this.input).on('focus', function (e) { return _this.handleFacetSearchFocus(); });\n\t        this.detectSearchBarAnimation();\n\t        this.root.appendChild(this.searchResults);\n\t        this.searchResults.style.display = 'none';\n\t        return this.search;\n\t    };\n\t    FacetSearch.prototype.buildSearchMobile = function () {\n\t        var _this = this;\n\t        var button = document.createElement('div');\n\t        Dom_1.$$(button).addClass('coveo-facet-search-button-mobile');\n\t        Dom_1.$$(button).text(Strings_1.l('Search'));\n\t        this.search = this.buildBaseSearch();\n\t        Dom_1.$$(button).on('click', function () {\n\t            var toOpen = document.createElement('div');\n\t            toOpen.appendChild(_this.search);\n\t            ExternalModulesShim_1.ModalBox.open(toOpen, {\n\t                title: DomUtils_1.DomUtils.getPopUpCloseButton(Strings_1.l('Close'), Strings_1.l('SearchIn', _this.facet.options.title)),\n\t                validation: function () {\n\t                    _this.completelyDismissSearch();\n\t                    return true;\n\t                },\n\t                className: 'coveo-mobile-facet-search',\n\t                titleClose: true\n\t            });\n\t            _this.input.value = '';\n\t            _this.input.focus();\n\t        });\n\t        return button;\n\t    };\n\t    FacetSearch.prototype.handleFacetSearchKeyUp = function (event) {\n\t        Assert_1.Assert.exists(event);\n\t        var isEmpty = this.input.value.trim() == '';\n\t        this.showOrHideClearElement(isEmpty);\n\t        if (!this.isMobileDevice()) {\n\t            this.handleKeyboardNavigation(event, isEmpty);\n\t        }\n\t        else {\n\t            this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n\t        }\n\t    };\n\t    FacetSearch.prototype.handleNuke = function () {\n\t        window.removeEventListener('resize', this.onResize);\n\t        document.removeEventListener('click', this.onDocumentClick);\n\t    };\n\t    FacetSearch.prototype.handleFacetSearchFocus = function () {\n\t        if (!this.isMobileDevice()) {\n\t            if (this.facet.searchInterface.isNewDesign()) {\n\t                // Trigger a query only if the results are not already rendered.\n\t                // Protect against the case where user can \"focus\" out of the search box by clicking not directly on a search results\n\t                // Then re-focusing the search box\n\t                if (this.currentlyDisplayedResults == null) {\n\t                    this.startNewSearchTimeout(this.buildParamsForExcludingCurrentlyDisplayedValues());\n\t                }\n\t            }\n\t            else {\n\t                this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n\t            }\n\t        }\n\t    };\n\t    FacetSearch.prototype.handleClickElsewhere = function (event) {\n\t        if (this.currentlyDisplayedResults && !this.isMobileDevice() && this.search != event.target && this.searchResults != event.target && this.input != event.target) {\n\t            this.completelyDismissSearch();\n\t        }\n\t    };\n\t    FacetSearch.prototype.handleFacetSearchClear = function () {\n\t        this.input.value = '';\n\t        Dom_1.$$(this.clear).hide();\n\t        this.completelyDismissSearch();\n\t    };\n\t    FacetSearch.prototype.showOrHideClearElement = function (isEmpty) {\n\t        if (!isEmpty) {\n\t            Dom_1.$$(this.clear).show();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.clear).hide();\n\t            Dom_1.$$(this.search).removeClass('coveo-facet-search-no-results');\n\t        }\n\t    };\n\t    FacetSearch.prototype.handleKeyboardNavigation = function (event, isEmpty) {\n\t        switch (event.which) {\n\t            case KeyboardUtils_1.KEYBOARD.ENTER:\n\t                this.keyboardNavigationEnterPressed(event, isEmpty);\n\t                break;\n\t            case KeyboardUtils_1.KEYBOARD.DELETE:\n\t                this.keyboardNavigationDeletePressed(event);\n\t                break;\n\t            case KeyboardUtils_1.KEYBOARD.ESCAPE:\n\t                this.completelyDismissSearch();\n\t                break;\n\t            case KeyboardUtils_1.KEYBOARD.DOWN_ARROW:\n\t                this.moveCurrentResultDown();\n\t                break;\n\t            case KeyboardUtils_1.KEYBOARD.UP_ARROW:\n\t                this.moveCurrentResultUp();\n\t                break;\n\t            default:\n\t                this.moreValuesToFetch = true;\n\t                this.highlightCurrentQueryWithinSearchResults();\n\t                if (!isEmpty) {\n\t                    this.lastSearchWasEmpty = false;\n\t                    this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n\t                }\n\t                else if (!this.lastSearchWasEmpty) {\n\t                    // This normally happen if a user delete the search box content to go back to \"empty\" state.\n\t                    this.currentlyDisplayedResults = undefined;\n\t                    Dom_1.$$(this.searchResults).empty();\n\t                    this.lastSearchWasEmpty = true;\n\t                    this.startNewSearchTimeout(this.buildParamsForFetchingMore());\n\t                }\n\t                break;\n\t        }\n\t    };\n\t    FacetSearch.prototype.keyboardNavigationEnterPressed = function (event, isEmpty) {\n\t        if (event.shiftKey) {\n\t            this.triggerNewFacetSearch(this.buildParamsForNormalSearch());\n\t        }\n\t        else {\n\t            if (this.searchResults.style.display != 'none') {\n\t                this.performSelectActionOnCurrentSearchResult();\n\t                this.completelyDismissSearch();\n\t            }\n\t            else if (Dom_1.$$(this.search).is('.coveo-facet-search-no-results') && !isEmpty) {\n\t                this.selectAllValuesMatchingSearch();\n\t            }\n\t        }\n\t    };\n\t    FacetSearch.prototype.keyboardNavigationDeletePressed = function (event) {\n\t        if (event.shiftKey) {\n\t            this.performExcludeActionOnCurrentSearchResult();\n\t            this.completelyDismissSearch();\n\t            this.input.value = '';\n\t        }\n\t    };\n\t    FacetSearch.prototype.startNewSearchTimeout = function (params) {\n\t        var _this = this;\n\t        this.cancelAnyPendingSearchOperation();\n\t        this.facetSearchTimeout = setTimeout(function () {\n\t            var valueInInput = _this.getValueInInputForFacetSearch();\n\t            if (valueInInput == '') {\n\t                if (params.searchEvenIfEmpty) {\n\t                    _this.triggerNewFacetSearch(params);\n\t                }\n\t                else {\n\t                    _this.completelyDismissSearch();\n\t                }\n\t            }\n\t            else {\n\t                _this.triggerNewFacetSearch(params);\n\t            }\n\t        }, this.facet.options.facetSearchDelay);\n\t    };\n\t    FacetSearch.prototype.cancelAnyPendingSearchOperation = function () {\n\t        if (Utils_1.Utils.exists(this.facetSearchTimeout)) {\n\t            clearTimeout(this.facetSearchTimeout);\n\t            this.facetSearchTimeout = undefined;\n\t        }\n\t        if (Utils_1.Utils.exists(this.facetSearchPromise)) {\n\t            Promise.reject(this.facetSearchPromise).catch(function () {\n\t            });\n\t            this.facetSearchPromise = undefined;\n\t        }\n\t        this.hideFacetSearchWaitingAnimation();\n\t    };\n\t    FacetSearch.prototype.processNewFacetSearchResults = function (fieldValues, facetSearchParameters) {\n\t        Assert_1.Assert.exists(fieldValues);\n\t        fieldValues = new FacetValuesOrder_1.FacetValuesOrder(this.facet, this.facet.facetSort).reorderValues(fieldValues);\n\t        if (fieldValues.length > 0) {\n\t            Dom_1.$$(this.search).removeClass('coveo-facet-search-no-results');\n\t            this.facet.fadeInactiveValuesInMainList(this.facet.options.facetSearchDelay);\n\t            this.rebuildSearchResults(fieldValues, facetSearchParameters);\n\t            if (!facetSearchParameters.fetchMore) {\n\t                this.showSearchResultsElement();\n\t            }\n\t            this.highlightCurrentQueryWithinSearchResults();\n\t            FacetUtils_1.FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.facet, true);\n\t            this.makeFirstSearchResultTheCurrentOne();\n\t        }\n\t        else {\n\t            if (facetSearchParameters.fetchMore) {\n\t                this.moreValuesToFetch = false;\n\t            }\n\t            else {\n\t                this.hideSearchResultsElement();\n\t                Dom_1.$$(this.search).addClass('coveo-facet-search-no-results');\n\t            }\n\t        }\n\t    };\n\t    FacetSearch.prototype.rebuildSearchResults = function (fieldValues, facetSearchParameters) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(fieldValues);\n\t        if (!facetSearchParameters.fetchMore) {\n\t            Dom_1.$$(this.searchResults).empty();\n\t        }\n\t        var selectAll = document.createElement('li');\n\t        if (Utils_1.Utils.isNonEmptyString(facetSearchParameters.valueToSearch)) {\n\t            Dom_1.$$(selectAll).addClass(['coveo-facet-selectable', 'coveo-facet-search-selectable', 'coveo-facet-search-select-all']);\n\t            Dom_1.$$(selectAll).text(Strings_1.l('SelectAll'));\n\t            Dom_1.$$(selectAll).on('click', function () { return _this.selectAllValuesMatchingSearch(); });\n\t            if (!this.isMobileDevice()) {\n\t                this.searchResults.appendChild(selectAll);\n\t            }\n\t        }\n\t        var facetValues = _.map(fieldValues, function (fieldValue) {\n\t            return FacetValues_1.FacetValue.create(fieldValue);\n\t        });\n\t        _.each(new this.facetSearchValuesListKlass(this.facet, FacetValueElement_1.FacetValueElement).build(facetValues), function (listElement) {\n\t            _this.searchResults.appendChild(listElement);\n\t        });\n\t        if (this.currentlyDisplayedResults) {\n\t            this.currentlyDisplayedResults = this.currentlyDisplayedResults.concat(_.pluck(facetValues, 'value'));\n\t        }\n\t        else {\n\t            this.currentlyDisplayedResults = _.pluck(facetValues, 'value');\n\t        }\n\t        if (this.isMobileDevice()) {\n\t            var selectAllMobile = document.createElement('span');\n\t            Dom_1.$$(selectAllMobile).addClass('coveo-mobile-facet-search-select-all');\n\t            selectAll.appendChild(selectAllMobile);\n\t            this.searchResults.appendChild(selectAll);\n\t        }\n\t        _.each(Dom_1.$$(this.searchResults).findAll('.coveo-facet-selectable'), function (elem) {\n\t            Dom_1.$$(elem).addClass('coveo-facet-search-selectable');\n\t            _this.setupFacetSearchResultsEvents(elem);\n\t        });\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            Dom_1.$$(this.searchResults).on('scroll', function () { return _this.handleFacetSearchResultsScroll(); });\n\t        }\n\t    };\n\t    FacetSearch.prototype.setupFacetSearchResultsEvents = function (elem) {\n\t        var _this = this;\n\t        Dom_1.$$(elem).on('mousemove', function () {\n\t            _this.makeCurrentResult(elem);\n\t        });\n\t        // Prevent closing the search results on the end of a touch drag\n\t        var touchDragging = false;\n\t        var mouseDragging = false;\n\t        Dom_1.$$(elem).on('mousedown', function () { return mouseDragging = false; });\n\t        Dom_1.$$(elem).on('mousemove', function () { return mouseDragging = true; });\n\t        Dom_1.$$(elem).on('touchmove', function () { return touchDragging = true; });\n\t        Dom_1.$$(elem).on('mouseup touchend', function () {\n\t            if (!touchDragging && !mouseDragging) {\n\t                setTimeout(function () {\n\t                    _this.completelyDismissSearch();\n\t                }, 0); // setTimeout is to give time to trigger the click event before hiding the search menu.\n\t            }\n\t            touchDragging = false;\n\t            mouseDragging = false;\n\t        });\n\t    };\n\t    FacetSearch.prototype.handleFacetSearchResultsScroll = function () {\n\t        if (this.facetSearchPromise || this.getValueInInputForFacetSearch() != '' || !this.moreValuesToFetch) {\n\t            return;\n\t        }\n\t        var elementHeight = this.searchResults.clientHeight;\n\t        var scrollHeight = this.searchResults.scrollHeight;\n\t        var bottomPosition = this.searchResults.scrollTop + elementHeight;\n\t        if ((scrollHeight - bottomPosition) < elementHeight / 2) {\n\t            this.triggerNewFacetSearch(this.buildParamsForFetchingMore());\n\t        }\n\t    };\n\t    FacetSearch.prototype.buildParamsForNormalSearch = function () {\n\t        var params = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        params.setValueToSearch(this.getValueInInputForFacetSearch());\n\t        params.fetchMore = false;\n\t        return params;\n\t    };\n\t    FacetSearch.prototype.buildParamsForFetchingMore = function () {\n\t        var params = this.buildParamsForExcludingCurrentlyDisplayedValues();\n\t        params.fetchMore = true;\n\t        return params;\n\t    };\n\t    FacetSearch.prototype.buildParamsForExcludingCurrentlyDisplayedValues = function () {\n\t        var params = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        params.excludeCurrentlyDisplayedValuesInSearch(this.searchResults);\n\t        params.setValueToSearch(this.getValueInInputForFacetSearch());\n\t        return params;\n\t    };\n\t    FacetSearch.prototype.showSearchResultsElement = function () {\n\t        this.positionSearchResults();\n\t    };\n\t    FacetSearch.prototype.hideSearchResultsElement = function () {\n\t        this.searchResults.style.display = 'none';\n\t    };\n\t    FacetSearch.prototype.highlightCurrentQueryWithinSearchResults = function () {\n\t        var _this = this;\n\t        var captions = Dom_1.$$(this.searchResults).findAll('.coveo-facet-value-caption');\n\t        _.each(captions, function (captionElement) {\n\t            var search = _this.getValueInInputForFacetSearch();\n\t            var regex = new RegExp('(' + StringUtils_1.StringUtils.wildcardsToRegex(search, _this.facet.options.facetSearchIgnoreAccents) + ')', 'ig');\n\t            var text = Dom_1.$$(captionElement).text();\n\t            var highlighted = text.replace(regex, '<span class=\"coveo-highlight\">$1</span>');\n\t            captionElement.innerHTML = highlighted;\n\t        });\n\t    };\n\t    FacetSearch.prototype.makeFirstSearchResultTheCurrentOne = function () {\n\t        this.makeCurrentResult(this.getSelectables()[0]);\n\t    };\n\t    FacetSearch.prototype.makeCurrentResult = function (result) {\n\t        _.each(this.getSelectables(), function (selectable) {\n\t            Dom_1.$$(selectable).removeClass('coveo-current');\n\t        });\n\t        Dom_1.$$(result).addClass('coveo-current');\n\t    };\n\t    FacetSearch.prototype.moveCurrentResultDown = function () {\n\t        var current = Dom_1.$$(this.searchResults).find('.coveo-current');\n\t        _.each(this.getSelectables(), function (selectable) {\n\t            Dom_1.$$(selectable).removeClass('coveo-current');\n\t        });\n\t        var allSelectables = this.getSelectables();\n\t        var idx = _.indexOf(allSelectables, current);\n\t        var target;\n\t        if (idx < allSelectables.length - 1) {\n\t            target = Dom_1.$$(allSelectables[idx + 1]);\n\t        }\n\t        else {\n\t            target = Dom_1.$$(allSelectables[0]);\n\t        }\n\t        this.highlightAndShowCurrentResultWithKeyboard(target);\n\t    };\n\t    FacetSearch.prototype.moveCurrentResultUp = function () {\n\t        var current = Dom_1.$$(this.searchResults).find('.coveo-current');\n\t        _.each(Dom_1.$$(this.searchResults).findAll('.coveo-facet-selectable'), function (s) {\n\t            Dom_1.$$(s).removeClass('coveo-current');\n\t        });\n\t        var allSelectables = this.getSelectables();\n\t        var idx = _.indexOf(allSelectables, current);\n\t        var target;\n\t        if (idx > 0) {\n\t            target = Dom_1.$$(allSelectables[idx - 1]);\n\t        }\n\t        else {\n\t            target = Dom_1.$$(allSelectables[allSelectables.length - 1]);\n\t        }\n\t        this.highlightAndShowCurrentResultWithKeyboard(target);\n\t    };\n\t    FacetSearch.prototype.highlightAndShowCurrentResultWithKeyboard = function (target) {\n\t        target.addClass('coveo-current');\n\t        this.searchResults.scrollTop = target.el.offsetTop;\n\t    };\n\t    FacetSearch.prototype.getSelectables = function (target) {\n\t        if (target === void 0) { target = this.searchResults; }\n\t        return Dom_1.$$(target).findAll('.coveo-facet-selectable');\n\t    };\n\t    FacetSearch.prototype.performSelectActionOnCurrentSearchResult = function () {\n\t        var current = Dom_1.$$(this.searchResults).find('.coveo-current');\n\t        Assert_1.Assert.check(current != undefined);\n\t        var checkbox = Dom_1.$$(current).find('input[type=\"checkbox\"]');\n\t        if (checkbox != undefined) {\n\t            checkbox.checked = true;\n\t            Dom_1.$$(checkbox).trigger('change');\n\t        }\n\t        else {\n\t            current.click();\n\t        }\n\t    };\n\t    FacetSearch.prototype.performExcludeActionOnCurrentSearchResult = function () {\n\t        var current = Dom_1.$$(this.searchResults).find('.coveo-current');\n\t        Assert_1.Assert.check(current != null);\n\t        var valueCaption = Dom_1.$$(current).find('.coveo-facet-value-caption');\n\t        var valueElement = this.facet.facetValuesList.get(Dom_1.$$(valueCaption).text());\n\t        valueElement.toggleExcludeWithUA();\n\t    };\n\t    FacetSearch.prototype.getValueInInputForFacetSearch = function () {\n\t        return this.input.value.trim();\n\t    };\n\t    FacetSearch.prototype.selectAllValuesMatchingSearch = function () {\n\t        var _this = this;\n\t        this.facet.showWaitingAnimation();\n\t        var searchParameters = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        searchParameters.nbResults = 1000;\n\t        searchParameters.setValueToSearch(this.getValueInInputForFacetSearch());\n\t        this.facet.facetQueryController.search(searchParameters).then(function (fieldValues) {\n\t            _this.completelyDismissSearch();\n\t            ExternalModulesShim_1.ModalBox.close(true);\n\t            var facetValues = _.map(fieldValues, function (fieldValue) {\n\t                var facetValue = _this.facet.values.get(fieldValue.value);\n\t                if (!Utils_1.Utils.exists(facetValue)) {\n\t                    facetValue = FacetValues_1.FacetValue.create(fieldValue);\n\t                }\n\t                facetValue.selected = true;\n\t                facetValue.excluded = false;\n\t                return facetValue;\n\t            });\n\t            _this.facet.processFacetSearchAllResultsSelected(facetValues);\n\t        });\n\t        this.completelyDismissSearch();\n\t    };\n\t    FacetSearch.prototype.showFacetSearchWaitingAnimation = function () {\n\t        Dom_1.$$(this.magnifier).hide();\n\t        Dom_1.$$(this.wait).show();\n\t        this.showingFacetSearchWaitAnimation = true;\n\t    };\n\t    FacetSearch.prototype.hideFacetSearchWaitingAnimation = function () {\n\t        Dom_1.$$(this.magnifier).show();\n\t        Dom_1.$$(this.wait).hide();\n\t        this.showingFacetSearchWaitAnimation = false;\n\t    };\n\t    FacetSearch.prototype.detectSearchBarAnimation = function () {\n\t        var _this = this;\n\t        EventsUtils_1.EventsUtils.addPrefixedEvent(this.search, 'AnimationStart', function (event) {\n\t            if (event.animationName == 'grow') {\n\t                _this.searchBarIsAnimating = true;\n\t            }\n\t        });\n\t        EventsUtils_1.EventsUtils.addPrefixedEvent(this.search, 'AnimationEnd', function (event) {\n\t            if (event.animationName == 'grow') {\n\t                _this.searchBarIsAnimating = false;\n\t            }\n\t        });\n\t    };\n\t    return FacetSearch;\n\t}());\n\texports.FacetSearch = FacetSearch;\n\n\n/***/ },\n/* 161 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ValueElement_1 = __webpack_require__(162);\n\tvar FacetValueElement = (function (_super) {\n\t    __extends(FacetValueElement, _super);\n\t    function FacetValueElement(facet, facetValue, keepDisplayedValueNextTime) {\n\t        var _this = _super.call(this, facet, facetValue) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        _this.keepDisplayedValueNextTime = keepDisplayedValueNextTime;\n\t        _this.firstQuery = true;\n\t        // The analytics code expect a first query to be made to link the user action with a query UID\n\t        Dom_1.$$(facet.root).one(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t            _this.firstQuery = false;\n\t        });\n\t        return _this;\n\t    }\n\t    FacetValueElement.prototype.bindEvent = function () {\n\t        _super.prototype.bindEvent.call(this, { displayNextTime: this.keepDisplayedValueNextTime, pinFacet: this.facet.options.preservePosition });\n\t    };\n\t    return FacetValueElement;\n\t}(ValueElement_1.ValueElement));\n\texports.FacetValueElement = FacetValueElement;\n\n\n/***/ },\n/* 162 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ValueElementRenderer_1 = __webpack_require__(163);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar ValueElement = (function () {\n\t    function ValueElement(facet, facetValue, onSelect, onExclude) {\n\t        this.facet = facet;\n\t        this.facetValue = facetValue;\n\t        this.onSelect = onSelect;\n\t        this.onExclude = onExclude;\n\t    }\n\t    ValueElement.prototype.build = function () {\n\t        this.renderer = new ValueElementRenderer_1.ValueElementRenderer(this.facet, this.facetValue).build();\n\t        this.bindEvent({ displayNextTime: true, pinFacet: this.facet.options.preservePosition });\n\t        return this;\n\t    };\n\t    ValueElement.prototype.bindEvent = function (eventBindings) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(eventBindings.omniboxObject)) {\n\t            this.isOmnibox = true;\n\t        }\n\t        else {\n\t            this.isOmnibox = false;\n\t        }\n\t        this.handleEventForCheckboxChange(eventBindings);\n\t        if (this.facetValue.excluded) {\n\t            this.handleEventForExcludedValueElement(eventBindings);\n\t        }\n\t        else {\n\t            this.handleEventForValueElement(eventBindings);\n\t        }\n\t    };\n\t    ValueElement.prototype.select = function () {\n\t        this.facetValue.selected = true;\n\t        this.facetValue.excluded = false;\n\t        this.renderer.setCssClassOnListValueElement();\n\t    };\n\t    ValueElement.prototype.unselect = function () {\n\t        this.facetValue.selected = false;\n\t        this.facetValue.excluded = false;\n\t        this.renderer.setCssClassOnListValueElement();\n\t    };\n\t    ValueElement.prototype.exclude = function () {\n\t        this.facetValue.selected = false;\n\t        this.facetValue.excluded = true;\n\t        this.renderer.setCssClassOnListValueElement();\n\t    };\n\t    ValueElement.prototype.unexclude = function () {\n\t        this.facetValue.selected = false;\n\t        this.facetValue.excluded = false;\n\t        this.renderer.setCssClassOnListValueElement();\n\t    };\n\t    ValueElement.prototype.toggleExcludeWithUA = function () {\n\t        var _this = this;\n\t        var actionCause;\n\t        if (this.facetValue.excluded) {\n\t            actionCause = this.isOmnibox ? AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFacetUnexclude : AnalyticsActionListMeta_1.analyticsActionCauseList.facetUnexclude;\n\t        }\n\t        else {\n\t            actionCause = this.isOmnibox ? AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFacetExclude : AnalyticsActionListMeta_1.analyticsActionCauseList.facetExclude;\n\t        }\n\t        this.facet.toggleExcludeValue(this.facetValue);\n\t        if (this.onExclude) {\n\t            this.facet.triggerNewQuery(function () { return _this.onExclude(_this, actionCause); });\n\t        }\n\t        else {\n\t            this.facet.triggerNewQuery(function () { return _this.facet.usageAnalytics.logSearchEvent(actionCause, _this.getAnalyticsFacetMeta()); });\n\t        }\n\t    };\n\t    ValueElement.prototype.handleSelectValue = function (eventBindings) {\n\t        var _this = this;\n\t        this.facet.keepDisplayedValuesNextTime = eventBindings.displayNextTime && !this.facet.options.useAnd;\n\t        var actionCause;\n\t        if (this.facetValue.excluded) {\n\t            actionCause = this.isOmnibox ? AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFacetUnexclude : AnalyticsActionListMeta_1.analyticsActionCauseList.facetUnexclude;\n\t            this.facet.unexcludeValue(this.facetValue);\n\t        }\n\t        else {\n\t            if (this.facetValue.selected) {\n\t                actionCause = this.isOmnibox ? AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFacetDeselect : AnalyticsActionListMeta_1.analyticsActionCauseList.facetDeselect;\n\t            }\n\t            else {\n\t                actionCause = this.isOmnibox ? AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFacetSelect : AnalyticsActionListMeta_1.analyticsActionCauseList.facetSelect;\n\t            }\n\t            this.facet.toggleSelectValue(this.facetValue);\n\t        }\n\t        if (this.onSelect) {\n\t            this.facet.triggerNewQuery(function () { return _this.onSelect(_this, actionCause); });\n\t        }\n\t        else {\n\t            this.facet.triggerNewQuery(function () { return _this.facet.usageAnalytics.logSearchEvent(actionCause, _this.getAnalyticsFacetMeta()); });\n\t        }\n\t    };\n\t    ValueElement.prototype.handleExcludeClick = function (eventBindings) {\n\t        this.facet.keepDisplayedValuesNextTime = eventBindings.displayNextTime && !this.facet.options.useAnd;\n\t        this.toggleExcludeWithUA();\n\t    };\n\t    ValueElement.prototype.handleEventForExcludedValueElement = function (eventBindings) {\n\t        var _this = this;\n\t        var clickEvent = function (event) {\n\t            if (eventBindings.pinFacet) {\n\t                _this.facet.pinFacetPosition();\n\t            }\n\t            if (eventBindings.omniboxObject) {\n\t                _this.omniboxCloseEvent(eventBindings.omniboxObject);\n\t            }\n\t            _this.handleSelectValue(eventBindings);\n\t            return false;\n\t        };\n\t        Dom_1.$$(this.renderer.label).on('click', function (e) {\n\t            e.stopPropagation();\n\t            clickEvent(e);\n\t        });\n\t        Dom_1.$$(this.renderer.stylishCheckbox).on('keydown', KeyboardUtils_1.KeyboardUtils.keypressAction([\n\t            KeyboardUtils_1.KEYBOARD.SPACEBAR,\n\t            KeyboardUtils_1.KEYBOARD.ENTER\n\t        ], clickEvent));\n\t    };\n\t    ValueElement.prototype.handleEventForValueElement = function (eventBindings) {\n\t        var _this = this;\n\t        var excludeAction = function (event) {\n\t            if (eventBindings.omniboxObject) {\n\t                _this.omniboxCloseEvent(eventBindings.omniboxObject);\n\t            }\n\t            _this.handleExcludeClick(eventBindings);\n\t            if (_this.facet && _this.facet.facetSearch && _this.facet.facetSearch.completelyDismissSearch) {\n\t                _this.facet.facetSearch.completelyDismissSearch();\n\t            }\n\t            event.stopPropagation();\n\t            event.preventDefault();\n\t        };\n\t        Dom_1.$$(this.renderer.excludeIcon).on('click', excludeAction);\n\t        Dom_1.$$(this.renderer.excludeIcon).on('keydown', KeyboardUtils_1.KeyboardUtils.keypressAction([\n\t            KeyboardUtils_1.KEYBOARD.SPACEBAR,\n\t            KeyboardUtils_1.KEYBOARD.ENTER\n\t        ], excludeAction));\n\t        var selectAction = function (event) {\n\t            if (eventBindings.pinFacet) {\n\t                _this.facet.pinFacetPosition();\n\t            }\n\t            Dom_1.$$(_this.renderer.checkbox).trigger('change');\n\t            event.preventDefault();\n\t        };\n\t        Dom_1.$$(this.renderer.label).on('click', selectAction);\n\t        Dom_1.$$(this.renderer.stylishCheckbox).on('keydown', KeyboardUtils_1.KeyboardUtils.keypressAction([\n\t            KeyboardUtils_1.KEYBOARD.SPACEBAR,\n\t            KeyboardUtils_1.KEYBOARD.ENTER\n\t        ], selectAction));\n\t    };\n\t    ValueElement.prototype.handleEventForCheckboxChange = function (eventBindings) {\n\t        var _this = this;\n\t        Dom_1.$$(this.renderer.checkbox).on('change', function () {\n\t            if (eventBindings.omniboxObject) {\n\t                _this.omniboxCloseEvent(eventBindings.omniboxObject);\n\t            }\n\t            _this.handleSelectValue(eventBindings);\n\t            if (DeviceUtils_1.DeviceUtils.isMobileDevice() && !_this.facet.searchInterface.isNewDesign() && _this.facet.options.enableFacetSearch) {\n\t                Defer_1.Defer.defer(function () {\n\t                    ExternalModulesShim_1.ModalBox.close(true);\n\t                    _this.facet.facetSearch.completelyDismissSearch();\n\t                });\n\t            }\n\t        });\n\t    };\n\t    ValueElement.prototype.omniboxCloseEvent = function (eventArg) {\n\t        eventArg.closeOmnibox();\n\t        eventArg.clear();\n\t    };\n\t    ValueElement.prototype.getAnalyticsFacetMeta = function () {\n\t        return {\n\t            facetId: this.facet.options.id,\n\t            facetValue: this.facetValue.value,\n\t            facetTitle: this.facet.options.title\n\t        };\n\t    };\n\t    return ValueElement;\n\t}());\n\texports.ValueElement = ValueElement;\n\n\n/***/ },\n/* 163 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Component_1 = __webpack_require__(109);\n\tvar _ = __webpack_require__(16);\n\tvar ValueElementRenderer = (function () {\n\t    function ValueElementRenderer(facet, facetValue) {\n\t        this.facet = facet;\n\t        this.facetValue = facetValue;\n\t    }\n\t    ValueElementRenderer.prototype.withNo = function (element) {\n\t        if (_.isArray(element)) {\n\t            _.each(element, function (e) {\n\t                if (e) {\n\t                    Dom_1.$$(e).detach();\n\t                }\n\t            });\n\t        }\n\t        else {\n\t            if (element) {\n\t                Dom_1.$$(element).detach();\n\t            }\n\t        }\n\t        return this;\n\t    };\n\t    ValueElementRenderer.prototype.build = function () {\n\t        var _this = this;\n\t        this.listItem = Dom_1.$$('li', {\n\t            className: 'coveo-facet-value coveo-facet-selectable'\n\t        }).el;\n\t        this.listItem.setAttribute('data-value', this.facetValue.value);\n\t        if (!this.facet.searchInterface.isNewDesign()) {\n\t            this.excludeIcon = this.buildExcludeIcon();\n\t            this.listItem.appendChild(this.excludeIcon);\n\t        }\n\t        this.label = Dom_1.$$('label', {\n\t            className: 'coveo-facet-value-label'\n\t        }).el;\n\t        this.listItem.appendChild(this.label);\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            this.excludeIcon = this.buildExcludeIcon();\n\t            this.listItem.appendChild(this.excludeIcon);\n\t            Dom_1.$$(this.excludeIcon).on('mouseover', function () {\n\t                Dom_1.$$(_this.listItem).addClass('coveo-facet-value-will-exclude');\n\t            });\n\t            Dom_1.$$(this.excludeIcon).on('mouseout', function () {\n\t                Dom_1.$$(_this.listItem).removeClass('coveo-facet-value-will-exclude');\n\t            });\n\t        }\n\t        if (Utils_1.Utils.exists(this.facetValue.computedField)) {\n\t            this.computedField = this.buildValueComputedField();\n\t            if (this.computedField) {\n\t                this.label.appendChild(this.computedField);\n\t            }\n\t            Dom_1.$$(this.label).addClass('coveo-with-computed-field');\n\t        }\n\t        var labelDiv = Dom_1.$$('div', {\n\t            className: 'coveo-facet-value-label-wrapper'\n\t        }).el;\n\t        this.label.appendChild(labelDiv);\n\t        this.checkbox = this.buildValueCheckbox();\n\t        labelDiv.appendChild(this.checkbox);\n\t        this.stylishCheckbox = this.buildValueStylishCheckbox();\n\t        labelDiv.appendChild(this.stylishCheckbox);\n\t        if (this.facet.options.showIcon && !this.facet.searchInterface.isNewDesign()) {\n\t            this.icon = this.buildValueIcon();\n\t            labelDiv.appendChild(this.icon);\n\t        }\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            this.valueCount = this.buildValueCount();\n\t            if (this.valueCount) {\n\t                labelDiv.appendChild(this.valueCount);\n\t            }\n\t            this.valueCaption = this.buildValueCaption();\n\t            labelDiv.appendChild(this.valueCaption);\n\t        }\n\t        else {\n\t            this.valueCaption = this.buildValueCaption();\n\t            labelDiv.appendChild(this.valueCaption);\n\t            this.valueCount = this.buildValueCount();\n\t            if (this.valueCount) {\n\t                labelDiv.appendChild(this.valueCount);\n\t            }\n\t        }\n\t        this.setCssClassOnListValueElement();\n\t        return this;\n\t    };\n\t    ValueElementRenderer.prototype.setCssClassOnListValueElement = function () {\n\t        Dom_1.$$(this.listItem).toggleClass('coveo-selected', this.facetValue.selected);\n\t        Dom_1.$$(this.listItem).toggleClass('coveo-excluded', this.facetValue.excluded);\n\t    };\n\t    ValueElementRenderer.prototype.buildExcludeIcon = function () {\n\t        var excludeIcon = Dom_1.$$('div', {\n\t            title: Strings_1.l('Exclude', this.facet.getValueCaption(this.facetValue)),\n\t            className: 'coveo-facet-value-exclude',\n\t            tabindex: 0\n\t        }).el;\n\t        this.addFocusAndBlurEventListeners(excludeIcon);\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            excludeIcon.appendChild(Dom_1.$$('span', {\n\t                className: 'coveo-icon'\n\t            }).el);\n\t        }\n\t        if (Utils_1.Utils.exists(this.facetValue.computedField)) {\n\t            Dom_1.$$(excludeIcon).addClass('coveo-facet-value-exclude-with-computed-field');\n\t        }\n\t        return excludeIcon;\n\t    };\n\t    ValueElementRenderer.prototype.buildValueComputedField = function () {\n\t        var computedField = this.facetValue.getFormattedComputedField(this.facet.options.computedFieldFormat);\n\t        if (Utils_1.Utils.isNonEmptyString(computedField)) {\n\t            var elem = Dom_1.$$('span', {\n\t                className: 'coveo-facet-value-computed-field'\n\t            }).el;\n\t            Dom_1.$$(elem).text(computedField);\n\t            return elem;\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    ValueElementRenderer.prototype.buildValueCheckbox = function () {\n\t        var checkbox = Dom_1.$$('input', {\n\t            type: 'checkbox'\n\t        }).el;\n\t        if (this.facetValue.selected) {\n\t            checkbox.setAttribute('checked', 'checked');\n\t        }\n\t        else {\n\t            checkbox.removeAttribute('checked');\n\t        }\n\t        if (this.facetValue.excluded) {\n\t            checkbox.setAttribute('disabled', 'disabled');\n\t        }\n\t        else {\n\t            checkbox.removeAttribute('disabled');\n\t        }\n\t        Component_1.Component.pointElementsToDummyForm(checkbox);\n\t        return checkbox;\n\t    };\n\t    ValueElementRenderer.prototype.buildValueStylishCheckbox = function () {\n\t        var checkbox = Dom_1.$$('div', {\n\t            className: 'coveo-facet-value-checkbox',\n\t            tabindex: 0\n\t        }, Dom_1.$$('span')).el;\n\t        this.addFocusAndBlurEventListeners(checkbox);\n\t        return checkbox;\n\t    };\n\t    ValueElementRenderer.prototype.buildValueIcon = function () {\n\t        var icon = this.getValueIcon();\n\t        if (Utils_1.Utils.exists(icon)) {\n\t            return Dom_1.$$('img', {\n\t                className: 'coveo-facet-value-icon coveo-icon',\n\t                src: this.getValueIcon()\n\t            }).el;\n\t        }\n\t        else {\n\t            return this.buildValueIconFromSprite();\n\t        }\n\t    };\n\t    ValueElementRenderer.prototype.getValueIcon = function () {\n\t        if (Utils_1.Utils.exists(this.facet.options.valueIcon)) {\n\t            return this.facet.options.valueIcon(this.facetValue);\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    ValueElementRenderer.prototype.buildValueIconFromSprite = function () {\n\t        return Dom_1.$$('div', {\n\t            className: 'coveo-facet-value-icon coveo-icon ' + this.facet.options.field.substr(1) + ' ' + this.facetValue.value\n\t        }).el;\n\t    };\n\t    ValueElementRenderer.prototype.buildValueCaption = function () {\n\t        var caption = this.facet.getValueCaption(this.facetValue);\n\t        var valueCaption = Dom_1.$$('span', {\n\t            className: 'coveo-facet-value-caption',\n\t            title: caption\n\t        }).el;\n\t        Dom_1.$$(valueCaption).text(caption);\n\t        return valueCaption;\n\t    };\n\t    ValueElementRenderer.prototype.buildValueCount = function () {\n\t        var count = this.facetValue.getFormattedCount();\n\t        if (Utils_1.Utils.isNonEmptyString(count)) {\n\t            var countElement = Dom_1.$$('span', {\n\t                className: 'coveo-facet-value-count'\n\t            }).el;\n\t            Dom_1.$$(countElement).text(count);\n\t            return countElement;\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    ValueElementRenderer.prototype.addFocusAndBlurEventListeners = function (elem) {\n\t        var _this = this;\n\t        Dom_1.$$(elem).on('focus', function () { return Dom_1.$$(_this.listItem).addClass('coveo-focused'); });\n\t        Dom_1.$$(elem).on('blur', function () { return Dom_1.$$(_this.listItem).removeClass('coveo-focused'); });\n\t    };\n\t    return ValueElementRenderer;\n\t}());\n\texports.ValueElementRenderer = ValueElementRenderer;\n\n\n/***/ },\n/* 164 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar _ = __webpack_require__(16);\n\tvar FacetValuesOrder = (function () {\n\t    function FacetValuesOrder(facet, facetSort) {\n\t        this.facet = facet;\n\t        this.facetSort = facetSort;\n\t    }\n\t    FacetValuesOrder.prototype.reorderValues = function (facetValues) {\n\t        if (this.facetSort && this.facetSort.activeSort) {\n\t            if (this.facetSort.activeSort.name == 'custom' && this.facet.options.customSort != undefined) {\n\t                return this.reorderValuesWithCustomOrder(facetValues);\n\t            }\n\t            else if (this.facetSort.activeSort.name.indexOf('alpha') != -1) {\n\t                return this.reorderValuesWithCustomCaption(facetValues);\n\t            }\n\t        }\n\t        return facetValues;\n\t    };\n\t    FacetValuesOrder.prototype.reorderValuesWithCustomOrder = function (facetValues) {\n\t        var customSortsLowercase = _.map(this.facet.options.customSort, function (customSort) { return customSort.toLowerCase(); });\n\t        var valueIndexPair = _.map(facetValues, function (facetValue, i) {\n\t            // Get the index of the current value in the custom sort array.\n\t            // If it's not found, put it's index to it's original value + the length of customSort so that's always after the specified custom sort order.\n\t            var index = _.findIndex(customSortsLowercase, function (customSort) {\n\t                return StringUtils_1.StringUtils.equalsCaseInsensitive(customSort, facetValue.value) || (facetValue.lookupValue != null && StringUtils_1.StringUtils.equalsCaseInsensitive(customSort, facetValue.lookupValue));\n\t            });\n\t            if (index == -1) {\n\t                index = i + customSortsLowercase.length;\n\t            }\n\t            return { facetValue: facetValue, index: index };\n\t        });\n\t        var sorted = _.sortBy(valueIndexPair, 'index');\n\t        sorted = this.facetSort.customSortDirection == 'ascending' ? sorted : sorted.reverse();\n\t        return _.pluck(sorted, 'facetValue');\n\t    };\n\t    FacetValuesOrder.prototype.reorderValuesWithCustomCaption = function (facetValues) {\n\t        var _this = this;\n\t        var sorted = _.sortBy(facetValues, function (facetValue) {\n\t            return _this.facet.getValueCaption(facetValue).toLowerCase();\n\t        });\n\t        if (this.facetSort.activeSort.name.indexOf('descending') != -1) {\n\t            sorted = sorted.reverse();\n\t        }\n\t        return sorted;\n\t    };\n\t    return FacetValuesOrder;\n\t}());\n\texports.FacetValuesOrder = FacetValuesOrder;\n\n\n/***/ },\n/* 165 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetSort_1 = __webpack_require__(166);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * Handle the rendering of the {@link Facet} settings menu (typically the ... in the facet header).\n\t */\n\tvar FacetSettings = (function (_super) {\n\t    __extends(FacetSettings, _super);\n\t    function FacetSettings(sorts, facet) {\n\t        var _this = _super.call(this, sorts, facet) || this;\n\t        _this.sorts = sorts;\n\t        _this.facet = facet;\n\t        _this.customSortDirectionChange = false;\n\t        _this.enabledSortsIgnoreRenderBecauseOfPairs = [];\n\t        _this.filterDuplicateForRendering();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Build the menu, hook click events.\n\t     * @returns {HTMLElement}\n\t     */\n\t    FacetSettings.prototype.build = function () {\n\t        var _this = this;\n\t        this.settingsButton = Dom_1.$$('div', {\n\t            className: 'coveo-facet-header-settings',\n\t            title: Strings_1.l('Settings'),\n\t        }).el;\n\t        this.settingsIcon = Dom_1.$$('span', { className: 'coveo-icon' }).el;\n\t        this.settingsButton.appendChild(this.settingsIcon);\n\t        this.settingsPopup = Dom_1.$$('div', { className: 'coveo-facet-settings-popup' }).el;\n\t        if (Utils_1.Utils.isNonEmptyArray(this.enabledSorts)) {\n\t            this.sortSection = this.buildSortSection();\n\t            if (this.enabledSortsAllowDirection()) {\n\t                this.directionSection = this.buildDirectionSection();\n\t            }\n\t        }\n\t        if (this.facet.options.enableSettingsFacetState) {\n\t            this.saveStateSection = this.buildSaveStateSection();\n\t            this.clearStateSection = this.buildClearStateSection();\n\t        }\n\t        if (this.facet.options.enableCollapse) {\n\t            this.hideSection = this.buildHideSection();\n\t            this.showSection = this.buildShowSection();\n\t        }\n\t        var appendCommon = function () {\n\t            _this.appendIfNotUndefined(_this.saveStateSection);\n\t            _this.appendIfNotUndefined(_this.clearStateSection);\n\t            _this.appendIfNotUndefined(_this.hideSection);\n\t            _this.appendIfNotUndefined(_this.showSection);\n\t        };\n\t        this.handleMouseEventOnButton(this.sortSection);\n\t        if (Utils_1.Utils.isNonEmptyArray(this.enabledSorts)) {\n\t            this.settingsPopup.appendChild(this.sortSection.element);\n\t            _.each(this.directionSection, function (d) {\n\t                _this.appendIfNotUndefined(d);\n\t            });\n\t            appendCommon();\n\t        }\n\t        else {\n\t            appendCommon();\n\t        }\n\t        return this.settingsButton;\n\t    };\n\t    /**\n\t     * Restore the facet state from local storage, and apply it in the query state model.\n\t     */\n\t    FacetSettings.prototype.loadSavedState = function () {\n\t        if (this.facetStateLocalStorage) {\n\t            // set the state from the settings only if there is nothing\n\t            // in the query state model for the current facet\n\t            var state = this.facetStateLocalStorage.load();\n\t            var currentStateIncluded = this.facet.queryStateModel.get(this.includedStateAttribute);\n\t            var currentStateExcluded = this.facet.queryStateModel.get(this.excludedStateAttribute);\n\t            var currentStateOperator = this.facet.queryStateModel.get(this.operatorStateAttribute);\n\t            if (!Utils_1.Utils.isNullOrUndefined(state)\n\t                && Utils_1.Utils.isEmptyArray(currentStateIncluded)\n\t                && Utils_1.Utils.isEmptyArray(currentStateExcluded)\n\t                && !Utils_1.Utils.isNonEmptyString(currentStateOperator)) {\n\t                var toSet = {};\n\t                toSet[this.includedStateAttribute] = state.included;\n\t                toSet[this.excludedStateAttribute] = state.excluded;\n\t                toSet[this.operatorStateAttribute] = state.operator;\n\t                this.facet.queryStateModel.setMultiple(toSet);\n\t                this.loadedFromSettings = toSet;\n\t            }\n\t        }\n\t        else {\n\t            this.facet.logger.info('Facet state local storage not enabled : See Facet.options.enableSettingsFacetState');\n\t        }\n\t    };\n\t    /**\n\t     * Take the current state of the facet and save it in the local storage.\n\t     */\n\t    FacetSettings.prototype.saveState = function () {\n\t        if (this.facetStateLocalStorage) {\n\t            this.facetStateLocalStorage.save({\n\t                included: this.facet.queryStateModel.get(this.includedStateAttribute),\n\t                excluded: this.facet.queryStateModel.get(this.excludedStateAttribute),\n\t                operator: this.facet.queryStateModel.get(this.operatorStateAttribute),\n\t            });\n\t        }\n\t        else {\n\t            this.facet.logger.info('Facet state local storage not enabled : See Facet.options.enableSettingsFacetState');\n\t        }\n\t    };\n\t    /**\n\t     * Close the settings menu\n\t     */\n\t    FacetSettings.prototype.close = function () {\n\t        Dom_1.$$(this.settingsPopup).detach();\n\t    };\n\t    /**\n\t     * Open the settings menu\n\t     */\n\t    FacetSettings.prototype.open = function () {\n\t        var _this = this;\n\t        PopupUtils_1.PopupUtils.positionPopup(this.settingsPopup, this.settingsButton, this.facet.root, this.getPopupAlignment(), this.facet.root);\n\t        if (this.hideSection && this.showSection) {\n\t            Dom_1.$$(this.hideSection).toggle(!Dom_1.$$(this.facet.element).hasClass('coveo-facet-collapsed'));\n\t            Dom_1.$$(this.showSection).toggle(Dom_1.$$(this.facet.element).hasClass('coveo-facet-collapsed'));\n\t        }\n\t        if (this.facet.options.enableSettingsFacetState) {\n\t            Dom_1.$$(this.clearStateSection).toggle(!Utils_1.Utils.isNullOrUndefined(this.facetStateLocalStorage.load()));\n\t        }\n\t        _.each(this.enabledSorts, function (criteria, i) {\n\t            if (!Utils_1.Utils.isNullOrUndefined(_this.sortSection.sortItems[i])) {\n\t                if (_this.activeSort.name == criteria.name.toLowerCase() || _this.activeSort.relatedSort == criteria.name.toLowerCase()) {\n\t                    _this.selectItem(_this.sortSection.sortItems[i]);\n\t                }\n\t                else {\n\t                    _this.unselectItem(_this.sortSection.sortItems[i]);\n\t                }\n\t            }\n\t        });\n\t    };\n\t    FacetSettings.prototype.buildSortSection = function () {\n\t        var sortSection = this.buildSection('coveo-facet-settings-section-sort');\n\t        var sortSectionIcon = this.buildIcon();\n\t        var sortSectionItems = this.buildItems();\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            var sortTitle = document.createElement('div');\n\t            Dom_1.$$(sortTitle).addClass('coveo-facet-settings-section-sort-title');\n\t            Dom_1.$$(sortTitle).text(Strings_1.l('SortBy') + ' :');\n\t            sortSectionItems.appendChild(sortTitle);\n\t        }\n\t        var sortItems = this.buildSortSectionItems();\n\t        _.each(sortItems, function (s) {\n\t            sortSectionItems.appendChild(s);\n\t        });\n\t        sortSection.appendChild(sortSectionIcon);\n\t        sortSection.appendChild(sortSectionItems);\n\t        return { element: sortSection, sortItems: sortItems };\n\t    };\n\t    FacetSettings.prototype.buildSortSectionItems = function () {\n\t        var _this = this;\n\t        var elems = _.map(this.enabledSorts, function (enabledSort) {\n\t            if (_.contains(_this.enabledSortsIgnoreRenderBecauseOfPairs, enabledSort)) {\n\t                return undefined;\n\t            }\n\t            else {\n\t                var elem = _this.buildItem(Strings_1.l(enabledSort.label), enabledSort.description);\n\t                Dom_1.$$(elem).on('click', function (e) { return _this.handleClickSortButton(e, enabledSort); });\n\t                return elem;\n\t            }\n\t        });\n\t        elems = _.compact(elems);\n\t        return elems;\n\t    };\n\t    FacetSettings.prototype.closePopupAndUpdateSort = function () {\n\t        this.close();\n\t        if (this.activeSort.name != 'custom') {\n\t            this.facet.updateSort(this.activeSort.name);\n\t        }\n\t        else {\n\t            this.facet.updateSort('nosort');\n\t            if (this.customSortDirectionChange) {\n\t                this.customSortDirectionChange = false;\n\t                this.facet.queryController.executeQuery();\n\t            }\n\t        }\n\t    };\n\t    FacetSettings.prototype.enabledSortsAllowDirection = function () {\n\t        return _.some(this.enabledSorts, function (facetSortDescription) {\n\t            return facetSortDescription.directionToggle;\n\t        });\n\t    };\n\t    FacetSettings.prototype.buildDirectionSection = function () {\n\t        var _this = this;\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            var directionAscendingSection = this.buildAscendingOrDescendingSection('Ascending');\n\t            var iconAscending = this.buildIcon();\n\t            var iconDescending = this.buildIcon();\n\t            var directionItemsAscending = this.buildItems();\n\t            var ascending = this.buildAscendingOrDescending('Ascending');\n\t            directionItemsAscending.appendChild(ascending);\n\t            directionAscendingSection.appendChild(iconAscending);\n\t            directionAscendingSection.appendChild(directionItemsAscending);\n\t            Dom_1.$$(directionAscendingSection).on('click', function (e) { return _this.handleDirectionClick(e, 'ascending'); });\n\t            var directionDescendingSection = this.buildAscendingOrDescendingSection('Descending');\n\t            var directionItemsDescending = this.buildItems();\n\t            var descending = this.buildAscendingOrDescending('Descending');\n\t            directionItemsDescending.appendChild(descending);\n\t            directionDescendingSection.appendChild(iconDescending);\n\t            directionDescendingSection.appendChild(directionItemsDescending);\n\t            Dom_1.$$(directionDescendingSection).on('click', function (e) { return _this.handleDirectionClick(e, 'descending'); });\n\t            if (!this.activeSort.directionToggle) {\n\t                Dom_1.$$(directionAscendingSection).addClass('coveo-facet-settings-disabled');\n\t                Dom_1.$$(directionDescendingSection).addClass('coveo-facet-settings-disabled');\n\t            }\n\t            else {\n\t                this.selectItem(this.getItems(directionAscendingSection)[0]);\n\t            }\n\t            return [directionAscendingSection, directionDescendingSection];\n\t        }\n\t        else {\n\t            var directionSection = this.buildSection('coveo-facet-settings-section-direction');\n\t            var icon = this.buildIcon();\n\t            var directionItems = this.buildItems();\n\t            var ascending = this.buildAscendingOrDescending('Ascending');\n\t            Dom_1.$$(ascending).on('click', function (e) { return _this.handleDirectionClick(e, 'ascending'); });\n\t            var descending = this.buildAscendingOrDescending('Descending');\n\t            Dom_1.$$(descending).on('click', function (e) { return _this.handleDirectionClick(e, 'descending'); });\n\t            directionItems.appendChild(ascending);\n\t            directionItems.appendChild(descending);\n\t            directionSection.appendChild(icon);\n\t            directionSection.appendChild(directionItems);\n\t            if (!this.activeSort.directionToggle) {\n\t                Dom_1.$$(directionSection).addClass('coveo-facet-settings-disabled');\n\t            }\n\t            else {\n\t                this.selectItem(this.getCurrentDirectionItem([directionSection]));\n\t            }\n\t            return [directionSection];\n\t        }\n\t    };\n\t    FacetSettings.prototype.buildSaveStateSection = function () {\n\t        var _this = this;\n\t        var saveStateSection = this.buildSection('coveo-facet-settings-section-save-state');\n\t        var icon = this.buildIcon();\n\t        var saveStateItems = this.buildItems();\n\t        this.facetStateLocalStorage = new LocalStorageUtils_1.LocalStorageUtils('facet-state-' + this.facet.options.id);\n\t        this.includedStateAttribute = QueryStateModel_1.QueryStateModel.getFacetId(this.facet.options.id);\n\t        this.excludedStateAttribute = QueryStateModel_1.QueryStateModel.getFacetId(this.facet.options.id, false);\n\t        this.operatorStateAttribute = QueryStateModel_1.QueryStateModel.getFacetOperator(this.facet.options.id);\n\t        var saveStateItem = document.createElement('div');\n\t        Dom_1.$$(saveStateItem).addClass('coveo-facet-settings-item');\n\t        saveStateItem.setAttribute('title', _.escape(Strings_1.l('SaveFacetState')));\n\t        Dom_1.$$(saveStateItem).text(_.escape(Strings_1.l('SaveFacetState')));\n\t        saveStateItems.appendChild(saveStateItem);\n\t        saveStateSection.appendChild(icon);\n\t        saveStateSection.appendChild(saveStateItems);\n\t        Dom_1.$$(saveStateSection).on('click', function (e) { return _this.handleSaveStateClick(); });\n\t        return saveStateSection;\n\t    };\n\t    FacetSettings.prototype.buildClearStateSection = function () {\n\t        var _this = this;\n\t        var clearStateSection = this.buildSection('coveo-facet-settings-section-clear-state');\n\t        var icon = this.buildIcon();\n\t        var clearStateItems = this.buildItems();\n\t        var clearStateItem = this.buildItem(Strings_1.l('ClearFacetState'));\n\t        clearStateItems.appendChild(clearStateItem);\n\t        clearStateSection.appendChild(icon);\n\t        clearStateSection.appendChild(clearStateItems);\n\t        Dom_1.$$(clearStateSection).on('click', function (e) { return _this.handleClearStateClick(); });\n\t        return clearStateSection;\n\t    };\n\t    FacetSettings.prototype.buildHideSection = function () {\n\t        var _this = this;\n\t        var hideSection = this.buildSection('coveo-facet-settings-section-hide');\n\t        var icon = this.buildIcon();\n\t        var hideItems = this.buildItems();\n\t        var hideItem = this.buildItem(Strings_1.l('Collapse'));\n\t        hideItems.appendChild(hideItem);\n\t        hideSection.appendChild(icon);\n\t        hideSection.appendChild(hideItems);\n\t        Dom_1.$$(hideSection).on('click', function (e) {\n\t            _this.facet.facetHeader.collapseFacet();\n\t            _this.close();\n\t        });\n\t        return hideSection;\n\t    };\n\t    FacetSettings.prototype.buildShowSection = function () {\n\t        var _this = this;\n\t        var showSection = this.buildSection('coveo-facet-settings-section-show');\n\t        var icon = this.buildIcon();\n\t        var showItems = this.buildItems();\n\t        var showItem = this.buildItem(Strings_1.l('Expand'));\n\t        showItems.appendChild(showItem);\n\t        showSection.appendChild(icon);\n\t        showSection.appendChild(showItems);\n\t        Dom_1.$$(showSection).on('click', function (e) {\n\t            _this.facet.facetHeader.expandFacet();\n\t            _this.close();\n\t        });\n\t        return showSection;\n\t    };\n\t    FacetSettings.prototype.buildIcon = function () {\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            var icon = document.createElement('div');\n\t            Dom_1.$$(icon).addClass('coveo-icon-container');\n\t            var insideIcon = document.createElement('div');\n\t            Dom_1.$$(insideIcon).addClass('coveo-icon');\n\t            icon.appendChild(insideIcon);\n\t            return icon;\n\t        }\n\t        else {\n\t            var icon = document.createElement('div');\n\t            Dom_1.$$(icon).addClass('coveo-icon');\n\t            return icon;\n\t        }\n\t    };\n\t    FacetSettings.prototype.buildAscendingOrDescending = function (direction) {\n\t        var elem = this.buildItem(Strings_1.l(direction));\n\t        elem.setAttribute('data-direction', direction.toLowerCase());\n\t        return elem;\n\t    };\n\t    FacetSettings.prototype.buildAscendingOrDescendingSection = function (direction) {\n\t        return this.buildSection('coveo-facet-settings-section-direction-' + direction.toLowerCase());\n\t    };\n\t    FacetSettings.prototype.buildItem = function (label, title) {\n\t        if (title === void 0) { title = label; }\n\t        return Dom_1.$$('div', {\n\t            className: 'coveo-facet-settings-item',\n\t            title: _.escape(title),\n\t        }, _.escape(label)).el;\n\t    };\n\t    FacetSettings.prototype.buildItems = function () {\n\t        var elem = document.createElement('div');\n\t        Dom_1.$$(elem).addClass('coveo-facet-settings-items');\n\t        return elem;\n\t    };\n\t    FacetSettings.prototype.buildSection = function (className) {\n\t        var section = document.createElement('div');\n\t        Dom_1.$$(section).addClass(['coveo-facet-settings-section', className]);\n\t        return section;\n\t    };\n\t    FacetSettings.prototype.handleClickSettingsButtons = function (event, sortSection) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(this.settingsPopup.parentElement)) {\n\t            this.close();\n\t        }\n\t        else {\n\t            this.open();\n\t        }\n\t    };\n\t    FacetSettings.prototype.handleClickSortButton = function (e, enabledSort) {\n\t        if (this.activeSort != enabledSort && this.activeSort.relatedSort != enabledSort.name) {\n\t            this.activeSort = enabledSort;\n\t            if (enabledSort.directionToggle && _.contains(this.enabledSorts, FacetSettings.availableSorts[this.activeSort.relatedSort])) {\n\t                this.activateDirectionSection();\n\t            }\n\t            else {\n\t                this.disableDirectionSection();\n\t            }\n\t            this.selectItem(e.target);\n\t            this.closePopupAndUpdateSort();\n\t        }\n\t    };\n\t    FacetSettings.prototype.handleDirectionClick = function (e, direction) {\n\t        var _this = this;\n\t        if (!Dom_1.$$(e.target.parentElement.parentElement).hasClass('coveo-facet-settings-disabled') && this.activeSort.name.indexOf(direction) == -1) {\n\t            this.activeSort = FacetSettings.availableSorts[this.activeSort.relatedSort];\n\t            _.each(this.directionSection, function (d) {\n\t                _this.unselectSection(d);\n\t            });\n\t            this.selectItem(e.target);\n\t            if (this.activeSort.name == 'custom' && this.customSortDirection != direction) {\n\t                this.customSortDirection = direction;\n\t                this.customSortDirectionChange = true;\n\t            }\n\t            this.closePopupAndUpdateSort();\n\t        }\n\t    };\n\t    FacetSettings.prototype.handleSaveStateClick = function () {\n\t        this.saveState();\n\t        this.close();\n\t    };\n\t    FacetSettings.prototype.handleClearStateClick = function () {\n\t        var _this = this;\n\t        this.facetStateLocalStorage.remove();\n\t        this.facet.reset();\n\t        this.close();\n\t        this.facet.triggerNewQuery(function () { return _this.facet.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetClearAll, {\n\t            facetId: _this.facet.options.id,\n\t            facetTitle: _this.facet.options.title\n\t        }); });\n\t    };\n\t    FacetSettings.prototype.handleMouseEventOnButton = function (sortSection) {\n\t        var _this = this;\n\t        var closeTimeout;\n\t        Dom_1.$$(this.settingsButton).on('click', function (e) { return _this.handleClickSettingsButtons(e, sortSection); });\n\t        var mouseLeave = function () {\n\t            closeTimeout = setTimeout(function () {\n\t                _this.close();\n\t            }, 300);\n\t        };\n\t        var mouseEnter = function () {\n\t            clearTimeout(closeTimeout);\n\t        };\n\t        Dom_1.$$(this.settingsIcon).on('mouseleave', mouseLeave);\n\t        Dom_1.$$(this.settingsPopup).on('mouseleave', mouseLeave);\n\t        Dom_1.$$(this.settingsIcon).on('mouseenter', mouseEnter);\n\t        Dom_1.$$(this.settingsPopup).on('mouseenter', mouseEnter);\n\t    };\n\t    FacetSettings.prototype.getCurrentDirectionItem = function (directionSection) {\n\t        var _this = this;\n\t        if (directionSection === void 0) { directionSection = this.directionSection; }\n\t        var found;\n\t        _.each(directionSection, function (direction) {\n\t            if (!found) {\n\t                found = _.find(_this.getItems(direction), function (direction) {\n\t                    return _this.activeSort.name.indexOf(direction.getAttribute('data-direction')) != -1;\n\t                });\n\t            }\n\t        });\n\t        if (!found) {\n\t            found = directionSection[0];\n\t        }\n\t        return found;\n\t    };\n\t    FacetSettings.prototype.activateDirectionSection = function () {\n\t        var _this = this;\n\t        _.each(this.directionSection, function (direction) {\n\t            Dom_1.$$(direction).removeClass('coveo-facet-settings-disabled');\n\t            _this.unselectSection(direction);\n\t        });\n\t        this.selectItem(this.getCurrentDirectionItem());\n\t    };\n\t    FacetSettings.prototype.disableDirectionSection = function () {\n\t        var _this = this;\n\t        _.each(this.directionSection, function (direction) {\n\t            Dom_1.$$(direction).addClass('coveo-facet-settings-disabled');\n\t            _this.unselectSection(direction);\n\t        });\n\t    };\n\t    FacetSettings.prototype.getItems = function (section) {\n\t        return Dom_1.$$(section).findAll('.coveo-facet-settings-item');\n\t    };\n\t    FacetSettings.prototype.unselectSection = function (section) {\n\t        _.each(this.getItems(section), function (i) {\n\t            Dom_1.$$(i).removeClass('coveo-selected');\n\t        });\n\t    };\n\t    FacetSettings.prototype.selectItem = function (item) {\n\t        Dom_1.$$(item).addClass('coveo-selected');\n\t    };\n\t    FacetSettings.prototype.unselectItem = function (item) {\n\t        Dom_1.$$(item).removeClass('coveo-selected');\n\t    };\n\t    FacetSettings.prototype.getPopupAlignment = function () {\n\t        var alignmentHorizontal = DeviceUtils_1.DeviceUtils.isMobileDevice() ? PopupUtils_1.HorizontalAlignment.CENTER : PopupUtils_1.HorizontalAlignment.INNERLEFT;\n\t        var alignmentVertical = PopupUtils_1.VerticalAlignment.BOTTOM;\n\t        return {\n\t            horizontal: alignmentHorizontal,\n\t            vertical: alignmentVertical\n\t        };\n\t    };\n\t    FacetSettings.prototype.filterDuplicateForRendering = function () {\n\t        var _this = this;\n\t        _.each(this.enabledSorts, function (enabledSort, i) {\n\t            if (enabledSort.relatedSort != null) {\n\t                for (var j = i + 1; j < _this.enabledSorts.length; j++) {\n\t                    if (_this.enabledSorts[j].name == enabledSort.relatedSort) {\n\t                        _this.enabledSortsIgnoreRenderBecauseOfPairs.push(_this.enabledSorts[j]);\n\t                        break;\n\t                    }\n\t                }\n\t            }\n\t        });\n\t    };\n\t    FacetSettings.prototype.appendIfNotUndefined = function (toAppend) {\n\t        if (!Utils_1.Utils.isNullOrUndefined(toAppend)) {\n\t            this.settingsPopup.appendChild(toAppend);\n\t        }\n\t    };\n\t    return FacetSettings;\n\t}(FacetSort_1.FacetSort));\n\texports.FacetSettings = FacetSettings;\n\n\n/***/ },\n/* 166 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Strings_1 = __webpack_require__(37);\n\tvar FacetSettings_1 = __webpack_require__(165);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar FacetSort = (function () {\n\t    function FacetSort(sorts, facet) {\n\t        var _this = this;\n\t        this.facet = facet;\n\t        this.enabledSorts = [];\n\t        this.customSortDirection = 'ascending';\n\t        _.each(sorts, function (sortToActivate) {\n\t            var newSortToEnable = FacetSettings_1.FacetSettings.availableSorts[sortToActivate.toLowerCase()];\n\t            if (newSortToEnable != undefined) {\n\t                _this.enabledSorts.push(newSortToEnable);\n\t            }\n\t        });\n\t        this.removeEnabledSortsBasedOnFacetType();\n\t        if (Utils_1.Utils.isNonEmptyArray(this.enabledSorts)) {\n\t            if (this.facet.options.sortCriteria != undefined) {\n\t                this.activeSort = _.find(this.enabledSorts, function (enabledSort) {\n\t                    return enabledSort.name == _this.facet.options.sortCriteria;\n\t                });\n\t            }\n\t            if (!this.activeSort) {\n\t                this.activeSort = this.enabledSorts[0];\n\t            }\n\t        }\n\t    }\n\t    FacetSort.prototype.removeEnabledSortsBasedOnFacetType = function () {\n\t        if (Coveo.FacetRange && this.facet instanceof Coveo.FacetRange) {\n\t            var facetRange = this.facet;\n\t            if (facetRange.options['slider']) {\n\t                this.enabledSorts = [];\n\t            }\n\t        }\n\t    };\n\t    return FacetSort;\n\t}());\n\tFacetSort.availableSorts = {\n\t    score: {\n\t        label: Strings_1.l('Score'),\n\t        directionToggle: false,\n\t        description: Strings_1.l('ScoreDescription'),\n\t        name: 'score'\n\t    },\n\t    occurrences: {\n\t        label: Strings_1.l('Occurrences'),\n\t        directionToggle: false,\n\t        description: Strings_1.l('OccurrencesDescription'),\n\t        name: 'occurrences'\n\t    },\n\t    alphaascending: {\n\t        label: Strings_1.l('Label'),\n\t        directionToggle: true,\n\t        description: Strings_1.l('LabelDescription'),\n\t        name: 'alphaascending',\n\t        relatedSort: 'alphadescending'\n\t    },\n\t    alphadescending: {\n\t        label: Strings_1.l('Label'),\n\t        directionToggle: true,\n\t        description: Strings_1.l('LabelDescription'),\n\t        name: 'alphadescending',\n\t        relatedSort: 'alphaascending'\n\t    },\n\t    computedfieldascending: {\n\t        label: Strings_1.l('Value'),\n\t        directionToggle: true,\n\t        description: Strings_1.l('ValueDescription'),\n\t        name: 'computedfieldascending',\n\t        relatedSort: 'computedfielddescending'\n\t    },\n\t    computedfielddescending: {\n\t        label: Strings_1.l('Value'),\n\t        directionToggle: true,\n\t        description: Strings_1.l('ValueDescription'),\n\t        name: 'computedfielddescending',\n\t        relatedSort: 'computedfieldascending'\n\t    },\n\t    chisquare: {\n\t        label: Strings_1.l('RelativeFrequency'),\n\t        directionToggle: false,\n\t        description: Strings_1.l('RelativeFrequencyDescription'),\n\t        name: 'chisquare'\n\t    },\n\t    nosort: {\n\t        label: Strings_1.l('Nosort'),\n\t        directionToggle: false,\n\t        description: Strings_1.l('NosortDescription'),\n\t        name: 'nosort'\n\t    },\n\t    custom: {\n\t        label: Strings_1.l('Custom'),\n\t        directionToggle: true,\n\t        description: Strings_1.l('CustomDescription'),\n\t        name: 'custom',\n\t        relatedSort: 'custom'\n\t    }\n\t};\n\texports.FacetSort = FacetSort;\n\n\n/***/ },\n/* 167 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar FacetValues_1 = __webpack_require__(159);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar FacetValuesOrder_1 = __webpack_require__(164);\n\tvar _ = __webpack_require__(16);\n\tvar FacetValuesList = (function () {\n\t    function FacetValuesList(facet, facetValueElementKlass) {\n\t        this.facet = facet;\n\t        this.facetValueElementKlass = facetValueElementKlass;\n\t        // Dictionary of values. The key is always in lowercase.\n\t        this.valueList = {};\n\t        this.currentlyDisplayed = [];\n\t    }\n\t    FacetValuesList.prototype.build = function () {\n\t        this.valueContainer = document.createElement('ul');\n\t        Dom_1.$$(this.valueContainer).addClass('coveo-facet-values');\n\t        return this.valueContainer;\n\t    };\n\t    FacetValuesList.prototype.getAllCurrentlyDisplayed = function () {\n\t        return this.currentlyDisplayed;\n\t    };\n\t    FacetValuesList.prototype.getAll = function () {\n\t        return _.toArray(this.valueList);\n\t    };\n\t    FacetValuesList.prototype.getAllFacetValue = function () {\n\t        return _.map(this.getAll(), function (v) {\n\t            return v.facetValue;\n\t        });\n\t    };\n\t    FacetValuesList.prototype.get = function (value) {\n\t        var getter;\n\t        if (value instanceof FacetValues_1.FacetValue) {\n\t            getter = value.value;\n\t        }\n\t        else {\n\t            value = Utils_1.Utils.anyTypeToString(value);\n\t            getter = value;\n\t        }\n\t        this.ensureFacetValueIsInList(value);\n\t        return this.valueList[getter.toLowerCase()];\n\t    };\n\t    FacetValuesList.prototype.select = function (value) {\n\t        var valueElement = this.get(value);\n\t        valueElement.select();\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.unselect = function (value) {\n\t        var valueElement = this.get(value);\n\t        valueElement.unselect();\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.exclude = function (value) {\n\t        var valueElement = this.get(value);\n\t        valueElement.exclude();\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.unExclude = function (value) {\n\t        var valueElement = this.get(value);\n\t        valueElement.unexclude();\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.toggleSelect = function (value) {\n\t        var valueElement = this.get(value);\n\t        if (valueElement.facetValue.selected) {\n\t            valueElement.unselect();\n\t        }\n\t        else {\n\t            valueElement.select();\n\t        }\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.toggleExclude = function (value) {\n\t        var valueElement = this.get(value);\n\t        if (valueElement.facetValue.excluded) {\n\t            valueElement.unexclude();\n\t        }\n\t        else {\n\t            valueElement.exclude();\n\t        }\n\t        return valueElement;\n\t    };\n\t    FacetValuesList.prototype.rebuild = function (numberOfValues) {\n\t        var _this = this;\n\t        Dom_1.$$(this.valueContainer).empty();\n\t        this.currentlyDisplayed = [];\n\t        var allValues = this.getValuesToBuildWith();\n\t        var toCompare = numberOfValues;\n\t        var docFragment = document.createDocumentFragment();\n\t        _.each(allValues, function (facetValue, index, list) {\n\t            if (_this.facetValueShouldBeRemoved(facetValue)) {\n\t                _this.facet.values.remove(facetValue.value);\n\t                toCompare += 1;\n\t            }\n\t            else if (index < toCompare) {\n\t                var valueElement = new _this.facetValueElementKlass(_this.facet, facetValue, true);\n\t                _this.valueList[facetValue.value.toLowerCase()] = valueElement;\n\t                var valueListElement = valueElement.build().renderer.listItem;\n\t                docFragment.appendChild(valueListElement);\n\t                _this.currentlyDisplayed.push(valueElement);\n\t            }\n\t        });\n\t        this.valueContainer.appendChild(docFragment);\n\t        FacetUtils_1.FacetUtils.addNoStateCssClassToFacetValues(this.facet, this.valueContainer);\n\t        FacetUtils_1.FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.facet);\n\t    };\n\t    FacetValuesList.prototype.getValuesToBuildWith = function () {\n\t        if (this.facet.facetSort) {\n\t            return new FacetValuesOrder_1.FacetValuesOrder(this.facet, this.facet.facetSort).reorderValues(this.facet.values.getAll());\n\t        }\n\t        else {\n\t            return this.facet.values.getAll();\n\t        }\n\t    };\n\t    FacetValuesList.prototype.facetValueShouldBeRemoved = function (facetValue) {\n\t        return facetValue.occurrences == 0 &&\n\t            (facetValue.delta == 0 || facetValue.delta == undefined) &&\n\t            !facetValue.selected &&\n\t            !facetValue.excluded &&\n\t            !this.facet.keepDisplayedValuesNextTime;\n\t    };\n\t    FacetValuesList.prototype.ensureFacetValueIsInList = function (value) {\n\t        var facetValue;\n\t        if (value instanceof FacetValues_1.FacetValue) {\n\t            facetValue = this.facet.values.get(value.value);\n\t            if (facetValue == null) {\n\t                this.facet.values.add(value);\n\t                facetValue = value;\n\t            }\n\t        }\n\t        else {\n\t            facetValue = this.facet.values.get(value);\n\t            if (facetValue == null) {\n\t                facetValue = FacetValues_1.FacetValue.createFromValue(value);\n\t                this.facet.values.add(facetValue);\n\t            }\n\t        }\n\t        var key = facetValue.value.toLowerCase();\n\t        var found = this.valueList[key];\n\t        if (found == undefined) {\n\t            found = this.valueList[key] = new FacetValueElement_1.FacetValueElement(this.facet, facetValue, true);\n\t            found.build();\n\t        }\n\t        else {\n\t            found.facetValue = facetValue;\n\t        }\n\t    };\n\t    return FacetValuesList;\n\t}());\n\texports.FacetValuesList = FacetValuesList;\n\n\n/***/ },\n/* 168 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t/// <reference path=\"FacetSettings.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar FacetHeader = (function () {\n\t    function FacetHeader(options) {\n\t        this.options = options;\n\t        this.element = document.createElement('div');\n\t        Dom_1.$$(this.element).addClass('coveo-facet-header');\n\t    }\n\t    FacetHeader.prototype.build = function () {\n\t        if (this.options.isNewDesign) {\n\t            return this.buildNewDesign();\n\t        }\n\t        else {\n\t            return this.buildOldDesign();\n\t        }\n\t    };\n\t    FacetHeader.prototype.switchToAnd = function () {\n\t        if (this.options.facet) {\n\t            this.options.facet.options.useAnd = true;\n\t            this.rebuildOperatorToggle();\n\t            this.updateOperatorQueryStateModel();\n\t        }\n\t    };\n\t    FacetHeader.prototype.switchToOr = function () {\n\t        if (this.options.facet) {\n\t            this.options.facet.options.useAnd = false;\n\t            this.rebuildOperatorToggle();\n\t            this.updateOperatorQueryStateModel();\n\t        }\n\t    };\n\t    FacetHeader.prototype.collapseFacet = function () {\n\t        if (this.collapseElement && this.expandElement) {\n\t            Dom_1.$$(this.collapseElement).hide();\n\t            Dom_1.$$(this.expandElement).show();\n\t        }\n\t        Dom_1.$$(this.options.facetElement).addClass('coveo-facet-collapsed');\n\t    };\n\t    FacetHeader.prototype.expandFacet = function () {\n\t        if (this.collapseElement && this.expandElement) {\n\t            Dom_1.$$(this.expandElement).hide();\n\t            Dom_1.$$(this.collapseElement).show();\n\t        }\n\t        Dom_1.$$(this.options.facetElement).removeClass('coveo-facet-collapsed');\n\t        if (this.options.facet) {\n\t            FacetUtils_1.FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.options.facet);\n\t        }\n\t    };\n\t    FacetHeader.prototype.updateOperatorQueryStateModel = function () {\n\t        if (this.options.facet && this.options.facet.options.enableTogglingOperator) {\n\t            var valueToSet = '';\n\t            if (this.options.facet.getSelectedValues().length != 0 || this.options.facet.getExcludedValues().length != 0) {\n\t                valueToSet = this.options.facet.options.useAnd ? 'and' : 'or';\n\t            }\n\t            this.options.facet.queryStateModel.set(this.options.facet.operatorAttributeId, valueToSet);\n\t        }\n\t    };\n\t    FacetHeader.prototype.buildNewDesign = function () {\n\t        var titleSection = Dom_1.$$('div', {\n\t            className: 'coveo-facet-header-title-section'\n\t        });\n\t        if (this.options.icon != undefined) {\n\t            this.iconElement = this.buildIcon();\n\t            titleSection.append(this.iconElement);\n\t        }\n\t        titleSection.append(this.buildTitle());\n\t        this.waitElement = this.buildWaitAnimation();\n\t        titleSection.append(this.waitElement);\n\t        this.element.appendChild(titleSection.el);\n\t        var settingsSection = Dom_1.$$('div', {\n\t            className: 'coveo-facet-header-settings-section'\n\t        });\n\t        this.eraserElement = this.buildEraser();\n\t        settingsSection.append(this.eraserElement);\n\t        if (this.options.facet) {\n\t            this.operatorElement = this.buildOperatorToggle();\n\t            settingsSection.append(this.operatorElement);\n\t            Dom_1.$$(this.operatorElement).toggle(this.options.facet.options.enableTogglingOperator);\n\t        }\n\t        if (this.options.settingsKlass) {\n\t            this.sort = this.settings = new this.options.settingsKlass(this.options.availableSorts, this.options.facet);\n\t            settingsSection.append(this.settings.build());\n\t        }\n\t        else if (this.options.sortKlass) {\n\t            this.sort = new this.options.sortKlass(this.options.availableSorts, this.options.facet);\n\t        }\n\t        this.element.appendChild(settingsSection.el);\n\t        return this.element;\n\t    };\n\t    FacetHeader.prototype.buildOldDesign = function () {\n\t        this.element.appendChild(this.buildIcon());\n\t        this.element.appendChild(this.buildWaitAnimation());\n\t        if (this.options.settingsKlass) {\n\t            this.sort = this.settings = new this.options.settingsKlass(this.options.availableSorts, this.options.facet);\n\t            this.element.appendChild(this.settings.build());\n\t        }\n\t        else if (this.options.sortKlass) {\n\t            this.sort = new this.options.sortKlass(this.options.availableSorts, this.options.facet);\n\t        }\n\t        if (this.options.enableCollapseElement) {\n\t            this.collapseElement = this.buildCollapse();\n\t            this.element.appendChild(this.collapseElement);\n\t            this.expandElement = this.buildExpand();\n\t            this.element.appendChild(this.expandElement);\n\t        }\n\t        if (this.options.facet) {\n\t            this.operatorElement = this.buildOperatorToggle();\n\t            this.element.appendChild(this.operatorElement);\n\t            Dom_1.$$(this.operatorElement).toggle(this.options.facet.options.enableTogglingOperator);\n\t        }\n\t        this.eraserElement = this.buildEraser();\n\t        this.element.appendChild(this.eraserElement);\n\t        this.element.appendChild(this.buildTitle());\n\t        return this.element;\n\t    };\n\t    FacetHeader.prototype.rebuildOperatorToggle = function () {\n\t        var newElement = this.buildOperatorToggle();\n\t        if (this.operatorElement) {\n\t            Dom_1.$$(this.operatorElement).replaceWith(newElement);\n\t        }\n\t        this.operatorElement = newElement;\n\t    };\n\t    FacetHeader.prototype.buildIcon = function () {\n\t        var cssClassForIcon;\n\t        if (this.options.icon) {\n\t            cssClassForIcon = 'coveo-icon-custom ' + this.options.icon;\n\t        }\n\t        else {\n\t            cssClassForIcon = 'coveo-icon ' + this.options.field.substr(1);\n\t        }\n\t        this.iconElement = document.createElement('div');\n\t        Dom_1.$$(this.iconElement).addClass(cssClassForIcon);\n\t        return this.iconElement;\n\t    };\n\t    FacetHeader.prototype.buildWaitAnimation = function () {\n\t        this.waitElement = document.createElement('div');\n\t        Dom_1.$$(this.waitElement).addClass('coveo-facet-header-wait-animation');\n\t        if (this.options.isNewDesign) {\n\t            this.waitElement.style.visibility = 'hidden';\n\t        }\n\t        else {\n\t            Dom_1.$$(this.waitElement).hide();\n\t        }\n\t        return this.waitElement;\n\t    };\n\t    FacetHeader.prototype.buildCollapse = function () {\n\t        var _this = this;\n\t        var icon = document.createElement('span');\n\t        Dom_1.$$(icon).addClass('coveo-icon');\n\t        var collapse = document.createElement('div');\n\t        collapse.setAttribute('title', Strings_1.l('Collapse'));\n\t        Dom_1.$$(collapse).addClass('coveo-facet-header-collapse');\n\t        collapse.appendChild(icon);\n\t        Dom_1.$$(collapse).on('click', function () { return _this.collapseFacet(); });\n\t        return collapse;\n\t    };\n\t    FacetHeader.prototype.buildExpand = function () {\n\t        var _this = this;\n\t        var icon = document.createElement('span');\n\t        Dom_1.$$(icon).addClass('coveo-icon');\n\t        var expand = document.createElement('div');\n\t        expand.setAttribute('title', Strings_1.l('Expand'));\n\t        Dom_1.$$(expand).hide();\n\t        Dom_1.$$(expand).addClass('coveo-facet-header-expand');\n\t        expand.appendChild(icon);\n\t        Dom_1.$$(expand).on('click', function () { return _this.expandFacet(); });\n\t        return expand;\n\t    };\n\t    FacetHeader.prototype.buildOperatorToggle = function () {\n\t        var _this = this;\n\t        var icon = document.createElement('span');\n\t        Dom_1.$$(icon).addClass(['coveo-' + (this.options.facet.options.useAnd ? 'and' : 'or'), 'coveo-icon']);\n\t        var toggle = document.createElement('div');\n\t        toggle.setAttribute('title', Strings_1.l('SwitchTo', this.options.facet.options.useAnd ? Strings_1.l('Or') : Strings_1.l('And')));\n\t        Dom_1.$$(toggle).addClass('coveo-facet-header-operator');\n\t        toggle.appendChild(icon);\n\t        Dom_1.$$(toggle).on('click', function () { return _this.handleOperatorClick(); });\n\t        return toggle;\n\t    };\n\t    FacetHeader.prototype.handleOperatorClick = function () {\n\t        var _this = this;\n\t        if (this.options.facet.options.useAnd) {\n\t            this.options.facet.switchToOr();\n\t        }\n\t        else {\n\t            this.options.facet.switchToAnd();\n\t        }\n\t        if (this.options.facet.getSelectedValues().length != 0) {\n\t            var operatorNow = this.options.facet.options.useAnd ? 'AND' : 'OR';\n\t            var operatorBefore = this.options.facet.options.useAnd ? 'OR' : 'AND';\n\t            this.options.facet.triggerNewQuery(function () { return _this.options.facet.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetToggle, {\n\t                facetId: _this.options.facet.options.id,\n\t                facetOperatorBefore: operatorBefore,\n\t                facetOperatorAfter: operatorNow,\n\t                facetTitle: _this.options.title\n\t            }); });\n\t        }\n\t    };\n\t    FacetHeader.prototype.buildTitle = function () {\n\t        var title = Dom_1.$$('div', {\n\t            title: this.options.title,\n\t            className: 'coveo-facet-header-title'\n\t        });\n\t        title.text(this.options.title);\n\t        return title.el;\n\t    };\n\t    FacetHeader.prototype.buildEraser = function () {\n\t        var _this = this;\n\t        var icon = document.createElement('span');\n\t        Dom_1.$$(icon).addClass('coveo-icon');\n\t        var eraser = document.createElement('div');\n\t        eraser.setAttribute('title', Strings_1.l('Clear', this.options.title));\n\t        eraser.appendChild(icon);\n\t        Dom_1.$$(eraser).addClass('coveo-facet-header-eraser');\n\t        Dom_1.$$(eraser).on('click', function () {\n\t            var cmp = _this.options.facet || _this.options.facetSlider;\n\t            cmp.reset();\n\t            cmp.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.facetClearAll, {\n\t                facetId: cmp.options.id,\n\t                facetTitle: cmp.options.title\n\t            });\n\t            cmp.queryController.executeQuery();\n\t        });\n\t        return eraser;\n\t    };\n\t    return FacetHeader;\n\t}());\n\texports.FacetHeader = FacetHeader;\n\n\n/***/ },\n/* 169 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar BreadcrumbValueElement = (function () {\n\t    function BreadcrumbValueElement(facet, facetValue) {\n\t        this.facet = facet;\n\t        this.facetValue = facetValue;\n\t    }\n\t    BreadcrumbValueElement.prototype.build = function (tooltip) {\n\t        var _this = this;\n\t        if (tooltip === void 0) { tooltip = true; }\n\t        Assert_1.Assert.exists(this.facetValue);\n\t        var elem = DeviceUtils_1.DeviceUtils.isMobileDevice() ? Dom_1.$$('div') : Dom_1.$$('span');\n\t        elem.addClass('coveo-facet-breadcrumb-value');\n\t        elem.toggleClass('coveo-selected', this.facetValue.selected);\n\t        elem.toggleClass('coveo-excluded', this.facetValue.excluded);\n\t        elem.el.setAttribute('title', this.getBreadcrumbTooltip());\n\t        var caption = Dom_1.$$('span', {\n\t            className: 'coveo-facet-breadcrumb-caption'\n\t        });\n\t        caption.text(this.facet.getValueCaption(this.facetValue));\n\t        elem.el.appendChild(caption.el);\n\t        var clear = Dom_1.$$('span', {\n\t            className: 'coveo-facet-breadcrumb-clear'\n\t        });\n\t        elem.el.appendChild(clear.el);\n\t        var clicked = false;\n\t        elem.on('click', function () {\n\t            if (!clicked) {\n\t                clicked = true;\n\t                if (_this.facetValue.excluded) {\n\t                    _this.facet.unexcludeValue(_this.facetValue.value);\n\t                }\n\t                else {\n\t                    _this.facet.deselectValue(_this.facetValue.value);\n\t                }\n\t                _this.facet.triggerNewQuery(function () { return _this.facet.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.breadcrumbFacet, {\n\t                    facetId: _this.facet.options.id,\n\t                    facetValue: _this.facetValue.value,\n\t                    facetTitle: _this.facet.options.title\n\t                }); });\n\t            }\n\t        });\n\t        return elem;\n\t    };\n\t    BreadcrumbValueElement.prototype.getBreadcrumbTooltip = function () {\n\t        var tooltipParts = [this.facet.getValueCaption(this.facetValue), this.facetValue.getFormattedCount(), this.facetValue.getFormattedComputedField(this.facet.options.computedFieldFormat)];\n\t        return _.compact(tooltipParts).join(' ');\n\t    };\n\t    return BreadcrumbValueElement;\n\t}());\n\texports.BreadcrumbValueElement = BreadcrumbValueElement;\n\n\n/***/ },\n/* 170 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\tvar BreadcrumbValueList = (function () {\n\t    function BreadcrumbValueList(facet, facetValues, breadcrumbValueElementKlass) {\n\t        this.facet = facet;\n\t        this.facetValues = facetValues;\n\t        this.breadcrumbValueElementKlass = breadcrumbValueElementKlass;\n\t        this.setExpandedAndCollapsed();\n\t        this.elem = Dom_1.$$('div', {\n\t            className: 'coveo-facet-breadcrumb'\n\t        }).el;\n\t        var title = Dom_1.$$('span');\n\t        title.addClass('coveo-facet-breadcrumb-title');\n\t        title.text(this.facet.options.title + ':');\n\t        this.elem.appendChild(title.el);\n\t        this.valueContainer = Dom_1.$$('span', {\n\t            className: 'coveo-facet-breadcrumb-values'\n\t        }).el;\n\t        this.elem.appendChild(this.valueContainer);\n\t    }\n\t    BreadcrumbValueList.prototype.build = function () {\n\t        this.buildExpanded();\n\t        if (this.collapsed.length != 0) {\n\t            this.buildCollapsed();\n\t        }\n\t        return this.elem;\n\t    };\n\t    BreadcrumbValueList.prototype.buildAsString = function () {\n\t        this.build();\n\t        if (this.elem) {\n\t            return this.facet.options.title + \": \" + _.map(Dom_1.$$(this.elem).findAll('.coveo-facet-breadcrumb-value'), function (value) {\n\t                return Dom_1.$$(value).text();\n\t            }).join(', ');\n\t        }\n\t        return '';\n\t    };\n\t    BreadcrumbValueList.prototype.buildExpanded = function () {\n\t        var _this = this;\n\t        _.each(this.expanded, function (value, index) {\n\t            if (index != 0 && !DeviceUtils_1.DeviceUtils.isMobileDevice() && !_this.facet.searchInterface.isNewDesign()) {\n\t                var separator = Dom_1.$$('span', {\n\t                    className: 'coveo-facet-breadcrumb-separator'\n\t                });\n\t                separator.text(', ');\n\t                _this.valueContainer.appendChild(separator.el);\n\t            }\n\t            var elementBreadcrumb = new _this.breadcrumbValueElementKlass(_this.facet, value).build();\n\t            _this.valueContainer.appendChild(elementBreadcrumb.el);\n\t        });\n\t    };\n\t    BreadcrumbValueList.prototype.buildCollapsed = function () {\n\t        var _this = this;\n\t        var numberOfSelected = _.filter(this.collapsed, function (value) { return value.selected; }).length;\n\t        var numberOfExcluded = _.filter(this.collapsed, function (value) { return value.excluded; }).length;\n\t        Assert_1.Assert.check(numberOfSelected + numberOfExcluded == this.collapsed.length);\n\t        var elem = Dom_1.$$('div', {\n\t            className: 'coveo-facet-breadcrumb-value'\n\t        });\n\t        if (!DeviceUtils_1.DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign()) {\n\t            var sep = Dom_1.$$('span', {\n\t                className: 'coveo-separator'\n\t            });\n\t            sep.text(', ');\n\t            elem.el.appendChild(sep.el);\n\t        }\n\t        if (numberOfSelected > 0) {\n\t            var multi = Dom_1.$$('span', {\n\t                className: 'coveo-facet-breadcrumb-multi-count'\n\t            });\n\t            multi.text(Strings_1.l('NMore', Globalize.format(numberOfSelected, 'n0')));\n\t            elem.el.appendChild(multi.el);\n\t            var multiIcon = Dom_1.$$('div', {\n\t                className: 'coveo-selected coveo-facet-breadcrumb-multi-icon'\n\t            });\n\t            elem.el.appendChild(multiIcon.el);\n\t        }\n\t        if (numberOfExcluded > 0) {\n\t            var multiExcluded = Dom_1.$$('span', {\n\t                className: 'coveo-facet-breadcrumb-multi-count'\n\t            });\n\t            multiExcluded.text(Strings_1.l('NMore', Globalize.format(numberOfExcluded, 'n0')));\n\t            elem.el.appendChild(multiExcluded.el);\n\t            var multiExcludedIcon = Dom_1.$$('div', {\n\t                className: 'coveo-excluded coveo-facet-breadcrumb-multi-icon'\n\t            });\n\t            elem.el.appendChild(multiExcludedIcon.el);\n\t        }\n\t        var valueElements = _.map(this.collapsed, function (facetValue) {\n\t            return new _this.breadcrumbValueElementKlass(_this.facet, facetValue);\n\t        });\n\t        var toolTips = _.map(valueElements, function (valueElement) {\n\t            return valueElement.getBreadcrumbTooltip();\n\t        });\n\t        elem.el.setAttribute('title', toolTips.join('\\n'));\n\t        elem.on('click', function () {\n\t            var elements = [];\n\t            _.forEach(valueElements, function (valueElement) {\n\t                if (!DeviceUtils_1.DeviceUtils.isMobileDevice() && !_this.facet.searchInterface.isNewDesign()) {\n\t                    var separatorsClicked = Dom_1.$$('span', {\n\t                        className: 'coveo-facet-breadcrumb-separator'\n\t                    });\n\t                    separatorsClicked.text(', ');\n\t                    elements.push(separatorsClicked.el);\n\t                }\n\t                elements.push(valueElement.build(false).el);\n\t            });\n\t            _.each(elements, function (el) {\n\t                Dom_1.$$(el).insertBefore(elem.el);\n\t            });\n\t            elem.detach();\n\t        });\n\t        this.valueContainer.appendChild(elem.el);\n\t    };\n\t    BreadcrumbValueList.prototype.setExpandedAndCollapsed = function () {\n\t        if (this.facetValues.length > this.facet.options.numberOfValuesInBreadcrumb) {\n\t            this.collapsed = _.rest(this.facetValues, this.facet.options.numberOfValuesInBreadcrumb - 1);\n\t            this.expanded = _.first(this.facetValues, this.facet.options.numberOfValuesInBreadcrumb - 1);\n\t        }\n\t        else {\n\t            this.collapsed = [];\n\t            this.expanded = this.facetValues;\n\t        }\n\t    };\n\t    return BreadcrumbValueList;\n\t}());\n\texports.BreadcrumbValueList = BreadcrumbValueList;\n\n\n/***/ },\n/* 171 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar FacetSearchValuesList = (function () {\n\t    function FacetSearchValuesList(facet, facetValueElementKlass) {\n\t        this.facet = facet;\n\t        this.facetValueElementKlass = facetValueElementKlass;\n\t    }\n\t    FacetSearchValuesList.prototype.build = function (facetValues) {\n\t        var _this = this;\n\t        var valuesToBuildWith = _.map(facetValues, function (facetValue) {\n\t            return _.find(_this.facet.values.getAll(), function (valueAlreadyInFacet) {\n\t                return valueAlreadyInFacet.value == facetValue.value;\n\t            }) || facetValue;\n\t        });\n\t        return _.map(valuesToBuildWith, function (facetValue) {\n\t            return new _this.facetValueElementKlass(_this.facet, facetValue, _this.facet.keepDisplayedValuesNextTime).build().renderer.listItem;\n\t        });\n\t    };\n\t    return FacetSearchValuesList;\n\t}());\n\texports.FacetSearchValuesList = FacetSearchValuesList;\n\n\n/***/ },\n/* 172 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"Facet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ValueElement_1 = __webpack_require__(162);\n\tvar OmniboxValueElement = (function (_super) {\n\t    __extends(OmniboxValueElement, _super);\n\t    function OmniboxValueElement(facet, facetValue, eventArg, onSelect, onExclude) {\n\t        var _this = _super.call(this, facet, facetValue, onSelect, onExclude) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        _this.eventArg = eventArg;\n\t        return _this;\n\t    }\n\t    OmniboxValueElement.prototype.bindEvent = function () {\n\t        _super.prototype.bindEvent.call(this, { displayNextTime: false, pinFacet: false, omniboxObject: this.eventArg });\n\t    };\n\t    return OmniboxValueElement;\n\t}(ValueElement_1.ValueElement));\n\texports.OmniboxValueElement = OmniboxValueElement;\n\n\n/***/ },\n/* 173 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar _ = __webpack_require__(16);\n\tvar OmniboxValuesList = (function () {\n\t    function OmniboxValuesList(facet, facetValues, omniboxObject, omniboxValueElementKlass) {\n\t        this.facet = facet;\n\t        this.facetValues = facetValues;\n\t        this.omniboxObject = omniboxObject;\n\t        this.omniboxValueElementKlass = omniboxValueElementKlass;\n\t    }\n\t    OmniboxValuesList.prototype.build = function () {\n\t        var _this = this;\n\t        var rows = [];\n\t        _.each(this.facetValues, function (facetValue) {\n\t            rows.push(_this.buildOmniboxForOneRow(facetValue, _this.omniboxObject));\n\t        });\n\t        return this.buildFinalOmniboxElement(rows);\n\t    };\n\t    OmniboxValuesList.prototype.buildOmniboxForOneRow = function (facetValue, omniboxObject) {\n\t        var _this = this;\n\t        var selectCallback = function (elem, cause) { return _this.logAnalyticsEvent(elem, cause); };\n\t        var excludeCallback = function (elem, cause) { return _this.logAnalyticsEvent(elem, cause); };\n\t        var omniboxValueElement = new this.omniboxValueElementKlass(this.facet, facetValue, omniboxObject, selectCallback, excludeCallback);\n\t        var omniboxRowContent = omniboxValueElement.build().renderer.listItem;\n\t        var regex = omniboxObject.completeQueryExpression.regex;\n\t        var valueToSearch = omniboxObject.completeQueryExpression.word;\n\t        var caption = Dom_1.$$(omniboxRowContent).find('.coveo-facet-value-caption');\n\t        caption.innerHTML = this.highlightOmniboxMatch(this.facet.getValueCaption(facetValue), regex, valueToSearch);\n\t        var omniboxRow = Dom_1.$$('div', {\n\t            className: 'coveo-omnibox-selectable coveo-facet-value coveo-omnibox-facet-value'\n\t        }).el;\n\t        omniboxRow.appendChild(omniboxRowContent);\n\t        Dom_1.$$(omniboxRow).on('keyboardSelect', function () {\n\t            var input = Dom_1.$$(omniboxRowContent).find('input[type=checkbox]');\n\t            Dom_1.$$(input).trigger('change');\n\t        });\n\t        omniboxRow['no-text-suggestion'] = true;\n\t        return omniboxRow;\n\t    };\n\t    OmniboxValuesList.prototype.buildFinalOmniboxElement = function (rows) {\n\t        var header = this.buildOmniboxHeader();\n\t        if (Utils_1.Utils.isEmptyArray(rows)) {\n\t            return undefined;\n\t        }\n\t        else {\n\t            var ret = Dom_1.$$('div', {\n\t                className: 'coveo-omnibox-facet-value'\n\t            }).el;\n\t            ret.appendChild(header);\n\t            _.each(rows, function (r) {\n\t                ret.appendChild(r);\n\t            });\n\t            FacetUtils_1.FacetUtils.addNoStateCssClassToFacetValues(this.facet, ret);\n\t            return ret;\n\t        }\n\t    };\n\t    OmniboxValuesList.prototype.buildOmniboxHeader = function () {\n\t        var title = this.facet.options.title;\n\t        var header = Dom_1.$$('div', {\n\t            className: 'coveo-omnibox-facet-header'\n\t        }).el;\n\t        if (this.facet.searchInterface.isNewDesign()) {\n\t            Dom_1.$$(header).text(title);\n\t            return header;\n\t        }\n\t        else {\n\t            var icon = Dom_1.$$('span', {\n\t                className: 'coveo-icon ' + this.facet.options.field.substr(1)\n\t            }).el;\n\t            header.appendChild(icon);\n\t            Dom_1.$$(header).text(title);\n\t        }\n\t        return header;\n\t    };\n\t    OmniboxValuesList.prototype.highlightOmniboxMatch = function (orignalStr, regex, valueToSearch) {\n\t        var firstChar = orignalStr.search(regex);\n\t        var lastChar = firstChar + valueToSearch.length;\n\t        return orignalStr.slice(0, firstChar) + '<span class=\"coveo-highlight\">' + orignalStr.slice(firstChar, lastChar) + '</span>' + orignalStr.slice(lastChar);\n\t    };\n\t    OmniboxValuesList.prototype.logAnalyticsEvent = function (elem, cause) {\n\t        var strippedFacetValues = _.pluck(this.facetValues, 'value');\n\t        elem.facet.usageAnalytics.logSearchEvent(cause, {\n\t            query: this.omniboxObject.completeQueryExpression.word,\n\t            facetId: elem.facet.options.id,\n\t            facetTitle: elem.facet.options.title,\n\t            facetValue: elem.facetValue.value,\n\t            suggestions: strippedFacetValues.join(';'),\n\t            suggestionRanking: _.indexOf(strippedFacetValues, elem.facetValue.value)\n\t        });\n\t    };\n\t    return OmniboxValuesList;\n\t}());\n\texports.OmniboxValuesList = OmniboxValuesList;\n\n\n/***/ },\n/* 174 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar LiveAnalyticsClient_1 = __webpack_require__(129);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Component_1 = __webpack_require__(109);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar RecommendationAnalyticsClient = (function (_super) {\n\t    __extends(RecommendationAnalyticsClient, _super);\n\t    function RecommendationAnalyticsClient(endpoint, rootElement, userId, userDisplayName, anonymous, splitTestRunName, splitTestRunVersion, originLevel1, sendToCloud, bindings) {\n\t        var _this = _super.call(this, endpoint, rootElement, userId, userDisplayName, anonymous, splitTestRunName, splitTestRunVersion, originLevel1, sendToCloud) || this;\n\t        _this.endpoint = endpoint;\n\t        _this.rootElement = rootElement;\n\t        _this.userId = userId;\n\t        _this.userDisplayName = userDisplayName;\n\t        _this.anonymous = anonymous;\n\t        _this.splitTestRunName = splitTestRunName;\n\t        _this.splitTestRunVersion = splitTestRunVersion;\n\t        _this.originLevel1 = originLevel1;\n\t        _this.sendToCloud = sendToCloud;\n\t        _this.bindings = bindings;\n\t        _this.recommendation = _this.bindings.searchInterface;\n\t        return _this;\n\t    }\n\t    RecommendationAnalyticsClient.prototype.logSearchEvent = function (actionCause, meta) {\n\t        if (actionCause == AnalyticsActionListMeta_1.analyticsActionCauseList.interfaceLoad) {\n\t            actionCause = AnalyticsActionListMeta_1.analyticsActionCauseList.recommendationInterfaceLoad;\n\t        }\n\t        _super.prototype.logSearchEvent.call(this, actionCause, meta);\n\t    };\n\t    RecommendationAnalyticsClient.prototype.logClickEvent = function (actionCause, meta, result, element) {\n\t        if (actionCause == AnalyticsActionListMeta_1.analyticsActionCauseList.documentOpen) {\n\t            actionCause = AnalyticsActionListMeta_1.analyticsActionCauseList.recommendationOpen;\n\t        }\n\t        var promises = [_super.prototype.logClickEvent.call(this, actionCause, meta, result, element)];\n\t        if (this.recommendation.mainQuerySearchUID && this.recommendation.mainQueryPipeline != null) {\n\t            // We log a second click associated with the main interface query to tell the analytics that the query was a success.\n\t            var mainInterface = Component_1.Component.get(this.recommendation.options.mainSearchInterface, SearchInterface_1.SearchInterface);\n\t            result.queryUid = this.recommendation.mainQuerySearchUID;\n\t            result.pipeline = this.recommendation.mainQueryPipeline;\n\t            promises.push(mainInterface.usageAnalytics.logClickEvent(actionCause, meta, result, element));\n\t        }\n\t        return Promise.all(promises);\n\t    };\n\t    RecommendationAnalyticsClient.prototype.getOriginLevel2 = function (element) {\n\t        return this.recommendation.getId();\n\t    };\n\t    return RecommendationAnalyticsClient;\n\t}(LiveAnalyticsClient_1.LiveAnalyticsClient));\n\texports.RecommendationAnalyticsClient = RecommendationAnalyticsClient;\n\n\n/***/ },\n/* 175 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\tif (!initCoveoJQuery()) {\n\t    // Adding a check in case jQuery was added after the jsSearch\n\t    // Since this event listener is registered before the Coveo.init call, JQuery should always be initiated before the Coveo.init call\n\t    document.addEventListener('DOMContentLoaded', function () {\n\t        initCoveoJQuery();\n\t    });\n\t}\n\tfunction initCoveoJQuery() {\n\t    if (!jQueryIsDefined()) {\n\t        return false;\n\t    }\n\t    exports.jQueryInstance = getJQuery();\n\t    if (window['Coveo'] == undefined) {\n\t        window['Coveo'] = {};\n\t    }\n\t    if (window['Coveo']['$'] == undefined) {\n\t        window['Coveo']['$'] = exports.jQueryInstance;\n\t    }\n\t    exports.jQueryInstance.fn.coveo = function () {\n\t        var args = [];\n\t        for (var _i = 0; _i < arguments.length; _i++) {\n\t            args[_i] = arguments[_i];\n\t        }\n\t        var returnValue;\n\t        this.each(function (index, element) {\n\t            var returnValueForThisElement;\n\t            if (_.isString(args[0])) {\n\t                var token = args[0];\n\t                returnValueForThisElement = Initialization_1.Initialization.dispatchNamedMethodCallOrComponentCreation(token, element, args.slice(1));\n\t            }\n\t            else {\n\t                // Invoking with no method name is a shortcut for the 'get' method (from Component).\n\t                returnValueForThisElement = Initialization_1.Initialization.dispatchNamedMethodCall('get', element, args);\n\t            }\n\t            // Keep only the first return value we encounter\n\t            returnValue = returnValue || returnValueForThisElement;\n\t        });\n\t        return returnValue;\n\t    };\n\t    return true;\n\t}\n\texports.initCoveoJQuery = initCoveoJQuery;\n\tfunction jQueryIsDefined() {\n\t    return jQueryDefinedOnWindow() || jQueryDefinedOnCoveoObject();\n\t}\n\texports.jQueryIsDefined = jQueryIsDefined;\n\tfunction jQueryDefinedOnCoveoObject() {\n\t    return window['Coveo'] != undefined && window['Coveo']['$'] != undefined;\n\t}\n\tfunction jQueryDefinedOnWindow() {\n\t    return window['$'] != undefined && window['$'].fn != undefined && window['$'].fn.jquery != undefined;\n\t}\n\tfunction getJQuery() {\n\t    var jQueryInstance;\n\t    if (window['$']) {\n\t        jQueryInstance = window['$'];\n\t    }\n\t    else {\n\t        jQueryInstance = window['Coveo']['$'];\n\t    }\n\t    return jQueryInstance;\n\t}\n\n\n/***/ },\n/* 176 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar TemplateHelpers_1 = __webpack_require__(177);\n\texports.TemplateHelpers = TemplateHelpers_1.TemplateHelpers;\n\tvar TemplateCache_1 = __webpack_require__(112);\n\texports.TemplateCache = TemplateCache_1.TemplateCache;\n\tvar HtmlTemplate_1 = __webpack_require__(119);\n\texports.HtmlTemplate = HtmlTemplate_1.HtmlTemplate;\n\tvar UnderscoreTemplate_1 = __webpack_require__(116);\n\texports.UnderscoreTemplate = UnderscoreTemplate_1.UnderscoreTemplate;\n\n\n/***/ },\n/* 177 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar UnderscoreTemplate_1 = __webpack_require__(116);\n\tvar Utils_1 = __webpack_require__(15);\n\t/**\n\t * Allow to register and return template helpers (essentially: Utility functions that can be executed in the context of a template to render complex elements).\n\t */\n\tvar TemplateHelpers = (function () {\n\t    function TemplateHelpers() {\n\t    }\n\t    TemplateHelpers.registerFieldHelper = function (name, helper) {\n\t        TemplateHelpers.fieldHelpers.push(name);\n\t        TemplateHelpers.registerTemplateHelper(name, helper);\n\t    };\n\t    /**\n\t     * Register a new helper in the framework, that will be available inside all templates execution context.\n\t     * @param name\n\t     * @param helper\n\t     */\n\t    TemplateHelpers.registerTemplateHelper = function (name, helper) {\n\t        Assert_1.Assert.isNonEmptyString(name);\n\t        Assert_1.Assert.exists(helper);\n\t        TemplateHelpers.registerTemplateHelperInUnderscore(name, helper);\n\t        TemplateHelpers.helpers[name] = helper;\n\t    };\n\t    /**\n\t     * Return a template helper function\n\t     * @param name\n\t     * @returns {any}\n\t     */\n\t    TemplateHelpers.getHelper = function (name) {\n\t        return Utils_1.Utils.getCaseInsensitiveProperty(TemplateHelpers.helpers, name);\n\t    };\n\t    /**\n\t     * Get all available helpers\n\t     * @returns {{}}\n\t     */\n\t    TemplateHelpers.getHelpers = function () {\n\t        return TemplateHelpers.helpers;\n\t    };\n\t    TemplateHelpers.registerTemplateHelperInUnderscore = function (name, helper) {\n\t        Assert_1.Assert.isNonEmptyString(name);\n\t        Assert_1.Assert.exists(helper);\n\t        UnderscoreTemplate_1.UnderscoreTemplate.registerTemplateHelper(name, helper);\n\t    };\n\t    return TemplateHelpers;\n\t}());\n\tTemplateHelpers.helpers = {};\n\tTemplateHelpers.fieldHelpers = [];\n\texports.TemplateHelpers = TemplateHelpers;\n\n\n/***/ },\n/* 178 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar TemplateHelpers_1 = __webpack_require__(177);\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar CurrencyUtils_1 = __webpack_require__(59);\n\tvar HtmlUtils_1 = __webpack_require__(69);\n\tvar Icon_1 = __webpack_require__(179);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar TimeSpanUtils_1 = __webpack_require__(17);\n\tvar EmailUtils_1 = __webpack_require__(66);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar TemplateCache_1 = __webpack_require__(112);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar SearchEndpoint_1 = __webpack_require__(11);\n\tvar ResultList_1 = __webpack_require__(183);\n\tvar StreamHighlightUtils_1 = __webpack_require__(74);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar Globalize = __webpack_require__(30);\n\tvar Quickview_1 = __webpack_require__(180);\n\tvar _ = __webpack_require__(16);\n\tvar CoreHelpers = (function () {\n\t    function CoreHelpers() {\n\t    }\n\t    /**\n\t     * For backward compatibility reason, the \"global\" template helper should be available under the\n\t     * coveo namespace.\n\t     * @param scope\n\t     */\n\t    CoreHelpers.exportAllHelpersGlobally = function (scope) {\n\t        _.each(TemplateHelpers_1.TemplateHelpers.getHelpers(), function (helper, name) {\n\t            if (scope[name] == undefined) {\n\t                scope[name] = helper;\n\t            }\n\t        });\n\t    };\n\t    return CoreHelpers;\n\t}());\n\texports.CoreHelpers = CoreHelpers;\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('javascriptEncode', function (value) {\n\t    return Utils_1.Utils.exists(value) ? StringUtils_1.StringUtils.javascriptEncode(value) : undefined;\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shorten', function (content, length, highlights, cssClass) {\n\t    var strAndHoles = HighlightUtils_1.StringAndHoles.shortenString(content, length, '...');\n\t    if (Utils_1.Utils.exists(highlights)) {\n\t        return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n\t    }\n\t    else {\n\t        return strAndHoles.value;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenPath', function (content, length, highlights, cssClass) {\n\t    var strAndHoles = HighlightUtils_1.StringAndHoles.shortenPath(content, length);\n\t    if (Utils_1.Utils.exists(highlights)) {\n\t        return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n\t    }\n\t    else {\n\t        return strAndHoles.value;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('shortenUri', function (content, length, highlights, cssClass) {\n\t    var strAndHoles = HighlightUtils_1.StringAndHoles.shortenUri(content, length);\n\t    if (Utils_1.Utils.exists(highlights)) {\n\t        return HighlightUtils_1.HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n\t    }\n\t    else {\n\t        return strAndHoles.value;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlight', function (content, highlights, cssClass) {\n\t    if (Utils_1.Utils.exists(content)) {\n\t        if (Utils_1.Utils.exists(highlights)) {\n\t            return HighlightUtils_1.HighlightUtils.highlightString(content, highlights, null, cssClass || 'highlight');\n\t        }\n\t        else {\n\t            return content;\n\t        }\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamText', function (content, termsToHighlight, phrasesToHighlight, opts) {\n\t    if (termsToHighlight === void 0) { termsToHighlight = resolveTermsToHighlight(); }\n\t    if (phrasesToHighlight === void 0) { phrasesToHighlight = resolvePhrasesToHighlight(); }\n\t    if (Utils_1.Utils.exists(content) && Utils_1.Utils.exists(termsToHighlight) && Utils_1.Utils.exists(phrasesToHighlight)) {\n\t        if (termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight)) {\n\t            return StreamHighlightUtils_1.StreamHighlightUtils.highlightStreamText(content, termsToHighlight, phrasesToHighlight, opts);\n\t        }\n\t        else {\n\t            return content;\n\t        }\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('highlightStreamHTML', function (content, termsToHighlight, phrasesToHighlight, opts) {\n\t    if (termsToHighlight === void 0) { termsToHighlight = resolveTermsToHighlight(); }\n\t    if (phrasesToHighlight === void 0) { phrasesToHighlight = resolvePhrasesToHighlight(); }\n\t    if (Utils_1.Utils.exists(content) && Utils_1.Utils.exists(termsToHighlight) && Utils_1.Utils.exists(phrasesToHighlight)) {\n\t        if (termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight)) {\n\t            return StreamHighlightUtils_1.StreamHighlightUtils.highlightStreamHTML(content, termsToHighlight, phrasesToHighlight, opts);\n\t        }\n\t        else {\n\t            return content;\n\t        }\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('number', function (value, options) {\n\t    var numberValue = Number(value);\n\t    if (Utils_1.Utils.exists(value)) {\n\t        if (_.isString(options)) {\n\t            return StringUtils_1.StringUtils.htmlEncode(Globalize.format(numberValue, options));\n\t        }\n\t        else {\n\t            return StringUtils_1.StringUtils.htmlEncode(numberValue.toString());\n\t        }\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('date', function (value, options) {\n\t    return DateUtils_1.DateUtils.dateToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('time', function (value, options) {\n\t    return DateUtils_1.DateUtils.timeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('dateTime', function (value, options) {\n\t    return DateUtils_1.DateUtils.dateTimeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('emailDateTime', function (value, options) {\n\t    var defaultOptions = {};\n\t    defaultOptions.includeTimeIfThisWeek = true;\n\t    var optionsToUse = _.extend(options, defaultOptions);\n\t    return value ? DateUtils_1.DateUtils.dateTimeToString(DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(value), optionsToUse) : undefined;\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('currency', function (value, options) {\n\t    return CurrencyUtils_1.CurrencyUtils.currencyToString(value, options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('timeSpan', function (value, options) {\n\t    if (options === void 0) { options = { isMilliseconds: false }; }\n\t    return new TimeSpanUtils_1.TimeSpan(value, options.isMilliseconds).getHHMMSS();\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('email', function (value) {\n\t    var args = [];\n\t    for (var _i = 1; _i < arguments.length; _i++) {\n\t        args[_i - 1] = arguments[_i];\n\t    }\n\t    // support old arguments (value: any, companyDomain: string, me: string, lengthLimit = 2, truncateName = false)\n\t    var companyDomain;\n\t    var me;\n\t    var lengthLimit;\n\t    var truncateName;\n\t    if (_.isObject(args[0])) {\n\t        companyDomain = args[0]['companyDomain'];\n\t        me = args[0]['me'];\n\t        lengthLimit = args[0]['lengthLimit'];\n\t        truncateName = args[0]['truncateName'];\n\t    }\n\t    else {\n\t        companyDomain = args[0];\n\t        me = args[1];\n\t        lengthLimit = args[2];\n\t        truncateName = args[3];\n\t    }\n\t    if (lengthLimit == undefined) {\n\t        lengthLimit = 2;\n\t    }\n\t    if (truncateName == undefined) {\n\t        truncateName = false;\n\t    }\n\t    if (_.isString(value)) {\n\t        var listOfAddresses = EmailUtils_1.EmailUtils.splitSemicolonSeparatedListOfEmailAddresses(value);\n\t        return EmailUtils_1.EmailUtils.emailAddressesToHyperlinks(listOfAddresses, companyDomain, me, lengthLimit, truncateName);\n\t    }\n\t    else if (_.isArray(value)) {\n\t        return EmailUtils_1.EmailUtils.emailAddressesToHyperlinks(value, companyDomain, me, lengthLimit, truncateName);\n\t    }\n\t    else {\n\t        return undefined;\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('excessEmailToggle', function (target) {\n\t    Dom_1.$$(target).removeClass('coveo-active');\n\t    if (Dom_1.$$(target).hasClass('coveo-emails-excess-collapsed')) {\n\t        _.each(Dom_1.$$(target).siblings('.coveo-emails-excess-expanded'), function (sibling) {\n\t            Dom_1.$$(sibling).addClass('coveo-active');\n\t        });\n\t    }\n\t    else if (Dom_1.$$(target).hasClass('coveo-hide-expanded')) {\n\t        Dom_1.$$(target.parentElement).addClass('coveo-inactive');\n\t        _.each(Dom_1.$$(target.parentElement).siblings('.coveo-emails-excess-collapsed'), function (sibling) {\n\t            Dom_1.$$(sibling).addClass('coveo-active');\n\t        });\n\t    }\n\t    return undefined;\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('anchor', function (href, options) {\n\t    return HtmlUtils_1.AnchorUtils.buildAnchor(href, options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('image', function (src, options) {\n\t    return HtmlUtils_1.ImageUtils.buildImage(src, options);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('thumbnail', function (result, endpoint, options) {\n\t    if (result === void 0) { result = resolveQueryResult(); }\n\t    if (endpoint === void 0) { endpoint = 'default'; }\n\t    if (QueryUtils_1.QueryUtils.hasThumbnail(result)) {\n\t        return HtmlUtils_1.ImageUtils.buildImageFromResult(result, SearchEndpoint_1.SearchEndpoint.endpoints[endpoint], options);\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('fromFileTypeToIcon', function (result, options) {\n\t    if (result === void 0) { result = resolveQueryResult(); }\n\t    if (options === void 0) { options = {}; }\n\t    return Icon_1.Icon.createIcon(result, options).outerHTML;\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('attrEncode', function (value) {\n\t    return ('' + value) /* Forces the conversion to string. */\n\t        .replace(/&/g, '&amp;') /* This MUST be the 1st replacement. */\n\t        .replace(/'/g, '&apos;') /* The 4 other predefined entities, required. */\n\t        .replace(/'/g, '&quot;')\n\t        .replace(/</g, '&lt;')\n\t        .replace(/>/g, '&gt;');\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('loadTemplates', function (templatesToLoad, once) {\n\t    if (once === void 0) { once = true; }\n\t    var ret = '';\n\t    var data = resolveQueryResult();\n\t    var atLeastOneWasLoaded = false;\n\t    var toLoad = templatesToLoad;\n\t    var defaultTmpl;\n\t    _.each(templatesToLoad, function (value, key, obj) {\n\t        if (value == 'default') {\n\t            defaultTmpl = key;\n\t        }\n\t    });\n\t    if (defaultTmpl != undefined) {\n\t        toLoad = _.omit(templatesToLoad, defaultTmpl);\n\t    }\n\t    _.each(toLoad, function (condition, id, obj) {\n\t        if (!atLeastOneWasLoaded || !once) {\n\t            atLeastOneWasLoaded = atLeastOneWasLoaded || condition;\n\t            ret += TemplateHelpers_1.TemplateHelpers.getHelper('loadTemplate')(id, condition, data);\n\t        }\n\t    });\n\t    if (!atLeastOneWasLoaded && defaultTmpl != undefined) {\n\t        ret += TemplateHelpers_1.TemplateHelpers.getHelper('loadTemplate')(defaultTmpl, true, data);\n\t    }\n\t    return ret;\n\t});\n\tvar byteMeasure = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB'];\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('size', function (value, options) {\n\t    var size = parseInt(value, 10);\n\t    var precision = (options != null && options.precision != null ? options.precision : 2);\n\t    var base = (options != null && options.base != null ? options.base : 0);\n\t    while (size > 1024 && base + 1 < byteMeasure.length) {\n\t        size /= 1024;\n\t        base++;\n\t    }\n\t    size = Math.floor(size * Math.pow(10, precision)) / Math.pow(10, precision);\n\t    return size + ' ' + byteMeasure[base];\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerFieldHelper('translatedCaption', function (value) {\n\t    return FacetUtils_1.FacetUtils.tryToGetTranslatedCaption('@filetype', value);\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('loadTemplate', function (id, condition, data) {\n\t    if (condition === void 0) { condition = true; }\n\t    if (Utils_1.Utils.isNullOrUndefined(data)) {\n\t        data = resolveQueryResult();\n\t    }\n\t    if (condition) {\n\t        return TemplateCache_1.TemplateCache.getTemplate(id).instantiateToString(data, {\n\t            checkCondition: false\n\t        });\n\t    }\n\t    return '';\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('encodeCarriageReturn', function (data) {\n\t    if (Utils_1.Utils.isNullOrUndefined(data)) {\n\t        return undefined;\n\t    }\n\t    else {\n\t        return StringUtils_1.StringUtils.encodeCarriageReturn(data);\n\t    }\n\t});\n\tTemplateHelpers_1.TemplateHelpers.registerTemplateHelper('isMobileDevice', function () {\n\t    return DeviceUtils_1.DeviceUtils.isMobileDevice() ? DeviceUtils_1.DeviceUtils.getDeviceName() : null;\n\t});\n\tfunction resolveQueryResult() {\n\t    return ResultList_1.ResultList.resultCurrentlyBeingRendered || Quickview_1.Quickview.resultCurrentlyBeingRendered;\n\t}\n\tfunction resolveTermsToHighlight() {\n\t    var currentQueryResult = resolveQueryResult();\n\t    if (currentQueryResult) {\n\t        return currentQueryResult.termsToHighlight;\n\t    }\n\t}\n\tfunction resolvePhrasesToHighlight() {\n\t    var currentQueryResult = resolveQueryResult();\n\t    if (currentQueryResult) {\n\t        return currentQueryResult.phrasesToHighlight;\n\t    }\n\t}\n\tfunction termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight) {\n\t    return Utils_1.Utils.isNonEmptyArray(_.keys(termsToHighlight)) || Utils_1.Utils.isNonEmptyArray(_.keys(phrasesToHighlight));\n\t}\n\n\n/***/ },\n/* 179 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar FileTypes_1 = __webpack_require__(63);\n\tvar Quickview_1 = __webpack_require__(180);\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * The Icon component outputs the corresponding icon for a given file type. The component searches for a suitable icon\n\t * from those available in the Coveo JavaScript Search Framework. If the component finds no suitable icon, it instead\n\t * outputs a generic icon.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar Icon = (function (_super) {\n\t    __extends(Icon, _super);\n\t    /**\n\t     * Creates a new Icon component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Icon component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function Icon(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, Icon.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Icon, options);\n\t        _this.result = _this.result || _this.resolveResult();\n\t        Assert_1.Assert.exists(_this.result);\n\t        var possibleInternalQuickview = Dom_1.$$(_this.element).find('.' + Component_1.Component.computeCssClassNameForType(Quickview_1.Quickview.ID));\n\t        if (!Utils_1.Utils.isNullOrUndefined(possibleInternalQuickview) && QueryUtils_1.QueryUtils.hasHTMLVersion(_this.result)) {\n\t            Dom_1.$$(_this.element).addClass('coveo-with-quickview');\n\t            Dom_1.$$(_this.element).on('click', function () {\n\t                var qv = Component_1.Component.get(possibleInternalQuickview);\n\t                qv.open();\n\t            });\n\t        }\n\t        Icon.createIcon(_this.result, _this.options, element, bindings);\n\t        return _this;\n\t    }\n\t    Icon.createIcon = function (result, options, element, bindings) {\n\t        if (options === void 0) { options = {}; }\n\t        if (element === void 0) { element = Dom_1.$$('div').el; }\n\t        var info = FileTypes_1.FileTypes.get(result);\n\t        if (!bindings && result.searchInterface) {\n\t            // try to resolve results bindings automatically\n\t            bindings = result.searchInterface.getBindings();\n\t        }\n\t        info = Icon.preprocessIconInfo(options, info);\n\t        Dom_1.$$(element).toggleClass('coveo-small', options.small === true);\n\t        if (options.value != undefined) {\n\t            if (options.small === true) {\n\t                if (options.value.indexOf('-small') == -1) {\n\t                    info.icon += '-small';\n\t                }\n\t            }\n\t            if (options.small === false) {\n\t                if (options.value.indexOf('-small') != -1) {\n\t                    info.icon = info.icon.replace('-small', '');\n\t                }\n\t            }\n\t        }\n\t        Dom_1.$$(element).addClass(info.icon);\n\t        element.setAttribute('title', info.caption);\n\t        if (Icon.shouldDisplayLabel(options, bindings)) {\n\t            element.appendChild(Dom_1.$$('span', {\n\t                className: 'coveo-icon-caption-overlay'\n\t            }, info.caption).el);\n\t            Dom_1.$$(element).addClass('coveo-icon-with-caption-overlay');\n\t            Dom_1.$$(element).setAttribute('data-with-label', 'true');\n\t        }\n\t        return element;\n\t    };\n\t    Icon.shouldDisplayLabel = function (options, bindings) {\n\t        // Display only in new design.\n\t        // If withLabel is explicitely set to false, the label will never display\n\t        // If withLabel is explicitely set to true, the label will always display\n\t        // If withLabel is set to default value (not a hard true or false), the label will display based on ./core/filetypes/**.json\n\t        // with the property shouldDisplayLabel set on each file type/ objecttype\n\t        // In this case, the generated css will take care of outputting the correct css to display : block\n\t        return bindings && bindings.searchInterface.isNewDesign() && options.withLabel !== false;\n\t    };\n\t    Icon.preprocessIconInfo = function (options, info) {\n\t        if (options.labelValue != null) {\n\t            info.caption = options.labelValue;\n\t        }\n\t        if (options.value != null) {\n\t            info.icon = 'coveo-icon ' + options.value;\n\t        }\n\t        if (info.caption == null) {\n\t            info.caption = '';\n\t        }\n\t        if (info.icon == null) {\n\t            info.icon = 'coveo-icon coveo-sprites-custom';\n\t        }\n\t        return info;\n\t    };\n\t    return Icon;\n\t}(Component_1.Component));\n\tIcon.ID = 'Icon';\n\t/**\n\t * The options for the Icon\n\t * @componentOptions\n\t */\n\tIcon.options = {\n\t    /**\n\t     * Specifies the value that the Icon component should output as its CSS class instead of the auto-selected value.\n\t     *\n\t     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework outputs a suitable icon\n\t     * depending on the result file type.\n\t     */\n\t    value: ComponentOptions_1.ComponentOptions.buildIconOption(),\n\t    /**\n\t     * Specifies whether the Icon component should output the smaller version of the icon instead of the regular one.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    small: ComponentOptions_1.ComponentOptions.buildBooleanOption(),\n\t    /**\n\t     * Specifies whether the Icon component should force the output icon to display its caption/label.\n\t     *\n\t     * **Note:**\n\t     *\n\t     * > Due to limited screen real estate, setting this option to `true` has no effect on icons used inside Coveo for\n\t     * > Salesforce Insight Panels.\n\t     *\n\t     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework determines whether the icon\n\t     * needs to display a caption/label depending on the result file type.\n\t     */\n\t    withLabel: ComponentOptions_1.ComponentOptions.buildBooleanOption(),\n\t    /**\n\t     * Specifies what text to display as the icon caption/label.\n\t     *\n\t     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework determines what text the icon\n\t     * needs to display depending on the result file type.\n\t     */\n\t    labelValue: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\tIcon.fields = [\n\t    'objecttype',\n\t    'filetype',\n\t];\n\texports.Icon = Icon;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Icon);\n\n\n/***/ },\n/* 180 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DefaultQuickviewTemplate_1 = __webpack_require__(181);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar QuickviewDocument_1 = __webpack_require__(182);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar QuickviewEvents_1 = __webpack_require__(135);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\t/**\n\t * This component is meant to exist within a result template.\n\t * It allows to create a button/link inside the result list that opens a modal box for a given result.\n\t *\n\t * Most of the time, this component will reference a {@link QuickviewDocument} in its content template.\n\t *\n\t * ## Choosing what to display for the Quickview\n\t * The Quick View uses any HTML structure you put inside its tag and uses that as the content of the dialog box. This content can thus be any element you decide, using your CSS and your structure.\n\t *\n\t * ## Example\n\t * - You can change the appearance of the Quick View link by adding HTML inside the body of the div.\n\t *\n\t * - You can change the content of the Quick View link by specifying a template ID.\n\t *\n\t * - You can use the methods of the [CoreHelpers]{@link ICoreHelpers} in the template.\n\t *\n\t * ```html\n\t * <!-- This would change the appearance of the quickview button itself in the result. -->\n\t * <div class=\"CoveoQuickview\" data-template-id=\"TemplateId\">\n\t *   <span>Click here for Quickview</span>\n\t * </div>\n\t *\n\t * <!-- This would modify the content of the quickview when it is opened in the modal box -->\n\t * <script class='result-template' type='text/underscore' id='TemplateId' >\n\t *   <div>\n\t *     <span>This is the content that will be displayed when you open the Quick View. You can also include any other Coveo components.</span>\n\t *     <table class=\"CoveoFieldTable\">\n\t *       <tr data-field=\"@liboardshorttitle\" data-caption=\"Board\" />\n\t *       <tr data-field=\"@licategoryshorttitle\" data-caption=\"Category\" />\n\t *       <tr data-field=\"@sysauthor\" data-caption=\"Author\" />\n\t *     </table>\n\t *   </div>\n\t * </script>\n\t *\n\t * <!-- Note that this is all optional: Just including a <div class='CoveoQuickview'></div> will do the job most of the time, and will include a default template and default button appearance -->\n\t * ```\n\t */\n\tvar Quickview = (function (_super) {\n\t    __extends(Quickview, _super);\n\t    function Quickview(element, options, bindings, result, ModalBox) {\n\t        if (ModalBox === void 0) { ModalBox = ExternalModulesShim_1.ModalBox; }\n\t        var _this = _super.call(this, element, Quickview.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.ModalBox = ModalBox;\n\t        _this.bindedHandleEscapeEvent = _this.handleEscapeEvent.bind(_this);\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Quickview, options);\n\t        if (_this.options.contentTemplate == null) {\n\t            _this.options.contentTemplate = new DefaultQuickviewTemplate_1.DefaultQuickviewTemplate();\n\t        }\n\t        // If there is no content inside the Quickview div,\n\t        // we need to add something that will show up in the result template itself\n\t        if (/^\\s*$/.test(_this.element.innerHTML)) {\n\t            var iconForQuickview = Dom_1.$$('div');\n\t            iconForQuickview.addClass('coveo-icon-for-quickview');\n\t            if (_this.searchInterface.isNewDesign()) {\n\t                var captionForQuickview = Dom_1.$$('div', { className: 'coveo-caption-for-quickview', tabindex: 0 }, 'Quickview'.toLocaleString()).el;\n\t                var div = Dom_1.$$('div');\n\t                div.append(iconForQuickview.el);\n\t                div.append(captionForQuickview);\n\t                Dom_1.$$(_this.element).append(div.el);\n\t            }\n\t            else {\n\t                iconForQuickview.text('Quickview'.toLocaleString());\n\t                Dom_1.$$(_this.element).append(iconForQuickview.el);\n\t            }\n\t        }\n\t        _this.bindClick(result);\n\t        if (_this.bindings.resultElement) {\n\t            _this.bind.on(_this.bindings.resultElement, ResultListEvents_1.ResultListEvents.openQuickview, function () { return _this.open(); });\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Open the quickview\n\t     */\n\t    Quickview.prototype.open = function () {\n\t        if (this.modalbox == null) {\n\t            // To prevent the keyboard from opening on mobile if the search bar has focus\n\t            Quickview.resultCurrentlyBeingRendered = this.result;\n\t            Dom_1.$$(document.activeElement).trigger('blur');\n\t            var openerObject = this.prepareOpenQuickviewObject();\n\t            this.createModalBox(openerObject);\n\t            this.bindQuickviewEvents(openerObject);\n\t            this.animateAndOpen();\n\t            this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.quickview, this.getHashId());\n\t            Quickview.resultCurrentlyBeingRendered = null;\n\t        }\n\t    };\n\t    /**\n\t     * Close the quickview\n\t     */\n\t    Quickview.prototype.close = function () {\n\t        if (this.modalbox != null) {\n\t            this.modalbox.close();\n\t            this.modalbox = null;\n\t            Dom_1.$$(document.body).off('keyup', this.bindedHandleEscapeEvent);\n\t        }\n\t    };\n\t    Quickview.prototype.getHashId = function () {\n\t        return this.result.queryUid + '.' + this.result.index + '.' + StringUtils_1.StringUtils.hashCode(this.result.uniqueId);\n\t    };\n\t    Quickview.prototype.bindClick = function (result) {\n\t        var _this = this;\n\t        if (typeof result.hasHtmlVersion == 'undefined' || result.hasHtmlVersion || this.options.alwaysShow) {\n\t            var clickAction = function () { return _this.open(); };\n\t            Dom_1.$$(this.element).on('click', clickAction);\n\t            this.bind.on(this.element, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clickAction));\n\t        }\n\t        else {\n\t            this.element.style.display = 'none';\n\t        }\n\t    };\n\t    Quickview.prototype.bindQuickviewEvents = function (openerObject) {\n\t        var _this = this;\n\t        var closeButton = Dom_1.$$(this.modalbox.wrapper).find('.coveo-quickview-close-button');\n\t        Dom_1.$$(closeButton).on('click', function () {\n\t            _this.closeQuickview();\n\t            _this.close();\n\t        });\n\t        Dom_1.$$(this.modalbox.overlay).on('click', function () {\n\t            _this.closeQuickview();\n\t        });\n\t        Dom_1.$$(this.modalbox.content).on(QuickviewEvents_1.QuickviewEvents.quickviewLoaded, function () {\n\t            Dom_1.$$(openerObject.loadingAnimation).remove();\n\t            _this.bindIFrameEscape();\n\t        });\n\t        this.bindEscape();\n\t    };\n\t    Quickview.prototype.animateAndOpen = function () {\n\t        var _this = this;\n\t        var animationDuration = this.modalbox.wrapper.style.animationDuration;\n\t        var quickviewDocument = Dom_1.$$(this.modalbox.modalBox).find('.' + Component_1.Component.computeCssClassName(QuickviewDocument_1.QuickviewDocument));\n\t        if (quickviewDocument) {\n\t            if (animationDuration) {\n\t                var duration = /^(.+)(ms|s)$/.exec(animationDuration);\n\t                var durationMs = Number(duration[1]) * (duration[2] == 's' ? 1000 : 1);\n\t                // open the QuickviewDocument\n\t                setTimeout(function () {\n\t                    if (_this.modalbox != null) {\n\t                        Initialization_1.Initialization.dispatchNamedMethodCallOrComponentCreation('open', quickviewDocument, null);\n\t                    }\n\t                }, durationMs);\n\t            }\n\t            else {\n\t                Initialization_1.Initialization.dispatchNamedMethodCallOrComponentCreation('open', quickviewDocument, null);\n\t            }\n\t        }\n\t    };\n\t    Quickview.prototype.createModalBox = function (openerObject) {\n\t        var computedModalBoxContent = Dom_1.$$('div');\n\t        computedModalBoxContent.append(openerObject.content.el);\n\t        this.modalbox = this.ModalBox.open(computedModalBoxContent.el, {\n\t            title: DomUtils_1.DomUtils.getQuickviewHeader(this.result, {\n\t                showDate: this.options.showDate,\n\t                title: this.options.title\n\t            }, this.bindings).el.outerHTML,\n\t            className: 'coveo-quick-view',\n\t            validation: function () { return true; },\n\t            body: this.element.ownerDocument.body\n\t        });\n\t        this.setQuickviewSize();\n\t    };\n\t    Quickview.prototype.prepareOpenQuickviewObject = function () {\n\t        var loadingAnimation = this.options.loadingAnimation;\n\t        return {\n\t            loadingAnimation: loadingAnimation,\n\t            content: this.prepareQuickviewContent(loadingAnimation)\n\t        };\n\t    };\n\t    Quickview.prototype.prepareQuickviewContent = function (loadingAnimation) {\n\t        var content = Dom_1.$$(this.options.contentTemplate.instantiateToElement(this.result));\n\t        var initOptions = this.searchInterface.options;\n\t        var initParameters = {\n\t            options: initOptions,\n\t            bindings: this.getBindings(),\n\t            result: this.result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(content.el, initParameters);\n\t        if (content.find('.' + Component_1.Component.computeCssClassName(QuickviewDocument_1.QuickviewDocument)) != undefined && this.options.enableLoadingAnimation) {\n\t            content.prepend(loadingAnimation);\n\t        }\n\t        return content;\n\t    };\n\t    Quickview.prototype.bindEscape = function () {\n\t        Dom_1.$$(document.body).on('keyup', this.bindedHandleEscapeEvent);\n\t    };\n\t    Quickview.prototype.bindIFrameEscape = function () {\n\t        var quickviewDocument = Dom_1.$$(this.modalbox.content).find('.' + Component_1.Component.computeCssClassName(QuickviewDocument_1.QuickviewDocument));\n\t        quickviewDocument = Dom_1.$$(quickviewDocument).find('iframe');\n\t        var body = quickviewDocument.contentWindow.document.body;\n\t        Dom_1.$$(body).on('keyup', this.bindedHandleEscapeEvent);\n\t    };\n\t    Quickview.prototype.closeQuickview = function () {\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.quickview, '');\n\t    };\n\t    Quickview.prototype.setQuickviewSize = function () {\n\t        var wrapper = Dom_1.$$(Dom_1.$$(this.modalbox.modalBox).find('.coveo-wrapper'));\n\t        wrapper.el.style.width = this.options.size;\n\t        wrapper.el.style.height = this.options.size;\n\t        wrapper.el.style.maxWidth = this.options.size;\n\t        wrapper.el.style.maxHeight = this.options.size;\n\t    };\n\t    Quickview.prototype.handleEscapeEvent = function (e) {\n\t        if (e.keyCode == KeyboardUtils_1.KEYBOARD.ESCAPE) {\n\t            this.closeQuickview();\n\t            this.close();\n\t        }\n\t    };\n\t    return Quickview;\n\t}(Component_1.Component));\n\tQuickview.ID = 'Quickview';\n\tQuickview.fields = [\n\t    'urihash',\n\t    'collection',\n\t    'source',\n\t    'author' // analytics\n\t];\n\t/**\n\t * @componentOptions\n\t */\n\tQuickview.options = {\n\t    /**\n\t     * Specifies whether the quickview is always shown, even when the index body for a document is empty.<br/>\n\t     * In such cases, the {@link Quickview.options.contentTemplate} specifies what appears in the quickview.<br/>\n\t     * If there is no quickview for the document, you *MUST* specify a contentTemplate otherwise the component will throw an error when opened.\n\t     */\n\t    alwaysShow: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the title of your choice that appears at the top of the Quick View modal window.\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies whether to show the document date in the Quick View modal window header.<br/>\n\t     * The default value is `true`.\n\t     */\n\t    showDate: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    enableLoadingAnimation: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the template to use to present the Quick View content in the modal window.<br/>\n\t     * e.g.: <br/>\n\t     *     <div class=\"CoveoQuickview\" data-template-id=\"TemplateId\"></div>\n\t     *     <div class=\"CoveoQuickview\" data-template-selector=\".templateSelector\"></div>\n\t     */\n\t    contentTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption({\n\t        selectorAttr: 'data-template-selector',\n\t        idAttr: 'data-template-id'\n\t    }),\n\t    loadingAnimation: ComponentOptions_1.ComponentOptions.buildOption(ComponentOptions_1.ComponentOptionsType.NONE, function (element) {\n\t        var loadingAnimationSelector = element.getAttribute('data-loading-animation-selector');\n\t        if (loadingAnimationSelector != null) {\n\t            var loadingAnimation = Dom_1.$$(document.documentElement).find(loadingAnimationSelector);\n\t            if (loadingAnimation != null) {\n\t                Dom_1.$$(loadingAnimation).detach();\n\t                return loadingAnimation;\n\t            }\n\t        }\n\t        var id = element.getAttribute('data-loading-animation-template-id');\n\t        if (id != null) {\n\t            var loadingAnimationTemplate = ComponentOptions_1.ComponentOptions.loadResultTemplateFromId(id);\n\t            if (loadingAnimationTemplate) {\n\t                return loadingAnimationTemplate.instantiateToElement(undefined, {\n\t                    checkCondition: false\n\t                });\n\t            }\n\t        }\n\t        return DomUtils_1.DomUtils.getBasicLoadingAnimation();\n\t    }),\n\t    /**\n\t     * Specifies the Quick View modal window size (width and height) relative to the full window.<br/>\n\t     * The default value is 95% on a desktop and 100% on a mobile device.\n\t     */\n\t    size: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: DeviceUtils_1.DeviceUtils.isMobileDevice() ? '100%' : '95%' })\n\t};\n\tQuickview.resultCurrentlyBeingRendered = null;\n\texports.Quickview = Quickview;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Quickview);\n\n\n/***/ },\n/* 181 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar DefaultQuickviewTemplate = (function (_super) {\n\t    __extends(DefaultQuickviewTemplate, _super);\n\t    function DefaultQuickviewTemplate() {\n\t        return _super.call(this) || this;\n\t    }\n\t    DefaultQuickviewTemplate.prototype.instantiateToString = function (queryResult) {\n\t        return '<div class=\"coveo-quick-view-full-height\"><div class=\"CoveoQuickviewDocument\"></div></div>';\n\t    };\n\t    return DefaultQuickviewTemplate;\n\t}(Template_1.Template));\n\texports.DefaultQuickviewTemplate = DefaultQuickviewTemplate;\n\n\n/***/ },\n/* 182 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QuickviewEvents_1 = __webpack_require__(135);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar ColorUtils_1 = __webpack_require__(58);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\tvar HIGHLIGHT_PREFIX = 'CoveoHighlight';\n\t/**\n\t * The QuickviewDocument component is meant to exist within Result Templates, more specifically inside a {@link Quickview} component.\n\t * The sole purpose of this component is to include an iframe which will load the correct HTML version of the current document.\n\t * By default, this component is included in the default template for a {@link Quickview} component.\n\t */\n\tvar QuickviewDocument = (function (_super) {\n\t    __extends(QuickviewDocument, _super);\n\t    /**\n\t     * Create a new instance of the component\n\t     * @param element\n\t     * @param options\n\t     * @param bindings\n\t     * @param result\n\t     */\n\t    function QuickviewDocument(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, QuickviewDocument.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, QuickviewDocument, options);\n\t        _this.result = result || _this.resolveResult();\n\t        _this.termsToHighlightWereModified = false;\n\t        Assert_1.Assert.exists(_this.result);\n\t        return _this;\n\t    }\n\t    QuickviewDocument.prototype.createDom = function () {\n\t        var container = Dom_1.$$('div');\n\t        container.addClass('coveo-quickview-document');\n\t        this.element.appendChild(container.el);\n\t        this.header = this.buildHeader();\n\t        this.iframe = this.buildIFrame();\n\t        container.append(this.header.el);\n\t        container.append(this.iframe.el);\n\t    };\n\t    QuickviewDocument.prototype.open = function () {\n\t        var _this = this;\n\t        this.ensureDom();\n\t        var documentURL = Dom_1.$$(this.element).getAttribute('href');\n\t        if (documentURL == undefined || documentURL == '') {\n\t            documentURL = this.result.clickUri;\n\t        }\n\t        this.usageAnalytics.logClickEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentQuickview, {\n\t            author: Utils_1.Utils.getFieldValue(this.result, 'author'),\n\t            documentURL: documentURL,\n\t            documentTitle: this.result.title\n\t        }, this.result, this.queryController.element);\n\t        var beforeLoad = (new Date()).getTime();\n\t        var iframe = this.iframe.find('iframe');\n\t        iframe.src = 'about:blank';\n\t        var endpoint = this.queryController.getEndpoint();\n\t        var termsToHighlight = _.keys(this.result.termsToHighlight);\n\t        var dataToSendOnOpenQuickView = {\n\t            termsToHighlight: termsToHighlight\n\t        };\n\t        Dom_1.$$(this.element).trigger(QuickviewEvents_1.QuickviewEvents.openQuickview, dataToSendOnOpenQuickView);\n\t        this.checkIfTermsToHighlightWereModified(dataToSendOnOpenQuickView.termsToHighlight);\n\t        var queryObject = _.extend({}, this.getBindings().queryController.getLastQuery());\n\t        if (this.termsToHighlightWereModified) {\n\t            this.handleTermsToHighlight(dataToSendOnOpenQuickView.termsToHighlight, queryObject);\n\t        }\n\t        var callOptions = {\n\t            queryObject: queryObject,\n\t            requestedOutputSize: this.options.maximumDocumentSize\n\t        };\n\t        endpoint.getDocumentHtml(this.result.uniqueId, callOptions)\n\t            .then(function (html) {\n\t            // If the contentDocument is null at this point it means that the Quick View\n\t            // was closed before we've finished loading it. In this case do nothing.\n\t            if (iframe.contentDocument == null) {\n\t                return;\n\t            }\n\t            _this.renderHTMLDocument(iframe, html);\n\t            _this.triggerQuickviewLoaded(beforeLoad);\n\t        })\n\t            .catch(function (error) {\n\t            // If the contentDocument is null at this point it means that the Quick View\n\t            // was closed before we've finished loading it. In this case do nothing.\n\t            if (iframe.contentDocument == null) {\n\t                return;\n\t            }\n\t            if (error.status != 0) {\n\t                _this.renderErrorReport(iframe, error.status);\n\t                _this.triggerQuickviewLoaded(beforeLoad);\n\t            }\n\t            else {\n\t                iframe.onload = function () {\n\t                    _this.triggerQuickviewLoaded(beforeLoad);\n\t                };\n\t                iframe.src = endpoint.getViewAsHtmlUri(_this.result.uniqueId, callOptions);\n\t            }\n\t        });\n\t    };\n\t    QuickviewDocument.prototype.renderHTMLDocument = function (iframe, html) {\n\t        var _this = this;\n\t        iframe.onload = function () {\n\t            _this.computeHighlights(iframe.contentWindow);\n\t            // Remove white border for new Quickview\n\t            if (_this.isNewQuickviewDocument(iframe.contentWindow)) {\n\t                var body = Dom_1.$$(_this.element).closest('.coveo-body');\n\t                body.style.padding = '0';\n\t                var header = Dom_1.$$(_this.element).find('.coveo-quickview-header');\n\t                header.style.paddingTop = '10';\n\t                header.style.paddingLeft = '10';\n\t            }\n\t            if (Dom_1.$$(_this.element).find('.coveo-quickview-header').innerHTML == '') {\n\t                Dom_1.$$(_this.element).find('.coveo-quickview-header').style.display = 'none';\n\t            }\n\t        };\n\t        this.writeToIFrame(iframe, html);\n\t        this.wrapPreElementsInIframe(iframe);\n\t    };\n\t    QuickviewDocument.prototype.renderErrorReport = function (iframe, errorStatus) {\n\t        var errorString = '';\n\t        if (errorStatus == 400) {\n\t            errorString = 'NoQuickview';\n\t        }\n\t        else {\n\t            errorString = 'OopsError';\n\t        }\n\t        var errorMessage = \"<html><body style='font-family: Arimo, 'Helvetica Neue', Helvetica, Arial, sans-serif; -webkit-text-size-adjust: none;' >\" + Strings_1.l(errorString) + \" </body></html>\";\n\t        this.writeToIFrame(iframe, errorMessage);\n\t    };\n\t    QuickviewDocument.prototype.writeToIFrame = function (iframe, content) {\n\t        var toWrite = content;\n\t        // This sucks because we can't do instanceof HTMLDocument\n\t        // lib.d.ts declare HTMLDocument as an interface, not an actual object\n\t        if (typeof content == 'object') {\n\t            toWrite = content.getElementsByTagName('html')[0].outerHTML;\n\t        }\n\t        iframe.contentWindow.document.open();\n\t        iframe.contentWindow.document.write(toWrite);\n\t        iframe.contentWindow.document.close();\n\t    };\n\t    QuickviewDocument.prototype.wrapPreElementsInIframe = function (iframe) {\n\t        try {\n\t            var style = document.createElement('style');\n\t            style.type = 'text/css';\n\t            // This CSS forces <pre> tags used in some emails to wrap by default\n\t            var cssText = 'html pre { white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; }';\n\t            // Some people react strongly when presented with their browser's default font, so let's fix that\n\t            cssText += 'body, html { font-family: Arimo, \\'Helvetica Neue\\', Helvetica, Arial, sans-serif; -webkit-text-size-adjust: none; }';\n\t            if (DeviceUtils_1.DeviceUtils.isIos()) {\n\t                // Safari on iOS forces resize iframes to fit their content, even if an explicit size\n\t                // is set on the iframe. Isn't that great? By chance there is a trick around it: by\n\t                // setting a very small size on the body and instead using min-* to set the size to\n\t                // 100% we're able to trick Safari from thinking it must expand the iframe. Amazed.\n\t                // The 'scrolling' part is required otherwise the hack doesn't work.\n\t                //\n\t                // http://stackoverflow.com/questions/23083462/how-to-get-an-iframe-to-be-responsive-in-ios-safari\n\t                cssText += 'body, html { height: 1px !important; min-height: 100%; width: 1px !important; min-width: 100%; overflow: scroll; }';\n\t                Dom_1.$$(iframe).setAttribute('scrolling', 'no');\n\t                // Some content is cropped on iOs if a margin is present\n\t                // We remove it and add one on the iframe wrapper.\n\t                cssText += 'body, html {margin: auto}';\n\t                iframe.parentElement.style.margin = '0 0 5px 5px';\n\t            }\n\t            if ('styleSheet' in style) {\n\t                style['styleSheet'].cssText = cssText;\n\t            }\n\t            else {\n\t                style.appendChild(document.createTextNode(cssText));\n\t            }\n\t            var head = iframe.contentWindow.document.head;\n\t            head.appendChild(style);\n\t        }\n\t        catch (e) {\n\t            // if not allowed\n\t        }\n\t    };\n\t    QuickviewDocument.prototype.triggerQuickviewLoaded = function (beforeLoad) {\n\t        var afterLoad = (new Date()).getTime();\n\t        var eventArgs = { duration: afterLoad - beforeLoad };\n\t        Dom_1.$$(this.element).trigger(QuickviewEvents_1.QuickviewEvents.quickviewLoaded, eventArgs);\n\t    };\n\t    // An highlighted term looks like:\n\t    //\n\t    //     <span id='CoveoHighlight:X.Y.Z'>a</span>\n\t    //\n\t    // The id has 3 components:\n\t    // - X: the term\n\t    // - Y: the term occurence\n\t    // - Z: the term part\n\t    //\n\t    // For the 'Z' component, if the term 'foo bar' is found in multiple elements, we will see:\n\t    //\n\t    //     <span id='CoveoHighlight:1.1.1'>foo</span>\n\t    //     <span id='CoveoHighlight:1.1.2'>bar</span>\n\t    //\n\t    // Highlighted words can overlap, which looks like:\n\t    //\n\t    //     <span id='CoveoHighlight:1.Y.Z'>\n\t    //         a\n\t    //         <coveotaggedword id='CoveoHighlight:2.Y.Z'>b</coveotaggedword>\n\t    //     </span>\n\t    //     <span id='CoveoHighlight:2.Y.Z'>c</span>\n\t    //\n\t    // In the previous example, the words 'ab' and 'bc' are highlighted.\n\t    //\n\t    // One thing important to note is that the id of all 'coveotaggedword' for\n\t    // the same word AND the first 'span' for that word will have the same id.\n\t    //\n\t    // Example:\n\t    //\n\t    //     <span id='CoveoHighlight:1.1.1'>\n\t    //         a\n\t    //         <coveotaggedword id='CoveoHighlight:2.1.1'>b</coveotaggedword>\n\t    //     </span>\n\t    //     <span id='CoveoHighlight:1.1.2'>\n\t    //         c\n\t    //         <coveotaggedword id='CoveoHighlight:2.1.1'>d</coveotaggedword>\n\t    //     </span>\n\t    //     <span id='CoveoHighlight:2.1.1'>e</span>\n\t    //     <span id='CoveoHighlight:2.1.2'>f</span>\n\t    //\n\t    // In the previous example, the words 'abcd' and 'bcdef' are highlighted.\n\t    //\n\t    // This method is public for testing purposes.\n\t    QuickviewDocument.prototype.computeHighlights = function (window) {\n\t        var _this = this;\n\t        Dom_1.$$(this.header).empty();\n\t        this.keywordsState = [];\n\t        var words = {};\n\t        var highlightsCount = 0;\n\t        _.each(Dom_1.$$(window.document.body).findAll('[id^=\"' + HIGHLIGHT_PREFIX + '\"]'), function (element, index) {\n\t            var idParts = _this.getHighlightIdParts(element);\n\t            if (idParts) {\n\t                var idIndexPart = idParts[1]; // X\n\t                var idOccurencePart = parseInt(idParts[2], 10); // Y\n\t                var idTermPart = parseInt(idParts[3], 10); // Z in <span id='CoveoHighlight:X.Y.Z'>a</span>\n\t                var word = words[idIndexPart];\n\t                // The 'idTermPart' check is to circumvent a bug from the index\n\t                // where an highlight of an empty string start with an idTermPart > 1.\n\t                if (word == null && idTermPart == 1) {\n\t                    words[idIndexPart] = word = {\n\t                        text: _this.getHighlightInnerText(element),\n\t                        count: 1,\n\t                        index: parseInt(idIndexPart, 10),\n\t                        // Here I try to be clever.\n\t                        // An overlaping word:\n\t                        // 1) always start with a 'coveotaggedword' element.\n\t                        // 2) then other 'coveotaggedword' elements may follow\n\t                        // 3) then a 'span' element may follow.\n\t                        //\n\t                        // All 1), 2) and 3) will have the same id so I consider them as\n\t                        // a whole having the id 0 instead of 1.\n\t                        termsCount: element.nodeName.toLowerCase() == 'coveotaggedword' ? 0 : 1,\n\t                        element: element,\n\t                        occurence: idOccurencePart\n\t                    };\n\t                }\n\t                else if (word) {\n\t                    if (word.occurence == idOccurencePart) {\n\t                        if (element.nodeName.toLowerCase() == 'coveotaggedword') {\n\t                            word.text += _this.getHighlightInnerText(element);\n\t                            // Doesn't count as a term part (see method description for more info).\n\t                        }\n\t                        else if (word.termsCount < idTermPart) {\n\t                            word.text += _this.getHighlightInnerText(element);\n\t                            word.termsCount += 1;\n\t                        }\n\t                    }\n\t                    word.count = Math.max(word.count, idOccurencePart);\n\t                    highlightsCount += 1;\n\t                }\n\t                // See the method description to understand why this code let us\n\t                // create the word 'bcdef' instead of 'bdef'.\n\t                if (word && word.occurence == idOccurencePart && element.nodeName.toLowerCase() == 'span') {\n\t                    var embeddedWordParts = _this.getHightlightEmbeddedWordIdParts(element);\n\t                    var embeddedWord = embeddedWordParts ? words[embeddedWordParts[1]] : null;\n\t                    if (embeddedWord && embeddedWord.occurence == parseInt(embeddedWordParts[2], 10)) {\n\t                        embeddedWord.text += element.childNodes[0].nodeValue || ''; // only immediate text without children.\n\t                    }\n\t                }\n\t            }\n\t        });\n\t        if (highlightsCount == 0) {\n\t            this.header.el.style.minHeight = '0';\n\t        }\n\t        var resolvedWords = [];\n\t        _.each(words, function (word) {\n\t            // When possible, take care to find the original term from the query instead of the\n\t            // first highlighted version we encounter. This relies on a recent feature by the\n\t            // Search API, but will fallback properly on older versions.\n\t            word.text = _this.resolveOriginalTermFromHighlight(word.text);\n\t            var state = {\n\t                word: word,\n\t                color: word.element.style.backgroundColor,\n\t                currentIndex: 0,\n\t                index: word.index\n\t            };\n\t            _this.keywordsState.push(state);\n\t            Dom_1.$$(_this.header).append(_this.buildWordButton(state, window));\n\t            resolvedWords.push(word.text);\n\t        });\n\t        return resolvedWords;\n\t    };\n\t    QuickviewDocument.prototype.getHighlightIdParts = function (element) {\n\t        var parts = element\n\t            .id\n\t            .substr(HIGHLIGHT_PREFIX.length + 1)\n\t            .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\t        return (parts && parts.length > 3) ? parts : null;\n\t    };\n\t    QuickviewDocument.prototype.getHighlightInnerText = function (element) {\n\t        if (element.nodeName.toLowerCase() == 'coveotaggedword') {\n\t            // only immediate text without children.\n\t            return element.childNodes.length >= 1 ? (element.childNodes.item(0).textContent || '') : '';\n\t        }\n\t        else {\n\t            return element.textContent || '';\n\t        }\n\t    };\n\t    QuickviewDocument.prototype.getHightlightEmbeddedWordIdParts = function (element) {\n\t        var embedded = element.getElementsByTagName('coveotaggedword')[0];\n\t        return embedded ? this.getHighlightIdParts(embedded) : null;\n\t    };\n\t    QuickviewDocument.prototype.resolveOriginalTermFromHighlight = function (highlight) {\n\t        var _this = this;\n\t        var found = highlight;\n\t        // Beware, terms to highlight is only set by recent search APIs.\n\t        if (this.result.termsToHighlight) {\n\t            // We look for the term expansion and we'll return the corresponding\n\t            // original term is one is found.\n\t            found = _.find(_.keys(this.result.termsToHighlight), function (originalTerm) {\n\t                // The expansions do NOT include the original term (makes sense), so be sure to check\n\t                // the original term for a match too.\n\t                return (originalTerm.toLowerCase() == highlight.toLowerCase()) ||\n\t                    (_.find(_this.result.termsToHighlight[originalTerm], function (expansion) { return expansion.toLowerCase() == highlight.toLowerCase(); }) != undefined);\n\t            }) || found;\n\t        }\n\t        return found;\n\t    };\n\t    QuickviewDocument.prototype.buildWordButton = function (wordState, window) {\n\t        var _this = this;\n\t        var wordHtml = Dom_1.$$('span');\n\t        wordHtml.addClass('coveo-term-for-quickview');\n\t        var quickviewName = Dom_1.$$('span');\n\t        quickviewName.addClass('coveo-term-for-quickview-name');\n\t        quickviewName.setHtml(wordState.word.text);\n\t        quickviewName.on('click', function () {\n\t            _this.navigate(wordState, false, window);\n\t        });\n\t        wordHtml.append(quickviewName.el);\n\t        var quickviewUpArrow = Dom_1.$$('span');\n\t        quickviewUpArrow.addClass('coveo-term-for-quickview-up-arrow');\n\t        var quickviewUpArrowIcon = Dom_1.$$('span');\n\t        quickviewUpArrowIcon.addClass('coveo-term-for-quickview-up-arrow-icon');\n\t        quickviewUpArrow.append(quickviewUpArrowIcon.el);\n\t        quickviewUpArrow.on('click', function () {\n\t            _this.navigate(wordState, true, window);\n\t        });\n\t        wordHtml.append(quickviewUpArrow.el);\n\t        var quickviewDownArrow = Dom_1.$$('span');\n\t        quickviewDownArrow.addClass('coveo-term-for-quickview-down-arrow');\n\t        var quickviewDownArrowIcon = Dom_1.$$('span');\n\t        quickviewDownArrowIcon.addClass('coveo-term-for-quickview-down-arrow-icon');\n\t        quickviewDownArrow.append(quickviewDownArrowIcon.el);\n\t        quickviewDownArrow.on('click', function () {\n\t            _this.navigate(wordState, false, window);\n\t        });\n\t        wordHtml.append(quickviewDownArrow.el);\n\t        wordHtml.el.style.backgroundColor = wordState.color;\n\t        wordHtml.el.style.borderColor = this.getSaturatedColor(wordState.color);\n\t        quickviewDownArrow.el.style.borderColor = this.getSaturatedColor(wordState.color);\n\t        return wordHtml.el;\n\t    };\n\t    QuickviewDocument.prototype.navigate = function (state, backward, window) {\n\t        var fromIndex = state.currentIndex;\n\t        var toIndex;\n\t        if (!backward) {\n\t            toIndex = fromIndex == state.word.count ? 1 : fromIndex + 1;\n\t        }\n\t        else {\n\t            toIndex = fromIndex <= 1 ? state.word.count : fromIndex - 1;\n\t        }\n\t        var scroll = this.getScrollingElement(window);\n\t        // Un-highlight any currently selected element\n\t        var current = Dom_1.$$(scroll).find('[id^=\"' + HIGHLIGHT_PREFIX + ':' + state.word.index + '.' + fromIndex + '\"]');\n\t        if (current) {\n\t            current.style.border = '';\n\t        }\n\t        // Find and highlight the new element.\n\t        var element = Dom_1.$$(window.document.body).find('[id^=\"' + HIGHLIGHT_PREFIX + ':' + state.word.index + '.' + toIndex + '\"]');\n\t        element.style.border = '1px dotted #333';\n\t        state.currentIndex = toIndex;\n\t        // pdf2html docs hide the non-visible frames by default, to speed up browsers.\n\t        // But this prevents keyword navigation from working so we must force show it. This\n\t        // is done by adding the 'opened' class to it (defined by pdf2html).\n\t        if (this.isNewQuickviewDocument(window)) {\n\t            var pdf = Dom_1.$$(element).closest('.pc');\n\t            Dom_1.$$(pdf).addClass('opened');\n\t        }\n\t        element.scrollIntoView();\n\t        // iOS on Safari might scroll the whole modal box body when we do this,\n\t        // so give it a nudge in the right direction.\n\t        var body = this.iframe.closest('.coveo-body');\n\t        body.scrollLeft = 0;\n\t        body.scrollTop = 0;\n\t    };\n\t    QuickviewDocument.prototype.buildHeader = function () {\n\t        var header = Dom_1.$$('div');\n\t        header.addClass('coveo-quickview-header');\n\t        return header;\n\t    };\n\t    QuickviewDocument.prototype.buildIFrame = function () {\n\t        var iFrame = Dom_1.$$('iframe');\n\t        iFrame.setAttribute('sandbox', 'allow-same-origin');\n\t        var iFrameWrapper = Dom_1.$$('div');\n\t        iFrameWrapper.addClass('coveo-iframeWrapper');\n\t        iFrameWrapper.el.appendChild(iFrame.el);\n\t        return iFrameWrapper;\n\t    };\n\t    QuickviewDocument.prototype.getScrollingElement = function (iframeWindow) {\n\t        var found;\n\t        if (this.isNewQuickviewDocument(iframeWindow)) {\n\t            // 'New' quick views have a #page-container element generated by the pdf2html thing.\n\t            // This is the element we want to scroll on.\n\t            found = Dom_1.$$(iframeWindow.document.body).find('#page-container');\n\t        }\n\t        // If all else fails, we use the body\n\t        if (!found) {\n\t            found = Dom_1.$$(iframeWindow.document.body).el;\n\t        }\n\t        return found;\n\t    };\n\t    QuickviewDocument.prototype.isNewQuickviewDocument = function (iframeWindow) {\n\t        var meta = Dom_1.$$(iframeWindow.document.head).find('meta[name=\\'generator\\']');\n\t        return meta && meta.getAttribute('content') == 'pdf2htmlEX';\n\t    };\n\t    QuickviewDocument.prototype.handleTermsToHighlight = function (termsToHighlight, queryObject) {\n\t        var _this = this;\n\t        for (var term in this.result.termsToHighlight) {\n\t            delete this.result.termsToHighlight[term];\n\t        }\n\t        var query = '';\n\t        _.each(termsToHighlight, function (term) {\n\t            query += term + ' ';\n\t            _this.result.termsToHighlight[term] = new Array(term);\n\t        });\n\t        query = query.substring(0, query.length - 1);\n\t        queryObject.q = query;\n\t    };\n\t    QuickviewDocument.prototype.checkIfTermsToHighlightWereModified = function (termsToHighlight) {\n\t        if (!Utils_1.Utils.arrayEqual(termsToHighlight, _.keys(this.result.termsToHighlight))) {\n\t            this.termsToHighlightWereModified = true;\n\t        }\n\t    };\n\t    QuickviewDocument.prototype.getSaturatedColor = function (color) {\n\t        var r = parseInt(color.substring(4, 7));\n\t        var g = parseInt(color.substring(9, 12));\n\t        var b = parseInt(color.substring(14, 17));\n\t        var hsv = ColorUtils_1.ColorUtils.rgbToHsv(r, g, b);\n\t        hsv[1] *= 2;\n\t        if (hsv[1] > 1) {\n\t            hsv[1] = 1;\n\t        }\n\t        var rgb = ColorUtils_1.ColorUtils.hsvToRgb(hsv[0], hsv[1], hsv[2]);\n\t        return 'rgb(' + rgb[0].toString() + ', ' + rgb[1].toString() + ', ' + rgb[2].toString() + ')';\n\t    };\n\t    return QuickviewDocument;\n\t}(Component_1.Component));\n\tQuickviewDocument.ID = 'QuickviewDocument';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tQuickviewDocument.options = {\n\t    /**\n\t     * Specifies the maximum document size (the preview) that should be returned by the index.\n\t     *\n\t     * By default its value is 0, and the whole preview is returned.\n\t     */\n\t    maximumDocumentSize: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 0, min: 0 }),\n\t};\n\texports.QuickviewDocument = QuickviewDocument;\n\tInitialization_1.Initialization.registerAutoCreateComponent(QuickviewDocument);\n\n\n/***/ },\n/* 183 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DefaultResultTemplate_1 = __webpack_require__(118);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar ResultLayoutEvents_1 = __webpack_require__(52);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar Recommendation_1 = __webpack_require__(134);\n\tvar DefaultRecommendationTemplate_1 = __webpack_require__(184);\n\tvar TemplateList_1 = __webpack_require__(120);\n\tvar TemplateCache_1 = __webpack_require__(112);\n\tvar ResponsiveDefaultResultTemplate_1 = __webpack_require__(185);\n\tvar _ = __webpack_require__(16);\n\tvar RegisteredNamedMethods_1 = __webpack_require__(107);\n\t/**\n\t * The ResultList component is responsible for displaying the results of the current query using one or more result\n\t * templates (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t *\n\t * This component supports many additional features, such as infinite scrolling.\n\t */\n\tvar ResultList = (function (_super) {\n\t    __extends(ResultList, _super);\n\t    /**\n\t     * Creates a new ResultList component. Binds various event related to queries (e.g., on querySuccess ->\n\t     * renderResults). Binds scroll event if {@link ResultList.options.enableInfiniteScroll} is `true`.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultList component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param elementClassId The class that this component should instantiate. Components that extend the base ResultList\n\t     * use this. Default value is `CoveoResultList`.\n\t     */\n\t    function ResultList(element, options, bindings, elementClassId) {\n\t        if (elementClassId === void 0) { elementClassId = ResultList.ID; }\n\t        var _this = _super.call(this, element, elementClassId, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.currentlyDisplayedResults = [];\n\t        _this.reachedTheEndOfResults = false;\n\t        // This variable serves to block some setup where the framework fails to correctly identify the \"real\" scrolling container.\n\t        // Since it's not technically feasible to correctly identify the scrolling container in every possible scenario without some very complex logic, we instead try to add some kind of mechanism to\n\t        // block runaway requests where UI will keep asking more results in the index, eventually bringing the browser to it's knee.\n\t        // Those successive request are needed in \"displayMoreResults\" to ensure we fill the scrolling container correctly.\n\t        // Since the container is not identified correctly, it is never \"full\", so we keep asking for more.\n\t        // It is reset every time the user actually scroll the container manually.\n\t        _this.successiveScrollCount = 0;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultList, options);\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(_this.options);\n\t        Assert_1.Assert.exists(_this.options.resultContainer);\n\t        Assert_1.Assert.exists(_this.options.resultTemplate);\n\t        Assert_1.Assert.exists(_this.options.waitAnimationContainer);\n\t        Assert_1.Assert.exists(_this.options.infiniteScrollContainer);\n\t        _this.showOrHideElementsDependingOnState(false, false);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, function (args) { return _this.handleNewQuery(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function (args) { return _this.handleDuringQuery(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (args) { return _this.handleQueryError(); });\n\t        Dom_1.$$(_this.root).on(ResultListEvents_1.ResultListEvents.changeLayout, function (e, args) { return _this.handleChangeLayout(args); });\n\t        if (_this.options.enableInfiniteScroll) {\n\t            _this.handlePageChanged();\n\t            _this.bind.on(_this.options.infiniteScrollContainer, 'scroll', function (e) {\n\t                _this.successiveScrollCount = 0;\n\t                _this.handleScrollOfResultList();\n\t            });\n\t        }\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.FIRST, function () { return _this.handlePageChanged(); });\n\t        Dom_1.$$(_this.options.resultContainer).addClass('coveo-result-list-container');\n\t        if (_this.searchInterface.isNewDesign()) {\n\t            _this.setupTemplatesVersusLayouts();\n\t            Dom_1.$$(_this.root).on(ResultLayoutEvents_1.ResultLayoutEvents.populateResultLayout, function (e, args) { return args.layouts.push(_this.options.layout); });\n\t        }\n\t        return _this;\n\t    }\n\t    ResultList.getDefaultTemplate = function (e) {\n\t        var template = ResultList.loadTemplatesFromCache();\n\t        if (template != null) {\n\t            return template;\n\t        }\n\t        var component = Component_1.Component.get(e);\n\t        if (component.searchInterface instanceof Recommendation_1.Recommendation) {\n\t            return new DefaultRecommendationTemplate_1.DefaultRecommendationTemplate();\n\t        }\n\t        return new DefaultResultTemplate_1.DefaultResultTemplate();\n\t    };\n\t    ResultList.loadTemplatesFromCache = function () {\n\t        var pageTemplateNames = TemplateCache_1.TemplateCache.getResultListTemplateNames();\n\t        if (pageTemplateNames.length > 0) {\n\t            return new TemplateList_1.TemplateList(_.compact(_.map(pageTemplateNames, function (templateName) { return TemplateCache_1.TemplateCache.getTemplate(templateName); })));\n\t        }\n\t        return null;\n\t    };\n\t    /**\n\t     * Get the fields needed to be automatically included in the query for this result list.\n\t     * @returns {string[]}\n\t     */\n\t    ResultList.prototype.getAutoSelectedFieldsToInclude = function () {\n\t        return _.chain(this.options.resultTemplate.getFields())\n\t            .concat(this.getMinimalFieldsToInclude())\n\t            .compact()\n\t            .unique()\n\t            .value();\n\t    };\n\t    ResultList.prototype.setupTemplatesVersusLayouts = function () {\n\t        var _this = this;\n\t        var layoutClassToAdd = \"coveo-\" + this.options.layout + \"-layout-container\";\n\t        Dom_1.$$(this.options.resultContainer).addClass(layoutClassToAdd);\n\t        // A TemplateList is the scenario where the result template are directly embedded inside the ResultList\n\t        // This is the typical scenario when a page gets created by the interface editor, for example.\n\t        // In that case, we try to stick closely that what is actually configured inside the page, and do no \"special magic\".\n\t        // Stick to the \"hardcoded\" configuration present in the page.\n\t        // We only add the correct layout options if it has not been set manually.\n\t        if (this.options.resultTemplate instanceof TemplateList_1.TemplateList) {\n\t            _.each(this.options.resultTemplate.templates, function (tmpl) {\n\t                if (!tmpl.layout) {\n\t                    tmpl.layout = _this.options.layout;\n\t                }\n\t            });\n\t        }\n\t        else if (this.options.resultTemplate instanceof DefaultResultTemplate_1.DefaultResultTemplate && this.options.layout == 'list') {\n\t            ResponsiveDefaultResultTemplate_1.ResponsiveDefaultResultTemplate.init(this.root, this, this.options);\n\t        }\n\t    };\n\t    /**\n\t     * Empties the current result list content and appends the given array of HTMLElement.\n\t     *\n\t     * Can append to existing elements in the result list, or replace them.\n\t     *\n\t     * Triggers the `newResultsDisplayed` and `newResultDisplayed` events.\n\t     * @param resultsElement\n\t     * @param append\n\t     */\n\t    ResultList.prototype.renderResults = function (resultsElement, append) {\n\t        var _this = this;\n\t        if (append === void 0) { append = false; }\n\t        if (!append) {\n\t            this.options.resultContainer.innerHTML = '';\n\t        }\n\t        _.each(resultsElement, function (resultElement) {\n\t            _this.options.resultContainer.appendChild(resultElement);\n\t            _this.triggerNewResultDisplayed(Component_1.Component.getResult(resultElement), resultElement);\n\t        });\n\t        if (this.options.layout == 'card' && !this.options.enableInfiniteScroll) {\n\t            // Used to prevent last card from spanning the grid's whole width\n\t            _.times(3, function () { return _this.options.resultContainer.appendChild(Dom_1.$$('div').el); });\n\t        }\n\t        this.triggerNewResultsDisplayed();\n\t    };\n\t    /**\n\t     * Builds and returns an array of HTMLElement with the given result set.\n\t     * @param results the result set to build an array of HTMLElement from.\n\t     */\n\t    ResultList.prototype.buildResults = function (results) {\n\t        var _this = this;\n\t        var res = [];\n\t        _.each(results.results, function (result) {\n\t            var resultElement = _this.buildResult(result);\n\t            if (resultElement != null) {\n\t                res.push(resultElement);\n\t            }\n\t        });\n\t        ResultList.resultCurrentlyBeingRendered = null;\n\t        return res;\n\t    };\n\t    /**\n\t     * Builds and returns an HTMLElement for the given result.\n\t     * @param result the result to build an HTMLElement from.\n\t     * @returns {HTMLElement}\n\t     */\n\t    ResultList.prototype.buildResult = function (result) {\n\t        Assert_1.Assert.exists(result);\n\t        QueryUtils_1.QueryUtils.setStateObjectOnQueryResult(this.queryStateModel.get(), result);\n\t        QueryUtils_1.QueryUtils.setSearchInterfaceObjectOnQueryResult(this.searchInterface, result);\n\t        ResultList.resultCurrentlyBeingRendered = result;\n\t        var resultElement = this.options.resultTemplate.instantiateToElement(result, {\n\t            wrapInDiv: true,\n\t            checkCondition: true,\n\t            currentLayout: this.options.layout,\n\t            responsiveComponents: this.searchInterface.responsiveComponents\n\t        });\n\t        if (resultElement != null) {\n\t            Component_1.Component.bindResultToElement(resultElement, result);\n\t            Dom_1.$$(resultElement).addClass('');\n\t        }\n\t        this.autoCreateComponentsInsideResult(resultElement, result);\n\t        return resultElement;\n\t    };\n\t    /**\n\t     * Executes a query to fetch new results. After the query returns, renders the new results.\n\t     *\n\t     * Asserts that there are more results to display by verifying whether the last query has returned as many results as\n\t     * requested.\n\t     *\n\t     * Asserts that the ResultList is not currently fetching results.\n\t     * @param count The number of results to fetch and display.\n\t     */\n\t    ResultList.prototype.displayMoreResults = function (count) {\n\t        var _this = this;\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, count);\n\t        if (this.isCurrentlyFetchingMoreResults()) {\n\t            this.logger.warn('Ignoring request to display more results since we\\'re already doing so');\n\t            return;\n\t        }\n\t        if (!this.hasPotentiallyMoreResultsToDisplay()) {\n\t            this.logger.warn('Ignoring request to display more results since we know there aren\\'t more to display');\n\t            return;\n\t        }\n\t        if (this.options.enableInfiniteScrollWaitingAnimation) {\n\t            this.showWaitingAnimationForInfiniteScrolling();\n\t        }\n\t        this.fetchingMoreResults = this.queryController.fetchMore(count);\n\t        this.fetchingMoreResults.then(function (data) {\n\t            Assert_1.Assert.exists(data);\n\t            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.pagerScrolling, {}, _this.element);\n\t            var results = data.results;\n\t            _this.reachedTheEndOfResults = count > data.results.length;\n\t            _this.renderResults(_this.buildResults(data), true);\n\t            _.each(results, function (result) {\n\t                _this.currentlyDisplayedResults.push(result);\n\t            });\n\t            _this.triggerNewResultsDisplayed();\n\t        });\n\t        this.fetchingMoreResults.then(function () {\n\t            _this.hideWaitingAnimationForInfiniteScrolling();\n\t            _this.fetchingMoreResults = undefined;\n\t            Defer_1.Defer.defer(function () {\n\t                _this.successiveScrollCount++;\n\t                if (_this.successiveScrollCount <= ResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS) {\n\t                    _this.handleScrollOfResultList();\n\t                }\n\t                else {\n\t                    _this.logger.info(\"Result list has triggered 5 consecutive queries to try and fill up the scrolling container, but it is still unable to do so\");\n\t                    _this.logger.info(\"Try explicitly setting the 'data-infinite-scroll-container-selector' option on the result list. See : https://coveo.github.io/search-ui/components/resultlist.html#options.infinitescrollcontainer\");\n\t                }\n\t            });\n\t        });\n\t    };\n\t    /**\n\t     * Gets the list of currently displayed result.\n\t     * @returns {IQueryResult[]}\n\t     */\n\t    ResultList.prototype.getDisplayedResults = function () {\n\t        return this.currentlyDisplayedResults;\n\t    };\n\t    /**\n\t     * Gets the list of currently displayed result HTMLElement.\n\t     * @returns {HTMLElement[]}\n\t     */\n\t    ResultList.prototype.getDisplayedResultsElements = function () {\n\t        return Dom_1.$$(this.options.resultContainer).findAll('.CoveoResult');\n\t    };\n\t    ResultList.prototype.enable = function () {\n\t        _super.prototype.enable.call(this);\n\t        Dom_1.$$(this.element).removeClass('coveo-hidden');\n\t    };\n\t    ResultList.prototype.disable = function () {\n\t        _super.prototype.disable.call(this);\n\t        Dom_1.$$(this.element).addClass('coveo-hidden');\n\t    };\n\t    ResultList.prototype.autoCreateComponentsInsideResult = function (element, result) {\n\t        Assert_1.Assert.exists(element);\n\t        var initOptions = this.searchInterface.options.originalOptionsObject;\n\t        var resultComponentBindings = _.extend({}, this.getBindings(), {\n\t            resultElement: element\n\t        });\n\t        var initParameters = {\n\t            options: initOptions,\n\t            bindings: resultComponentBindings,\n\t            result: result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t    };\n\t    ResultList.prototype.triggerNewResultDisplayed = function (result, resultElement) {\n\t        var args = {\n\t            result: result,\n\t            item: resultElement\n\t        };\n\t        Dom_1.$$(this.element).trigger(ResultListEvents_1.ResultListEvents.newResultDisplayed, args);\n\t    };\n\t    ResultList.prototype.triggerNewResultsDisplayed = function () {\n\t        Dom_1.$$(this.element).trigger(ResultListEvents_1.ResultListEvents.newResultsDisplayed, {});\n\t    };\n\t    ResultList.prototype.handleDuringQuery = function () {\n\t        this.logger.trace('Emptying the result container');\n\t        this.cancelFetchingMoreResultsIfNeeded();\n\t        this.showWaitingAnimation();\n\t        this.showOrHideElementsDependingOnState(false, false);\n\t    };\n\t    ResultList.prototype.handleQueryError = function () {\n\t        this.hideWaitingAnimation();\n\t        Dom_1.$$(this.options.resultContainer).empty();\n\t        this.currentlyDisplayedResults = [];\n\t    };\n\t    ResultList.prototype.handleQuerySuccess = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.results);\n\t        var results = data.results;\n\t        this.logger.trace('Received query results from new query', results);\n\t        this.hideWaitingAnimation();\n\t        ResultList.resultCurrentlyBeingRendered = undefined;\n\t        this.currentlyDisplayedResults = [];\n\t        this.renderResults(this.buildResults(data.results));\n\t        this.currentlyDisplayedResults = results.results;\n\t        this.reachedTheEndOfResults = false;\n\t        this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length != 0);\n\t        if (DeviceUtils_1.DeviceUtils.isMobileDevice() && this.options.mobileScrollContainer != undefined) {\n\t            this.options.mobileScrollContainer.scrollTop = 0;\n\t        }\n\t        if (this.options.enableInfiniteScroll && results.results.length == data.queryBuilder.numberOfResults) {\n\t            // This will check right away if we need to add more results to make the scroll container full & scrolling.\n\t            this.scrollBackToTop();\n\t            this.handleScrollOfResultList();\n\t        }\n\t    };\n\t    ResultList.prototype.handleScrollOfResultList = function () {\n\t        if (this.isCurrentlyFetchingMoreResults() || !this.options.enableInfiniteScroll) {\n\t            return;\n\t        }\n\t        if (this.isScrollingOfResultListAlmostAtTheBottom() && this.hasPotentiallyMoreResultsToDisplay()) {\n\t            this.displayMoreResults(this.options.infiniteScrollPageSize);\n\t        }\n\t    };\n\t    ResultList.prototype.handlePageChanged = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function () {\n\t            setTimeout(function () {\n\t                _this.scrollBackToTop();\n\t            }, 0);\n\t        });\n\t    };\n\t    ResultList.prototype.scrollBackToTop = function () {\n\t        if (this.options.infiniteScrollContainer instanceof Window) {\n\t            var win = this.options.infiniteScrollContainer;\n\t            win.scrollTo(0, 0);\n\t        }\n\t        else {\n\t            var el = this.options.infiniteScrollContainer;\n\t            el.scrollTop = 0;\n\t        }\n\t    };\n\t    ResultList.prototype.handleNewQuery = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-hidden');\n\t        ResultList.resultCurrentlyBeingRendered = undefined;\n\t    };\n\t    ResultList.prototype.handleBuildingQuery = function (args) {\n\t        var _this = this;\n\t        if (this.options.fieldsToInclude != null) {\n\t            // remove the @\n\t            args.queryBuilder.addFieldsToInclude(_.map(this.options.fieldsToInclude, function (field) { return field.substr(1); }));\n\t        }\n\t        if (this.options.autoSelectFieldsToInclude) {\n\t            var otherResultListsElements = _.reject(Dom_1.$$(this.root).findAll(\".\" + Component_1.Component.computeCssClassName(ResultList)), function (resultListElement) { return resultListElement == _this.element; });\n\t            var otherFields = _.flatten(_.map(otherResultListsElements, function (otherResultListElement) {\n\t                var otherResultListInstance = RegisteredNamedMethods_1.get(otherResultListElement);\n\t                if (otherResultListInstance) {\n\t                    return otherResultListInstance.getAutoSelectedFieldsToInclude();\n\t                }\n\t                else {\n\t                    return [];\n\t                }\n\t            }));\n\t            args.queryBuilder.addRequiredFields(_.unique(otherFields.concat(this.getAutoSelectedFieldsToInclude())));\n\t            args.queryBuilder.includeRequiredFields = true;\n\t        }\n\t    };\n\t    ResultList.prototype.handleChangeLayout = function (args) {\n\t        var _this = this;\n\t        if (args.layout === this.options.layout) {\n\t            this.enable();\n\t            this.options.resultTemplate.layout = this.options.layout;\n\t            if (args.results) {\n\t                Defer_1.Defer.defer(function () {\n\t                    _this.renderResults(_this.buildResults(args.results));\n\t                });\n\t            }\n\t        }\n\t        else {\n\t            this.disable();\n\t        }\n\t    };\n\t    ResultList.prototype.isCurrentlyFetchingMoreResults = function () {\n\t        return Utils_1.Utils.exists(this.fetchingMoreResults);\n\t    };\n\t    ResultList.prototype.getMinimalFieldsToInclude = function () {\n\t        // these fields are needed for analytics click event\n\t        return ['author', 'language', 'urihash', 'objecttype', 'collection', 'source', 'language', 'permanentid'];\n\t    };\n\t    ResultList.prototype.isScrollingOfResultListAlmostAtTheBottom = function () {\n\t        // this is in a try catch because the unit test fail otherwise (Window does not exist for phantom js in the console)\n\t        var isWindow;\n\t        try {\n\t            isWindow = this.options.infiniteScrollContainer instanceof Window;\n\t        }\n\t        catch (e) {\n\t            isWindow = false;\n\t        }\n\t        return isWindow ? this.isScrollAtBottomForWindowElement() : this.isScrollAtBottomForHtmlElement();\n\t    };\n\t    ResultList.prototype.isScrollAtBottomForWindowElement = function () {\n\t        var win = new Dom_1.Win(window);\n\t        var windowHeight = win.height();\n\t        var scrollTop = win.scrollY();\n\t        var bodyHeight = new Dom_1.Doc(document).height();\n\t        return bodyHeight - (windowHeight + scrollTop) < windowHeight / 2;\n\t    };\n\t    ResultList.prototype.isScrollAtBottomForHtmlElement = function () {\n\t        var el = this.options.infiniteScrollContainer;\n\t        var elementHeight = el.clientHeight;\n\t        var scrollHeight = el.scrollHeight;\n\t        var bottomPosition = el.scrollTop + elementHeight;\n\t        return (scrollHeight - bottomPosition) < elementHeight / 2;\n\t    };\n\t    ResultList.prototype.hasPotentiallyMoreResultsToDisplay = function () {\n\t        return this.currentlyDisplayedResults.length > 0 && !this.reachedTheEndOfResults;\n\t    };\n\t    ResultList.prototype.cancelFetchingMoreResultsIfNeeded = function () {\n\t        if (this.isCurrentlyFetchingMoreResults()) {\n\t            this.logger.trace('Cancelling fetching more results');\n\t            Promise.reject(this.fetchingMoreResults);\n\t            this.fetchingMoreResults = undefined;\n\t        }\n\t    };\n\t    ResultList.prototype.showOrHideElementsDependingOnState = function (hasQuery, hasResults) {\n\t        var showIfQuery = Dom_1.$$(this.element).findAll('.coveo-show-if-query');\n\t        var showIfNoQuery = Dom_1.$$(this.element).findAll('.coveo-show-if-no-query');\n\t        var showIfResults = Dom_1.$$(this.element).findAll('.coveo-show-if-results');\n\t        var showIfNoResults = Dom_1.$$(this.element).findAll('.coveo-show-if-no-results');\n\t        _.each(showIfQuery, function (s) {\n\t            Dom_1.$$(s).toggle(hasQuery);\n\t        });\n\t        _.each(showIfNoQuery, function (s) {\n\t            Dom_1.$$(s).toggle(!hasQuery);\n\t        });\n\t        _.each(showIfResults, function (s) {\n\t            Dom_1.$$(s).toggle(hasQuery && hasResults);\n\t        });\n\t        _.each(showIfNoResults, function (s) {\n\t            Dom_1.$$(s).toggle(hasQuery && !hasResults);\n\t        });\n\t    };\n\t    ResultList.prototype.showWaitingAnimation = function () {\n\t        switch (this.options.waitAnimation.toLowerCase()) {\n\t            case 'fade':\n\t                Dom_1.$$(this.options.waitAnimationContainer).addClass('coveo-fade-out');\n\t                break;\n\t            case 'spinner':\n\t                _.each(this.options.resultContainer.children, function (child) {\n\t                    Dom_1.$$(child).hide();\n\t                });\n\t                if (Dom_1.$$(this.options.waitAnimationContainer).find('.coveo-wait-animation') == undefined) {\n\t                    this.options.waitAnimationContainer.appendChild(DomUtils_1.DomUtils.getBasicLoadingAnimation());\n\t                }\n\t                break;\n\t        }\n\t    };\n\t    ResultList.prototype.hideWaitingAnimation = function () {\n\t        switch (this.options.waitAnimation.toLowerCase()) {\n\t            case 'fade':\n\t                Dom_1.$$(this.options.waitAnimationContainer).removeClass('coveo-fade-out');\n\t                break;\n\t            case 'spinner':\n\t                var spinner = Dom_1.$$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n\t                if (spinner) {\n\t                    Dom_1.$$(spinner).detach();\n\t                }\n\t                break;\n\t        }\n\t    };\n\t    ResultList.prototype.showWaitingAnimationForInfiniteScrolling = function () {\n\t        var spinner = DomUtils_1.DomUtils.getLoadingSpinner();\n\t        if (this.options.layout == 'card' && this.options.enableInfiniteScroll) {\n\t            var spinnerContainer = Dom_1.$$('div', {\n\t                className: 'coveo-loading-spinner-container'\n\t            });\n\t            spinnerContainer.append(spinner);\n\t            this.options.waitAnimationContainer.appendChild(spinnerContainer.el);\n\t        }\n\t        else {\n\t            this.options.waitAnimationContainer.appendChild(DomUtils_1.DomUtils.getLoadingSpinner());\n\t        }\n\t    };\n\t    ResultList.prototype.hideWaitingAnimationForInfiniteScrolling = function () {\n\t        var spinner = Dom_1.$$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n\t        if (spinner) {\n\t            Dom_1.$$(spinner).detach();\n\t        }\n\t    };\n\t    return ResultList;\n\t}(Component_1.Component));\n\tResultList.ID = 'ResultList';\n\t/**\n\t * The options for the ResultList\n\t * @componentOptions\n\t */\n\tResultList.options = {\n\t    /**\n\t     * Specifies the element within which to insert the rendered templates for results.\n\t     *\n\t     * Performing a new query clears the content of this element.\n\t     *\n\t     * You can change the container by specifying its selector (e.g.,\n\t     * `data-result-container-selector='#someCssSelector'`).\n\t     *\n\t     * If you specify no value for this option, a `div` element will be dynamically created and appended to the result\n\t     * list. This element will then be used as a result container.\n\t     */\n\t    resultContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({\n\t        defaultFunction: function (element) {\n\t            var d = document.createElement('div');\n\t            element.appendChild(d);\n\t            return d;\n\t        }\n\t    }),\n\t    resultTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption({ defaultFunction: ResultList.getDefaultTemplate }),\n\t    /**\n\t     * Specifies the type of animation to display while waiting for a query to return.\n\t     *\n\t     * The possible values are:\n\t     * - `fade`: Fades out the current list of results while the query is executing.\n\t     * - `spinner`: Shows a spinning animation while the query is executing.\n\t     * - `none`: Use no animation during queries.\n\t     *\n\t     * See also {@link ResultList.options.waitAnimationContainer}.\n\t     *\n\t     * Default value is `none`.\n\t     */\n\t    waitAnimation: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'none' }),\n\t    /**\n\t     * Specifies the element inside which to display the {@link ResultList.options.waitAnimation}.\n\t     *\n\t     * You can change this by specifying a CSS selector (e.g.,\n\t     * `data-wait-animation-container-selector='#someCssSelector'`).\n\t     *\n\t     * Default value is the value of {@link ResultList.options.resultContainer}.\n\t     */\n\t    waitAnimationContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({ postProcessing: function (value, options) { return value || options.resultContainer; } }),\n\t    /**\n\t     * Specifies whether to automatically retrieve an additional page of results and append it to the\n\t     * results that the ResultList is currently displaying when the user scrolls down to the bottom of the infinite\n\t     * scroll container.\n\t     *\n\t     * See also {@link ResultList.options.infiniteScrollPageSize}, {@link ResultList.options.infiniteScrollContainer}\n\t     * and {@link ResultList.options.enableInfiniteScrollWaitingAnimation}.\n\t     *\n\t     * It is important to specify the {@link ResultList.options.infiniteScrollContainer} manually if you want the scrolling\n\t     * element to be something else than the default `window` element.\n\t     * Otherwise, you might get in a weird state where the framework will rapidly trigger multiple successive query.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableInfiniteScroll: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies the number of additional results to fetch\n\t     * when the user scrolls down to the bottom of the {@link ResultList.options.infiniteScrollContainer}.\n\t     *\n\t     * Default value is `10`. Minimum value is `1`.\n\t     */\n\t    infiniteScrollPageSize: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 10, min: 1, depend: 'enableInfiniteScroll' }),\n\t    /**\n\t     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies the element that triggers the fetching of\n\t     * additional results when the end user scrolls down to its bottom.\n\t     *\n\t     * You can change the container by specifying its selector (e.g.,\n\t     * `data-infinite-scroll-container-selector='#someCssSelector'`).\n\t     *\n\t     * By default, the framework uses the first vertically scrollable parent element it finds, starting from the\n\t     * ResultList element itself. A vertically scrollable element is an element whose CSS `overflow-y` attribute is\n\t     * `scroll`.\n\t     *\n\t     * This implies that if the framework can find no scrollable parent, it uses the window itself as a scrollable\n\t     * container.\n\t     *\n\t     * This heuristic is not perfect, for technical reasons. There are always some corner case CSS combination which the framework will\n\t     * not be able to detect correctly as 'scrollable'.\n\t     *\n\t     * It is highly recommended that you manually set this option if you wish to have something else than `window` be the scrollable element.\n\t     */\n\t    infiniteScrollContainer: ComponentOptions_1.ComponentOptions.buildChildHtmlElementOption({ depend: 'enableInfiniteScroll', defaultFunction: function (element) { return ComponentOptions_1.ComponentOptions.findParentScrolling(element); } }),\n\t    /**\n\t     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies whether to display the\n\t     * {@link ResultList.options.waitAnimation} while fetching additional results.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableInfiniteScrollWaitingAnimation: ComponentOptions_1.ComponentOptions.buildBooleanOption({ depend: 'enableInfiniteScroll', defaultValue: true }),\n\t    mobileScrollContainer: ComponentOptions_1.ComponentOptions.buildSelectorOption({ defaultFunction: function () { return document.querySelector('.coveo-results-column'); } }),\n\t    /**\n\t     * Specifies a list of fields to include in the query.\n\t     *\n\t     * Specifying a list of values for this option ensures that the Search API does not send fields that are unnecessary\n\t     * for the UI to function.\n\t     *\n\t     * See also {@link ResultList.options.autoSelectFieldsToInclude}.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    fieldsToInclude: ComponentOptions_1.ComponentOptions.buildFieldsOption({ includeInResults: true }),\n\t    /**\n\t     * Specifies whether the ResultList should scan its template and discover which fields it needs to render all\n\t     * results.\n\t     *\n\t     * Setting this option to `true` ensures that the Search API does not send fields that are unnecessary for the UI to\n\t     * function.\n\t     *\n\t     * See also {@link ResultList.options.fieldsToInclude}.\n\t     *\n\t     * Default value is `false`.\n\t     *\n\t     * **Note:**\n\t     * > Many interfaces created with the Interface Editor explicitly set this option to `true`.\n\t     */\n\t    autoSelectFieldsToInclude: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies the layout to use for displaying the results within this ResultList. Specifying a value for this option\n\t     * automatically populates a {@link ResultLayout} component with a switcher for the layout.\n\t     *\n\t     * For example, if there are two {@link ResultList} components in the page, one with its\n\t     * {@link ResultList.options.layout} set to `list` and the other with the same option set to `card`, then the\n\t     * ResultLayout component will render two buttons respectively titled **List** and **Card**.\n\t     *\n\t     * See the {@link ValidLayout} type for the list of possible values.\n\t     *\n\t     * Default value is `list`.\n\t     */\n\t    layout: ComponentOptions_1.ComponentOptions.buildStringOption({\n\t        defaultValue: 'list',\n\t        required: true,\n\t    })\n\t};\n\tResultList.resultCurrentlyBeingRendered = null;\n\tResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS = 5;\n\texports.ResultList = ResultList;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultList);\n\n\n/***/ },\n/* 184 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar DefaultRecommendationTemplate = (function (_super) {\n\t    __extends(DefaultRecommendationTemplate, _super);\n\t    function DefaultRecommendationTemplate() {\n\t        return _super !== null && _super.apply(this, arguments) || this;\n\t    }\n\t    DefaultRecommendationTemplate.prototype.instantiateToString = function (object) {\n\t        var template = \"<div class=\\\"coveo-result-frame\\\">\\n        <div class=\\\"coveo-result-row\\\">\\n          <div class=\\\"coveo-result-cell\\\" style=\\\"width:40px;text-align:center;vertical-align:middle;\\\">\\n            <span class=\\\"CoveoIcon\\\" data-small=\\\"true\\\">\\n            </span>\\n          </div>\\n          <div class=\\\"coveo-result-cell\\\" style=\\\"padding:0 0 3px 5px;vertical-align:middle\\\">\\n            <div class=\\\"coveo-result-row\\\">\\n              <div class=\\\"coveo-result-cell\\\" style=\\\"font-size:10pt;\\\">\\n                <a class=\\\"CoveoResultLink\\\" style=\\\"display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis\\\">\\n                </a>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\";\n\t        return template;\n\t    };\n\t    DefaultRecommendationTemplate.prototype.instantiateToElement = function (object) {\n\t        var div = document.createElement('div');\n\t        div.innerHTML = this.instantiateToString(object);\n\t        return div;\n\t    };\n\t    return DefaultRecommendationTemplate;\n\t}(Template_1.Template));\n\texports.DefaultRecommendationTemplate = DefaultRecommendationTemplate;\n\n\n/***/ },\n/* 185 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar ResultList_1 = __webpack_require__(183);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar ResponsiveDefaultResultTemplate = (function () {\n\t    function ResponsiveDefaultResultTemplate(coveoRoot, ID, options, responsiveDropdown) {\n\t        this.coveoRoot = coveoRoot;\n\t        this.ID = ID;\n\t        this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n\t        this.currentMode = 'large';\n\t    }\n\t    ResponsiveDefaultResultTemplate.init = function (root, component, options) {\n\t        if (!Dom_1.$$(root).find(\".\" + Component_1.Component.computeCssClassName(ResultList_1.ResultList))) {\n\t            var logger = new Logger_1.Logger('ResponsiveDefaultResultTemplate');\n\t            logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n\t            return;\n\t        }\n\t        ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveDefaultResultTemplate, Dom_1.$$(root), ResultList_1.ResultList.ID, component, options);\n\t    };\n\t    ResponsiveDefaultResultTemplate.prototype.registerComponent = function (accept) {\n\t        if (accept instanceof ResultList_1.ResultList) {\n\t            this.resultList = accept;\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    ResponsiveDefaultResultTemplate.prototype.handleResizeEvent = function () {\n\t        var lastResults = this.resultList.queryController.getLastResults();\n\t        if (this.needSmallMode()) {\n\t            Dom_1.$$(this.resultList.options.resultContainer).addClass('coveo-card-layout-container');\n\t            Dom_1.$$(this.resultList.options.resultContainer).removeClass(\"coveo-list-layout-container\");\n\t            if (this.currentMode != 'small') {\n\t                if (lastResults) {\n\t                    this.resultList.renderResults(this.resultList.buildResults(lastResults));\n\t                }\n\t                this.currentMode = 'small';\n\t            }\n\t        }\n\t        else {\n\t            Dom_1.$$(this.resultList.options.resultContainer).removeClass('coveo-card-layout-container');\n\t            Dom_1.$$(this.resultList.options.resultContainer).addClass(\"coveo-list-layout-container\");\n\t            if (this.currentMode != 'large') {\n\t                if (lastResults) {\n\t                    this.resultList.renderResults(this.resultList.buildResults(lastResults));\n\t                }\n\t                this.currentMode = 'large';\n\t            }\n\t        }\n\t    };\n\t    ResponsiveDefaultResultTemplate.prototype.needSmallMode = function () {\n\t        return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n\t    };\n\t    return ResponsiveDefaultResultTemplate;\n\t}());\n\texports.ResponsiveDefaultResultTemplate = ResponsiveDefaultResultTemplate;\n\n\n/***/ },\n/* 186 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Aggregate component allows to display the result on an aggregate operation on the index.\n\t *\n\t * It hooks itself to the query to add a new {@link IGroupByRequest}, then displays the result.\n\t */\n\tvar Aggregate = (function (_super) {\n\t    __extends(Aggregate, _super);\n\t    /**\n\t     * Creates a new Aggregate component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Aggregate component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Aggregate(element, options, bindings) {\n\t        var _this = _super.call(this, element, Aggregate.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Aggregate, options);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        Dom_1.$$(_this.element).hide();\n\t        return _this;\n\t    }\n\t    Aggregate.prototype.handleBuildingQuery = function (args) {\n\t        var request = {\n\t            field: this.options.field,\n\t            maximumNumberOfValues: 0,\n\t            computedFields: [{\n\t                    field: this.options.field,\n\t                    operation: this.options.operation\n\t                }]\n\t        };\n\t        this.index = args.queryBuilder.groupByRequests.length;\n\t        args.queryBuilder.groupByRequests.push(request);\n\t    };\n\t    Aggregate.prototype.handleQuerySuccess = function (args) {\n\t        if (_.isNumber(this.index) && args.results.groupByResults.length != 0) {\n\t            var gbr = args.results.groupByResults[this.index];\n\t            var aggregate = gbr.globalComputedFieldResults[0];\n\t            Dom_1.$$(this.element).text(Globalize.format(aggregate, this.options.format));\n\t            Dom_1.$$(this.element).show();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).hide();\n\t        }\n\t    };\n\t    return Aggregate;\n\t}(Component_1.Component));\n\tAggregate.ID = 'Aggregate';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tAggregate.options = {\n\t    /**\n\t     * Specifies the field on which to do the aggregate operation. This parameter is mandatory.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies the aggregate operation to perform.\n\t     *\n\t     * The possible values are:\n\t     * - `sum` - Computes the sum of the computed field values.\n\t     * - `average` - Computes the average of the computed field values.\n\t     * - `minimum` - Finds the minimum value of the computed field values.\n\t     * - `maximum` - Finds the maximum value of the computed field values.\n\t     *\n\t     * Default value is `sum`.\n\t     */\n\t    operation: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'sum' }),\n\t    /**\n\t     * Specifies how to format the value.\n\t     *\n\t     * The available formats are defined in the Globalize library (see\n\t     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-).\n\t     *\n\t     * The most commonly used formats are:\n\t     * - `c0` - Formats the value as a currency.\n\t     * - `n0` - Formats the value as an integer.\n\t     * - `n2` - Formats the value as a floating point with 2 decimal digits.\n\t     *\n\t     * Default value is `c0`.\n\t     */\n\t    format: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'c0' })\n\t};\n\texports.Aggregate = Aggregate;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Aggregate);\n\n\n/***/ },\n/* 187 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar StandaloneSearchInterfaceEvents_1 = __webpack_require__(56);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryboxQueryParameters_1 = __webpack_require__(188);\n\t/**\n\t * The Querybox component renders an input that the end user can interact with to enter and submit a query.\n\t *\n\t * When the user submits a query by hitting the **Enter** key, the Querybox component triggers a query and logs the\n\t * corresponding usage analytics data.\n\t *\n\t * For technical reasons, it is necessary to instantiate this component on a `div` element rather than directly on an\n\t * `input` element (i.e., `<div class='CoveoQuerybox'></div>` will work, but `<input class='CoveoQuerybox'></input>`\n\t * will not).\n\t *\n\t * See also the {@link Searchbox} component, which can automatically instantiate a Querybox component along with an\n\t * optional {@link SearchButton} component.\n\t */\n\tvar Querybox = (function (_super) {\n\t    __extends(Querybox, _super);\n\t    /**\n\t     * Creates a new Querybox. Creates a new `Coveo.Magicbox` instance and wraps the Magicbox methods (`onblur`,\n\t     * `onsubmit` etc.). Binds event on `buildingQuery` and on redirection (for standalone box).\n\t     * @param element The HTMLElement on which to instantiate the component. This cannot be an HTMLInputElement for\n\t     * technical reasons.\n\t     * @param options The options for the ResultLayout component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Querybox(element, options, bindings) {\n\t        var _this = _super.call(this, element, Querybox.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        if (element instanceof HTMLInputElement) {\n\t            _this.logger.error('Querybox cannot be used on an HTMLInputElement');\n\t        }\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Querybox, options);\n\t        _this.magicBox = Coveo.MagicBox.create(element, new Coveo.MagicBox.Grammar('Query', {\n\t            Query: '[Term*][Spaces?]',\n\t            Term: '[Spaces?][Word]',\n\t            Spaces: / +/,\n\t            Word: /[^ ]+/\n\t        }), {\n\t            inline: true\n\t        });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(StandaloneSearchInterfaceEvents_1.StandaloneSearchInterfaceEvents.beforeRedirect, function () { return _this.updateQueryState(); });\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.Q, function (args) { return _this.handleQueryStateChanged(args); });\n\t        if (_this.options.enableSearchAsYouType) {\n\t            Dom_1.$$(_this.element).addClass('coveo-search-as-you-type');\n\t            _this.magicBox.onchange = function () {\n\t                _this.searchAsYouType();\n\t            };\n\t        }\n\t        _this.magicBox.onsubmit = function () {\n\t            _this.submit();\n\t        };\n\t        _this.magicBox.onblur = function () {\n\t            _this.updateQueryState();\n\t        };\n\t        _this.magicBox.onclear = function () {\n\t            _this.updateQueryState();\n\t            if (_this.options.triggerQueryOnClear) {\n\t                _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxClear, {});\n\t                _this.triggerNewQuery(false);\n\t            }\n\t        };\n\t        if (_this.options.autoFocus) {\n\t            _this.magicBox.focus();\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Adds the current content of the input to the query and triggers a query if the current content of the input has\n\t     * changed since last submit.\n\t     *\n\t     * Also logs the `serachboxSubmit` event in the usage analytics.\n\t     */\n\t    Querybox.prototype.submit = function () {\n\t        this.magicBox.clearSuggestion();\n\t        this.updateQueryState();\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit, {});\n\t        this.triggerNewQuery(false);\n\t    };\n\t    /**\n\t     * Sets the content of the input.\n\t     *\n\t     * @param text The string to set in the input.\n\t     */\n\t    Querybox.prototype.setText = function (text) {\n\t        this.magicBox.setText(text);\n\t        this.updateQueryState();\n\t    };\n\t    /**\n\t     * Clears the content of the input.\n\t     */\n\t    Querybox.prototype.clear = function () {\n\t        this.magicBox.clear();\n\t    };\n\t    /**\n\t     * Gets the content of the input.\n\t     *\n\t     * @returns {string} The content of the input.\n\t     */\n\t    Querybox.prototype.getText = function () {\n\t        return this.magicBox.getText();\n\t    };\n\t    /**\n\t     * Gets the result from the input.\n\t     *\n\t     * @returns {Result} The result.\n\t     */\n\t    Querybox.prototype.getResult = function () {\n\t        return this.magicBox.getResult();\n\t    };\n\t    /**\n\t     * Gets the displayed result from the input.\n\t     *\n\t     * @returns {Result} The displayed result.\n\t     */\n\t    Querybox.prototype.getDisplayedResult = function () {\n\t        return this.magicBox.getDisplayedResult();\n\t    };\n\t    /**\n\t     * Gets the current cursor position in the input.\n\t     *\n\t     * @returns {number} The cursor position (index starts at 0).\n\t     */\n\t    Querybox.prototype.getCursor = function () {\n\t        return this.magicBox.getCursor();\n\t    };\n\t    /**\n\t     * Gets the result at cursor position.\n\t     *\n\t     * @param match {string | { (result): boolean }} The match condition.\n\t     *\n\t     * @returns {Result[]} The result.\n\t     */\n\t    Querybox.prototype.resultAtCursor = function (match) {\n\t        return this.magicBox.resultAtCursor(match);\n\t    };\n\t    Querybox.prototype.handleBuildingQuery = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        Assert_1.Assert.exists(args.queryBuilder);\n\t        this.updateQueryState();\n\t        this.lastQuery = this.magicBox.getText();\n\t        new QueryboxQueryParameters_1.QueryboxQueryParameters(this.options).addParameters(args.queryBuilder, this.lastQuery);\n\t    };\n\t    Querybox.prototype.triggerNewQuery = function (searchAsYouType) {\n\t        clearTimeout(this.searchAsYouTypeTimeout);\n\t        var text = this.magicBox.getText();\n\t        if (this.lastQuery != text && text != null) {\n\t            this.lastQuery = text;\n\t            this.queryController.executeQuery({\n\t                searchAsYouType: searchAsYouType,\n\t                logInActionsHistory: true\n\t            });\n\t        }\n\t    };\n\t    Querybox.prototype.updateQueryState = function () {\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, this.magicBox.getText());\n\t    };\n\t    Querybox.prototype.handleQueryStateChanged = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        var q = args.value;\n\t        if (q != this.magicBox.getText()) {\n\t            this.magicBox.setText(q);\n\t        }\n\t    };\n\t    Querybox.prototype.searchAsYouType = function () {\n\t        var _this = this;\n\t        clearTimeout(this.searchAsYouTypeTimeout);\n\t        this.searchAsYouTypeTimeout = setTimeout(function () {\n\t            _this.usageAnalytics.logSearchAsYouType(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxAsYouType, {});\n\t            _this.triggerNewQuery(true);\n\t        }, this.options.searchAsYouTypeDelay);\n\t    };\n\t    return Querybox;\n\t}(Component_1.Component));\n\tQuerybox.ID = 'Querybox';\n\t/**\n\t * The options for the Querybox.\n\t * @componentOptions\n\t */\n\tQuerybox.options = {\n\t    /**\n\t     * Specifies whether to enable the search-as-you-type feature.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableSearchAsYouType: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * If {@link Querybox.options.enableSearchAsYouType} is `true`, specifies the delay (in milliseconds) between a\n\t     * key press and a query being triggered.\n\t     *\n\t     * Default value is `500`. Minimum value is `0`\n\t     */\n\t    searchAsYouTypeDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 500, min: 0 }),\n\t    /**\n\t     * Specifies whether the Coveo Platform should try to interpret special query syntax such as field references in the\n\t     * query that the user enters in the Querybox (see\n\t     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t     *\n\t     * Setting this option to `true` also causes the query syntax in the Querybox to highlight.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableQuerySyntax: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether the Coveo Platform should expand keywords containing wildcard characters (`*`) to the possible\n\t     * matching keywords in order to broaden the query (see\n\t     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableWildcards: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether the Coveo Platform should expand keywords containing question mark characters (`?`) to the\n\t     * possible matching keywords in order to broaden the query (see\n\t     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableQuestionMarks: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to treat the `AND`, `NOT`, `OR` and\n\t     * `NEAR` keywords in the Querybox as query operators in the query even when the end user types them in lowercase.\n\t     * This option applies to all query operators (see\n\t     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t     *\n\t     * Default value is `false`.\n\t     *\n\t     * **Example:**\n\t     * > If this option and the enableQuerySyntax option are both `true`, then the Coveo Platform interprets the `near`\n\t     * > keyword in a query such as `service center near me` as a query operator (not as a query term).\n\t     *\n\t     * > Otherwise, if the enableQuerySyntax option is `true` and this option is `false`, the end user has to type the\n\t     * > `NEAR` keyword in uppercase in order for the Coveo Platform to interpret it as a query operator.\n\t     */\n\t    enableLowercaseOperators: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to automatically convert a basic expression containing at least a certain number of keywords\n\t     * (see {@link Querybox.options.partialMatchKeywords}) to a partial match expression, so that documents containing\n\t     * at least a certain subset of those keywords (see {@link Querybox.options.partialMatchThreshold}) will match the\n\t     * query.\n\t     *\n\t     * Default value is `false`.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * With the following markup configuration, if a basic expression contains at least 4 keywords, then documents\n\t     * containing at least 75% of those keywords (round up) will match the query.\n\t     *\n\t     * For instance, if the basic expression is `Coveo custom component configuration help`, then documents containing\n\t     * all 5 of those keywords, or 4 of them (75% of 5 rounded up) will match the query.\n\t     *\n\t     * ```html\n\t     * <div class='CoveoQuerybox' data-enable-partial-match='true' data-partial-match-keywords='4' data-partial-match-threshold='75%'></div>\n\t     * ```\n\t     */\n\t    enablePartialMatch: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * When {@link Querybox.options.enablePartialMatch} is `true`, specifies the minimum number of keywords that need to\n\t     * be present in the basic expression to convert this expression to a partial match expression.\n\t     *\n\t     * See also {@link Querybox.options.partialMatchThreshold}.\n\t     *\n\t     * Default value is `5`.\n\t     *\n\t     * **Note:**\n\t     * > Only the basic expression of the query (see {@link q}) can be converted to a partial match expression.\n\t     *\n\t     * **Example:**\n\t     * > If the partialMatchKeywords option is `7`, the basic expression will have to contain at least 7 keywords\n\t     * > to be converted to a partial match expression.\n\t     */\n\t    partialMatchKeywords: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 }),\n\t    /**\n\t     * When {@link Querybox.options.enablePartialMatch} is `true`, specifies an absolute or relative (percentage) value\n\t     * indicating the minimum number of partial match expression keywords a document must contain in order to match the\n\t     * query.\n\t     *\n\t     * See also {@link Querybox.options.partialMatchKeywords}.\n\t     *\n\t     * Default value is `50%`.\n\t     *\n\t     * **Note:**\n\t     * > The relative threshold is always rounded up to the nearest integer.\n\t     *\n\t     * **Examples:**\n\t     * > If the partialMatchThreshold option is `50%` and the partial match expression contains exactly 9 keywords, then\n\t     * > documents will have to contain at least 5 of those keywords to match the query (50% of 9, rounded up).\n\t     *\n\t     * > With the same configuration, if the partial match expression contains exactly 12 keywords, then documents will\n\t     * > have to contain at least 6 of those keywords to match the query (50% of 12).\n\t     *\n\t     * > If the partialMatchThreshold option is `2`, then documents will always have to contain at least 2 of the\n\t     * > partial match expression keywords to match the query, no matter how many keywords the partial match expression\n\t     * > actually contains.\n\t     */\n\t    partialMatchThreshold: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '50%' }),\n\t    /**\n\t     * Specifies whether to trigger a query when the Querybox is cleared.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    triggerQueryOnClear: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether the Querybox should get auto focus and selection upon initialization.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    autoFocus: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\texports.Querybox = Querybox;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Querybox);\n\n\n/***/ },\n/* 188 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\tvar QueryboxQueryParameters = (function () {\n\t    function QueryboxQueryParameters(options) {\n\t        this.options = options;\n\t    }\n\t    QueryboxQueryParameters.prototype.addParameters = function (queryBuilder, lastQuery) {\n\t        if (this.options.enableWildcards) {\n\t            queryBuilder.enableWildcards = true;\n\t        }\n\t        if (this.options.enableQuestionMarks) {\n\t            queryBuilder.enableQuestionMarks = true;\n\t        }\n\t        if (this.options.enableLowercaseOperators) {\n\t            queryBuilder.enableLowercaseOperators = true;\n\t        }\n\t        if (!_.isEmpty(lastQuery)) {\n\t            queryBuilder.disableQuerySyntax = !this.options.enableQuerySyntax;\n\t            queryBuilder.expression.add(lastQuery);\n\t            if (this.options.enablePartialMatch) {\n\t                queryBuilder.enablePartialMatch = this.options.enablePartialMatch;\n\t                if (this.options.partialMatchKeywords) {\n\t                    queryBuilder.partialMatchKeywords = this.options.partialMatchKeywords;\n\t                }\n\t                if (this.options.partialMatchThreshold) {\n\t                    queryBuilder.partialMatchThreshold = this.options.partialMatchThreshold;\n\t                }\n\t            }\n\t        }\n\t    };\n\t    return QueryboxQueryParameters;\n\t}());\n\texports.QueryboxQueryParameters = QueryboxQueryParameters;\n\n\n/***/ },\n/* 189 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\t/**\n\t * The SearchButton component renders a search icon that the end user can click to trigger a new query.\n\t *\n\t * See also the {@link Searchbox} component, which can automatically instantiate a SearchButton component along with a\n\t * {@link Querybox} component or an {@link Omnibox} component.\n\t */\n\tvar SearchButton = (function (_super) {\n\t    __extends(SearchButton, _super);\n\t    /**\n\t     * Creates a new SearchButton. Binds a `click` event on the element. Adds a search icon on the element.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the SearchButton component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function SearchButton(element, options, bindings) {\n\t        var _this = _super.call(this, element, SearchButton.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bind.on(element, 'click', function () { return _this.handleClick(); });\n\t        // Provide a magnifier icon if element contains nothing\n\t        if (Utils_1.Utils.trim(Dom_1.$$(_this.element).text()) == '') {\n\t            element.innerHTML = '<span class=\\'coveo-icon\\'>' + Strings_1.l('Search') + '</span>';\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Triggers the `click` event handler, which logs a `searchboxSubmit` event in the usage analytics and executes a\n\t     * query.\n\t     */\n\t    SearchButton.prototype.click = function () {\n\t        this.handleClick();\n\t    };\n\t    SearchButton.prototype.handleClick = function () {\n\t        this.logger.debug('Performing query following button click');\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit, {});\n\t        this.queryController.executeQuery();\n\t    };\n\t    return SearchButton;\n\t}(Component_1.Component));\n\tSearchButton.ID = 'SearchButton';\n\tSearchButton.options = {};\n\texports.SearchButton = SearchButton;\n\tInitialization_1.Initialization.registerAutoCreateComponent(SearchButton);\n\n\n/***/ },\n/* 190 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar Omnibox_1 = __webpack_require__(191);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar SearchButton_1 = __webpack_require__(189);\n\tvar Querybox_1 = __webpack_require__(187);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Searchbox component can conveniently create two components that are frequently used together to allow the end\n\t * user to input and submit queries.\n\t *\n\t * This component attaches itself to a `div` element and takes care of instantiating either a {@link Querybox} component\n\t * or an {@link Omnibox} component, depending on its configuration. Optionally, the Searchbox component can also\n\t * instantiate a {@link SearchButton} component and append it inside the same `div`.\n\t */\n\tvar Searchbox = (function (_super) {\n\t    __extends(Searchbox, _super);\n\t    /**\n\t     * Creates a new Searchbox. Creates a new Coveo.Magicbox instance and wraps magic box methods (on blur, on submit\n\t     * etc.). Binds event on `buildingQuery` and on redirection (for standalone box).\n\t     * @param element The HTMLElement on which to instantiate the component. This cannot be an `HTMLInputElement` for\n\t     * technical reasons.\n\t     * @param options The options for the Searchbox component. These will merge with the options from the component set\n\t     * directly on the `HTMLElement`.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Searchbox(element, options, bindings) {\n\t        var _this = _super.call(this, element, Searchbox.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Searchbox, options);\n\t        if (_this.options.inline) {\n\t            Dom_1.$$(element).addClass('coveo-inline');\n\t        }\n\t        if (_this.options.addSearchButton) {\n\t            var anchor = document.createElement('a');\n\t            _this.element.appendChild(anchor);\n\t            _this.searchButton = new SearchButton_1.SearchButton(anchor, undefined, bindings);\n\t        }\n\t        var div = document.createElement('div');\n\t        _this.element.appendChild(div);\n\t        if (_this.options.enableOmnibox) {\n\t            _this.searchbox = new Omnibox_1.Omnibox(div, _this.options, bindings);\n\t        }\n\t        else {\n\t            _this.searchbox = new Querybox_1.Querybox(div, _this.options, bindings);\n\t        }\n\t        return _this;\n\t    }\n\t    return Searchbox;\n\t}(Component_1.Component));\n\tSearchbox.ID = 'Searchbox';\n\tSearchbox.parent = Omnibox_1.Omnibox;\n\t/**\n\t * Possible options for the {@link Searchbox}\n\t * @componentOptions\n\t */\n\tSearchbox.options = {\n\t    /**\n\t     * Specifies whether to instantiate a {@link SearchButton} component.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    addSearchButton: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to instantiate an {@link Omnibox} component.\n\t     *\n\t     * When this option is `false`, the Searchbox component instantiates a {@link Querybox} component instead of an\n\t     * Omnibox component.\n\t     *\n\t     * **Note:**\n\t     * > You can use configuration options specific to the component that the Searchbox instantiates.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * In this first case, the Searchbox will instantiate a Querybox component. It is therefore possible to configure\n\t     * that Querybox instance using any of the Querybox component options such as\n\t     * {@link Querybox.options.triggerQueryOnClear}.\n\t     * ```html\n\t     * <div class='CoveoSearchbox' data-trigger-query-on-clear='true'></div>\n\t     * ```\n\t     *\n\t     * In this second case, the Searchbox will instantiate an Omnibox component. It is therefore possible to configure\n\t     * that Omnibox instance using any of the Omnibox component options such as {@link Omnibox.options.placeholder}.\n\t     * Moreover, since the Omnibox component inherits all of the Querybox component options, the\n\t     * `data-trigger-query-on-clear` option will also work on that Omnibox instance.\n\t     * ```html\n\t     * <div class='CoveoSearchbox' data-enableOmnibox='true' data-place-holder='Please enter a query'></div>\n\t     * ```\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableOmnibox: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false })\n\t};\n\texports.Searchbox = Searchbox;\n\tSearchbox.options = _.extend({}, Searchbox.options, Omnibox_1.Omnibox.options, Querybox_1.Querybox.options);\n\t// Only parse omnibox option if omnibox is enabled\n\t_.each(Searchbox.options, function (value, key) {\n\t    if (key in Omnibox_1.Omnibox.options && !(key in Querybox_1.Querybox.options)) {\n\t        Searchbox.options[key] = _.extend({ depend: 'enableOmnibox' }, value);\n\t    }\n\t});\n\tInitialization_1.Initialization.registerAutoCreateComponent(Searchbox);\n\n\n/***/ },\n/* 191 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar StandaloneSearchInterfaceEvents_1 = __webpack_require__(56);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryStateModel_2 = __webpack_require__(103);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Querybox_1 = __webpack_require__(187);\n\tvar FieldAddon_1 = __webpack_require__(192);\n\tvar QueryExtensionAddon_1 = __webpack_require__(193);\n\tvar RevealQuerySuggestAddon_1 = __webpack_require__(194);\n\tvar OldOmniboxAddon_1 = __webpack_require__(195);\n\tvar QueryboxQueryParameters_1 = __webpack_require__(188);\n\tvar PendingSearchAsYouTypeSearchEvent_1 = __webpack_require__(132);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar _ = __webpack_require__(16);\n\tvar MINIMUM_EXECUTABLE_CONFIDENCE = 0.8;\n\t/**\n\t * The Omnibox component is very similar to the simpler {@link Querybox} component. It supports all of the same options\n\t * and behaviors.\n\t *\n\t * The Omnibox component takes care of adding type-ahead capability to the search input. Custom components can extend\n\t * and customize the type-ahead and the suggestions it provides.\n\t *\n\t * The type-ahead is configurable by activating addons, which the Coveo JavaScript Search Framework provides OOTB\n\t * (facets, analytics suggestions, Coveo Machine Learning suggestions and advanced Coveo syntax suggestions).\n\t *\n\t * It is also possible for external code to provide type-ahead suggestions.\n\t *\n\t * See also the {@link Searchbox} component, which can automatically instantiate an Omnibox component along with an\n\t * optional {@link SearchButton} component.\n\t */\n\tvar Omnibox = (function (_super) {\n\t    __extends(Omnibox, _super);\n\t    /**\n\t     * Creates a new Omnibox component. Also enables necessary addons and binds events on various query events.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Omnibox component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Omnibox(element, options, bindings) {\n\t        var _this = _super.call(this, element, Omnibox.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.partialQueries = [];\n\t        _this.lastSuggestions = [];\n\t        _this.movedOnce = false;\n\t        _this.skipRevealAutoSuggest = false;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Omnibox, options);\n\t        var grammar;\n\t        if (_this.options.enableQuerySyntax) {\n\t            grammar = ExternalModulesShim_1.MagicBox.Grammars.Expressions(ExternalModulesShim_1.MagicBox.Grammars.Complete);\n\t            if (_this.options.enableFieldAddon) {\n\t                new FieldAddon_1.FieldAddon(_this);\n\t            }\n\t            if (_this.options.fieldAlias != null) {\n\t                _this.options.listOfFields = _this.options.listOfFields || [];\n\t                _this.options.listOfFields = _this.options.listOfFields.concat(_.keys(_this.options.fieldAlias));\n\t            }\n\t            if (_this.options.enableQueryExtensionAddon) {\n\t                new QueryExtensionAddon_1.QueryExtensionAddon(_this);\n\t            }\n\t        }\n\t        else {\n\t            grammar = { start: 'Any', expressions: { Any: /.*/ } };\n\t        }\n\t        if (_this.options.enableRevealQuerySuggestAddon) {\n\t            new RevealQuerySuggestAddon_1.RevealQuerySuggestAddon(_this);\n\t        }\n\t        new OldOmniboxAddon_1.OldOmniboxAddon(_this);\n\t        if (_this.options.grammar != null) {\n\t            grammar = _this.options.grammar(grammar);\n\t        }\n\t        _this.magicBox = ExternalModulesShim_1.MagicBox.create(element, new ExternalModulesShim_1.MagicBox.Grammar(grammar.start, grammar.expressions), {\n\t            inline: _this.options.inline,\n\t            selectableSuggestionClass: 'coveo-omnibox-selectable',\n\t            selectedSuggestionClass: 'coveo-omnibox-selected',\n\t            suggestionTimeout: _this.options.omniboxTimeout\n\t        });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(StandaloneSearchInterfaceEvents_1.StandaloneSearchInterfaceEvents.beforeRedirect, function () { return _this.handleBeforeRedirect(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function () { return _this.handleQuerySuccess(); });\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.Q, function (args) { return _this.handleQueryStateChanged(args); });\n\t        if (_this.isRevealAutoSuggestion()) {\n\t            _this.bind.onRootElement(QueryEvents_1.QueryEvents.duringQuery, function (args) { return _this.handleDuringQuery(args); });\n\t        }\n\t        _this.setupMagicBox();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Adds the current content of the input to the query and triggers a query if the current content of the input has\n\t     * changed since last submit.\n\t     *\n\t     * Also logs a `searchboxSubmit` event in the usage analytics.\n\t     */\n\t    Omnibox.prototype.submit = function () {\n\t        var _this = this;\n\t        this.magicBox.clearSuggestion();\n\t        this.updateQueryState();\n\t        this.triggerNewQuery(false, function () {\n\t            _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit, {});\n\t        });\n\t    };\n\t    /**\n\t     * Gets the current content of the input.\n\t     * @returns {string} The current content of the input.\n\t     */\n\t    Omnibox.prototype.getText = function () {\n\t        return this.magicBox.getText();\n\t    };\n\t    /**\n\t     * Sets the content of the input\n\t     * @param text The string to set in the input.\n\t     */\n\t    Omnibox.prototype.setText = function (text) {\n\t        this.magicBox.setText(text);\n\t        this.updateQueryState();\n\t    };\n\t    /**\n\t     * Clears the content of the input.\n\t     */\n\t    Omnibox.prototype.clear = function () {\n\t        this.magicBox.clear();\n\t    };\n\t    /**\n\t     * Gets the `HTMLInputElement` of the Omnibox.\n\t     */\n\t    Omnibox.prototype.getInput = function () {\n\t        return this.magicBox.element.querySelector('input');\n\t    };\n\t    Omnibox.prototype.getResult = function () {\n\t        return this.magicBox.getResult();\n\t    };\n\t    Omnibox.prototype.getDisplayedResult = function () {\n\t        return this.magicBox.getDisplayedResult();\n\t    };\n\t    Omnibox.prototype.getCursor = function () {\n\t        return this.magicBox.getCursor();\n\t    };\n\t    Omnibox.prototype.resultAtCursor = function (match) {\n\t        return this.magicBox.resultAtCursor(match);\n\t    };\n\t    Omnibox.prototype.setupMagicBox = function () {\n\t        var _this = this;\n\t        this.magicBox.onmove = function () {\n\t            // We assume that once the user has moved its selection, it becomes an explicit omnibox analytics event\n\t            if (_this.isRevealAutoSuggestion()) {\n\t                _this.modifyEventTo = _this.getOmniboxAnalyticsEventCause();\n\t            }\n\t            _this.movedOnce = true;\n\t        };\n\t        this.magicBox.onfocus = function () {\n\t            if (_this.isRevealAutoSuggestion()) {\n\t                // This flag is used to block the automatic query when the UI is loaded with a query (#q=foo)\n\t                // and then the input is focused. We want to block that query, even if it match the suggestion\n\t                // Only when there is an actual change in the input (user typing something) is when we want the automatic query to kick in\n\t                _this.skipRevealAutoSuggest = true;\n\t            }\n\t        };\n\t        this.magicBox.onsuggestions = function (suggestions) {\n\t            // If text is empty, this can mean that user selected text from the search box\n\t            // and hit \"delete\" : Reset the partial queries in this case\n\t            if (Utils_1.Utils.isEmptyString(_this.getText())) {\n\t                _this.partialQueries = [];\n\t            }\n\t            _this.movedOnce = false;\n\t            _this.lastSuggestions = suggestions;\n\t            if (_this.isRevealAutoSuggestion() && !_this.skipRevealAutoSuggest) {\n\t                _this.searchAsYouType();\n\t            }\n\t        };\n\t        if (this.options.enableSearchAsYouType) {\n\t            Dom_1.$$(this.element).addClass('coveo-magicbox-search-as-you-type');\n\t        }\n\t        this.magicBox.onchange = function () {\n\t            _this.skipRevealAutoSuggest = false;\n\t            var text = _this.getText();\n\t            if (text != undefined && text != '') {\n\t                if (_this.isRevealAutoSuggestion()) {\n\t                    if (_this.movedOnce) {\n\t                        _this.searchAsYouType(true);\n\t                    }\n\t                }\n\t                else if (_this.options.enableSearchAsYouType) {\n\t                    _this.searchAsYouType(true);\n\t                }\n\t            }\n\t            else {\n\t                _this.clear();\n\t            }\n\t        };\n\t        if (this.options.placeholder) {\n\t            this.magicBox.element.querySelector('input').placeholder = this.options.placeholder;\n\t        }\n\t        this.magicBox.onsubmit = function () {\n\t            _this.magicBox.clearSuggestion();\n\t            _this.updateQueryState();\n\t            _this.triggerNewQuery(false, function () {\n\t                _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit, {});\n\t            });\n\t            _this.magicBox.blur();\n\t        };\n\t        this.magicBox.onselect = function (suggestion) {\n\t            var index = _.indexOf(_this.lastSuggestions, suggestion);\n\t            var suggestions = _.compact(_.map(_this.lastSuggestions, function (suggestion) { return suggestion.text; }));\n\t            _this.magicBox.clearSuggestion();\n\t            _this.updateQueryState();\n\t            // A bit tricky here : When it's reveal auto suggestions\n\t            // the mouse selection and keyboard selection acts differently :\n\t            // keyboard selection will automatically do the query (which will log a search as you type event -> further modified by this.modifyEventTo if needed)\n\t            // mouse selection will not \"auto\" send the query.\n\t            // the movedOnce variable detect the keyboard movement, and is used to differentiate mouse vs keyboard\n\t            if (!_this.isRevealAutoSuggestion()) {\n\t                _this.usageAnalytics.cancelAllPendingEvents();\n\t                _this.triggerNewQuery(false, function () {\n\t                    _this.usageAnalytics.logSearchEvent(_this.getOmniboxAnalyticsEventCause(), _this.buildCustomDataForPartialQueries(index, suggestions));\n\t                });\n\t            }\n\t            else if (_this.isRevealAutoSuggestion() && _this.movedOnce) {\n\t                _this.handleRevealAutoSuggestionWithKeyboard(index, suggestions);\n\t            }\n\t            else if (_this.isRevealAutoSuggestion() && !_this.movedOnce) {\n\t                _this.handleRevealAutoSuggestionsWithMouse(index, suggestions);\n\t            }\n\t            // Consider a selection like a reset of the partial queries (it's the end of a suggestion pattern)\n\t            if (_this.isRevealAutoSuggestion()) {\n\t                _this.partialQueries = [];\n\t            }\n\t        };\n\t        this.magicBox.onblur = function () {\n\t            if (_this.options.enableSearchAsYouType && !_this.options.inline) {\n\t                _this.setText(_this.lastQuery);\n\t            }\n\t            else {\n\t                _this.updateQueryState();\n\t            }\n\t            if (_this.isRevealAutoSuggestion()) {\n\t                _this.usageAnalytics.sendAllPendingEvents();\n\t            }\n\t        };\n\t        this.magicBox.onclear = function () {\n\t            _this.updateQueryState();\n\t            if (_this.options.triggerQueryOnClear) {\n\t                _this.triggerNewQuery(false, function () {\n\t                    _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxClear, {});\n\t                });\n\t            }\n\t        };\n\t        if (this.options.autoFocus) {\n\t            this.magicBox.focus();\n\t        }\n\t        this.magicBox.ontabpress = function () {\n\t            _this.handleTabPress();\n\t        };\n\t        this.magicBox.getSuggestions = function () { return _this.handleSuggestions(); };\n\t    };\n\t    Omnibox.prototype.handleRevealAutoSuggestionWithKeyboard = function (index, suggestions) {\n\t        var _this = this;\n\t        if (this.searchAsYouTypeTimeout) {\n\t            // Here, there is currently a search as you typed queued up :\n\t            // Think : user typed very quickly, then very quickly selected a suggestion (without waiting for the search as you type)\n\t            // Cancel the search as you type query, then immediately do the query with the selection (+analytics event with the selection)\n\t            this.usageAnalytics.cancelAllPendingEvents();\n\t            clearTimeout(this.searchAsYouTypeTimeout);\n\t            this.searchAsYouTypeTimeout = undefined;\n\t            this.triggerNewQuery(false, function () {\n\t                _this.usageAnalytics.logSearchEvent(_this.getOmniboxAnalyticsEventCause(), _this.buildCustomDataForPartialQueries(index, suggestions));\n\t            });\n\t        }\n\t        else {\n\t            // Here, the search as you type query has returned, but the analytics event has not ye been sent.\n\t            // Think : user typed slowly, the query returned, and then the user selected a suggestion.\n\t            // Since the analytics event has not yet been sent (search as you type event have a 5 sec delay)\n\t            // modify the pending event, then send the newly modified analytics event immediately.\n\t            this.modifyEventTo = this.getOmniboxAnalyticsEventCause();\n\t            this.modifyCustomDataOnPending(index, suggestions);\n\t            this.usageAnalytics.sendAllPendingEvents();\n\t        }\n\t    };\n\t    Omnibox.prototype.handleRevealAutoSuggestionsWithMouse = function (index, suggestions) {\n\t        var _this = this;\n\t        if (this.searchAsYouTypeTimeout || index != 0) {\n\t            // Here : the user either very quickly chose the first suggestion, and the search as you type is still queued up.\n\t            // OR\n\t            // the user chose something different then the first suggestion.\n\t            // Remove the search as you type if it's there, and do the query with the suggestion directly.\n\t            this.clearSearchAsYouType();\n\t            this.usageAnalytics.cancelAllPendingEvents();\n\t            this.triggerNewQuery(false, function () {\n\t                _this.usageAnalytics.logSearchEvent(_this.getOmniboxAnalyticsEventCause(), _this.buildCustomDataForPartialQueries(index, suggestions));\n\t            });\n\t        }\n\t        else {\n\t            // Here : the user either very slowly chose a suggestion, and there is no search as you typed queued up\n\t            // AND\n\t            // the user chose the first suggestion.\n\t            // this means the query is already returned, but the analytics event is still queued up.\n\t            // modify the analytics event, and send it.\n\t            this.modifyEventTo = this.getOmniboxAnalyticsEventCause();\n\t            this.modifyCustomDataOnPending(index, suggestions);\n\t            this.usageAnalytics.sendAllPendingEvents();\n\t            // This should happen if :\n\t            // users did a (short) query first, which does not match the first suggestion. (eg: typed \"t\", then search)\n\t            // then, refocus the search box. The same suggestion(s) will re-appear.\n\t            // By selecting the first one with the mouse, we need to retrigger a query because this means the search as you type could not\n\t            // kick in and do the query automatically.\n\t            if (this.lastQuery != this.getText()) {\n\t                this.triggerNewQuery(false, function () {\n\t                    _this.usageAnalytics.logSearchEvent(_this.getOmniboxAnalyticsEventCause(), _this.buildCustomDataForPartialQueries(index, suggestions));\n\t                });\n\t            }\n\t        }\n\t    };\n\t    Omnibox.prototype.modifyCustomDataOnPending = function (index, suggestions) {\n\t        var pendingEvt = this.usageAnalytics.getPendingSearchEvent();\n\t        if (pendingEvt instanceof PendingSearchAsYouTypeSearchEvent_1.PendingSearchAsYouTypeSearchEvent) {\n\t            var newCustomData_1 = this.buildCustomDataForPartialQueries(index, suggestions);\n\t            _.each(_.keys(newCustomData_1), function (k) {\n\t                pendingEvt.modifyCustomData(k, newCustomData_1[k]);\n\t            });\n\t        }\n\t    };\n\t    Omnibox.prototype.buildCustomDataForPartialQueries = function (index, suggestions) {\n\t        return {\n\t            partialQueries: this.cleanCustomData(this.partialQueries),\n\t            suggestionRanking: index,\n\t            suggestions: this.cleanCustomData(suggestions),\n\t            partialQuery: _.last(this.partialQueries)\n\t        };\n\t    };\n\t    Omnibox.prototype.cleanCustomData = function (toClean, rejectLength) {\n\t        if (rejectLength === void 0) { rejectLength = 256; }\n\t        // Filter out only consecutive values that are the identical\n\t        toClean = _.compact(_.filter(toClean, function (partial, pos, array) {\n\t            return pos === 0 || partial !== array[pos - 1];\n\t        }));\n\t        // Custom dimensions cannot be an array in analytics service: Send a string joined by ; instead.\n\t        // Need to replace ;\n\t        toClean = _.map(toClean, function (partial) {\n\t            return partial.replace(/;/g, '');\n\t        });\n\t        // Reduce right to get the last X words that adds to less then rejectLength\n\t        var reducedToRejectLengthOrLess = [];\n\t        _.reduceRight(toClean, function (memo, partial) {\n\t            var totalSoFar = memo + partial.length;\n\t            if (totalSoFar <= rejectLength) {\n\t                reducedToRejectLengthOrLess.push(partial);\n\t            }\n\t            return totalSoFar;\n\t        }, 0);\n\t        toClean = reducedToRejectLengthOrLess.reverse();\n\t        var ret = toClean.join(';');\n\t        // analytics service can store max 256 char in a custom event\n\t        // if we're over that, call cleanup again with an arbitrary 10 less char accepted\n\t        if (ret.length >= 256) {\n\t            return this.cleanCustomData(toClean, rejectLength - 10);\n\t        }\n\t        return toClean.join(';');\n\t    };\n\t    Omnibox.prototype.handleSuggestions = function () {\n\t        var suggestionsEventArgs = {\n\t            suggestions: [],\n\t            omnibox: this\n\t        };\n\t        this.bind.trigger(this.element, OmniboxEvents_1.OmniboxEvents.populateOmniboxSuggestions, suggestionsEventArgs);\n\t        var text = this.getText();\n\t        if (!Utils_1.Utils.isNullOrEmptyString(text)) {\n\t            this.partialQueries.push(text);\n\t        }\n\t        return _.compact(suggestionsEventArgs.suggestions);\n\t    };\n\t    Omnibox.prototype.handleBeforeRedirect = function () {\n\t        this.updateQueryState();\n\t    };\n\t    Omnibox.prototype.handleBuildingQuery = function (data) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.queryBuilder);\n\t        this.updateQueryState();\n\t        this.lastQuery = this.getQuery(data.searchAsYouType);\n\t        var result = this.lastQuery == this.magicBox.getDisplayedResult().input ? this.magicBox.getDisplayedResult().clone() : this.magicBox.grammar.parse(this.lastQuery).clean();\n\t        var preprocessResultForQueryArgs = {\n\t            result: result\n\t        };\n\t        if (this.options.enableQuerySyntax) {\n\t            var notQuotedValues = preprocessResultForQueryArgs.result.findAll('FieldValueNotQuoted');\n\t            _.each(notQuotedValues, function (value) { return value.value = '\"' + value.value.replace(/\"|\\u00A0/g, ' ') + '\"'; });\n\t            if (this.options.fieldAlias) {\n\t                var fieldNames = preprocessResultForQueryArgs.result.findAll(function (result) { return result.expression.id == 'FieldName' && result.isSuccess(); });\n\t                _.each(fieldNames, function (result) {\n\t                    var alias = _.find(_.keys(_this.options.fieldAlias), function (alias) { return alias.toLowerCase() == result.value.toLowerCase(); });\n\t                    if (alias != null) {\n\t                        result.value = _this.options.fieldAlias[alias];\n\t                    }\n\t                });\n\t            }\n\t        }\n\t        this.bind.trigger(this.element, OmniboxEvents_1.OmniboxEvents.omniboxPreprocessResultForQuery, preprocessResultForQueryArgs);\n\t        var query = preprocessResultForQueryArgs.result.toString();\n\t        new QueryboxQueryParameters_1.QueryboxQueryParameters(this.options).addParameters(data.queryBuilder, query);\n\t    };\n\t    Omnibox.prototype.handleTabPress = function () {\n\t        if (this.options.enableRevealQuerySuggestAddon) {\n\t            this.handleTabPressForRevealSuggestions();\n\t        }\n\t        else {\n\t            this.handleTabPressForOldOmniboxAddon();\n\t        }\n\t    };\n\t    Omnibox.prototype.handleTabPressForRevealSuggestions = function () {\n\t        if (!this.options.enableSearchAsYouType) {\n\t            var suggestions = _.compact(_.map(this.lastSuggestions, function (suggestion) { return suggestion.text; }));\n\t            this.usageAnalytics.logCustomEvent(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(0, suggestions), this.element);\n\t        }\n\t    };\n\t    Omnibox.prototype.handleTabPressForOldOmniboxAddon = function () {\n\t        if (this.lastSuggestions && this.lastSuggestions[0] && this.lastSuggestions[0].dom) {\n\t            var firstSelected = Dom_1.$$(this.lastSuggestions[0].dom).find('.coveo-omnibox-selected');\n\t            var firstSelectable = Dom_1.$$(this.lastSuggestions[0].dom).find('.coveo-omnibox-selectable');\n\t            if (firstSelected) {\n\t                Dom_1.$$(firstSelected).trigger('tabSelect');\n\t            }\n\t            else if (firstSelectable) {\n\t                Dom_1.$$(firstSelectable).trigger('tabSelect');\n\t            }\n\t        }\n\t    };\n\t    Omnibox.prototype.triggerNewQuery = function (searchAsYouType, analyticsEvent) {\n\t        clearTimeout(this.searchAsYouTypeTimeout);\n\t        var text = this.getQuery(searchAsYouType);\n\t        if (this.shouldExecuteQuery(searchAsYouType)) {\n\t            this.lastQuery = text;\n\t            analyticsEvent();\n\t            this.queryController.executeQuery({\n\t                searchAsYouType: searchAsYouType,\n\t                logInActionsHistory: true\n\t            });\n\t        }\n\t    };\n\t    Omnibox.prototype.getQuery = function (searchAsYouType) {\n\t        var query;\n\t        if (searchAsYouType) {\n\t            query = this.magicBox.getWordCompletion();\n\t            if (query == null && this.lastSuggestions != null && this.lastSuggestions.length > 0) {\n\t                var textSuggestion = _.find(this.lastSuggestions, function (suggestion) { return suggestion.text != null; });\n\t                if (textSuggestion != null) {\n\t                    query = textSuggestion.text;\n\t                }\n\t            }\n\t        }\n\t        return query || this.magicBox.getText();\n\t    };\n\t    Omnibox.prototype.updateQueryState = function () {\n\t        this.queryStateModel.set(QueryStateModel_2.QueryStateModel.attributesEnum.q, this.magicBox.getText());\n\t    };\n\t    Omnibox.prototype.handleQueryStateChanged = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        var q = args.value;\n\t        if (q != this.magicBox.getText()) {\n\t            this.magicBox.setText(q);\n\t        }\n\t    };\n\t    Omnibox.prototype.handleQuerySuccess = function () {\n\t        if (!this.isRevealAutoSuggestion()) {\n\t            this.partialQueries = [];\n\t        }\n\t    };\n\t    Omnibox.prototype.handleDuringQuery = function (args) {\n\t        var _this = this;\n\t        // When the query results returns ... (args.promise)\n\t        args.promise.then(function () {\n\t            // Get a handle on a pending search as you type (those events are delayed, not sent instantly)\n\t            var pendingEvent = _this.usageAnalytics.getPendingSearchEvent();\n\t            if (pendingEvent instanceof PendingSearchAsYouTypeSearchEvent_1.PendingSearchAsYouTypeSearchEvent) {\n\t                pendingEvent.beforeResolve.then(function (evt) {\n\t                    // Check if we need to modify the event type beforeResolving it\n\t                    args.promise.then(function () {\n\t                        if (_this.modifyEventTo) {\n\t                            evt.modifyEventCause(_this.modifyEventTo);\n\t                            _this.modifyEventTo = null;\n\t                        }\n\t                    });\n\t                });\n\t            }\n\t        });\n\t    };\n\t    Omnibox.prototype.searchAsYouType = function (forceExecuteQuery) {\n\t        var _this = this;\n\t        if (forceExecuteQuery === void 0) { forceExecuteQuery = false; }\n\t        this.clearSearchAsYouType();\n\t        if (this.shouldExecuteQuery(true)) {\n\t            this.searchAsYouTypeTimeout = setTimeout(function () {\n\t                if (_this.suggestionShouldTriggerQuery() || forceExecuteQuery) {\n\t                    var suggestions_1 = _.map(_this.lastSuggestions, function (suggestion) { return suggestion.text; });\n\t                    var index_1 = _.indexOf(suggestions_1, _this.magicBox.getWordCompletion());\n\t                    _this.triggerNewQuery(true, function () {\n\t                        _this.usageAnalytics.logSearchAsYouType(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxAsYouType, _this.buildCustomDataForPartialQueries(index_1, suggestions_1));\n\t                    });\n\t                    _this.clearSearchAsYouType();\n\t                }\n\t            }, this.options.searchAsYouTypeDelay);\n\t        }\n\t    };\n\t    Omnibox.prototype.isRevealAutoSuggestion = function () {\n\t        return this.options.enableSearchAsYouType && this.options.enableRevealQuerySuggestAddon;\n\t    };\n\t    Omnibox.prototype.shouldExecuteQuery = function (searchAsYouType) {\n\t        var text = this.getQuery(searchAsYouType);\n\t        return this.lastQuery != text && text != null;\n\t    };\n\t    Omnibox.prototype.suggestionShouldTriggerQuery = function (suggestions) {\n\t        if (suggestions === void 0) { suggestions = this.lastSuggestions; }\n\t        if (this.shouldExecuteQuery(true)) {\n\t            if (suggestions && suggestions[0]) {\n\t                var suggestion = suggestions[0];\n\t                // If we have access to a confidence level, return true if we are equal or above the minimum confidence level.\n\t                if (suggestion && suggestion.executableConfidence != undefined) {\n\t                    return suggestion.executableConfidence >= MINIMUM_EXECUTABLE_CONFIDENCE;\n\t                }\n\t                // If we don't have access to a confidence level, return true only if it \"starts with\" the content of the search box\n\t                if (suggestion.text && suggestion.text.indexOf(this.magicBox.getText()) == 0) {\n\t                    return true;\n\t                }\n\t            }\n\t        }\n\t        return false;\n\t    };\n\t    Omnibox.prototype.clearSearchAsYouType = function () {\n\t        clearTimeout(this.searchAsYouTypeTimeout);\n\t        this.searchAsYouTypeTimeout = undefined;\n\t    };\n\t    Omnibox.prototype.getOmniboxAnalyticsEventCause = function () {\n\t        if (this.searchInterface instanceof SearchInterface_1.StandaloneSearchInterface) {\n\t            return AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFromLink;\n\t        }\n\t        return AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxAnalytics;\n\t    };\n\t    return Omnibox;\n\t}(Component_1.Component));\n\tOmnibox.ID = 'Omnibox';\n\t/**\n\t * The options for the omnibox\n\t * @componentOptions\n\t */\n\tOmnibox.options = {\n\t    /**\n\t     * Specifies whether suggestions appearing in the Omnibox should push the result down instead of appearing over the\n\t     * results.\n\t     *\n\t     * Set this option as well as {@link Omnibox.options.enableSearchAsYouType} and\n\t     * {@link Omnibox.options.enableRevealQuerySuggestAddon} to `true` for a cool effect!\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    inline: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to automatically trigger a new query whenever the end user types new text inside the Omnibox.\n\t     *\n\t     * Set this option as well a {@link Omnibox.options.inline} and\n\t     * {@link Omnibox.options.enableRevealQuerySuggestAddon} to `true` for a cool effect!\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableSearchAsYouType: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * If {@link Omnibox.options.enableSearchAsYouType} is `true`, specifies the delay (in milliseconds) before\n\t     * triggering a new query when the user types new text inside the Omnibox.\n\t     *\n\t     * Default value is `2000`. Minimum value is `0`.\n\t     */\n\t    searchAsYouTypeDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({\n\t        defaultValue: 2000,\n\t        min: 0,\n\t        depend: 'enableSearchAsYouType'\n\t    }),\n\t    /**\n\t     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to enable the `field` addon.\n\t     *\n\t     * The `field` addon allows the search box to highlight and complete field syntax.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * > Suppose you want to filter on a certain file type. You start typing `@sysf` in the input. The Omnibox provides\n\t     * > you with several matching fields. You select the `@sysfiletype` suggestion and type `=`. If this option is set\n\t     * > to `true`, then the Omnibox provides you with suggestions for available matching file types.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableFieldAddon: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableQuerySyntax' }),\n\t    enableSimpleFieldAddon: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableFieldAddon' }),\n\t    listOfFields: ComponentOptions_1.ComponentOptions.buildFieldsOption({ depend: 'enableFieldAddon' }),\n\t    /**\n\t     * Specifies whether to enable the Coveo Machine Learning (Coveo ML) query suggestions.\n\t     *\n\t     * This implies that you have a proper Coveo ML integration configured (see\n\t     * [Coveo Machine Learning](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=177)).\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableRevealQuerySuggestAddon: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, alias: 'enableTopQueryAddon' }),\n\t    /**\n\t     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to enable the `query extension` addon.\n\t     *\n\t     * The `query extension` addon allows the Omnibox to complete the syntax for query extensions.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    enableQueryExtensionAddon: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableQuerySyntax' }),\n\t    /**\n\t     * Specifies a placeholder for the input.\n\t     */\n\t    placeholder: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption(),\n\t    /**\n\t     * Specifies a timeout (in milliseconds) before rejecting suggestions in the Omnibox.\n\t     *\n\t     * Default value is `2000`. Minimum value is `0`.\n\t     */\n\t    omniboxTimeout: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 2000, min: 0 })\n\t};\n\texports.Omnibox = Omnibox;\n\tOmnibox.options = _.extend({}, Omnibox.options, Querybox_1.Querybox.options);\n\tInitialization_1.Initialization.registerAutoCreateComponent(Omnibox);\n\n\n/***/ },\n/* 192 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\tvar FieldAddon = (function () {\n\t    function FieldAddon(omnibox) {\n\t        var _this = this;\n\t        this.omnibox = omnibox;\n\t        this.cache = {};\n\t        this.omnibox.bind.on(this.omnibox.element, OmniboxEvents_1.OmniboxEvents.populateOmniboxSuggestions, function (args) {\n\t            args.suggestions.push(_this.getSuggestion());\n\t        });\n\t    }\n\t    FieldAddon.prototype.getSuggestion = function () {\n\t        var _this = this;\n\t        var hash = this.getHash();\n\t        if (hash == null) {\n\t            return null;\n\t        }\n\t        var hashString = this.hashToString(hash);\n\t        if (this.cache[hashString] != null) {\n\t            return this.hashValueToSuggestion(hash, this.cache[hashString]);\n\t        }\n\t        var values;\n\t        if (hash.type == 'FieldName') {\n\t            values = this.fieldNames(hash.current);\n\t        }\n\t        if (hash.type == 'FieldValue') {\n\t            values = this.fieldValues(hash.field, hash.current);\n\t        }\n\t        if (hash.type == 'SimpleFieldName') {\n\t            values = this.simpleFieldNames(hash.current);\n\t        }\n\t        this.cache[hashString] = values;\n\t        values.catch(function () {\n\t            delete _this.cache[hashString];\n\t        });\n\t        return this.hashValueToSuggestion(hash, values);\n\t    };\n\t    FieldAddon.prototype.getHash = function () {\n\t        var fieldName = _.last(this.omnibox.resultAtCursor('FieldName'));\n\t        if (fieldName != null) {\n\t            fieldName = fieldName.findParent('Field') || fieldName;\n\t            var currentField = fieldName.toString();\n\t            var before = fieldName.before();\n\t            var after = fieldName.after();\n\t            return { type: 'FieldName', current: currentField, before: before, after: after };\n\t        }\n\t        var fieldValue = _.last(this.omnibox.resultAtCursor('FieldValue'));\n\t        if (fieldValue) {\n\t            var fieldQuery = fieldValue.findParent('FieldQuery') || (this.omnibox.options.enableSimpleFieldAddon && fieldValue.findParent('FieldSimpleQuery'));\n\t            if (fieldQuery) {\n\t                var field = fieldQuery.find('FieldName').toString();\n\t                if (this.omnibox.options.fieldAlias) {\n\t                    if (field in this.omnibox.options.fieldAlias) {\n\t                        field = this.omnibox.options.fieldAlias[field];\n\t                    }\n\t                }\n\t                var value = fieldValue.toString();\n\t                var before = fieldValue.before();\n\t                var after = fieldValue.after();\n\t                return { type: 'FieldValue', field: field, current: value, before: before, after: after };\n\t            }\n\t        }\n\t        if (this.omnibox.options.enableSimpleFieldAddon) {\n\t            var word = _.last(this.omnibox.resultAtCursor('Word'));\n\t            if (word != null) {\n\t                var currentField = word.toString();\n\t                var before = word.before();\n\t                var after = word.after();\n\t                return { type: 'SimpleFieldName', current: currentField, before: before, after: after };\n\t            }\n\t        }\n\t    };\n\t    FieldAddon.prototype.hashToString = function (hash) {\n\t        if (hash == null) {\n\t            return null;\n\t        }\n\t        return hash.type + hash.current + (hash.field || '');\n\t    };\n\t    FieldAddon.prototype.hashValueToSuggestion = function (hash, promise) {\n\t        return promise.then(function (values) {\n\t            var suggestions = _.map(values, function (value, i) {\n\t                return {\n\t                    text: hash.before + (hash.current.toLowerCase().indexOf(value.toLowerCase()) == 0 ? hash.current + value.substr(hash.current.length) : value) + hash.after,\n\t                    html: ExternalModulesShim_1.MagicBox.Utils.highlightText(value, hash.current, true),\n\t                    index: FieldAddon.INDEX - i / values.length\n\t                };\n\t            });\n\t            return suggestions;\n\t        });\n\t    };\n\t    FieldAddon.prototype.getFields = function () {\n\t        var _this = this;\n\t        if (this.fields == null) {\n\t            this.fields = new Promise(function (resolve, reject) {\n\t                if (_this.omnibox.options.listOfFields != null) {\n\t                    resolve(_this.omnibox.options.listOfFields);\n\t                }\n\t                else {\n\t                    var promise = _this.omnibox.queryController.getEndpoint().listFields();\n\t                    promise.then(function (fieldDescriptions) {\n\t                        var fieldNames = _.chain(fieldDescriptions)\n\t                            .filter(function (fieldDescription) { return fieldDescription.includeInQuery && fieldDescription.groupByField; })\n\t                            .map(function (fieldDescription) { return fieldDescription.name.substr(1); })\n\t                            .value();\n\t                        resolve(fieldNames);\n\t                    }).catch(function () {\n\t                        reject();\n\t                    });\n\t                }\n\t            });\n\t        }\n\t        return this.fields;\n\t    };\n\t    FieldAddon.prototype.fieldNames = function (current) {\n\t        var withAt = current.length > 0 && current[0] == '@';\n\t        var fieldName = withAt ? current.substr(1) : current;\n\t        var fieldNameLC = fieldName.toLowerCase();\n\t        return this.getFields().then(function (fields) {\n\t            var matchFields = _.chain(fields)\n\t                .map(function (field) {\n\t                return {\n\t                    index: field.toLowerCase().indexOf(fieldNameLC),\n\t                    field: withAt ? field : '@' + field\n\t                };\n\t            })\n\t                .filter(function (field) {\n\t                return field.index != -1 && field.field.length > current.length;\n\t            })\n\t                .sortBy('index')\n\t                .map(function (field) { return field.field; })\n\t                .value();\n\t            matchFields = _.first(matchFields, 5);\n\t            return matchFields;\n\t        });\n\t    };\n\t    FieldAddon.prototype.fieldValues = function (field, current) {\n\t        return this.omnibox.queryController.getEndpoint().listFieldValues({\n\t            pattern: '.*' + current + '.*',\n\t            patternType: 'RegularExpression',\n\t            sortCriteria: 'occurrences',\n\t            field: '@' + field,\n\t            maximumNumberOfValues: 5\n\t        }).then(function (values) {\n\t            return _.chain(values)\n\t                .map(function (value) {\n\t                return {\n\t                    index: value.value.toLowerCase().indexOf(current),\n\t                    value: value.value\n\t                };\n\t            })\n\t                .filter(function (value) {\n\t                return value.value.length > current.length;\n\t            })\n\t                .sortBy('index')\n\t                .map(function (value) {\n\t                return value.value.replace(/ /g, '\\u00A0');\n\t            })\n\t                .value();\n\t        });\n\t    };\n\t    FieldAddon.prototype.simpleFieldNames = function (current) {\n\t        var fieldName = current;\n\t        var fieldNameLC = fieldName.toLowerCase();\n\t        return this.getFields().then(function (fields) {\n\t            var matchFields = _.chain(fields)\n\t                .map(function (field) {\n\t                return {\n\t                    index: field.toLowerCase().indexOf(fieldNameLC),\n\t                    field: field + ':'\n\t                };\n\t            })\n\t                .filter(function (field) {\n\t                return field.index != -1 && field.field.length > current.length;\n\t            })\n\t                .sortBy('index')\n\t                .map(function (field) { return field.field; })\n\t                .value();\n\t            matchFields = _.first(matchFields, 5);\n\t            return matchFields;\n\t        });\n\t    };\n\t    return FieldAddon;\n\t}());\n\tFieldAddon.INDEX = 64;\n\texports.FieldAddon = FieldAddon;\n\n\n/***/ },\n/* 193 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t///<reference path='Omnibox.ts'/>\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\tvar QueryExtensionAddon = (function () {\n\t    function QueryExtensionAddon(omnibox) {\n\t        var _this = this;\n\t        this.omnibox = omnibox;\n\t        this.cache = {};\n\t        this.omnibox.bind.on(this.omnibox.element, OmniboxEvents_1.OmniboxEvents.populateOmniboxSuggestions, function (args) {\n\t            args.suggestions.push(_this.getSuggestion());\n\t        });\n\t    }\n\t    QueryExtensionAddon.prototype.getSuggestion = function () {\n\t        var _this = this;\n\t        var hash = this.getHash(this.omnibox.magicBox);\n\t        if (hash == null) {\n\t            return null;\n\t        }\n\t        var hashString = this.hashToString(hash);\n\t        if (this.cache[hashString] != null) {\n\t            return this.hashValueToSuggestion(hash, this.cache[hashString]);\n\t        }\n\t        var values = (hash.type == 'QueryExtensionName' ? this.names(hash.current) : this.attributeNames(hash.name, hash.current, hash.used));\n\t        this.cache[hashString] = values;\n\t        values.catch(function () {\n\t            delete _this.cache[hashString];\n\t        });\n\t        return this.hashValueToSuggestion(hash, values);\n\t    };\n\t    QueryExtensionAddon.prototype.getHash = function (magicBox) {\n\t        var queryExtension = _.last(magicBox.resultAtCursor('QueryExtension'));\n\t        if (queryExtension != null) {\n\t            var queryExtensionArgumentResults = queryExtension.findAll('QueryExtensionArgument');\n\t            var current = _.last(magicBox.resultAtCursor('QueryExtensionName'));\n\t            if (current != null) {\n\t                return {\n\t                    type: 'QueryExtensionName',\n\t                    current: current.toString(),\n\t                    before: current.before(),\n\t                    after: current.after()\n\t                };\n\t            }\n\t            current = _.last(magicBox.resultAtCursor('QueryExtensionArgumentName'));\n\t            if (current != null) {\n\t                var used = _.chain(queryExtensionArgumentResults)\n\t                    .map(function (result) {\n\t                    var name = result.find('QueryExtensionArgumentName');\n\t                    return name && name.toString();\n\t                })\n\t                    .compact()\n\t                    .value();\n\t                var name = queryExtension.find('QueryExtensionName').toString();\n\t                return {\n\t                    type: 'QueryExtensionArgumentName',\n\t                    current: current.toString(),\n\t                    before: current.before(),\n\t                    after: current.after(),\n\t                    name: name,\n\t                    used: used\n\t                };\n\t            }\n\t        }\n\t        return null;\n\t    };\n\t    QueryExtensionAddon.prototype.hashToString = function (hash) {\n\t        if (hash == null) {\n\t            return null;\n\t        }\n\t        return [hash.type, hash.current, (hash.name || ''), (hash.used ? hash.used.join() : '')].join();\n\t    };\n\t    QueryExtensionAddon.prototype.hashValueToSuggestion = function (hash, promise) {\n\t        return promise.then(function (values) {\n\t            var suggestions = _.map(values, function (value, i) {\n\t                return {\n\t                    html: ExternalModulesShim_1.MagicBox.Utils.highlightText(value, hash.current, true),\n\t                    text: hash.before + value + hash.after,\n\t                    index: QueryExtensionAddon.INDEX - i / values.length\n\t                };\n\t            });\n\t            return suggestions;\n\t        });\n\t    };\n\t    QueryExtensionAddon.prototype.getExtensions = function () {\n\t        if (this.extensions == null) {\n\t            this.extensions = this.omnibox.queryController.getEndpoint().extensions();\n\t        }\n\t        return this.extensions;\n\t    };\n\t    QueryExtensionAddon.prototype.names = function (current) {\n\t        var extensionName = current.toLowerCase();\n\t        return this.getExtensions().then(function (extensions) {\n\t            var matchExtensions = _.chain(extensions)\n\t                .map(function (extension) {\n\t                return {\n\t                    index: extension.name.toLowerCase().indexOf(extensionName),\n\t                    extension: extension.name\n\t                };\n\t            })\n\t                .filter(function (extension) {\n\t                return extension.index != -1 && extension.extension.length > extensionName.length;\n\t            })\n\t                .sortBy('index')\n\t                .pluck('extension')\n\t                .value();\n\t            matchExtensions = _.first(matchExtensions, 5);\n\t            return matchExtensions;\n\t        });\n\t    };\n\t    QueryExtensionAddon.prototype.attributeNames = function (name, current, used) {\n\t        return this.getExtensions().then(function (extensions) {\n\t            var extension = _.find(extensions, function (extension) { return extension.name == name; });\n\t            if (extension == null) {\n\t                return [];\n\t            }\n\t            else {\n\t                return _.filter(_.difference(extension.argumentNames, used), function (argumentName) { return argumentName.indexOf(current) == 0; });\n\t            }\n\t        });\n\t    };\n\t    QueryExtensionAddon.prototype.hash = function () {\n\t        return;\n\t    };\n\t    return QueryExtensionAddon;\n\t}());\n\tQueryExtensionAddon.INDEX = 62;\n\texports.QueryExtensionAddon = QueryExtensionAddon;\n\n\n/***/ },\n/* 194 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar _ = __webpack_require__(16);\n\tvar RevealQuerySuggestAddon = (function () {\n\t    function RevealQuerySuggestAddon(omnibox) {\n\t        var _this = this;\n\t        this.omnibox = omnibox;\n\t        this.cache = {};\n\t        Dom_1.$$(this.omnibox.element).on(OmniboxEvents_1.OmniboxEvents.populateOmniboxSuggestions, function (e, args) {\n\t            args.suggestions.push(_this.getSuggestion());\n\t        });\n\t    }\n\t    RevealQuerySuggestAddon.suggestiontHtml = function (suggestion) {\n\t        return suggestion.highlighted.replace(/\\[(.*?)\\]|\\{(.*?)\\}|\\((.*?)\\)/g, function (part, notMatched, matched, corrected) {\n\t            var className = '';\n\t            if (matched) {\n\t                className = 'coveo-omnibox-hightlight';\n\t            }\n\t            if (corrected) {\n\t                className = 'coveo-omnibox-hightlight2';\n\t            }\n\t            var ret;\n\t            if (className) {\n\t                ret = Dom_1.$$('span', {\n\t                    className: className\n\t                });\n\t            }\n\t            else {\n\t                ret = Dom_1.$$('span');\n\t            }\n\t            ret.text(notMatched || matched || corrected);\n\t            return ret.el.outerHTML;\n\t        });\n\t    };\n\t    RevealQuerySuggestAddon.isPartialMatch = function (suggestion) {\n\t        // groups : 1=notMatched, 2=matched, 3=corrected\n\t        var parts = StringUtils_1.StringUtils.match(suggestion.highlighted, /\\[(.*?)\\]|\\{(.*?)\\}|\\((.*?)\\)/g);\n\t        var firstFail = _.find(parts, function (part) { return part[1] != null; });\n\t        // if no fail found, this is a partial or a full match\n\t        if (firstFail == null) {\n\t            return true;\n\t        }\n\t        // if all right parts are notMatched, the right parts is autocomplete\n\t        return _.every(_.last(parts, _.indexOf(parts, firstFail) - parts.length), function (part) { return part[1] != null; });\n\t    };\n\t    RevealQuerySuggestAddon.prototype.getSuggestion = function () {\n\t        var _this = this;\n\t        var text = this.omnibox.magicBox.getText();\n\t        if (text.length == 0) {\n\t            return null;\n\t        }\n\t        if (this.cache[text] != null) {\n\t            return this.cache[text];\n\t        }\n\t        var promise = this.getRevealQuerySuggest(text);\n\t        this.cache[text] = promise;\n\t        promise.catch(function () {\n\t            delete _this.cache[text];\n\t        });\n\t        return this.cache[text];\n\t    };\n\t    RevealQuerySuggestAddon.prototype.getRevealQuerySuggest = function (text) {\n\t        var payload = { q: text };\n\t        var language = String['locale'];\n\t        var searchHub = this.omnibox.getBindings().componentOptionsModel.get(ComponentOptionsModel_1.ComponentOptionsModel.attributesEnum.searchHub);\n\t        var pipeline = this.omnibox.getBindings().searchInterface.options.pipeline;\n\t        var enableWordCompletion = this.omnibox.options.enableSearchAsYouType;\n\t        var context = this.omnibox.getBindings().queryController.getLastQuery().context;\n\t        if (language) {\n\t            payload.language = language;\n\t        }\n\t        if (searchHub) {\n\t            payload.searchHub = searchHub;\n\t        }\n\t        if (pipeline) {\n\t            payload.pipeline = pipeline;\n\t        }\n\t        if (context) {\n\t            payload.context = context;\n\t        }\n\t        payload.enableWordCompletion = enableWordCompletion;\n\t        return this.omnibox.queryController.getEndpoint()\n\t            .getRevealQuerySuggest(payload)\n\t            .then(function (result) {\n\t            var completions = result.completions;\n\t            var results = _.map(completions, function (completion, i) {\n\t                return {\n\t                    html: RevealQuerySuggestAddon.suggestiontHtml(completion),\n\t                    text: completion.expression,\n\t                    index: RevealQuerySuggestAddon.INDEX - i / completions.length,\n\t                    partial: RevealQuerySuggestAddon.isPartialMatch(completion),\n\t                    executableConfidence: completion.executableConfidence\n\t                };\n\t            });\n\t            return results;\n\t        });\n\t    };\n\t    return RevealQuerySuggestAddon;\n\t}());\n\tRevealQuerySuggestAddon.INDEX = 60;\n\texports.RevealQuerySuggestAddon = RevealQuerySuggestAddon;\n\n\n/***/ },\n/* 195 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar OldOmniboxAddon = (function () {\n\t    function OldOmniboxAddon(omnibox) {\n\t        var _this = this;\n\t        this.omnibox = omnibox;\n\t        this.omnibox.bind.on(this.omnibox.element, OmniboxEvents_1.OmniboxEvents.populateOmniboxSuggestions, function (args) {\n\t            _.each(_this.getSuggestion(), function (suggestion) {\n\t                args.suggestions.push(suggestion);\n\t            });\n\t        });\n\t    }\n\t    OldOmniboxAddon.prototype.getSuggestion = function () {\n\t        var text = this.omnibox.magicBox.getText();\n\t        if (text.length == 0) {\n\t            return null;\n\t        }\n\t        if (this.lastQuery == text) {\n\t            return this.lastSuggestions;\n\t        }\n\t        this.lastQuery = text;\n\t        var eventArgs = this.buildPopulateOmniboxEventArgs();\n\t        Dom_1.$$(this.omnibox.root).trigger(OmniboxEvents_1.OmniboxEvents.populateOmnibox, eventArgs);\n\t        return this.lastSuggestions = this.rowsToSuggestions(eventArgs.rows);\n\t    };\n\t    OldOmniboxAddon.prototype.getCurrentQueryExpression = function () {\n\t        var cursorPos = this.omnibox.getCursor();\n\t        var value = this.omnibox.getText();\n\t        var length = value.length;\n\t        var start = cursorPos;\n\t        var end = cursorPos;\n\t        if (value[start] == ' ') {\n\t            start--;\n\t        }\n\t        while (start > 0 && value[start] != ' ') {\n\t            start--;\n\t        }\n\t        while (end < length && value[end] != ' ') {\n\t            end++;\n\t        }\n\t        return value.substring(start, end);\n\t    };\n\t    OldOmniboxAddon.prototype.getRegexToSearch = function (strValue) {\n\t        if (strValue == null) {\n\t            strValue = this.omnibox.getText();\n\t        }\n\t        return new RegExp(Utils_1.Utils.escapeRegexCharacter(strValue), 'i');\n\t    };\n\t    OldOmniboxAddon.prototype.getQueryExpressionBreakDown = function () {\n\t        var _this = this;\n\t        var ret = [];\n\t        var queryWords = this.omnibox.getText().split(' ');\n\t        _.each(queryWords, function (word) {\n\t            ret.push({\n\t                word: word,\n\t                regex: _this.getRegexToSearch(word)\n\t            });\n\t        });\n\t        return ret;\n\t    };\n\t    OldOmniboxAddon.prototype.replace = function (searchValue, newValue) {\n\t        this.omnibox.setText(this.omnibox.getText().replace(searchValue, newValue));\n\t    };\n\t    OldOmniboxAddon.prototype.clearCurrentExpression = function () {\n\t        this.replace(this.getCurrentQueryExpression(), '');\n\t    };\n\t    OldOmniboxAddon.prototype.insertAt = function (at, toInsert) {\n\t        var oldValue = this.omnibox.getText();\n\t        var newValue = [oldValue.slice(0, at), toInsert, oldValue.slice(at)].join('');\n\t        this.omnibox.setText(newValue);\n\t    };\n\t    OldOmniboxAddon.prototype.replaceCurrentExpression = function (newValue) {\n\t        this.replace(this.getCurrentQueryExpression(), newValue);\n\t    };\n\t    OldOmniboxAddon.prototype.buildPopulateOmniboxEventArgs = function () {\n\t        var _this = this;\n\t        var currentQueryExpression = this.getCurrentQueryExpression();\n\t        var ret = {\n\t            rows: [],\n\t            completeQueryExpression: {\n\t                word: this.omnibox.getText(),\n\t                regex: this.getRegexToSearch()\n\t            },\n\t            currentQueryExpression: {\n\t                word: currentQueryExpression,\n\t                regex: this.getRegexToSearch(currentQueryExpression)\n\t            },\n\t            allQueryExpressions: this.getQueryExpressionBreakDown(),\n\t            cursorPosition: this.omnibox.getCursor(),\n\t            clear: function () {\n\t                _this.omnibox.clear();\n\t            },\n\t            clearCurrentExpression: function () {\n\t                _this.clearCurrentExpression();\n\t            },\n\t            replace: function (searchValue, newValue) {\n\t                _this.replace(searchValue, newValue);\n\t            },\n\t            replaceCurrentExpression: function (newValue) {\n\t                _this.replaceCurrentExpression(newValue);\n\t            },\n\t            insertAt: function (at, toInsert) {\n\t                _this.insertAt(at, toInsert);\n\t            },\n\t            closeOmnibox: function () {\n\t                _this.omnibox.magicBox.blur();\n\t            }\n\t        };\n\t        return ret;\n\t    };\n\t    OldOmniboxAddon.prototype.rowsToSuggestions = function (rows) {\n\t        return _.map(rows, function (row) {\n\t            if (!Utils_1.Utils.isNullOrUndefined(row.element)) {\n\t                return new Promise(function (resolve) {\n\t                    resolve([{\n\t                            dom: row.element,\n\t                            index: row.zIndex\n\t                        }]);\n\t                });\n\t            }\n\t            else if (!Utils_1.Utils.isNullOrUndefined(row.deferred)) {\n\t                return new Promise(function (resolve) {\n\t                    row.deferred.then(function (row) {\n\t                        if (row.element != null) {\n\t                            resolve([{\n\t                                    dom: row.element,\n\t                                    index: row.zIndex\n\t                                }]);\n\t                        }\n\t                        else {\n\t                            resolve(null);\n\t                        }\n\t                    });\n\t                });\n\t            }\n\t            return null;\n\t        });\n\t    };\n\t    return OldOmniboxAddon;\n\t}());\n\texports.OldOmniboxAddon = OldOmniboxAddon;\n\n\n/***/ },\n/* 196 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Breadcrumb component displays a summary of the currently active query filters.\n\t *\n\t * For example, when the user selects a {@link Facet} value, the breadcrumbs display this value.\n\t *\n\t * The active filters are obtained by the component by firing an event in the Breadcrumb component.\n\t *\n\t * All other components having an active state can react to this event by providing custom bits of HTML to display\n\t * inside the breadcrumbs.\n\t *\n\t * Thus, it is possible to easily extend the Breadcrumb component using custom code to display information about custom\n\t * states and filters.\n\t *\n\t * See {@link BreadcrumbEvents} for the list of events and parameters sent when a Breadcrumb component is populated.\n\t */\n\tvar Breadcrumb = (function (_super) {\n\t    __extends(Breadcrumb, _super);\n\t    /**\n\t     * Creates a new Breadcrumb component. Binds event on {@link QueryEvents.deferredQuerySuccess} to draw the\n\t     * breadcrumbs.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Breadcrumb component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Breadcrumb(element, options, bindings) {\n\t        var _this = _super.call(this, element, Breadcrumb.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Breadcrumb, options);\n\t        _this.bind.oneRootElement(InitializationEvents_1.InitializationEvents.afterInitialization, function () { return _this.handleAfterInitialization(); });\n\t        _this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.redrawBreadcrumb, function () { return _this.redrawBreadcrumb(); });\n\t        _this.element.style.display = 'none';\n\t        return _this;\n\t    }\n\t    /**\n\t     * Triggers the event to populate the breadcrumbs. Components such as {@link Facet} can populate the breadcrumbs.\n\t     *\n\t     * This method triggers a {@link BreadcrumbEvents.populateBreadcrumb} event with an\n\t     * {@link IPopulateBreadcrumbEventArgs} object (an array) that other components or code can populate.\n\t     * @returns {IBreadcrumbItem[]} A populated breadcrumb item list.\n\t     */\n\t    Breadcrumb.prototype.getBreadcrumbs = function () {\n\t        var args = { breadcrumbs: [] };\n\t        this.bind.trigger(this.root, BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, args);\n\t        this.logger.debug('Retrieved breadcrumbs', args.breadcrumbs);\n\t        this.lastBreadcrumbs = args.breadcrumbs;\n\t        return args.breadcrumbs;\n\t    };\n\t    /**\n\t     * Triggers the event to clear the current breadcrumbs that components such as {@link Facet} can populate.\n\t     *\n\t     * Also triggers a new query and logs the `breadcrumbResetAll` event in the usage analytics.\n\t     */\n\t    Breadcrumb.prototype.clearBreadcrumbs = function () {\n\t        var args = {};\n\t        this.bind.trigger(this.root, BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, args);\n\t        this.logger.debug('Clearing breadcrumbs');\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.breadcrumbResetAll, {});\n\t        this.queryController.executeQuery();\n\t    };\n\t    /**\n\t     * Draws the specified breadcrumb items.\n\t     * @param breadcrumbs The breadcrumb items to draw.\n\t     */\n\t    Breadcrumb.prototype.drawBreadcrumb = function (breadcrumbs) {\n\t        var _this = this;\n\t        Dom_1.$$(this.element).empty();\n\t        if (breadcrumbs.length != 0) {\n\t            this.element.style.display = '';\n\t        }\n\t        else {\n\t            this.element.style.display = 'none';\n\t        }\n\t        var breadcrumbItems = document.createElement('div');\n\t        Dom_1.$$(breadcrumbItems).addClass('coveo-breadcrumb-items');\n\t        this.element.appendChild(breadcrumbItems);\n\t        _.each(breadcrumbs, function (bcrumb) {\n\t            var elem = bcrumb.element;\n\t            Dom_1.$$(elem).addClass('coveo-breadcrumb-item');\n\t            breadcrumbItems.appendChild(elem);\n\t        });\n\t        var clear = Dom_1.$$('div', {\n\t            className: 'coveo-breadcrumb-clear-all',\n\t            title: Strings_1.l('ClearAllFilters'),\n\t            tabindex: 0\n\t        }).el;\n\t        var clearIcon = Dom_1.$$('div', { className: 'coveo-icon coveo-breadcrumb-icon-clear-all' }).el;\n\t        clear.appendChild(clearIcon);\n\t        if (this.searchInterface.isNewDesign()) {\n\t            var clearText = document.createElement('div');\n\t            Dom_1.$$(clearText).text(Strings_1.l('Clear', ''));\n\t            clear.appendChild(clearText);\n\t            this.element.appendChild(clear);\n\t        }\n\t        else {\n\t            this.element.insertBefore(clear, this.element.firstChild);\n\t        }\n\t        var clearAction = function () { return _this.clearBreadcrumbs(); };\n\t        this.bind.on(clear, 'click', clearAction);\n\t        this.bind.on(clear, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clearAction));\n\t    };\n\t    Breadcrumb.prototype.redrawBreadcrumb = function () {\n\t        this.lastBreadcrumbs ? this.drawBreadcrumb(this.lastBreadcrumbs) : this.drawBreadcrumb(this.getBreadcrumbs());\n\t    };\n\t    Breadcrumb.prototype.handleDeferredQuerySuccess = function () {\n\t        this.drawBreadcrumb(this.getBreadcrumbs());\n\t    };\n\t    Breadcrumb.prototype.handleAfterInitialization = function () {\n\t        var _this = this;\n\t        // We must bind to these events after the initialization to make sure the breadcrumb generation\n\t        // is made with updated components. (E.G facet, facetrange, ...)\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function () { return _this.handleDeferredQuerySuccess(); });\n\t    };\n\t    return Breadcrumb;\n\t}(Component_1.Component));\n\tBreadcrumb.ID = 'Breadcrumb';\n\tBreadcrumb.options = {};\n\texports.Breadcrumb = Breadcrumb;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Breadcrumb);\n\n\n/***/ },\n/* 197 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path='../Facet/Facet.ts' />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Facet_1 = __webpack_require__(158);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar TemplateHelpers_1 = __webpack_require__(177);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar FacetRangeQueryController_1 = __webpack_require__(96);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Globalize = __webpack_require__(30);\n\t/**\n\t * The FacetRange component displays a {@link Facet} whose values are expressed as ranges. These ranges are computed\n\t * from the results of the current query.\n\t *\n\t * This component inherits from the Facet component. Thus, any option available for a Facet component is also available\n\t * for a FacetRange component. This also implies that you must specify a [field]{@link Facet.options.field} value for\n\t * this component to work.\n\t */\n\tvar FacetRange = (function (_super) {\n\t    __extends(FacetRange, _super);\n\t    /**\n\t     * Creates a new FacetRange component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FacetRange component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function FacetRange(element, options, bindings) {\n\t        var _this = _super.call(this, element, ComponentOptions_1.ComponentOptions.initComponentOptions(element, FacetRange, options), bindings, FacetRange.ID) || this;\n\t        _this.element = element;\n\t        _this.options.enableFacetSearch = false;\n\t        _this.options.enableSettings = false;\n\t        _this.options.includeInOmnibox = false;\n\t        _this.options.enableMoreLess = false;\n\t        return _this;\n\t    }\n\t    FacetRange.prototype.getValueCaption = function (facetValue) {\n\t        var ret = _super.prototype.getValueCaption.call(this, facetValue);\n\t        if (Utils_1.Utils.exists(this.options.valueCaption) && typeof this.options.valueCaption == 'string') {\n\t            var startEnd = /^(.*)\\.\\.(.*)$/.exec(facetValue.value);\n\t            if (startEnd != null) {\n\t                var helper = TemplateHelpers_1.TemplateHelpers.getHelper(this.options.valueCaption);\n\t                if (helper != null) {\n\t                    ret = helper.call(this, startEnd[1]) + ' - ' + helper.call(this, startEnd[2]);\n\t                }\n\t                else {\n\t                    var start = startEnd[1].match(/^[\\+\\-]?[0-9]+(\\.[0-9]+)?$/) ? Number(startEnd[1]) : DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(startEnd[1]);\n\t                    var end = startEnd[2].match(/^[\\+\\-]?[0-9]+(\\.[0-9]+)?$/) ? Number(startEnd[2]) : DateUtils_1.DateUtils.convertFromJsonDateIfNeeded(startEnd[2]);\n\t                    ret = Globalize.format(start, this.options.valueCaption) + ' - ' + Globalize.format(end, this.options.valueCaption);\n\t                }\n\t            }\n\t        }\n\t        return ret;\n\t    };\n\t    FacetRange.prototype.initFacetQueryController = function () {\n\t        this.facetQueryController = new FacetRangeQueryController_1.FacetRangeQueryController(this);\n\t    };\n\t    FacetRange.prototype.processNewGroupByResults = function (groupByResult) {\n\t        var _this = this;\n\t        if (groupByResult != null) {\n\t            if (this.options.ranges == null && (!this.keepDisplayedValuesNextTime || this.values.hasSelectedOrExcludedValues())) {\n\t                this.keepDisplayedValuesNextTime = false;\n\t                groupByResult.values.sort(function (valueA, valueB) {\n\t                    var startEndA = valueA.value.split('..');\n\t                    var startEndB = valueB.value.split('..');\n\t                    if (_this.options.dateField) {\n\t                        return Date.parse(startEndA[0]) - Date.parse(startEndB[0]);\n\t                    }\n\t                    return Number(startEndA[0]) - Number(startEndB[0]);\n\t                });\n\t            }\n\t        }\n\t        _super.prototype.processNewGroupByResults.call(this, groupByResult);\n\t    };\n\t    return FacetRange;\n\t}(Facet_1.Facet));\n\tFacetRange.ID = 'FacetRange';\n\tFacetRange.parent = Facet_1.Facet;\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tFacetRange.options = {\n\t    /**\n\t     * Specifies whether the field for which you require ranges is a date field.\n\t     *\n\t     * This allows the component to correctly build the outgoing {@link IGroupByRequest}.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    dateField: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies an array of {@link IRangeValue} to use as Facet values.\n\t     *\n\t     * It is only possible to specify a value for this option in the {@link init} call of your search interface. You\n\t     * cannot set it directly as an HTML attribute.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * var myRanges = [\n\t     *   {\n\t     *      start: 0,\n\t     *      end: 100,\n\t     *      label: \"0 - 100\",\n\t     *      endInclusive: false\n\t     *    },\n\t     *    {\n\t     *      start: 100,\n\t     *      end: 200,\n\t     *      label: \"100 - 200\",\n\t     *      endInclusive: false\n\t     *    },\n\t     *    {\n\t     *      start: 200,\n\t     *      end: 300,\n\t     *      label: \"200 - 300\",\n\t     *      endInclusive: false\n\t     *    }\n\t     * ]\n\t     *\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    FacetRange : {\n\t     *        ranges : myRanges\n\t     *    }\n\t     * })\n\t     * ```\n\t     *\n\t     * **Note:**\n\t     * > Ranges can overlap.\n\t     *\n\t     * By default, the index automatically generates the ranges. However, the index cannot automatically generate the\n\t     * ranges if the [field]{@link Facet.options.field} you specify for the FacetRange component is generated by a query\n\t     * function (see [Query Function](https://developers.coveo.com/x/XQCq)). When this is the case, you must specify the\n\t     * ranges at query time.\n\t     */\n\t    ranges: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    })\n\t};\n\texports.FacetRange = FacetRange;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FacetRange);\n\n\n/***/ },\n/* 198 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar QueryStateModel_2 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\t/**\n\t * The Pager component attaches itself to a `div` element and renders widgets that allow the end user to navigate\n\t * through the different result pages.\n\t *\n\t * This component takes care of triggering a query with the correct result range whenever the end user selects a page or\n\t * uses the navigation buttons (**Previous** and **Next**).\n\t */\n\tvar Pager = (function (_super) {\n\t    __extends(Pager, _super);\n\t    /**\n\t     * Creates a new Pager. Binds multiple query events ({@link QueryEvents.newQuery}, {@link QueryEvents.buildingQuery},\n\t     * {@link QueryEvents.querySuccess}, {@link QueryEvents.queryError} and {@link QueryEvents.noResults}. Renders itself\n\t     * on every query success.\n\t     * @param element The HTMLElement on which to instantiate the component (normally a `div`).\n\t     * @param options The options for the Pager component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Pager(element, options, bindings) {\n\t        var _this = _super.call(this, element, Pager.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.listenToQueryStateChange = true;\n\t        _this.ignoreNextQuerySuccess = false;\n\t        // The normal behavior of this component is to reset to page 1 when a new\n\t        // query is performed by other components (i.e. not pagers).\n\t        //\n\t        // This behavior is overridden when the 'first' state is\n\t        // programmatically modified.\n\t        _this.needToReset = true;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Pager, options);\n\t        _this.currentPage = 1;\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, function (args) { return _this.handleNewQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (args) { return _this.handleDoneBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleQueryError(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.noResults, function (args) { return _this.handleNoResults(args); });\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_2.QUERY_STATE_ATTRIBUTES.FIRST, function (data) { return _this.handleQueryStateModelChanged(data); });\n\t        _this.list = document.createElement('ul');\n\t        Dom_1.$$(_this.list).addClass('coveo-pager-list');\n\t        element.appendChild(_this.list);\n\t        return _this;\n\t    }\n\t    /**\n\t     * Sets the current page, then executes a query.\n\t     *\n\t     * Also logs an event in the usage analytics (`pageNumber` by default) with the new current page number as meta data.\n\t     *\n\t     * @param pageNumber The page number to navigate to.\n\t     * @param analyticCause The event to log in the usage analytics.\n\t     */\n\t    Pager.prototype.setPage = function (pageNumber, analyticCause) {\n\t        if (analyticCause === void 0) { analyticCause = AnalyticsActionListMeta_1.analyticsActionCauseList.pagerNumber; }\n\t        Assert_1.Assert.exists(pageNumber);\n\t        this.currentPage = Math.max(Math.min(pageNumber, this.getMaxNumberOfPagesForCurrentResultsPerPage()), 1);\n\t        this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n\t        this.usageAnalytics.logCustomEvent(analyticCause, { pagerNumber: this.currentPage }, this.element);\n\t        this.queryController.executeQuery({\n\t            ignoreWarningSearchEvent: true,\n\t            keepLastSearchUid: true,\n\t            origin: this\n\t        });\n\t    };\n\t    /**\n\t     * Navigates to the previous page, then executes a query.\n\t     *\n\t     * Also logs the `pagePrevious` event in the usage analytics with the new current page number as meta data.\n\t     */\n\t    Pager.prototype.previousPage = function () {\n\t        this.setPage(this.currentPage - 1, AnalyticsActionListMeta_1.analyticsActionCauseList.pagerPrevious);\n\t    };\n\t    /**\n\t     * Navigates to the next page, then executes a query.\n\t     *\n\t     * Also logs the `pageNext` event in the usage analytics with the new current page number as meta data.\n\t     */\n\t    Pager.prototype.nextPage = function () {\n\t        this.setPage(this.currentPage + 1, AnalyticsActionListMeta_1.analyticsActionCauseList.pagerNext);\n\t    };\n\t    Pager.prototype.getMaxNumberOfPagesForCurrentResultsPerPage = function () {\n\t        return Math.ceil(this.options.maximumNumberOfResultsFromIndex / this.getNumberOfResultsPerPage());\n\t    };\n\t    Pager.prototype.handleNewQuery = function (data) {\n\t        var triggeredByPager = data && data.origin && data.origin.type == Pager.ID;\n\t        if (this.needToReset && !triggeredByPager) {\n\t            this.currentPage = 1;\n\t            this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n\t        }\n\t        this.needToReset = true;\n\t    };\n\t    Pager.prototype.updateQueryStateModel = function (attrValue) {\n\t        this.listenToQueryStateChange = false;\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.first, attrValue);\n\t        this.listenToQueryStateChange = true;\n\t    };\n\t    Pager.prototype.handleQueryError = function () {\n\t        this.reset();\n\t    };\n\t    Pager.prototype.handleQuerySuccess = function (data) {\n\t        var _this = this;\n\t        this.reset();\n\t        if (this.ignoreNextQuerySuccess) {\n\t            this.ignoreNextQuerySuccess = false;\n\t        }\n\t        else {\n\t            Assert_1.Assert.isNotUndefined(data);\n\t            var firstResult = data.query.firstResult;\n\t            var count = data.results.totalCountFiltered;\n\t            var pagerBoundary = this.computePagerBoundary(firstResult, count);\n\t            this.currentPage = pagerBoundary.currentPage;\n\t            if (pagerBoundary.end - pagerBoundary.start > 0) {\n\t                var _loop_1 = function (i) {\n\t                    var listItemValue = document.createElement('a');\n\t                    Dom_1.$$(listItemValue).addClass(['coveo-pager-list-item-text', 'coveo-pager-anchor']);\n\t                    Dom_1.$$(listItemValue).text(i.toString(10));\n\t                    var listItem = Dom_1.$$('li', { className: 'coveo-pager-list-item', tabindex: 0 }).el;\n\t                    if (i == this_1.currentPage) {\n\t                        Dom_1.$$(listItem).addClass('coveo-active');\n\t                    }\n\t                    (function (pageNumber) {\n\t                        var clickAction = function () { return _this.handleClickPage(pageNumber); };\n\t                        Dom_1.$$(listItem).on('click', clickAction);\n\t                        Dom_1.$$(listItem).on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clickAction));\n\t                    })(i);\n\t                    listItem.appendChild(listItemValue);\n\t                    this_1.list.appendChild(listItem);\n\t                };\n\t                var this_1 = this;\n\t                for (var i = pagerBoundary.start; i <= pagerBoundary.end; i++) {\n\t                    _loop_1(i);\n\t                }\n\t                if (this.options.enableNavigationButton && pagerBoundary.lastResultPage > 1) {\n\t                    this.renderNavigationButton(pagerBoundary, this.list);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    Pager.prototype.handleNoResults = function (data) {\n\t        var lastValidPage;\n\t        if (data.results.totalCount > 0) {\n\t            // First scenario : The index returned less results than expected (because of folding).\n\t            // Recalculate the last valid page, and change to that new page.\n\t            var possibleValidPage = this.computePagerBoundary(data.results.totalCountFiltered, data.results.totalCount).lastResultPage;\n\t            if (this.currentPage > possibleValidPage) {\n\t                lastValidPage = possibleValidPage;\n\t            }\n\t        }\n\t        else if (this.currentPage > this.getMaxNumberOfPagesForCurrentResultsPerPage()) {\n\t            // Second scenario : Someone tried to access a non-valid page by the URL for example, which is  higher than the current possible with the number of\n\t            // possible results. The last valid page will be the maximum number of results avaiable from the index.\n\t            lastValidPage = this.getMaxNumberOfPagesForCurrentResultsPerPage();\n\t        }\n\t        // This needs to be deferred because we still want all the \"querySuccess\" callbacks the complete their execution\n\t        // before triggering/queuing the next query;\n\t        // if we cannot find a lastValidPage to go to, do nothing : this means it's a query that simply return nothing.\n\t        if (lastValidPage != null) {\n\t            this.currentPage = lastValidPage;\n\t            data.retryTheQuery = true;\n\t            this.needToReset = false;\n\t            this.ignoreNextQuerySuccess = false;\n\t            this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n\t        }\n\t    };\n\t    Pager.prototype.reset = function () {\n\t        Dom_1.$$(this.list).empty();\n\t    };\n\t    Pager.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        var eventArgs = this.getQueryEventArgs();\n\t        data.queryBuilder.firstResult = eventArgs.first;\n\t        // Set the number of results only if it was not already set by external code\n\t        // Most of the time this will be set by either : the SearchInterface with the resultsPerPage option\n\t        // Or by the ResultsPerPage component (so the end user decides).\n\t        // Pager will realistically never set this value itself.\n\t        if (data.queryBuilder.numberOfResults == null) {\n\t            data.queryBuilder.numberOfResults = eventArgs.count;\n\t        }\n\t    };\n\t    Pager.prototype.handleDoneBuildingQuery = function (data) {\n\t        // This can change on every query, for example using the ResultsPerPage component or with external code.\n\t        this.lastNumberOfResultsPerPage = data.queryBuilder.numberOfResults;\n\t    };\n\t    Pager.prototype.computePagerBoundary = function (firstResult, totalCount) {\n\t        var resultPerPage = this.getNumberOfResultsPerPage();\n\t        var currentPage = Math.floor(firstResult / resultPerPage) + 1;\n\t        var lastPageNumber = Math.min(Math.ceil(totalCount / resultPerPage), this.getMaxNumberOfPagesForCurrentResultsPerPage());\n\t        lastPageNumber = Math.max(lastPageNumber, 1);\n\t        var halfLength = Math.floor(this.options.numberOfPages / 2);\n\t        var firstPageNumber = currentPage - halfLength;\n\t        firstPageNumber = Math.max(firstPageNumber, 1);\n\t        var endPageNumber = firstPageNumber + this.options.numberOfPages - 1;\n\t        endPageNumber = Math.min(endPageNumber, lastPageNumber);\n\t        return {\n\t            start: firstPageNumber,\n\t            end: endPageNumber,\n\t            lastResultPage: lastPageNumber,\n\t            currentPage: currentPage\n\t        };\n\t    };\n\t    Pager.prototype.renderNavigationButton = function (pagerBoundary, list) {\n\t        var _this = this;\n\t        if (this.currentPage > 1) {\n\t            var previous = document.createElement('li');\n\t            Dom_1.$$(previous).addClass(['coveo-pager-previous', 'coveo-pager-anchor', 'coveo-pager-list-item']);\n\t            var buttonLink = document.createElement('a');\n\t            var buttonImg = document.createElement('span');\n\t            buttonLink.appendChild(buttonImg);\n\t            buttonLink.setAttribute('title', Strings_1.l('Previous'));\n\t            previous.appendChild(buttonLink);\n\t            Dom_1.$$(previous).on('click', function () { return _this.handleClickPrevious(); });\n\t            this.list.insertBefore(previous, this.list.firstChild);\n\t        }\n\t        if (this.currentPage < pagerBoundary.lastResultPage) {\n\t            var next = document.createElement('li');\n\t            Dom_1.$$(next).addClass(['coveo-pager-next', 'coveo-pager-anchor', 'coveo-pager-list-item']);\n\t            var buttonLink = document.createElement('a');\n\t            var buttonImg = document.createElement('span');\n\t            buttonLink.appendChild(buttonImg);\n\t            buttonLink.setAttribute('title', Strings_1.l('Next'));\n\t            next.appendChild(buttonLink);\n\t            Dom_1.$$(next).on('click', function () { return _this.handleClickNext(); });\n\t            this.list.appendChild(next);\n\t        }\n\t    };\n\t    Pager.prototype.handleQueryStateModelChanged = function (data) {\n\t        if (!this.listenToQueryStateChange) {\n\t            return;\n\t        }\n\t        Assert_1.Assert.exists(data);\n\t        this.needToReset = false;\n\t        var firstResult = data.value;\n\t        this.currentPage = this.fromFirstResultsToPageNumber(firstResult);\n\t    };\n\t    Pager.prototype.handleClickPage = function (pageNumber) {\n\t        Assert_1.Assert.exists(pageNumber);\n\t        this.setPage(pageNumber);\n\t    };\n\t    Pager.prototype.handleClickPrevious = function () {\n\t        this.previousPage();\n\t    };\n\t    Pager.prototype.handleClickNext = function () {\n\t        this.nextPage();\n\t    };\n\t    Pager.prototype.fromFirstResultsToPageNumber = function (firstResult) {\n\t        return (firstResult / this.getNumberOfResultsPerPage()) + 1;\n\t    };\n\t    Pager.prototype.getNumberOfResultsPerPage = function () {\n\t        // If there was no query successful yet, we use the query controller value as a fallback.\n\t        // If it's 0 for some reason (someone wants no results .. ? ), then we fallback to 10 as the \"standard\" value.\n\t        // This ensure that we do not divide by 0 in the pager.\n\t        if (this.lastNumberOfResultsPerPage != null) {\n\t            return this.lastNumberOfResultsPerPage;\n\t        }\n\t        return this.queryController.options.resultsPerPage == 0 ? 10 : this.queryController.options.resultsPerPage;\n\t    };\n\t    Pager.prototype.getFirstResultNumber = function (pageNumber) {\n\t        if (pageNumber === void 0) { pageNumber = this.currentPage; }\n\t        return (pageNumber - 1) * this.getNumberOfResultsPerPage();\n\t    };\n\t    Pager.prototype.getQueryEventArgs = function () {\n\t        return {\n\t            count: this.getNumberOfResultsPerPage(),\n\t            first: this.getFirstResultNumber()\n\t        };\n\t    };\n\t    return Pager;\n\t}(Component_1.Component));\n\tPager.ID = 'Pager';\n\t/**\n\t * The options for the Pager\n\t * @componentOptions\n\t */\n\tPager.options = {\n\t    /**\n\t     * Specifies how many page links to display in the pager.\n\t     *\n\t     * Default value is `5` on a desktop computers and `3` on a mobile device. Minimum value is `1`.\n\t     */\n\t    numberOfPages: ComponentOptions_1.ComponentOptions.buildNumberOption({\n\t        defaultFunction: function () {\n\t            if (DeviceUtils_1.DeviceUtils.isMobileDevice()) {\n\t                return 3;\n\t            }\n\t            else {\n\t                return 5;\n\t            }\n\t        },\n\t        min: 1\n\t    }),\n\t    /**\n\t     * Specifies whether the **Previous** and **Next** buttons should appear at each end of the pager when appropriate.\n\t     *\n\t     * The default value is `true`.\n\t     */\n\t    enableNavigationButton: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the maximum number of pages to display if enough results are available.\n\t     *\n\t     * This property is typically set when the default number of accessible results from the index has been changed from its default value of `1000` (10 results per page X 100 `maxNumberOfPages`).\n\t     * Default value is `100`\n\t     *\n\t     * @deprecated This is a deprecated option. The `Pager` now automatically adapts itself on each new query, so you no longer need to specify a value for this option. However, if the default maximum number of accessible results value was changed on your Coveo index, you should use the [`maximumNumberOfResultsFromIndex`]{@link Pager.options.maximumNumberOfResultsFromIndex} option to specify the new value.\n\t     */\n\t    maxNumberOfPages: ComponentOptions_1.ComponentOptions.buildNumberOption({\n\t        defaultValue: undefined,\n\t        deprecated: 'This is a deprecated option. The pager will automatically adapt itself on each new query. You no longer need to specify this option. Use maximumNumberOfResultsFromIndex instead.'\n\t    }),\n\t    /**\n\t     * Specifies the maximum number of results that the index can return for any query.\n\t     *\n\t     * Default value is `1000` in a Coveo index.\n\t     *\n\t     * If this value was modified in your Coveo index, you must specify the new value in this option for the Pager component to work properly\n\t     */\n\t    maximumNumberOfResultsFromIndex: ComponentOptions_1.ComponentOptions.buildNumberOption({\n\t        defaultValue: 1000\n\t    })\n\t};\n\texports.Pager = Pager;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Pager);\n\n\n/***/ },\n/* 199 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar _ = __webpack_require__(16);\n\tvar Strings_1 = __webpack_require__(37);\n\t/**\n\t * The ResultsPerPage component attaches itself to a `div` and allows the end user to choose how many results to\n\t * display per page.\n\t *\n\t * **Note:** Adding a ResultPerPage component to your page overrides the value of\n\t * {@link SearchInterface.options.resultsPerPage}.\n\t */\n\tvar ResultsPerPage = (function (_super) {\n\t    __extends(ResultsPerPage, _super);\n\t    /**\n\t     * Creates a new ResultsPerPage. The component renders itself on every query success.\n\t     * @param element The HTMLElement on which to instantiate the component (normally a `div`).\n\t     * @param options The options for the ResultsPerPage component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ResultsPerPage(element, options, bindings) {\n\t        var _this = _super.call(this, element, ResultsPerPage.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultsPerPage, options);\n\t        _this.currentResultsPerPage = _this.getInitialChoice();\n\t        _this.queryController.options.resultsPerPage = _this.currentResultsPerPage;\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleQueryError(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.noResults, function (args) { return _this.handleNoResults(); });\n\t        _this.initComponent(element);\n\t        return _this;\n\t    }\n\t    /**\n\t     * Sets the current number of results per page, then executes a query.\n\t     *\n\t     * Also logs an event in the usage analytics (`pagerResize` by default) with the new current number of results per\n\t     * page as meta data.\n\t     * @param resultsPerPage The new number of results per page to select.\n\t     * @param analyticCause The event to log in the usage analytics.\n\t     */\n\t    ResultsPerPage.prototype.setResultsPerPage = function (resultsPerPage, analyticCause) {\n\t        if (analyticCause === void 0) { analyticCause = AnalyticsActionListMeta_1.analyticsActionCauseList.pagerResize; }\n\t        Assert_1.Assert.exists(resultsPerPage);\n\t        Assert_1.Assert.check(this.options.choicesDisplayed.indexOf(resultsPerPage) != -1, 'The specified number of results is not available in the options.');\n\t        this.currentResultsPerPage = resultsPerPage;\n\t        this.queryController.options.resultsPerPage = this.currentResultsPerPage;\n\t        this.usageAnalytics.logCustomEvent(analyticCause, { currentResultsPerPage: this.currentResultsPerPage }, this.element);\n\t        this.queryController.executeQuery({\n\t            ignoreWarningSearchEvent: true,\n\t            keepLastSearchUid: true,\n\t            origin: this\n\t        });\n\t    };\n\t    ResultsPerPage.prototype.getInitialChoice = function () {\n\t        var initialChoice = this.options.choicesDisplayed[0];\n\t        if (this.options.initialChoice !== undefined) {\n\t            if (this.options.choicesDisplayed.indexOf(this.options.initialChoice) > -1) {\n\t                initialChoice = this.options.initialChoice;\n\t            }\n\t            else {\n\t                this.logger.warn('The initial number of results is not within the choices displayed. Consider setting a value that can be selected. The first choice will be selected instead.');\n\t            }\n\t        }\n\t        return initialChoice;\n\t    };\n\t    ResultsPerPage.prototype.initComponent = function (element) {\n\t        this.span = Dom_1.$$('span', {\n\t            className: 'coveo-results-per-page-text'\n\t        }, Strings_1.l('ResultsPerPage')).el;\n\t        element.appendChild(this.span);\n\t        this.list = Dom_1.$$('ul', {\n\t            className: 'coveo-results-per-page-list'\n\t        }).el;\n\t        element.appendChild(this.list);\n\t    };\n\t    ResultsPerPage.prototype.render = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.span).removeClass('coveo-results-per-page-no-results');\n\t        var numResultsList = this.options.choicesDisplayed;\n\t        var _loop_1 = function () {\n\t            var listItem = Dom_1.$$('li', {\n\t                className: 'coveo-results-per-page-list-item',\n\t                tabindex: 0\n\t            });\n\t            if (numResultsList[i] == this_1.currentResultsPerPage) {\n\t                listItem.addClass('coveo-active');\n\t            }\n\t            (function (resultsPerPage) {\n\t                var clickAction = function () { return _this.handleClickPage(numResultsList[resultsPerPage]); };\n\t                listItem.on('click', clickAction);\n\t                listItem.on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clickAction));\n\t            })(i);\n\t            listItem.el.appendChild(Dom_1.$$('a', {\n\t                className: 'coveo-results-per-page-list-item-text'\n\t            }, numResultsList[i].toString()).el);\n\t            this_1.list.appendChild(listItem.el);\n\t        };\n\t        var this_1 = this;\n\t        for (var i = 0; i < numResultsList.length; i++) {\n\t            _loop_1();\n\t        }\n\t    };\n\t    ResultsPerPage.prototype.handleQueryError = function () {\n\t        this.reset();\n\t    };\n\t    ResultsPerPage.prototype.handleNoResults = function () {\n\t        this.reset();\n\t    };\n\t    ResultsPerPage.prototype.handleQuerySuccess = function (data) {\n\t        if (data.results.results.length != 0) {\n\t            this.reset();\n\t            this.render();\n\t        }\n\t    };\n\t    ResultsPerPage.prototype.handleClickPage = function (resultsPerPage) {\n\t        Assert_1.Assert.exists(resultsPerPage);\n\t        this.setResultsPerPage(resultsPerPage);\n\t    };\n\t    ResultsPerPage.prototype.reset = function () {\n\t        Dom_1.$$(this.span).addClass('coveo-results-per-page-no-results');\n\t        Dom_1.$$(this.list).empty();\n\t    };\n\t    return ResultsPerPage;\n\t}(Component_1.Component));\n\tResultsPerPage.ID = 'ResultsPerPage';\n\t/**\n\t * The options for the ResultsPerPage\n\t * @componentOptions\n\t */\n\tResultsPerPage.options = {\n\t    /**\n\t     * Specifies the possible values of number of results to display per page that the end user can select from.\n\t     *\n\t     * See also {@link ResultsPerPage.options.initialChoice}.\n\t     *\n\t     * Default value is `[10, 25, 50, 100]`.\n\t     */\n\t    choicesDisplayed: ComponentOptions_1.ComponentOptions.buildCustomListOption(function (list) {\n\t        var values = _.map(list, function (value) {\n\t            return parseInt(value, 10);\n\t        });\n\t        return values.length == 0 ? null : values;\n\t    }, {\n\t        defaultFunction: function () {\n\t            if (DeviceUtils_1.DeviceUtils.isMobileDevice()) {\n\t                return [10, 25, 50];\n\t            }\n\t            else {\n\t                return [10, 25, 50, 100];\n\t            }\n\t        },\n\t    }),\n\t    /**\n\t     * Specifies the value to select by default for the number of results to display per page.\n\t     *\n\t     * Default value is the first value of {@link ResultsPerPage.options.choicesDisplayed}.\n\t     */\n\t    initialChoice: ComponentOptions_1.ComponentOptions.buildNumberOption()\n\t};\n\texports.ResultsPerPage = ResultsPerPage;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultsPerPage);\n\n\n/***/ },\n/* 200 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar ResultLayoutEvents_1 = __webpack_require__(52);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Model_1 = __webpack_require__(100);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar ResponsiveResultLayout_1 = __webpack_require__(201);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar Strings_1 = __webpack_require__(37);\n\texports.defaultLayout = 'list';\n\t/**\n\t * The ResultLayout component allows the end user to switch between multiple {@link ResultList} components that have\n\t * different {@link ResultList.options.layout} values.\n\t *\n\t * This component automatically populates itself with buttons to switch between the ResultList components that have a\n\t * valid layout value (see the {@link ValidLayout} type).\n\t *\n\t * See also the [Result Layouts](https://developers.coveo.com/x/yQUvAg) documentation.\n\t */\n\tvar ResultLayout = (function (_super) {\n\t    __extends(ResultLayout, _super);\n\t    /**\n\t     * Creates a new ResultLayout component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultLayout component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ResultLayout(element, options, bindings) {\n\t        var _this = _super.call(this, element, ResultLayout.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultLayout, options);\n\t        _this.currentActiveLayouts = {};\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.LAYOUT, _this.handleQueryStateChanged.bind(_this));\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (args) { return _this.handleQueryError(args); });\n\t        _this.resultLayoutSection = Dom_1.$$(_this.element).closest('.coveo-result-layout-section');\n\t        _this.bind.oneRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.populate(); });\n\t        _this.bind.oneRootElement(InitializationEvents_1.InitializationEvents.afterInitialization, function () { return _this.handleQueryStateChanged(); });\n\t        ResponsiveResultLayout_1.ResponsiveResultLayout.init(_this.root, _this, _this.options);\n\t        return _this;\n\t    }\n\t    /**\n\t     * Changes the current layout.\n\t     *\n\t     * Also logs a `resultLayoutChange` event in the usage analytics with the new layout as metadeta.\n\t     *\n\t     * Triggers a new query.\n\t     *\n\t     * @param layout The new layout. The page must contain a valid {@link ResultList} component with a matching\n\t     * {@link ResultList.options.layout} value for this method to work.\n\t     */\n\t    ResultLayout.prototype.changeLayout = function (layout) {\n\t        Assert_1.Assert.check(this.isLayoutDisplayedByButton(layout), 'Layout not available or invalid');\n\t        if (layout !== this.currentLayout || this.getModelValue() === '') {\n\t            this.setModelValue(layout);\n\t            var lastResults = this.queryController.getLastResults();\n\t            this.setLayout(layout, lastResults);\n\t            if (lastResults) {\n\t                this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.resultsLayoutChange, {\n\t                    resultsLayoutChangeTo: layout\n\t                }, this.element);\n\t            }\n\t            else {\n\t                this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.resultsLayoutChange, {\n\t                    resultsLayoutChangeTo: layout\n\t                });\n\t                this.queryController.executeQuery();\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Gets the current layout (`list`, `card` or `table`).\n\t     * @returns {string} The current current layout.\n\t     */\n\t    ResultLayout.prototype.getCurrentLayout = function () {\n\t        return this.currentLayout;\n\t    };\n\t    ResultLayout.prototype.disableLayouts = function (layouts) {\n\t        var _this = this;\n\t        if (Utils_1.Utils.isNonEmptyArray(layouts)) {\n\t            _.each(layouts, function (layout) {\n\t                _this.disableLayout(layout);\n\t            });\n\t            var remainingValidLayouts = _.difference(_.keys(this.currentActiveLayouts), layouts);\n\t            if (remainingValidLayouts && remainingValidLayouts[0]) {\n\t                this.changeLayout(remainingValidLayouts[0]);\n\t            }\n\t            else {\n\t                this.logger.error('Cannot disable the last valid layout ... Re-enabling the first one possible');\n\t                var firstPossibleValidLayout = _.keys(this.currentActiveLayouts)[0];\n\t                this.enableLayout(firstPossibleValidLayout);\n\t                this.setLayout(firstPossibleValidLayout);\n\t            }\n\t        }\n\t    };\n\t    ResultLayout.prototype.enableLayouts = function (layouts) {\n\t        var _this = this;\n\t        _.each(layouts, function (layout) {\n\t            _this.enableLayout(layout);\n\t        });\n\t    };\n\t    ResultLayout.prototype.disableLayout = function (layout) {\n\t        if (this.isLayoutDisplayedByButton(layout)) {\n\t            this.hideButton(layout);\n\t        }\n\t    };\n\t    ResultLayout.prototype.enableLayout = function (layout) {\n\t        if (this.isLayoutDisplayedByButton(layout)) {\n\t            this.showButton(layout);\n\t            this.updateSelectorAppearance();\n\t        }\n\t    };\n\t    ResultLayout.prototype.hideButton = function (layout) {\n\t        if (this.isLayoutDisplayedByButton(layout)) {\n\t            var btn = this.currentActiveLayouts[layout].button;\n\t            Dom_1.$$(btn.el).hide();\n\t            btn.visible = false;\n\t            this.updateSelectorAppearance();\n\t        }\n\t    };\n\t    ResultLayout.prototype.showButton = function (layout) {\n\t        if (this.isLayoutDisplayedByButton(layout)) {\n\t            var btn = this.currentActiveLayouts[layout].button;\n\t            Dom_1.$$(btn.el).show();\n\t            btn.visible = true;\n\t        }\n\t    };\n\t    ResultLayout.prototype.setLayout = function (layout, results) {\n\t        this.isLayoutDisplayedByButton(layout);\n\t        if (this.currentLayout) {\n\t            Dom_1.$$(this.currentActiveLayouts[this.currentLayout].button.el).removeClass('coveo-selected');\n\t        }\n\t        Dom_1.$$(this.currentActiveLayouts[layout].button.el).addClass('coveo-selected');\n\t        this.currentLayout = layout;\n\t        Dom_1.$$(this.element).trigger(ResultListEvents_1.ResultListEvents.changeLayout, { layout: layout, results: results });\n\t    };\n\t    ResultLayout.prototype.handleQuerySuccess = function (args) {\n\t        if (args.results.results.length === 0 || !this.shouldShowSelector()) {\n\t            this.hide();\n\t        }\n\t        else {\n\t            this.show();\n\t        }\n\t    };\n\t    ResultLayout.prototype.handleQueryStateChanged = function (args) {\n\t        var modelLayout = this.getModelValue();\n\t        var newLayout = _.find(_.keys(this.currentActiveLayouts), function (l) { return l === modelLayout; });\n\t        if (newLayout !== undefined) {\n\t            this.setLayout(newLayout);\n\t        }\n\t        else {\n\t            this.setLayout(_.keys(this.currentActiveLayouts)[0]);\n\t        }\n\t    };\n\t    ResultLayout.prototype.handleQueryError = function (args) {\n\t        this.hide();\n\t    };\n\t    ResultLayout.prototype.updateSelectorAppearance = function () {\n\t        if (this.shouldShowSelector()) {\n\t            this.show();\n\t        }\n\t        else {\n\t            this.hide();\n\t        }\n\t    };\n\t    ResultLayout.prototype.populate = function () {\n\t        var _this = this;\n\t        var populateArgs = { layouts: [] };\n\t        Dom_1.$$(this.root).trigger(ResultLayoutEvents_1.ResultLayoutEvents.populateResultLayout, populateArgs);\n\t        _.each(populateArgs.layouts, function (layout) { return Assert_1.Assert.check(_.contains(ResultLayout.validLayouts, layout), 'Invalid layout'); });\n\t        if (!_.isEmpty(populateArgs.layouts)) {\n\t            _.each(populateArgs.layouts, function (layout) { return _this.addButton(layout); });\n\t            if (!this.shouldShowSelector()) {\n\t                this.hide();\n\t            }\n\t        }\n\t    };\n\t    ResultLayout.prototype.addButton = function (layout) {\n\t        var _this = this;\n\t        var btn = Dom_1.$$('span', {\n\t            className: 'coveo-result-layout-selector',\n\t            tabindex: 0\n\t        }, Dom_1.$$('span', { className: 'coveo-result-layout-selector-caption' }, Strings_1.l(layout)));\n\t        btn.prepend(Dom_1.$$('span', { className: \"coveo-icon coveo-sprites-\" + layout + \"-layout\" }).el);\n\t        if (layout === this.currentLayout) {\n\t            btn.addClass('coveo-selected');\n\t        }\n\t        var activateAction = function () { return _this.changeLayout(layout); };\n\t        btn.on('click', activateAction);\n\t        btn.on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, activateAction));\n\t        Dom_1.$$(this.element).append(btn.el);\n\t        this.currentActiveLayouts[layout] = {\n\t            button: {\n\t                visible: true,\n\t                el: btn.el\n\t            },\n\t            enabled: true\n\t        };\n\t    };\n\t    ResultLayout.prototype.hide = function () {\n\t        var elem = this.resultLayoutSection || this.element;\n\t        Dom_1.$$(elem).addClass('coveo-result-layout-hidden');\n\t    };\n\t    ResultLayout.prototype.show = function () {\n\t        var elem = this.resultLayoutSection || this.element;\n\t        Dom_1.$$(elem).removeClass('coveo-result-layout-hidden');\n\t    };\n\t    ResultLayout.prototype.getModelValue = function () {\n\t        return this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.layout);\n\t    };\n\t    ResultLayout.prototype.setModelValue = function (val) {\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.layout, val);\n\t    };\n\t    ResultLayout.prototype.shouldShowSelector = function () {\n\t        return _.keys(this.currentActiveLayouts).length > 1 && _.filter(this.currentActiveLayouts, function (activeLayout) { return activeLayout.button.visible; }).length > 1;\n\t    };\n\t    ResultLayout.prototype.isLayoutDisplayedByButton = function (layout) {\n\t        return _.contains(_.keys(this.currentActiveLayouts), layout);\n\t    };\n\t    return ResultLayout;\n\t}(Component_1.Component));\n\tResultLayout.ID = 'ResultLayout';\n\tResultLayout.validLayouts = ['list', 'card', 'table'];\n\tResultLayout.options = {\n\t    /**\n\t     * Specifies the layouts that should be available when the search page is displayed in mobile mode.\n\t     *\n\t     * By default, the mobile mode breakpoint is at 480 px screen width.\n\t     *\n\t     * When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n\t     *\n\t     * The possible values for layouts are `list`, `card`, `table`.\n\t     *\n\t     * The default value is `card`, `table`.\n\t     */\n\t    mobileLayouts: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: ['card', 'table'] }),\n\t    /**\n\t     * Specifies the layouts that should be available when the search page is displayed in tablet mode.\n\t     *\n\t     * By default, the tablet mode breakpoint is at 800 px screen width.\n\t     *\n\t     *  When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n\t     *\n\t     * The possible values for layouts are `list`, `card`, `table`.\n\t     *\n\t     * The default value is `list`, `card`, `table`.\n\t     */\n\t    tabletLayouts: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: ['list', 'card', 'table'] }),\n\t    /**\n\t     * Specifies the layouts that should be available when the search page is displayed in desktop mode.\n\t     *\n\t     * By default, the desktop mode breakpoint is any screen size over 800 px.\n\t     *\n\t     *  When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n\t     *\n\t     * The possible values for layouts are `list`, `card`, `table`.\n\t     *\n\t     * The default value is `list`, `card`, `table`.\n\t     */\n\t    desktopLayouts: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: ['list', 'card', 'table'] })\n\t};\n\texports.ResultLayout = ResultLayout;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultLayout);\n\n\n/***/ },\n/* 201 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResponsiveComponentsManager_1 = __webpack_require__(137);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ResultLayout_1 = __webpack_require__(200);\n\tvar Logger_1 = __webpack_require__(13);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar _ = __webpack_require__(16);\n\tvar ResponsiveResultLayout = (function () {\n\t    function ResponsiveResultLayout(coveoRoot, ID, options, responsiveDropdown) {\n\t        this.coveoRoot = coveoRoot;\n\t        this.ID = ID;\n\t        this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);\n\t    }\n\t    ResponsiveResultLayout.init = function (root, component, options) {\n\t        if (!Dom_1.$$(root).find(\".\" + Component_1.Component.computeCssClassName(ResultLayout_1.ResultLayout))) {\n\t            var logger = new Logger_1.Logger('ResponsiveResultLayout');\n\t            logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n\t            return;\n\t        }\n\t        ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveResultLayout, Dom_1.$$(root), ResultLayout_1.ResultLayout.ID, component, options);\n\t    };\n\t    ResponsiveResultLayout.prototype.registerComponent = function (accept) {\n\t        if (accept instanceof ResultLayout_1.ResultLayout) {\n\t            this.resultLayout = accept;\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    ResponsiveResultLayout.prototype.handleResizeEvent = function () {\n\t        if (this.needSmallMode()) {\n\t            this.enableAndDisableLayout(this.resultLayout.options.mobileLayouts);\n\t        }\n\t        else if (this.needMediumMode()) {\n\t            this.enableAndDisableLayout(this.resultLayout.options.tabletLayouts);\n\t        }\n\t        else {\n\t            this.enableAndDisableLayout(this.resultLayout.options.desktopLayouts);\n\t        }\n\t    };\n\t    ResponsiveResultLayout.prototype.enableAndDisableLayout = function (validLayouts) {\n\t        var needToDisable = _.difference(ResultLayout_1.ResultLayout.validLayouts, validLayouts);\n\t        var needToEnable = _.intersection(ResultLayout_1.ResultLayout.validLayouts, validLayouts);\n\t        this.resultLayout.disableLayouts(needToDisable);\n\t        this.resultLayout.enableLayouts(needToEnable);\n\t    };\n\t    ResponsiveResultLayout.prototype.needSmallMode = function () {\n\t        return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n\t    };\n\t    ResponsiveResultLayout.prototype.needMediumMode = function () {\n\t        return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getMediumScreenWidth();\n\t    };\n\t    return ResponsiveResultLayout;\n\t}());\n\texports.ResponsiveResultLayout = ResponsiveResultLayout;\n\n\n/***/ },\n/* 202 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\tvar Initialization_1 = __webpack_require__(108);\n\t/**\n\t * The Excerpt component renders an excerpt of its associated result and highlights the keywords from the query using\n\t * the appropriate template helpers.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar Excerpt = (function (_super) {\n\t    __extends(Excerpt, _super);\n\t    /**\n\t     * Creates a new Excerpt component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Excerpt component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function Excerpt(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, Excerpt.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Excerpt, options);\n\t        _this.result = _this.result || _this.resolveResult();\n\t        Assert_1.Assert.exists(_this.result);\n\t        _this.element.innerHTML = HighlightUtils_1.HighlightUtils.highlightString(_this.result.excerpt, _this.result.excerptHighlights, null, 'coveo-highlight');\n\t        return _this;\n\t    }\n\t    return Excerpt;\n\t}(Component_1.Component));\n\tExcerpt.ID = 'Excerpt';\n\texports.Excerpt = Excerpt;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Excerpt);\n\n\n/***/ },\n/* 203 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar OSUtils_1 = __webpack_require__(72);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar StreamHighlightUtils_1 = __webpack_require__(74);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ResultLink component automatically transform a search result title into a clickable link pointing to the original\n\t * document.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar ResultLink = (function (_super) {\n\t    __extends(ResultLink, _super);\n\t    /**\n\t     * Creates a new ResultLink component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultLink component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     * @param os\n\t     */\n\t    function ResultLink(element, options, bindings, result, os) {\n\t        var _this = _super.call(this, element, ResultLink.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.os = os;\n\t        _this.logOpenDocument = _.debounce(function () {\n\t            _this.queryController.saveLastQuery();\n\t            var documentURL = Dom_1.$$(_this.element).getAttribute('href');\n\t            if (documentURL == undefined || documentURL == '') {\n\t                documentURL = _this.result.clickUri;\n\t            }\n\t            _this.usageAnalytics.logClickEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentOpen, {\n\t                documentURL: documentURL,\n\t                documentTitle: _this.result.title,\n\t                author: Utils_1.Utils.getFieldValue(_this.result, 'author'),\n\t            }, _this.result, _this.root);\n\t            Defer_1.Defer.flush();\n\t        }, 1500, true);\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultLink, options);\n\t        _this.options = _.extend({}, _this.options, _this.componentOptionsModel.get(ComponentOptionsModel_1.ComponentOptionsModel.attributesEnum.resultLink));\n\t        _this.result = result || _this.resolveResult();\n\t        if (_this.options.openQuickview == null) {\n\t            _this.options.openQuickview = result.raw['connectortype'] == 'ExchangeCrawler' && DeviceUtils_1.DeviceUtils.isMobileDevice();\n\t        }\n\t        _this.element.setAttribute('tabindex', '0');\n\t        Assert_1.Assert.exists(_this.componentOptionsModel);\n\t        Assert_1.Assert.exists(_this.result);\n\t        if (!_this.quickviewShouldBeOpened()) {\n\t            // We assume that anytime the contextual menu is opened on a result link\n\t            // this is do \"open in a new tab\" or something similar.\n\t            // This is not 100% accurate, but we estimate it to be the lesser of 2 evils (not logging anything)\n\t            Dom_1.$$(element).on('contextmenu', function () {\n\t                _this.logOpenDocument();\n\t            });\n\t            Dom_1.$$(element).on('click', function () {\n\t                _this.logOpenDocument();\n\t            });\n\t        }\n\t        if (/^\\s*$/.test(_this.element.innerHTML)) {\n\t            if (!_this.options.titleTemplate) {\n\t                _this.element.innerHTML = _this.result.title ? HighlightUtils_1.HighlightUtils.highlightString(_this.result.title, _this.result.titleHighlights, null, 'coveo-highlight') : _this.result.clickUri;\n\t            }\n\t            else {\n\t                var newTitle = _this.parseStringTemplate(_this.options.titleTemplate);\n\t                _this.element.innerHTML = newTitle ? StreamHighlightUtils_1.StreamHighlightUtils.highlightStreamText(newTitle, _this.result.termsToHighlight, _this.result.phrasesToHighlight) : _this.result.clickUri;\n\t            }\n\t        }\n\t        _this.bindEventToOpen();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Opens the result in the same window, no matter how the actual component is configured for the end user.\n\t     * @param logAnalytics  If true, the method will take care of logging an analytic event.\n\t     */\n\t    ResultLink.prototype.openLink = function (logAnalytics) {\n\t        if (logAnalytics === void 0) { logAnalytics = true; }\n\t        if (logAnalytics) {\n\t            this.logOpenDocument();\n\t        }\n\t        window.location.href = this.getResultUri();\n\t    };\n\t    /**\n\t     * Opens the result in a new window, no matter how the actual component is configured for the end user.\n\t     * @param logAnalytics If true, the method will take care of logging an analytic event.\n\t     */\n\t    ResultLink.prototype.openLinkInNewWindow = function (logAnalytics) {\n\t        if (logAnalytics === void 0) { logAnalytics = true; }\n\t        if (logAnalytics) {\n\t            this.logOpenDocument();\n\t        }\n\t        window.open(this.getResultUri(), '_blank');\n\t    };\n\t    /**\n\t     * Try to open the result in Microsoft Outlook if the result has an `outlookformacuri` or `outlookuri` field.\n\t     *\n\t     * Normally, this means a result link for an email.\n\t     *\n\t     * If the needed fields are not present, this method will do nothing.\n\t     * @param logAnalytics If true, the method will take care of logging an analytic event.\n\t     */\n\t    ResultLink.prototype.openLinkInOutlook = function (logAnalytics) {\n\t        if (logAnalytics === void 0) { logAnalytics = true; }\n\t        if (this.hasOutlookField()) {\n\t            if (logAnalytics) {\n\t                this.logOpenDocument();\n\t            }\n\t            this.openLink();\n\t        }\n\t    };\n\t    /**\n\t     * Open the link in the same manner the end user would do.\n\t     *\n\t     * This essentially simulate a click on the result link.\n\t     *\n\t     * @param logAnalytics If true, the method will take care of logging an analytic event.\n\t     */\n\t    ResultLink.prototype.openLinkAsConfigured = function (logAnalytics) {\n\t        if (logAnalytics === void 0) { logAnalytics = true; }\n\t        if (this.toExecuteOnOpen) {\n\t            if (logAnalytics) {\n\t                this.logOpenDocument();\n\t            }\n\t            this.toExecuteOnOpen();\n\t        }\n\t    };\n\t    ResultLink.prototype.bindEventToOpen = function () {\n\t        return this.bindOnClickIfNotUndefined() || this.bindOpenQuickviewIfNotUndefined() || this.setHrefIfNotAlready() || this.openLinkThatIsNotAnAnchor();\n\t    };\n\t    ResultLink.prototype.bindOnClickIfNotUndefined = function () {\n\t        var _this = this;\n\t        if (this.options.onClick != undefined) {\n\t            this.toExecuteOnOpen = function (e) {\n\t                _this.options.onClick.call(_this, e, _this.result);\n\t            };\n\t            Dom_1.$$(this.element).on('click', function (e) {\n\t                _this.toExecuteOnOpen(e);\n\t            });\n\t            return true;\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    ResultLink.prototype.bindOpenQuickviewIfNotUndefined = function () {\n\t        var _this = this;\n\t        if (this.quickviewShouldBeOpened()) {\n\t            this.toExecuteOnOpen = function () {\n\t                Dom_1.$$(_this.bindings.resultElement).trigger(ResultListEvents_1.ResultListEvents.openQuickview);\n\t            };\n\t            Dom_1.$$(this.element).on('click', function (e) {\n\t                e.preventDefault();\n\t                _this.toExecuteOnOpen();\n\t            });\n\t            return true;\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    ResultLink.prototype.openLinkThatIsNotAnAnchor = function () {\n\t        var _this = this;\n\t        if (!this.elementIsAnAnchor()) {\n\t            this.toExecuteOnOpen = function () {\n\t                if (_this.options.alwaysOpenInNewWindow) {\n\t                    if (_this.options.openInOutlook) {\n\t                        _this.openLinkInOutlook();\n\t                    }\n\t                    else {\n\t                        _this.openLinkInNewWindow();\n\t                    }\n\t                }\n\t                else {\n\t                    _this.openLink();\n\t                }\n\t            };\n\t            Dom_1.$$(this.element).on('click', function () {\n\t                _this.toExecuteOnOpen();\n\t            });\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    ResultLink.prototype.setHrefIfNotAlready = function () {\n\t        // Do not erase any value put in href by the template, etc. Allows\n\t        // using custom click urls while still keeping analytics recording\n\t        // and other behavior brought by the component.\n\t        if (this.elementIsAnAnchor() && !Utils_1.Utils.isNonEmptyString(Dom_1.$$(this.element).getAttribute('href'))) {\n\t            Dom_1.$$(this.element).setAttribute('href', this.getResultUri());\n\t            if (this.options.alwaysOpenInNewWindow && !(this.options.openInOutlook && this.hasOutlookField())) {\n\t                Dom_1.$$(this.element).setAttribute('target', '_blank');\n\t            }\n\t            return true;\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    ResultLink.prototype.getResultUri = function () {\n\t        if (this.options.hrefTemplate) {\n\t            return this.parseStringTemplate(this.options.hrefTemplate);\n\t        }\n\t        if (this.options.field == undefined && this.options.openInOutlook) {\n\t            this.setField();\n\t        }\n\t        if (this.options.field != undefined) {\n\t            return Utils_1.Utils.getFieldValue(this.result, this.options.field);\n\t        }\n\t        else {\n\t            return this.result.clickUri;\n\t        }\n\t    };\n\t    ResultLink.prototype.elementIsAnAnchor = function () {\n\t        return this.element.tagName == 'A';\n\t    };\n\t    ResultLink.prototype.setField = function () {\n\t        var os = Utils_1.Utils.exists(this.os) ? this.os : OSUtils_1.OSUtils.get();\n\t        if (os == OSUtils_1.OS_NAME.MACOSX && this.hasOutlookField()) {\n\t            this.options.field = '@outlookformacuri';\n\t        }\n\t        else if (os == OSUtils_1.OS_NAME.WINDOWS && this.hasOutlookField()) {\n\t            this.options.field = '@outlookuri';\n\t        }\n\t    };\n\t    ResultLink.prototype.hasOutlookField = function () {\n\t        var os = Utils_1.Utils.exists(this.os) ? this.os : OSUtils_1.OSUtils.get();\n\t        if (os == OSUtils_1.OS_NAME.MACOSX && this.result.raw['outlookformacuri'] != undefined) {\n\t            return true;\n\t        }\n\t        else if (os == OSUtils_1.OS_NAME.WINDOWS && this.result.raw['outlookuri'] != undefined) {\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    ResultLink.prototype.isUriThatMustBeOpenedInQuickview = function () {\n\t        return this.result.clickUri.toLowerCase().indexOf('ldap://') == 0;\n\t    };\n\t    ResultLink.prototype.quickviewShouldBeOpened = function () {\n\t        return (this.options.openQuickview || this.isUriThatMustBeOpenedInQuickview()) && QueryUtils_1.QueryUtils.hasHTMLVersion(this.result);\n\t    };\n\t    ResultLink.prototype.parseStringTemplate = function (template) {\n\t        var _this = this;\n\t        if (!template) {\n\t            return '';\n\t        }\n\t        return template.replace(/\\$\\{(.*?)\\}/g, function (value) {\n\t            var key = value.substring(2, value.length - 1);\n\t            var newValue = _this.readFromObject(_this.result, key);\n\t            if (!newValue) {\n\t                newValue = _this.readFromObject(window, key);\n\t            }\n\t            if (!newValue) {\n\t                _this.logger.warn(key + \" used in the ResultLink template is undefined for this result: \" + _this.result.title);\n\t            }\n\t            return newValue || value;\n\t        });\n\t    };\n\t    ResultLink.prototype.readFromObject = function (object, key) {\n\t        if (object && key.indexOf('.') !== -1) {\n\t            var newKey = key.substring(key.indexOf('.') + 1);\n\t            key = key.substring(0, key.indexOf('.'));\n\t            return this.readFromObject(object[key], newKey);\n\t        }\n\t        return object ? object[key] : undefined;\n\t    };\n\t    return ResultLink;\n\t}(Component_1.Component));\n\tResultLink.ID = 'ResultLink';\n\t/**\n\t * The options for the ResultLink\n\t * @componentOptions\n\t */\n\tResultLink.options = {\n\t    /**\n\t     * Specifies the field which the ResultLink should use to output its `href` attribute.\n\t     *\n\t     * By default, the component uses the `clickUri` field available on the document, but you can override this field\n\t     * by specifying a value for this option.\n\t     *\n\t     * **Tip:**\n\t     *\n\t     * > When you do not include a `field` option in your result template, you can include an `href` attribute on the\n\t     * > ResultLink element. When present, the `href` attribute value overrides the `clickUri` field, which is otherwise\n\t     * > the default field.\n\t     *\n\t     * > Specifying an `href` attribute is useful when you want to build the ResultLink using a custom script or by\n\t     * > concatenating the content of two or more variables.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - With the following markup, the ResultLink will output its `href` attribute using the `uri` field instead of the\n\t     * default `clickUri` field:\n\t     *\n\t     * ```html\n\t     * <a class=\"CoveoResultLink\" field=\"@uri\"></a>\n\t     * ```\n\t     *\n\t     * - In the following result template, the custom `getMyKBUri()` function will provide the `href`:\n\t     *\n\t     * ```html\n\t     * <script id=\"KnowledgeArticle\" type=\"text/underscore\" class=\"result-template\">\n\t     *   <div class='CoveoIcon>'></div>\n\t     *   <a class=\"CoveoResultLink\" href=\"<%= getMyKBUri(raw) %>\"></a>\n\t     *   <div class=\"CoveoExcerpt\"></div>\n\t     * </script>\n\t     * ```\n\t     *\n\t     * See also [hrefTemplate]{@link ResultLink.options.hrefTemplate}, which can override this option.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption(),\n\t    /**\n\t     * Specifies whether the ResultLink should try to open in Microsoft Outlook.\n\t     *\n\t     * Setting this option to `true` is normally useful for ResultLink instances which are related to Microsoft Exchange\n\t     * emails.\n\t     *\n\t     * If this option is `true`, clicking the ResultLink will call the {@link ResultLink.openLinkInOutlook} method\n\t     * instead of the {@link ResultLink.openLink} method.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    openInOutlook: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether the ResultLink should open in the {@link Quickview} component rather than loading through the\n\t     * original URL.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    openQuickview: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether the ResultLink should open in a new window instead of opening in the current context.\n\t     *\n\t     * If this option is `true`, clicking the ResultLink will call the {@link ResultLink.openLinkInNewWindow} method\n\t     * instead of the {@link ResultLink.openLink} method.\n\t     *\n\t     * **Note:**\n\t     * > If a search page contains a {@link ResultsPreferences} component whose\n\t     * > [enableOpenInNewWindow]{@link ResultsPreferences.options.enableOpenInNewWindow} option is `true`, and the end\n\t     * > user checks the <b>Always open results in new window</b> box, then ResultLink components will always open in\n\t     * > a new window when the user clicks them, no matter what the value of their alwaysOpenInNewWindow option is.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    alwaysOpenInNewWindow: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies a template literal from which to generate the ResultLink `href` attribute (see\n\t     * [Template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)).\n\t     *\n\t     * This option overrides the value of the [field]{@link ResultLink.options.field} option.\n\t     *\n\t     * The template literal can reference any number of fields from the parent result. It can also reference global\n\t     * scope properties.\n\t     *\n\t     * Default value is `undefined`.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - The following markup generates a ResultLink `href` such as `http://uri.com?id=documentTitle`:\n\t     *\n\t     * ```html\n\t     * <a class='CoveoResultLink' data-href-template='${clickUri}?id=${title}'></a>\n\t     * ```\n\t     *\n\t     * - The following markup generates a ResultLink `href` such as `localhost/fooBar`:\n\t     *\n\t     * ```html\n\t     * <a class='CoveoResultLink' data-href-template='${window.location.hostname}/{Foo.Bar}'></a>\n\t     * ```\n\t     */\n\t    hrefTemplate: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies a template literal from which to generate the ResultLink display title (see\n\t     * [Template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)).\n\t     *\n\t     * This option overrides the default ResultLink display title behavior.\n\t     *\n\t     * The template literal can reference any number of fields from the parent result. However, if the template literal\n\t     * references a key whose value is undefined in the parent result fields, then the ResultLink title displays the\n\t     * name of this key instead.\n\t     *\n\t     * This option is ignored if the ResultLink innerHTML contains any value.\n\t     *\n\t     * Default value is `undefined`.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - The following markup generates a ResultLink display title such as `Case number: 123456` if both the\n\t     * `raw.objecttype` and `raw.objectnumber` keys are defined in the parent result fields:\n\t     *\n\t     * ```html\n\t     * <a class=\"CoveoResultLink\" data-title-template=\"${raw.objecttype} number: ${raw.objectnumber}\"></a>\n\t     * ```\n\t     *\n\t     * - The following markup generates `${myField}` as a ResultLink display title if the `myField` key is undefined\n\t     * in the parent result fields:\n\t     *\n\t     * ```html\n\t     * <a class=\"CoveoResultLink\" data-title-template=\"${myField}\"></a>\n\t     * ```\n\t     *\n\t     * - The following markup generates `Foobar` as a ResultLink display title, because the ResultLink innterHTML is not\n\t     * empty:\n\t     *\n\t     * ```html\n\t     * <a class=\"CoveoResultLink\" data-title-template=\"${will} ${be} ${ignored}\">Foobar</a>\n\t     * ```\n\t     */\n\t    titleTemplate: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies an event handler function to execute when the user clicks the ResultLink component.\n\t     *\n\t     * The handler function takes a JavaScript [Event](https://developer.mozilla.org/en/docs/Web/API/Event) object and\n\t     * an {@link IQueryResult} as its parameters.\n\t     *\n\t     * Overriding the default behavior of the `onClick` event can allow you to execute specific code instead.\n\t     *\n\t     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - In the following code excerpt, the ResultLink opens the original document in a custom way instead of using the\n\t     * normal browser behavior:\n\t     *\n\t     * ```javascript\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *   ResultLink : {\n\t     *     onClick : function(e, result) {\n\t     *       e.preventDefault();\n\t     *       // Custom code to execute with the URI and title of the document.\n\t     *       openUriInASpecialTab(result.clickUri, result.title);\n\t     *     }\n\t     *   }\n\t     * });\n\t     * ```\n\t     *\n\t     * - You can achieve the same result using the jQuery extension:\n\t     *\n\t     * ```javascript\n\t     * $(\"#search\").coveo('init', {\n\t     *   ResultLink : {\n\t     *     onClick : function(e, result) {\n\t     *       e.preventDefault();\n\t     *       // Custom code to execute with the URI and title of the document.\n\t     *       openUriInASpecialTab(result.clickUri, result.title);\n\t     *     }\n\t     *   }\n\t     * });\n\t     * ```\n\t     */\n\t    onClick: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    })\n\t};\n\tResultLink.fields = [\n\t    'outlookformacuri',\n\t    'outlookuri',\n\t    'connectortype',\n\t    'urihash',\n\t    'collection',\n\t    'source',\n\t    'author' // analytics\n\t];\n\texports.ResultLink = ResultLink;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultLink);\n\n\n/***/ },\n/* 204 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ResultLink_1 = __webpack_require__(203);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar DeviceUtils_1 = __webpack_require__(18);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar FieldTable_1 = __webpack_require__(205);\n\tvar RegisteredNamedMethods_1 = __webpack_require__(107);\n\tvar Icon_1 = __webpack_require__(179);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Thumbnail component automatically fetches the thumbnail of the result object and outputs an HTML `img` tag with\n\t * it.\n\t */\n\tvar Thumbnail = (function (_super) {\n\t    __extends(Thumbnail, _super);\n\t    /**\n\t     * Creates a new Thumbnail component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Thumbnail component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function Thumbnail(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, Thumbnail.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initOptions(element, Thumbnail.options, options);\n\t        if (_this.element.tagName.toLowerCase() != 'img') {\n\t            _this.img = Dom_1.$$('img').el;\n\t            _this.element.appendChild(_this.img);\n\t        }\n\t        else {\n\t            _this.img = _this.element;\n\t        }\n\t        if (_this.options.clickable) {\n\t            if (_this.element.tagName.toLowerCase() != 'img') {\n\t                new ResultLink_1.ResultLink(_this.element, _this.options, _this.bindings, _this.result);\n\t            }\n\t            else {\n\t                var href = Dom_1.$$('a');\n\t                Dom_1.$$(_this.element).replaceWith(href.el);\n\t                Dom_1.$$(href).append(_this.element);\n\t                new ResultLink_1.ResultLink(href.el, _this.options, _this.bindings, _this.result);\n\t            }\n\t        }\n\t        // We need to set src to a blank image right away to avoid the image from\n\t        // changing size once it's loaded. Also, doing this prevents a border from\n\t        // appearing on some browsers when there is no thumbnail. I've found no other\n\t        // way to get rid of it...\n\t        _this.img.setAttribute('src', 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==');\n\t        if (QueryUtils_1.QueryUtils.hasThumbnail(result)) {\n\t            _this.buildThumbnailImage();\n\t        }\n\t        else {\n\t            _this.logger.info('Result has no thumbnail. Cannot build thumbnail image, instanciating an Icon component instead.');\n\t            new Icon_1.Icon(element, { small: true }, bindings, result);\n\t        }\n\t        return _this;\n\t    }\n\t    Thumbnail.prototype.buildThumbnailImage = function () {\n\t        var endpoint = this.bindings.queryController.getEndpoint();\n\t        if (endpoint.isJsonp() || DeviceUtils_1.DeviceUtils.isIE8or9()) {\n\t            // For jsonp and IE8-9 (XDomain) we can't GET/POST for binary data. We are limited\n\t            // to only setting the src attribute directly on the img.\n\t            this.buildImageWithDirectSrcAttribute(endpoint);\n\t        }\n\t        else {\n\t            // Base 64 img allows us to GET/POST the image as raw binary, so that we can also\n\t            // pass the credential of the user. Useful for phonegap among others.\n\t            this.buildImageWithBase64SrcAttribute(endpoint);\n\t        }\n\t    };\n\t    Thumbnail.prototype.buildImageWithDirectSrcAttribute = function (endpoint) {\n\t        var dataStreamUri = endpoint.getViewAsDatastreamUri(this.result.uniqueId, '$Thumbnail$', { contentType: 'image/png' });\n\t        this.img.setAttribute('src', dataStreamUri);\n\t        this.resizeContainingFieldTable();\n\t    };\n\t    Thumbnail.prototype.buildImageWithBase64SrcAttribute = function (endpoint) {\n\t        var _this = this;\n\t        endpoint.getRawDataStream(this.result.uniqueId, '$Thumbnail$')\n\t            .then(function (response) {\n\t            var rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));\n\t            _this.img.setAttribute('src', 'data:image/png;base64, ' + btoa(rawBinary));\n\t            _this.resizeContainingFieldTable();\n\t        })\n\t            .catch(function () {\n\t            _this.setEmptyThumbnailClass();\n\t        });\n\t    };\n\t    Thumbnail.prototype.resizeContainingFieldTable = function () {\n\t        var closestFieldTableElement = Dom_1.$$(this.element).closest(Component_1.Component.computeCssClassName(FieldTable_1.FieldTable));\n\t        if (closestFieldTableElement != null) {\n\t            var fieldTable = RegisteredNamedMethods_1.get(closestFieldTableElement);\n\t            fieldTable.updateToggleHeight();\n\t        }\n\t    };\n\t    Thumbnail.prototype.setEmptyThumbnailClass = function () {\n\t        Dom_1.$$(this.img).addClass(this.options.noThumbnailClass);\n\t    };\n\t    return Thumbnail;\n\t}(Component_1.Component));\n\tThumbnail.ID = 'Thumbnail';\n\t/**\n\t * Options for the Thumbnail\n\t * @componentOptions\n\t */\n\tThumbnail.options = {\n\t    /**\n\t     * Specifies the CSS class to use on the `img` tag that the Thumbnail component outputs when a result has no\n\t     * thumbnail in the index.\n\t     *\n\t     * Default value is `coveo-no-thumbnail`.\n\t     */\n\t    noThumbnailClass: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'coveo-no-thumbnail' }),\n\t    /**\n\t     * Specifies whether to create a clickable {@link ResultLink} around the Thumbnail.\n\t     *\n\t     * Default value is `false`.\n\t     *\n\t     * If set to true, you can use the options specified on {@link ResultLink.options}\n\t     */\n\t    clickable: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false })\n\t};\n\tThumbnail.parent = ResultLink_1.ResultLink;\n\tThumbnail.fields = [\n\t    'outlookformacuri',\n\t    'outlookuri',\n\t    'connectortype',\n\t    'urihash',\n\t    'collection',\n\t    'source' //        ⎭\n\t];\n\texports.Thumbnail = Thumbnail;\n\tThumbnail.options = _.extend({}, ResultLink_1.ResultLink.options, Thumbnail.options);\n\tInitialization_1.Initialization.registerAutoCreateComponent(Thumbnail);\n\n\n/***/ },\n/* 205 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar FieldValue_1 = __webpack_require__(206);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The FieldTable component displays a set of {@link FieldValue} components in a table that can optionally be\n\t * expandable and minimizable. This component automatically takes care of not displaying empty field values.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t *\n\t * **Example:**\n\t *\n\t * ```\n\t * // This is the FieldTable component itself, which holds a list of table rows.\n\t * // Each row is a FieldValue component.\n\t * <table class='CoveoFieldTable'>\n\t *    // Items\n\t *    <tr data-field='@sysdate' data-caption='Date' data-helper='dateTime' />\n\t *    <tr data-field='@sysauthor' data-caption='Author' />\n\t *    <tr data-field='@clickuri' data-html-value='true' data-caption='URL' data-helper='anchor' data-helper-options='{text: \\\"<%= raw.syssource %>\\\" , target:\\\"_blank\\\"}'>\n\t * </table>\n\t * ```\n\t */\n\tvar FieldTable = (function (_super) {\n\t    __extends(FieldTable, _super);\n\t    /**\n\t     * Creates a new FieldTable.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FieldTable component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function FieldTable(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ValueRow.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, FieldTable, options);\n\t        var rows = Dom_1.$$(_this.element).findAll('tr[data-field]');\n\t        _.each(rows, function (e) {\n\t            new ValueRow(e, {}, bindings, result);\n\t        });\n\t        if (Dom_1.$$(_this.element).find('tr') == null) {\n\t            Dom_1.$$(element).detach();\n\t        }\n\t        if (_this.isTogglable()) {\n\t            _this.toggleContainer = Dom_1.$$('div', { className: 'coveo-field-table-toggle-container' }).el;\n\t            _this.buildToggle();\n\t            Dom_1.$$(_this.toggleContainer).insertBefore(_this.element);\n\t            _this.toggleContainer.appendChild(_this.element);\n\t        }\n\t        else {\n\t            _this.isExpanded = true;\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Toggles between expanding (showing) and minimizing (collapsing) the FieldTable.\n\t     *\n\t     * @param anim Specifies whether to show a sliding animation when toggling the display of the FieldTable.\n\t     */\n\t    FieldTable.prototype.toggle = function (anim) {\n\t        if (anim === void 0) { anim = false; }\n\t        if (this.isTogglable()) {\n\t            this.isExpanded = !this.isExpanded;\n\t            this.isExpanded ? this.expand(anim) : this.minimize(anim);\n\t        }\n\t    };\n\t    /**\n\t     * Expands (shows) the FieldTable,\n\t     * @param anim Specifies whether to show a sliding animation when expanding the FieldTable.\n\t     */\n\t    FieldTable.prototype.expand = function (anim) {\n\t        if (anim === void 0) { anim = false; }\n\t        if (this.isTogglable()) {\n\t            this.isExpanded = true;\n\t            this.toggleCaption.textContent = this.options.expandedTitle;\n\t            Dom_1.$$(this.toggleIcon).addClass('coveo-opened');\n\t            Dom_1.$$(this.toggleButtonInsideTable).addClass('coveo-opened');\n\t            anim ? this.slideToggle(true) : this.slideToggle(true, false);\n\t        }\n\t    };\n\t    /**\n\t     * Minimizes (collapses) the FieldTable.\n\t     * @param anim Specifies whether to show a sliding animation when minimizing the FieldTable.\n\t     */\n\t    FieldTable.prototype.minimize = function (anim) {\n\t        if (anim === void 0) { anim = false; }\n\t        if (this.isTogglable()) {\n\t            this.isExpanded = false;\n\t            this.toggleCaption.textContent = this.options.minimizedTitle;\n\t            Dom_1.$$(this.toggleIcon).removeClass('coveo-opened');\n\t            Dom_1.$$(this.toggleButtonInsideTable).removeClass('coveo-opened');\n\t            anim ? this.slideToggle(false) : this.slideToggle(false, false);\n\t        }\n\t    };\n\t    /**\n\t     * Updates the toggle height if the content was dynamically resized, so that the expanding and minimizing animation\n\t     * can match the new content size.\n\t     */\n\t    FieldTable.prototype.updateToggleHeight = function () {\n\t        this.updateToggleContainerHeight();\n\t        this.isExpanded ? this.expand() : this.minimize();\n\t    };\n\t    FieldTable.prototype.isTogglable = function () {\n\t        if (this.searchInterface.isNewDesign() && this.options.allowMinimization) {\n\t            return true;\n\t        }\n\t        else if (!this.searchInterface.isNewDesign()) {\n\t            this.logger.trace('Cannot open or close the field table with older design', this);\n\t        }\n\t        return false;\n\t    };\n\t    FieldTable.prototype.buildToggle = function () {\n\t        var _this = this;\n\t        this.toggleIcon = Dom_1.$$('span', { className: 'coveo-field-table-toggle-icon' }).el;\n\t        this.toggleCaption = Dom_1.$$('span', { className: 'coveo-field-table-toggle-caption', tabindex: 0 }).el;\n\t        this.toggleButton = Dom_1.$$('div', { className: 'coveo-field-table-toggle' }).el;\n\t        this.toggleButton.appendChild(this.toggleCaption);\n\t        this.toggleButton.appendChild(this.toggleIcon);\n\t        Dom_1.$$(this.toggleButton).insertBefore(this.element);\n\t        this.toggleButtonInsideTable = Dom_1.$$('span', { className: 'coveo-field-table-toggle-icon-up coveo-field-table-toggle' }).el;\n\t        this.element.appendChild(this.toggleButtonInsideTable);\n\t        if (this.options.minimizedByDefault === true) {\n\t            this.isExpanded = false;\n\t        }\n\t        else if (this.options.minimizedByDefault === false) {\n\t            this.isExpanded = true;\n\t        }\n\t        else {\n\t            this.isExpanded = !QueryUtils_1.QueryUtils.hasExcerpt(this.result);\n\t        }\n\t        setTimeout(function () {\n\t            _this.updateToggleHeight();\n\t        }); // Wait until toggleContainer.scrollHeight is computed.\n\t        var toggleAction = function () { return _this.toggle(true); };\n\t        Dom_1.$$(this.toggleButton).on('click', toggleAction);\n\t        Dom_1.$$(this.toggleButtonInsideTable).on('click', toggleAction);\n\t        Dom_1.$$(this.toggleButton).on('keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, toggleAction));\n\t    };\n\t    FieldTable.prototype.slideToggle = function (visible, anim) {\n\t        if (visible === void 0) { visible = true; }\n\t        if (anim === void 0) { anim = true; }\n\t        if (!anim) {\n\t            Dom_1.$$(this.toggleContainer).addClass('coveo-no-transition');\n\t        }\n\t        if (visible) {\n\t            this.toggleContainer.style.display = 'block';\n\t            this.toggleContainer.style.height = this.toggleContainerHeight + 'px';\n\t        }\n\t        else {\n\t            this.toggleContainer.style.height = this.toggleContainerHeight + 'px';\n\t            this.toggleContainer.style.height = '0';\n\t        }\n\t        if (!anim) {\n\t            this.toggleContainer.offsetHeight; // Force reflow\n\t            Dom_1.$$(this.toggleContainer).removeClass('coveo-no-transition');\n\t        }\n\t    };\n\t    FieldTable.prototype.updateToggleContainerHeight = function () {\n\t        this.toggleContainerHeight = this.toggleContainer.scrollHeight;\n\t    };\n\t    return FieldTable;\n\t}(Component_1.Component));\n\tFieldTable.ID = 'FieldTable';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tFieldTable.options = {\n\t    /**\n\t     * Specifies whether to allow the minimization (collapsing) of the FieldTable.\n\t     *\n\t     * If you set this option to `false`, the component will not create the **Minimize** / **Expand** toggle links.\n\t     *\n\t     * See also {@link FieldTable.options.expandedTitle}, {@link FieldTable.options.minimizedTitle} and\n\t     * {@link FieldTable.options.minimizedByDefault}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    allowMinimization: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link FieldTable.options.allowMinimization} is `true`, specifies the caption to show on the **Minimize** link\n\t     * (the link that appears when the FieldTable is expanded).\n\t     *\n\t     * Default value is `\"Details\"`.\n\t     */\n\t    expandedTitle: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Details', depend: 'allowMinimization' }),\n\t    /**\n\t     * If {@link FieldTable.options.allowMinimization} is `true`, specifies the caption to show on the **Expand** link\n\t     * (the link that appears when the FieldTable is minimized).\n\t     *\n\t     * Default value is `\"Details\"`.\n\t     */\n\t    minimizedTitle: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Details', depend: 'allowMinimization' }),\n\t    /**\n\t     * If {@link FieldTable.options.allowMinimization} is `true`, specifies whether to minimize the table by default.\n\t     *\n\t     * Default value is `undefined`, and the FieldTable will collapse by default if the result it is associated with has\n\t     * a non-empty excerpt.\n\t     */\n\t    minimizedByDefault: ComponentOptions_1.ComponentOptions.buildBooleanOption({ depend: 'allowMinimization' })\n\t};\n\texports.FieldTable = FieldTable;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FieldTable);\n\tvar ValueRow = (function (_super) {\n\t    __extends(ValueRow, _super);\n\t    function ValueRow(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, options, bindings, result, ValueRow.ID) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ValueRow, options);\n\t        var caption = Dom_1.$$('th').el;\n\t        caption.appendChild(document.createTextNode(_this.options.caption.toLocaleString()));\n\t        _this.element.insertBefore(caption, _this.getValueContainer());\n\t        return _this;\n\t    }\n\t    ValueRow.prototype.getValueContainer = function () {\n\t        if (this.valueContainer == null) {\n\t            this.valueContainer = document.createElement('td');\n\t            this.element.appendChild(this.valueContainer);\n\t        }\n\t        return this.valueContainer;\n\t    };\n\t    return ValueRow;\n\t}(FieldValue_1.FieldValue));\n\tValueRow.ID = 'ValueRow';\n\tValueRow.options = {\n\t    caption: ComponentOptions_1.ComponentOptions.buildStringOption({ postProcessing: function (value, options) { return value || options.field.substr(1); } })\n\t};\n\tValueRow.parent = FieldValue_1.FieldValue;\n\n\n/***/ },\n/* 206 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar TemplateHelpers_1 = __webpack_require__(177);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tfunction showOnlyWithHelper(helpers, options) {\n\t    if (options == null) {\n\t        options = {};\n\t    }\n\t    options.helpers = helpers;\n\t    return options;\n\t}\n\t/**\n\t * The FieldValue component displays the value of a field associated to its parent search result. It is normally usable\n\t * within a {@link FieldTable}.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t *\n\t * A common use of this component is to display a specific field value which also happens to be an existing\n\t * {@link Facet.options.field}. When the user clicks on the FieldValue component, it activates the corresponding Facet.\n\t */\n\tvar FieldValue = (function (_super) {\n\t    __extends(FieldValue, _super);\n\t    /**\n\t     * Creates a new FieldValue.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FieldValue component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function FieldValue(element, options, bindings, result, fieldValueClassId) {\n\t        if (fieldValueClassId === void 0) { fieldValueClassId = FieldValue.ID; }\n\t        var _this = _super.call(this, element, fieldValueClassId, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initOptions(element, FieldValue.simpleOptions, options);\n\t        if (_this.options.helper != null) {\n\t            _this.options = ComponentOptions_1.ComponentOptions.initOptions(element, FieldValue.helperOptions, _this.options);\n\t            var toFilter = _.keys(FieldValue.options.helperOptions['subOptions']);\n\t            var toKeep_1 = _.filter(toFilter, function (optionKey) {\n\t                var optionDefinition = FieldValue.options.helperOptions['subOptions'][optionKey];\n\t                if (optionDefinition) {\n\t                    var helpers = optionDefinition.helpers;\n\t                    return helpers != null && _.contains(helpers, _this.options.helper);\n\t                }\n\t                return false;\n\t            });\n\t            _this.options.helperOptions = _.omit(_this.options.helperOptions, function (value, key) {\n\t                return !_.contains(toKeep_1, key);\n\t            });\n\t        }\n\t        _this.result = _this.result || _this.resolveResult();\n\t        Assert_1.Assert.exists(_this.result);\n\t        var loadedValueFromComponent = _this.getValue();\n\t        if (loadedValueFromComponent == null) {\n\t            // Completely remove the element to ease stuff such as adding separators in CSS\n\t            if (_this.element.parentElement != null) {\n\t                _this.element.parentElement.removeChild(_this.element);\n\t            }\n\t        }\n\t        else {\n\t            var values = void 0;\n\t            if (_.isArray(loadedValueFromComponent)) {\n\t                values = loadedValueFromComponent;\n\t            }\n\t            else if (_this.options.splitValues) {\n\t                if (_.isString(loadedValueFromComponent)) {\n\t                    values = _.map(loadedValueFromComponent.split(_this.options.separator), function (v) {\n\t                        return v.trim();\n\t                    });\n\t                }\n\t            }\n\t            else {\n\t                loadedValueFromComponent = loadedValueFromComponent.toString();\n\t                values = [loadedValueFromComponent];\n\t            }\n\t            _this.appendValuesToDom(values);\n\t            if (_this.options.textCaption != null) {\n\t                _this.prependTextCaptionToDom();\n\t            }\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Gets the current FieldValue from the current {@link IQueryResult}.\n\t     *\n\t     * @returns {any} The current FieldValue or `null` if value is and `Object`.\n\t     */\n\t    FieldValue.prototype.getValue = function () {\n\t        var value = Utils_1.Utils.getFieldValue(this.result, this.options.field);\n\t        if (!_.isArray(value) && _.isObject(value)) {\n\t            value = null;\n\t        }\n\t        return value;\n\t    };\n\t    /**\n\t     * Renders a value to HTML using all of the current FieldValue component options.\n\t     * @param value The value to render.\n\t     * @returns {HTMLElement} The element containing the rendered value.\n\t     */\n\t    FieldValue.prototype.renderOneValue = function (value) {\n\t        var element = Dom_1.$$('span').el;\n\t        var toRender = value;\n\t        if (this.options.helper) {\n\t            toRender = TemplateHelpers_1.TemplateHelpers.getHelper(this.options.helper).call(this, value, this.getHelperOptions());\n\t            var fullDateStr = this.getFullDate(value, this.options.helper);\n\t            if (fullDateStr) {\n\t                element.setAttribute('title', fullDateStr);\n\t            }\n\t        }\n\t        if (this.options.helper == 'date' || this.options.helper == 'dateTime' || this.options.helper == 'emailDateTime') {\n\t            toRender = StringUtils_1.StringUtils.capitalizeFirstLetter(toRender);\n\t        }\n\t        if (this.options.htmlValue) {\n\t            element.innerHTML = toRender;\n\t        }\n\t        else {\n\t            element.appendChild(document.createTextNode(toRender));\n\t        }\n\t        this.bindEventOnValue(element, value);\n\t        return element;\n\t    };\n\t    FieldValue.prototype.getValueContainer = function () {\n\t        return this.element;\n\t    };\n\t    FieldValue.prototype.getHelperOptions = function () {\n\t        var inlineOptions = ComponentOptions_1.ComponentOptions.loadStringOption(this.element, 'helperOptions', {});\n\t        if (Utils_1.Utils.isNonEmptyString(inlineOptions)) {\n\t            return _.extend({}, this.options.helperOptions, eval('(' + inlineOptions + ')'));\n\t        }\n\t        return this.options.helperOptions;\n\t    };\n\t    FieldValue.prototype.getFullDate = function (date, helper) {\n\t        var fullDateOptions = {\n\t            useLongDateFormat: true,\n\t            useTodayYesterdayAndTomorrow: false,\n\t            useWeekdayIfThisWeek: false,\n\t            omitYearIfCurrentOne: false\n\t        };\n\t        if (helper == 'date') {\n\t            return DateUtils_1.DateUtils.dateToString(new Date(parseInt(date)), fullDateOptions);\n\t        }\n\t        else if (helper == 'dateTime' || helper == 'emailDateTime') {\n\t            return DateUtils_1.DateUtils.dateTimeToString(new Date(parseInt(date)), fullDateOptions);\n\t        }\n\t        return '';\n\t    };\n\t    FieldValue.prototype.appendValuesToDom = function (values) {\n\t        var _this = this;\n\t        _.each(values, function (value, index) {\n\t            if (value != undefined) {\n\t                _this.getValueContainer().appendChild(_this.renderOneValue(value));\n\t                if (index !== values.length - 1) {\n\t                    _this.getValueContainer().appendChild(document.createTextNode(_this.options.displaySeparator));\n\t                }\n\t            }\n\t        });\n\t    };\n\t    FieldValue.prototype.renderTextCaption = function () {\n\t        var element = Dom_1.$$('span', { className: 'coveo-field-caption' }, _.escape(this.options.textCaption));\n\t        return element.el;\n\t    };\n\t    FieldValue.prototype.prependTextCaptionToDom = function () {\n\t        var elem = this.getValueContainer();\n\t        Dom_1.$$(elem).prepend(this.renderTextCaption());\n\t        // Add a class to the container so the value and the caption wrap together.\n\t        Dom_1.$$(elem).addClass('coveo-with-label');\n\t    };\n\t    FieldValue.prototype.bindEventOnValue = function (element, value) {\n\t        var _this = this;\n\t        var facetAttributeName = QueryStateModel_1.QueryStateModel.getFacetId(this.options.facet);\n\t        var facets = _.filter(this.componentStateModel.get(facetAttributeName), function (facet) {\n\t            return !facet.disabled && !(facet instanceof Coveo['FacetRange']);\n\t        });\n\t        var atLeastOneFacetIsEnabled = facets.length > 0;\n\t        if (atLeastOneFacetIsEnabled) {\n\t            var selected_1 = _.find(facets, function (facet) {\n\t                var facetValue = facet.values.get(value);\n\t                return facetValue && facetValue.selected;\n\t            });\n\t            Dom_1.$$(element).on('click', function () {\n\t                if (selected_1 != null) {\n\t                    _.each(facets, function (facet) { return facet.deselectValue(value); });\n\t                }\n\t                else {\n\t                    _.each(facets, function (facet) { return facet.selectValue(value); });\n\t                }\n\t                _this.queryController.deferExecuteQuery({\n\t                    beforeExecuteQuery: function () { return _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentField, {\n\t                        facetId: _this.options.facet,\n\t                        facetValue: value.toLowerCase()\n\t                    }); }\n\t                });\n\t            });\n\t            if (selected_1) {\n\t                Dom_1.$$(element).addClass('coveo-selected');\n\t            }\n\t            Dom_1.$$(element).addClass('coveo-clickable');\n\t        }\n\t    };\n\t    return FieldValue;\n\t}(Component_1.Component));\n\tFieldValue.ID = 'FieldValue';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tFieldValue.options = {\n\t    /**\n\t     * Specifies the field that the FieldValue should display.\n\t     *\n\t     * Specifying a value for this parameter is required in order for the FieldValue component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ defaultValue: '@field', required: true }),\n\t    /**\n\t     * Specifies the {@link Facet} component to toggle when the end user clicks the FieldValue.\n\t     *\n\t     * Default value is the value of {@link FieldValue.options.field}.\n\t     *\n\t     * **Note:**\n\t     * > If the target {@link Facet.options.id} is is not the same as its {@link Facet.options.field}), you must specify\n\t     * > this option manually in order to link to the correct Facet.\n\t     */\n\t    facet: ComponentOptions_1.ComponentOptions.buildStringOption({ postProcessing: function (value, options) { return value || options.field; } }),\n\t    /**\n\t     * Specifies whether the content to display is an HTML element.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    htmlValue: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to split the FieldValue at each {@link FieldValue.options.separator}.\n\t     *\n\t     * This is useful for splitting groups using a {@link Facet.options.field}.\n\t     *\n\t     * When this option is `true`, the displayed values are split by the {@link FieldValue.options.displaySeparator}.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    splitValues: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * If {@link FieldValue.options.splitValues} is `true`, specifies the separator string which separates multi-value\n\t     * fields in the index.\n\t     *\n\t     * See {@link FieldValue.options.displaySeparator}.\n\t     *\n\t     * Default value is `\";\"`.\n\t     */\n\t    separator: ComponentOptions_1.ComponentOptions.buildStringOption({ depend: 'splitValues', defaultValue: ';' }),\n\t    /**\n\t     * If {@link FieldValue.options.splitValues} is `true`, specifies the string to use when displaying multi-value\n\t     * fields in the UI.\n\t     *\n\t     * The component will insert this string between each value it displays from a multi-value field.\n\t     *\n\t     * See also {@link FieldValue.options.separator}.\n\t     *\n\t     * Default value is `\", \"`.\n\t     */\n\t    displaySeparator: ComponentOptions_1.ComponentOptions.buildStringOption({ depend: 'splitValues', defaultValue: ', ' }),\n\t    /**\n\t     * Specifies the helper that the FieldValue should use to display its content.\n\t     *\n\t     * While several helpers exist by default (see {@link ICoreHelpers}), it is also possible for you to create your own\n\t     * custom helpers (see {@link TemplateHelpers}).\n\t     */\n\t    helper: ComponentOptions_1.ComponentOptions.buildHelperOption(),\n\t    /**\n\t     * Specifies the options to call on the specified helper.\n\t     */\n\t    helperOptions: ComponentOptions_1.ComponentOptions.buildObjectOption({\n\t        subOptions: {\n\t            text: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n\t            target: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n\t            'class': ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n\t            decimals: ComponentOptions_1.ComponentOptions.buildNumberOption(showOnlyWithHelper(['currency'], { min: 0 })),\n\t            symbol: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['currency'])),\n\t            useTodayYesterdayAndTomorrow: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n\t            useWeekdayIfThisWeek: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n\t            omitYearIfCurrentOne: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n\t            useLongDateFormat: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: false })),\n\t            includeTimeIfToday: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n\t            includeTimeIfThisWeek: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n\t            alwaysIncludeTime: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: false })),\n\t            predefinedFormat: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'])),\n\t            companyDomain: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['email'])),\n\t            lengthLimit: ComponentOptions_1.ComponentOptions.buildNumberOption(showOnlyWithHelper(['email'], { min: 1 })),\n\t            truncateName: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['email'])),\n\t            alt: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n\t            height: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n\t            width: ComponentOptions_1.ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n\t            presision: ComponentOptions_1.ComponentOptions.buildNumberOption(showOnlyWithHelper(['size'], { min: 0, defaultValue: 2 })),\n\t            base: ComponentOptions_1.ComponentOptions.buildNumberOption(showOnlyWithHelper(['size'], { min: 0, defaultValue: 0 })),\n\t            isMilliseconds: ComponentOptions_1.ComponentOptions.buildBooleanOption(showOnlyWithHelper(['timeSpan'])),\n\t        }\n\t    }),\n\t    /**\n\t     * Specifies a caption to display before the value.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    textCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\tFieldValue.simpleOptions = _.omit(FieldValue.options, 'helperOptions');\n\tFieldValue.helperOptions = {\n\t    helperOptions: FieldValue.options.helperOptions\n\t};\n\texports.FieldValue = FieldValue;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FieldValue);\n\n\n/***/ },\n/* 207 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar HighlightUtils_1 = __webpack_require__(68);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * The PrintableUri component displays the URI, or path, to access a result.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar PrintableUri = (function (_super) {\n\t    __extends(PrintableUri, _super);\n\t    /**\n\t     * Creates a new PrintableUri.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the PrintableUri component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function PrintableUri(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, PrintableUri.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, PrintableUri, options);\n\t        var parentsXml = Utils_1.Utils.getFieldValue(result, 'parents');\n\t        if (parentsXml) {\n\t            _this.renderParentsXml(element, parentsXml);\n\t        }\n\t        else {\n\t            _this.renderUri(element, result);\n\t        }\n\t        return _this;\n\t    }\n\t    PrintableUri.prototype.renderParentsXml = function (element, parentsXml) {\n\t        var xmlDoc = Utils_1.Utils.parseXml(parentsXml);\n\t        var parents = xmlDoc.getElementsByTagName('parent');\n\t        var tokens = [];\n\t        var seperators = [];\n\t        for (var i = 0; i < parents.length; i++) {\n\t            if (i > 0) {\n\t                var seperator = this.buildSeperator();\n\t                seperators.push(seperator);\n\t                element.appendChild(seperator);\n\t            }\n\t            var parent_1 = parents.item(i);\n\t            var token = this.buildHtmlToken(parent_1.getAttribute('name'), parent_1.getAttribute('uri'));\n\t            tokens.push(token);\n\t            element.appendChild(token);\n\t        }\n\t        if (tokens.length > 1) {\n\t            var ellipsis_1 = this.buildEllipsis();\n\t            element.insertBefore(ellipsis_1, seperators[0]);\n\t            var ellipsisSeperator = this.buildSeperator();\n\t            element.insertBefore(ellipsisSeperator, ellipsis_1);\n\t            var contentWidth = 0;\n\t            var tokensWidth = [];\n\t            for (var i = 0; i < tokens.length; i++) {\n\t                tokensWidth[i] = tokens[i].offsetWidth;\n\t                contentWidth += tokensWidth[i];\n\t            }\n\t            var seperatorWidth = seperators[0].offsetWidth;\n\t            var ellipsisWidth = ellipsis_1.offsetWidth;\n\t            var availableWidth = element.offsetWidth;\n\t            if (availableWidth <= contentWidth) {\n\t                contentWidth += ellipsisWidth + seperatorWidth;\n\t                var hidden_1 = [];\n\t                var i = 1;\n\t                while (i < tokens.length && availableWidth <= contentWidth) {\n\t                    element.removeChild(tokens[i]);\n\t                    element.removeChild(seperators[i - 1]);\n\t                    if (i > 1) {\n\t                        hidden_1.push(seperators[i - 1]);\n\t                    }\n\t                    hidden_1.push(tokens[i]);\n\t                    contentWidth -= tokensWidth[i] + seperatorWidth;\n\t                    i++;\n\t                }\n\t                ellipsis_1.onclick = function () {\n\t                    for (var i_1 = 0; i_1 < hidden_1.length; i_1++) {\n\t                        element.insertBefore(hidden_1[i_1], ellipsis_1);\n\t                    }\n\t                    element.removeChild(ellipsis_1);\n\t                };\n\t            }\n\t            else {\n\t                element.removeChild(ellipsis_1);\n\t                element.removeChild(ellipsisSeperator);\n\t            }\n\t        }\n\t    };\n\t    PrintableUri.prototype.renderUri = function (element, result) {\n\t        this.uri = result.clickUri;\n\t        var stringAndHoles;\n\t        if (result.printableUri.indexOf('\\\\') == -1) {\n\t            stringAndHoles = HighlightUtils_1.StringAndHoles.shortenUri(result.printableUri, Dom_1.$$(element).width() / 7);\n\t        }\n\t        else {\n\t            stringAndHoles = HighlightUtils_1.StringAndHoles.shortenPath(result.printableUri, Dom_1.$$(element).width() / 7);\n\t        }\n\t        var uri = HighlightUtils_1.HighlightUtils.highlightString(stringAndHoles.value, result.printableUriHighlights, stringAndHoles.holes, 'coveo-highlight');\n\t        var link = Dom_1.$$('a');\n\t        link.setAttribute('title', result.printableUri);\n\t        link.addClass('coveo-printable-uri');\n\t        link.setHtml(uri);\n\t        link.setAttribute('href', result.clickUri);\n\t        this.bindLogOpenDocument(link.el);\n\t        element.appendChild(link.el);\n\t    };\n\t    PrintableUri.prototype.buildSeperator = function () {\n\t        var seperator = document.createElement('span');\n\t        seperator.innerText = '>';\n\t        seperator.className = 'coveo-printable-uri-separator';\n\t        return seperator;\n\t    };\n\t    PrintableUri.prototype.buildEllipsis = function () {\n\t        var ellipsis = document.createElement('span');\n\t        ellipsis.innerText = '...';\n\t        ellipsis.className = 'coveo-printable-uri';\n\t        return ellipsis;\n\t    };\n\t    PrintableUri.prototype.buildHtmlToken = function (name, uri) {\n\t        var modifiedName = name.charAt(0).toUpperCase() + name.slice(1);\n\t        var link = document.createElement('a');\n\t        this.bindLogOpenDocument(link);\n\t        link.href = uri;\n\t        this.uri = uri;\n\t        link.className = 'coveo-printable-uri';\n\t        link.appendChild(document.createTextNode(modifiedName));\n\t        return link;\n\t    };\n\t    PrintableUri.prototype.bindLogOpenDocument = function (link) {\n\t        var _this = this;\n\t        Dom_1.$$(link).on(['mousedown', 'touchend'], function (e) {\n\t            // jQuery event != standard dom event for mouse events\n\t            // if we have access to the original event, use that.\n\t            if (e.originalEvent) {\n\t                e = e.originalEvent;\n\t            }\n\t            var url = Dom_1.$$(e.srcElement).getAttribute('href');\n\t            var title = Dom_1.$$(e.srcElement).text();\n\t            _this.usageAnalytics.logClickEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentOpen, {\n\t                documentURL: url,\n\t                documentTitle: title,\n\t                author: Utils_1.Utils.getFieldValue(_this.result, 'author')\n\t            }, _this.result, _this.root);\n\t        });\n\t    };\n\t    return PrintableUri;\n\t}(Component_1.Component));\n\tPrintableUri.ID = 'PrintableUri';\n\tPrintableUri.options = {};\n\tPrintableUri.fields = [\n\t    'parents',\n\t    'author'\n\t];\n\texports.PrintableUri = PrintableUri;\n\tInitialization_1.Initialization.registerAutoCreateComponent(PrintableUri);\n\n\n/***/ },\n/* 208 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The DidYouMean component is responsible for displaying query corrections. If this component is in the page and the\n\t * query returns no result but finds a possible query correction, the component either suggests the correction or\n\t * automatically triggers a new query with the suggested term.\n\t */\n\tvar DidYouMean = (function (_super) {\n\t    __extends(DidYouMean, _super);\n\t    /**\n\t     * Creates a new DidYouMean component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the DidYouMean component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function DidYouMean(element, options, bindings) {\n\t        var _this = _super.call(this, element, DidYouMean.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, DidYouMean, options);\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(_this.options);\n\t        _this.hideNext = true;\n\t        _this.correctedTerm = null;\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, _this.handlePrepareQueryBuilder);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, _this.handleProcessNewQueryResults);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.noResults, _this.handleNoResults);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, _this.handleNewQuery);\n\t        Dom_1.$$(_this.element).hide();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Executes a query with the corrected term.\n\t     * Throws an exception if the corrected term has not been initialized.\n\t     * If successful, logs a `didyoumeanClick` event in the usage analytics.\n\t     */\n\t    DidYouMean.prototype.doQueryWithCorrectedTerm = function () {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(this.correctedTerm);\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, this.correctedTerm);\n\t        this.queryController.deferExecuteQuery({\n\t            beforeExecuteQuery: function () { return _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.didyoumeanClick, {}); }\n\t        });\n\t    };\n\t    DidYouMean.prototype.handleNewQuery = function () {\n\t        if (this.hideNext) {\n\t            Dom_1.$$(this.element).empty();\n\t            Dom_1.$$(this.element).hide();\n\t            this.correctedTerm = null;\n\t        }\n\t        else {\n\t            this.hideNext = true;\n\t        }\n\t    };\n\t    DidYouMean.prototype.handlePrepareQueryBuilder = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        data.queryBuilder.enableDidYouMean = true;\n\t    };\n\t    DidYouMean.prototype.handleNoResults = function (data) {\n\t        // We do not auto-correct on search-as-you-type queries\n\t        if (Utils_1.Utils.isNonEmptyArray(data.results.queryCorrections) && !data.searchAsYouType && this.options.enableAutoCorrection) {\n\t            var originalQuery = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q);\n\t            this.correctedTerm = data.results.queryCorrections[0].correctedQuery;\n\t            var correctedSentence = this.buildCorrectedSentence(data.results.queryCorrections[0]);\n\t            this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, data.results.queryCorrections[0].correctedQuery);\n\t            data.retryTheQuery = true;\n\t            this.hideNext = false;\n\t            var noResultsFor = Dom_1.$$('div', { className: 'coveo-did-you-mean-no-results-for' }).el;\n\t            noResultsFor.innerHTML = Strings_1.l('noResultFor', '<span class=\"coveo-highlight coveo-did-you-mean-highlight\">' + StringUtils_1.StringUtils.htmlEncode(originalQuery) + '</span>');\n\t            this.element.appendChild(noResultsFor);\n\t            var automaticCorrect = Dom_1.$$('div', { className: 'coveo-did-you-mean-automatic-correct' }).el;\n\t            automaticCorrect.innerHTML = Strings_1.l('autoCorrectedQueryTo', '<span class=\"coveo-highlight\">' + correctedSentence + '</span>');\n\t            this.element.appendChild(automaticCorrect);\n\t            Dom_1.$$(this.element).show();\n\t            this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.didyoumeanAutomatic, {});\n\t        }\n\t    };\n\t    DidYouMean.prototype.handleProcessNewQueryResults = function (data) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.results);\n\t        var results = data.results;\n\t        this.logger.trace('Received query results from new query', results);\n\t        if (Utils_1.Utils.isNonEmptyArray(results.queryCorrections)) {\n\t            var correctedSentence = this.buildCorrectedSentence(results.queryCorrections[0]);\n\t            this.correctedTerm = results.queryCorrections[0].correctedQuery;\n\t            var didYouMean = Dom_1.$$('div', { className: 'coveo-did-you-mean-suggestion' }, Strings_1.l('didYouMean', '')).el;\n\t            this.element.appendChild(didYouMean);\n\t            var searchTerm = Dom_1.$$('a', {}, correctedSentence).el;\n\t            didYouMean.appendChild(searchTerm);\n\t            Dom_1.$$(searchTerm).on('click', function () {\n\t                _this.doQueryWithCorrectedTerm();\n\t            });\n\t            Dom_1.$$(this.element).show();\n\t        }\n\t    };\n\t    DidYouMean.prototype.buildCorrectedSentence = function (correction) {\n\t        var toReturn = [];\n\t        var tagStart = '<span class=\\'coveo-did-you-mean-word-correction\\'>';\n\t        var tagEnd = '</span>';\n\t        var currentOffset = 0;\n\t        _.each(correction.wordCorrections, function (wordCorrection) {\n\t            toReturn.push(StringUtils_1.StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.offset)));\n\t            currentOffset = wordCorrection.offset;\n\t            toReturn.push(tagStart);\n\t            toReturn.push(StringUtils_1.StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.length + currentOffset)));\n\t            toReturn.push(tagEnd);\n\t            currentOffset = wordCorrection.offset + wordCorrection.length;\n\t        });\n\t        toReturn.push(StringUtils_1.StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset)));\n\t        return toReturn.join('');\n\t    };\n\t    return DidYouMean;\n\t}(Component_1.Component));\n\tDidYouMean.ID = 'DidYouMean';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tDidYouMean.options = {\n\t    /**\n\t     * Specifies whether the DidYouMean component automatically triggers a new query when a query returns no result and\n\t     * a possible correction is available.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableAutoCorrection: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t};\n\texports.DidYouMean = DidYouMean;\n\tInitialization_1.Initialization.registerAutoCreateComponent(DidYouMean);\n\n\n/***/ },\n/* 209 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Initialization_1 = __webpack_require__(108);\n\t/**\n\t * The ErrorReport component takes care of handling fatal error when doing a query on the index / Search API.\n\t *\n\t * For example, the ErrorReport component displays a message when the service responds with a 401 or 503 error. This\n\t * component also renders a small text area with the JSON content of the error response, for debugging purposes.\n\t */\n\tvar ErrorReport = (function (_super) {\n\t    __extends(ErrorReport, _super);\n\t    /**\n\t     * Creates a new ErrorReport component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ErrorReport component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ErrorReport(element, options, bindings) {\n\t        var _this = _super.call(this, element, ErrorReport.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ErrorReport, options);\n\t        var title = Dom_1.$$('div', { className: 'coveo-error-report-title' }, '<h3></h3><h4></h4>');\n\t        _this.element.appendChild(title.el);\n\t        var optionsElement = Dom_1.$$('div', { className: 'coveo-error-report-options' });\n\t        optionsElement.el.appendChild(_this.buildPrevious());\n\t        optionsElement.el.appendChild(_this.buildReset());\n\t        optionsElement.el.appendChild(_this.buildRetry());\n\t        _this.message = Dom_1.$$('div', {\n\t            className: 'coveo-error-report-message'\n\t        });\n\t        _this.element.appendChild(optionsElement.el);\n\t        _this.element.appendChild(_this.message.el);\n\t        Dom_1.$$(_this.element).hide();\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.newQuery, function () { return _this.handleNewQuery(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (data) { return _this.handleQueryError(data); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Performs the \"back\" action in the browser.\n\t     * Also logs an `errorBack` event in the usage analytics.\n\t     */\n\t    ErrorReport.prototype.back = function () {\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorBack, {}, this.root);\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorBack, {});\n\t        history.back();\n\t    };\n\t    /**\n\t     * Resets the current state of the query and triggers a new query.\n\t     * Also logs an `errorClearQuery` event in the usage analytics.\n\t     */\n\t    ErrorReport.prototype.reset = function () {\n\t        this.queryStateModel.reset();\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorClearQuery, {});\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorClearQuery, {}, this.root);\n\t        this.queryController.executeQuery();\n\t    };\n\t    /**\n\t     * Retries the same query, in case of a temporary service error.\n\t     * Also logs an `errorRetry` event in the usage analytics.\n\t     */\n\t    ErrorReport.prototype.retry = function () {\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorRetry, {});\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.errorRetry, {}, this.root);\n\t        this.queryController.executeQuery();\n\t    };\n\t    ErrorReport.prototype.setErrorTitle = function () {\n\t        var errorTitle = {\n\t            h3: Strings_1.l('OopsError'),\n\t            h4: Strings_1.l('ProblemPersists')\n\t        };\n\t        var h3 = Dom_1.$$(this.element).find('h3');\n\t        var h4 = Dom_1.$$(this.element).find('h4');\n\t        if (h3 && h4) {\n\t            Dom_1.$$(h3).text(errorTitle.h3);\n\t            Dom_1.$$(h4).text(errorTitle.h4);\n\t        }\n\t    };\n\t    ErrorReport.prototype.buildPrevious = function () {\n\t        var _this = this;\n\t        var previous = Dom_1.$$('span', { className: 'coveo-error-report-previous' }, Strings_1.l('GoBack'));\n\t        previous.on('click', function () { return _this.back(); });\n\t        return previous.el;\n\t    };\n\t    ErrorReport.prototype.buildReset = function () {\n\t        var _this = this;\n\t        var reset = Dom_1.$$('span', {\n\t            className: 'coveo-error-report-clear'\n\t        }, Strings_1.l('Reset'));\n\t        reset.on('click', function () { return _this.reset(); });\n\t        return reset.el;\n\t    };\n\t    ErrorReport.prototype.buildRetry = function () {\n\t        var _this = this;\n\t        var retry = Dom_1.$$('span', {\n\t            className: 'coveo-error-report-retry'\n\t        }, Strings_1.l('Retry'));\n\t        retry.on('click', function () { return _this.retry(); });\n\t        return retry.el;\n\t    };\n\t    ErrorReport.prototype.handleNewQuery = function () {\n\t        Dom_1.$$(this.element).hide();\n\t        if (this.closePopup != null) {\n\t            this.closePopup();\n\t        }\n\t    };\n\t    ErrorReport.prototype.handleQueryError = function (data) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.error);\n\t        // Do not display the panel if the error is for missing authentication. The\n\t        // appropriate authentication provider should take care of redirecting.\n\t        if (data.error.isMissingAuthentication) {\n\t            return;\n\t        }\n\t        this.message.empty();\n\t        this.setErrorTitle();\n\t        if (this.options.showDetailedError) {\n\t            var moreInfo_1 = Dom_1.$$('span', {\n\t                className: 'coveo-error-report-more-info'\n\t            }, Strings_1.l('MoreInfo'));\n\t            moreInfo_1.on('click', function () {\n\t                moreInfo_1.empty();\n\t                _this.message.el.appendChild(_this.buildErrorInfo(data.error));\n\t            });\n\t            this.message.el.appendChild(moreInfo_1.el);\n\t        }\n\t        Dom_1.$$(this.element).show();\n\t    };\n\t    ErrorReport.prototype.buildErrorInfo = function (data) {\n\t        var errorInfo = Dom_1.$$('div', {\n\t            className: 'coveo-error-info'\n\t        });\n\t        var textArea = Dom_1.$$('textarea', undefined, JSON.stringify(data, null, 2));\n\t        errorInfo.el.appendChild(textArea.el);\n\t        var infoLabel = Dom_1.$$('div', {\n\t            className: 'coveo-error-info-label'\n\t        }, Strings_1.l('CopyPasteToSupport'));\n\t        errorInfo.el.appendChild(infoLabel.el);\n\t        return errorInfo.el;\n\t    };\n\t    return ErrorReport;\n\t}(Component_1.Component));\n\tErrorReport.ID = 'ErrorReport';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tErrorReport.options = {\n\t    /**\n\t     * Specifies whether to display a detailed error message as a JSON in a text content area.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    showDetailedError: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\texports.ErrorReport = ErrorReport;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ErrorReport);\n\n\n/***/ },\n/* 210 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ExportToExcel component renders an item in the {@link Settings} menu to allow the end user to export the current\n\t * search results to the Microsoft Excel format (.xlsx).\n\t */\n\tvar ExportToExcel = (function (_super) {\n\t    __extends(ExportToExcel, _super);\n\t    /**\n\t     * Creates a new ExportToExcel component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ExportToExcel component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param _window The global Window object (used to download the Excel link).\n\t     */\n\t    function ExportToExcel(element, options, bindings, _window) {\n\t        var _this = _super.call(this, element, ExportToExcel.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this._window = _window;\n\t        _this._window = _this._window || window;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ExportToExcel, options);\n\t        _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t            args.menuData.push({\n\t                text: Strings_1.l('ExportToExcel'),\n\t                className: 'coveo-export-to-excel',\n\t                tooltip: Strings_1.l('ExportToExcelDescription'),\n\t                onOpen: function () { return _this.download(); }\n\t            });\n\t        });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Downloads the Excel representation of the current query.\n\t     *\n\t     * Also logs an `exportToExcel` event in the usage analytics.\n\t     */\n\t    ExportToExcel.prototype.download = function () {\n\t        var query = this.queryController.getLastQuery();\n\t        if (query) {\n\t            query = _.omit(query, 'numberOfResults');\n\t            if (this.options.fieldsToInclude) {\n\t                query.fieldsToInclude = this.options.fieldsToInclude;\n\t            }\n\t            this.logger.debug('Performing query following \\'Export to Excel\\' click');\n\t            var endpoint = this.queryController.getEndpoint();\n\t            this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.exportToExcel, {}, this.element);\n\t            this._window.location.replace(endpoint.getExportToExcelLink(query, this.options.numberOfResults));\n\t        }\n\t    };\n\t    ExportToExcel.create = function (element, options, root) {\n\t        return new ExportToExcel(element, options, root);\n\t    };\n\t    return ExportToExcel;\n\t}(Component_1.Component));\n\tExportToExcel.ID = 'ExportToExcel';\n\t/**\n\t * The options for the ExportToExcel\n\t * @componentOptions\n\t */\n\tExportToExcel.options = {\n\t    /**\n\t     * Specifies the number of results to include in the resulting Excel file.\n\t     *\n\t     * Generating and downloading the Excel file should take a reasonably short amount of time when using the default\n\t     * value. However, this amount of time will increase exponentially as you set the value higher.\n\t     *\n\t     * Consequently, you should avoid setting this value above the default index limit of 1000 search results.\n\t     *\n\t     * Default value is `100`. Minimum value is `1`.\n\t     */\n\t    numberOfResults: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 100, min: 1 }),\n\t    fieldsToInclude: ComponentOptions_1.ComponentOptions.buildFieldsOption()\n\t};\n\texports.ExportToExcel = ExportToExcel;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ExportToExcel);\n\n\n/***/ },\n/* 211 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar SortCriteria_1 = __webpack_require__(212);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Folding component makes it possible to render a hierarchic display of search results sharing a common field.\n\t *\n\t * This component has no visual representation of its own. Its simply folds certain search results so that the\n\t * {@link ResultFolding} and {@link ResultAttachments} components can nicely display them inside result templates (see\n\t * [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t *\n\t * A typical use case of the Folding component is to fold email conversations and message board threads to make it\n\t * possible to display them in a convenient format. Messages belonging to a single conversation typically have a unique\n\t * conversation ID. By indexing this ID on a field, you can use it to fold search results.\n\t */\n\tvar Folding = (function (_super) {\n\t    __extends(Folding, _super);\n\t    /**\n\t     * Creates a new Folding component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Folding component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Folding(element, options, bindings) {\n\t        var _this = _super.call(this, element, Folding.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Folding, options);\n\t        Assert_1.Assert.check(Utils_1.Utils.isCoveoField(_this.options.field), _this.options.field + ' is not a valid field');\n\t        Assert_1.Assert.exists(_this.options.maximumExpandedResults);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, _this.handleBuildingQuery);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.preprocessResults, _this.handlepreprocessResults);\n\t        return _this;\n\t    }\n\t    // From a list of results, return a list of results and their attachments\n\t    // We use parentResult to build a tree of result\n\t    Folding.foldWithParent = function (queryResults) {\n\t        var rootNode = {\n\t            score: Number.NEGATIVE_INFINITY,\n\t            children: [],\n\t            result: {\n\t                raw: false\n\t            }\n\t        };\n\t        _.each(queryResults, function (queryResult, i) {\n\t            var resultNode = Folding.findUniqueId(rootNode.children, queryResult.uniqueId);\n\t            // If he have no parent or is parent is him self, add it to the root\n\t            if (queryResult.parentResult == null || queryResult.parentResult.uniqueId == queryResult.uniqueId) {\n\t                // Add it only if he do not exist\n\t                if (resultNode == null) {\n\t                    resultNode = {\n\t                        result: queryResult,\n\t                        score: i,\n\t                        children: []\n\t                    };\n\t                    rootNode.children.push(resultNode);\n\t                    resultNode.parent = rootNode;\n\t                }\n\t            }\n\t            else {\n\t                // If the resultNode already exist\n\t                if (resultNode != null) {\n\t                    resultNode.score = Math.min(i, resultNode.score);\n\t                    // Remove himself from his parent because it will be added in his parent. This allowed to remove duplicate.\n\t                    resultNode.parent.children = _.without(resultNode.parent.children, resultNode);\n\t                }\n\t                else {\n\t                    resultNode = {\n\t                        result: queryResult,\n\t                        score: i,\n\t                        children: []\n\t                    };\n\t                }\n\t                var parentResult = Folding.findUniqueId(rootNode.children, queryResult.parentResult.uniqueId);\n\t                // If the parent does not already exist, create it and add it the root\n\t                if (parentResult == null) {\n\t                    parentResult = {\n\t                        result: queryResult.parentResult,\n\t                        score: Number.POSITIVE_INFINITY,\n\t                        children: []\n\t                    };\n\t                    rootNode.children.push(parentResult);\n\t                    parentResult.parent = rootNode;\n\t                }\n\t                // Add the resultNode to parent\n\t                parentResult.children.push(resultNode);\n\t                resultNode.parent = parentResult;\n\t                var parent_1 = parentResult;\n\t                while (parent_1 != null && resultNode.score < parent_1.score) {\n\t                    parent_1.score = resultNode.score;\n\t                    parent_1 = parent_1.parent;\n\t                }\n\t            }\n\t        });\n\t        var rootResult = Folding.resultNodeToQueryResult(rootNode);\n\t        // Remove the root from all results\n\t        _.each(rootResult.attachments, function (attachment) { return attachment.parentResult = null; });\n\t        return rootResult.attachments;\n\t    };\n\t    // 99.9% of the folding case will be alright with those default functions.\n\t    // Otherwise use the options getResult and getMoreResults\n\t    Folding.defaultGetResult = function (result) {\n\t        var results = result.childResults || [];\n\t        // Add the top result at the top of the list\n\t        results.unshift(result);\n\t        // Empty childResults just to make it more clean\n\t        result.childResults = [];\n\t        // Fold those results\n\t        results = Folding.foldWithParent(results);\n\t        // The first result is the top one\n\t        var topResult = results.shift();\n\t        // All other the results are childResults\n\t        topResult.childResults = results;\n\t        return topResult;\n\t    };\n\t    Folding.defaultGetMoreResults = function (results) {\n\t        // The result are flat, just do the fold\n\t        return Folding.foldWithParent(results);\n\t    };\n\t    // Convert ResultNode to QueryResult\n\t    Folding.resultNodeToQueryResult = function (resultNode) {\n\t        var result = resultNode.result;\n\t        result.attachments = _.map(_.sortBy(resultNode.children, 'score'), Folding.resultNodeToQueryResult);\n\t        result.parentResult = resultNode.parent != null ? resultNode.parent.result : null;\n\t        return result;\n\t    };\n\t    Folding.findUniqueId = function (resultNodes, uniqueId) {\n\t        for (var i = 0; i < resultNodes.length; i++) {\n\t            if (resultNodes[i].result.uniqueId == uniqueId) {\n\t                return resultNodes[i];\n\t            }\n\t            var resultNode = Folding.findUniqueId(resultNodes[i].children, uniqueId);\n\t            if (resultNode != null) {\n\t                return resultNode;\n\t            }\n\t        }\n\t        return null;\n\t    };\n\t    Folding.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        if (!this.disabled) {\n\t            data.queryBuilder.childField = this.options.childField;\n\t            data.queryBuilder.parentField = this.options.parentField;\n\t            data.queryBuilder.filterField = this.options.field;\n\t            data.queryBuilder.filterFieldRange = this.options.range;\n\t            data.queryBuilder.requiredFields.push(this.options.field);\n\t            if (this.options.childField != null) {\n\t                data.queryBuilder.requiredFields.push(this.options.childField);\n\t            }\n\t            if (this.options.parentField != null) {\n\t                data.queryBuilder.requiredFields.push(this.options.parentField);\n\t            }\n\t        }\n\t    };\n\t    Folding.prototype.handlepreprocessResults = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.check(!data.results._folded, 'Two folding component are active at the same time for the same tab. Can\\'t process result !');\n\t        data.results._folded = true;\n\t        var queryResults = data.results;\n\t        var getResult = this.options.getResult || Folding.defaultGetResult;\n\t        queryResults.results = _.map(queryResults.results, getResult);\n\t        this.addLoadMoreHandler(queryResults.results, data.query);\n\t    };\n\t    Folding.prototype.addLoadMoreHandler = function (results, originalQuery) {\n\t        var _this = this;\n\t        return _.map(results, function (result) {\n\t            if (_this.options.enableExpand && !Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(result, _this.options.field))) {\n\t                result.moreResults = function () {\n\t                    return _this.moreResults(result, originalQuery);\n\t                };\n\t            }\n\t            return result;\n\t        });\n\t    };\n\t    Folding.prototype.moreResults = function (result, originalQuery) {\n\t        var _this = this;\n\t        var query = _.clone(originalQuery);\n\t        var builder = new QueryBuilder_1.QueryBuilder();\n\t        query.numberOfResults = this.options.maximumExpandedResults;\n\t        var fieldValue = Utils_1.Utils.getFieldValue(result, this.options.field);\n\t        if (Utils_1.Utils.isNonEmptyString(fieldValue)) {\n\t            builder.advancedExpression.addFieldExpression(this.options.field, '=', [fieldValue]);\n\t            query.aq = builder.build().aq;\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(originalQuery.q)) {\n\t            // We add keywords to get the highlight and we add @uri to get all results\n\t            // To ensure it plays nicely with query syntax, we ensure that the needed part of the query\n\t            // are correctly surrounded with the no syntax block\n\t            if (!originalQuery.disableQuerySyntax) {\n\t                query.q = \"( \" + originalQuery.q + \" ) OR @uri\";\n\t            }\n\t            else {\n\t                query.disableQuerySyntax = false;\n\t                query.q = \"( <@- \" + originalQuery.q + \" -@> ) OR @uri\";\n\t            }\n\t        }\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.expandExpression)) {\n\t            query.cq = this.options.expandExpression;\n\t        }\n\t        if (this.options.parentField != null) {\n\t            query.parentField = this.options.parentField;\n\t        }\n\t        if (this.options.childField != null) {\n\t            query.childField = this.options.childField;\n\t        }\n\t        query.filterField = null;\n\t        query.filterFieldRange = null;\n\t        query.firstResult = 0;\n\t        if (this.options.rearrange) {\n\t            this.options.rearrange.putInQueryBuilder(builder);\n\t            query.sortCriteria = builder.sortCriteria;\n\t            query.sortField = builder.sortField;\n\t        }\n\t        else {\n\t            query.sortCriteria = originalQuery.sortCriteria;\n\t            query.sortField = originalQuery.sortField;\n\t        }\n\t        return this.queryController.getEndpoint().search(query)\n\t            .then(function (results) {\n\t            _this.handlePreprocessMoreResults(results);\n\t            return results.results;\n\t        });\n\t    };\n\t    Folding.prototype.handlePreprocessMoreResults = function (queryResults) {\n\t        var getResults = this.options.getMoreResults || Folding.defaultGetMoreResults;\n\t        queryResults.results = getResults(queryResults.results);\n\t        Dom_1.$$(this.element).trigger(QueryEvents_1.QueryEvents.preprocessMoreResults, {\n\t            results: queryResults\n\t        });\n\t    };\n\t    return Folding;\n\t}(Component_1.Component));\n\tFolding.ID = 'Folding';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tFolding.options = {\n\t    /**\n\t     * Specifies the name of the field on which to do the folding.\n\t     *\n\t     * Specifying a value for this options is required for this component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies the field that determines whether a given result is a child of another top result.\n\t     *\n\t     * Default value is `@topparentid`.\n\t     */\n\t    childField: ComponentOptions_1.ComponentOptions.buildFieldOption({ defaultValue: '@topparentid' }),\n\t    /**\n\t     * Specifies the field that determines whether a given result is a top result containing other child results.\n\t     *\n\t     * Default value is `@containsattachment`.\n\t     */\n\t    parentField: ComponentOptions_1.ComponentOptions.buildFieldOption({ defaultValue: '@containsattachment' }),\n\t    /**\n\t     * Specifies the number of child results to fold.\n\t     *\n\t     * **Example:**\n\t     * > For an email thread with a total of 20 messages, using the default value of `2` means that the component loads\n\t     * > up to a maximum of 2 child messages under the original message, unless the end user expands the entire\n\t     * > conversation using the **Show More** link (see {@link Folding.options.enableExpand}).\n\t     *\n\t     * Default value is `2`. Minimum value is `0`.\n\t     */\n\t    range: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 2, min: 0 }),\n\t    /**\n\t     * Specifies the top result and its related child results, following the sort criteria format (`date ascending`,\n\t     * `@somefield ascending`, etc.)\n\t     *\n\t     * **Example**\n\t     * > If you specify `date descending`, the Folding component re-arranges an email conversation so that the newest\n\t     * > email is always the top result. Doing the opposite (`date ascending`) would always make the original email the\n\t     * > top result, since it is also the oldest.\n\t     *\n\t     * Default value is `none`, which means that the component displays the results in the order that they were returned\n\t     * by the index.\n\t     */\n\t    rearrange: ComponentOptions_1.ComponentOptions.buildCustomOption(function (value) { return Utils_1.Utils.isNonEmptyString(value) ? SortCriteria_1.SortCriteria.parse(value) : null; }),\n\t    /**\n\t     * Specifies whether to add a callback function on the top result, allowing to make an additional query to load all\n\t     * conversations of a given thread.\n\t     *\n\t     * Concretely, the {@link ResultFolding} component uses this for its **Show More** link.\n\t     *\n\t     * See also {@link Folding.options.expandExpression} and {@link Folding.options.maximumExpandedResults}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableExpand: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link Folding.options.enableExpand} is `true`, specifies a custom constant expression to send when querying\n\t     * the expanded results.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    expandExpression: ComponentOptions_1.ComponentOptions.buildStringOption({ depend: 'enableExpand' }),\n\t    /**\n\t     * If {@link Folding.options.enableExpand} is `true`, specifies the maximum number of results to load when\n\t     * expanding.\n\t     *\n\t     * Default value is `100`. Minimum value is `1`.\n\t     */\n\t    maximumExpandedResults: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 100, min: 1, depend: 'enableExpand' }),\n\t    /**\n\t     * Specifies the function that manages the individual folding of each result.\n\t     *\n\t     * Default value (which is implemented in Coveo.Folding.defaultGetResult) is:\n\t     *\n\t     * ```javascript\n\t     * var results = result.childResults || [];\n\t     * // Add the top result at the top of the list.\n\t     * results.unshift(result);\n\t     * // Empty childResults just to clean it.\n\t     * result.childResults = [];\n\t     * // Fold those results.\n\t     * results = Coveo.Folding.foldWithParent(results);\n\t     * // The first result is the top one.\n\t     * var topResult = results.shift();\n\t     * // All other results are childResults.\n\t     * topResult.childResults = results;\n\t     * return topResult;\n\t     * ```\n\t     *\n\t     * You can pre-process all the result with this option in the {@link init} call of your search interface:\n\t     *\n\t     * ```javascript\n\t     * // You can call the init script using \"pure\" JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    Folding: {\n\t     *      getResult: function(result) {\n\t     *        result = Coveo.Folding.defaultGetResult(result);\n\t     *        // Your code here\n\t     *      }\n\t     *    }\n\t     * })\n\t     *\n\t     * // Or you can call the init script using the jQuery extension:\n\t     * Coveo.$('#search').coveo('init', {\n\t     *    Folding: {\n\t     *      getResult: function(result) {\n\t     *        result = Coveo.Folding.defaultGetResult(result);\n\t     *        // Your code here\n\t     *      }\n\t     *    }\n\t     * });\n\t     * ```\n\t     */\n\t    getResult: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    }),\n\t    /**\n\t     * Specifies the function that manages the folding of all results.\n\t     *\n\t     * Default value (`Coveo.Folding.defaultGetMoreResults`) is:\n\t     *\n\t     * ```javascript\n\t     * Coveo.Folding.defaultGetMoreResults = function(results) {\n\t     *    // The results are flat, just do the folding.\n\t     *    return Coveo.Folding.foldWithParent(results);\n\t     * }\n\t     * ```\n\t     */\n\t    getMoreResults: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    })\n\t};\n\texports.Folding = Folding;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Folding);\n\n\n/***/ },\n/* 212 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar SortCriteria = (function () {\n\t    /**\n\t     * Create a new SortCriteria\n\t     * @param sort The sort criteria (e.g.: relevancy, date)\n\t     * @param direction The direction by which to sort (e.g.: ascending, descending)\n\t     */\n\t    function SortCriteria(sort, direction) {\n\t        if (direction === void 0) { direction = ''; }\n\t        this.sort = sort;\n\t        this.direction = direction;\n\t        Assert_1.Assert.isNonEmptyString(sort);\n\t        Assert_1.Assert.check(_.contains(SortCriteria.validSorts, sort) || SortCriteria.sortIsField(sort));\n\t        if (SortCriteria.sortNeedsDirection(sort)) {\n\t            Assert_1.Assert.check(_.contains(SortCriteria.validDirections, direction));\n\t        }\n\t        else {\n\t            Assert_1.Assert.check(direction == '');\n\t        }\n\t    }\n\t    /**\n\t     * Return a new SortCriteria from a string\n\t     * @param criteria The string from which to create the SortCriteria\n\t     */\n\t    SortCriteria.parse = function (criteria) {\n\t        Assert_1.Assert.isNonEmptyString(criteria);\n\t        var split = criteria.match(/\\S+/g);\n\t        return new SortCriteria(split[0], split[1]);\n\t    };\n\t    /**\n\t     * Put the sort criteria in the passed queryBuilder\n\t     * @param queryBuilder The queryBuilder in which to put the sort criteria.\n\t     */\n\t    SortCriteria.prototype.putInQueryBuilder = function (queryBuilder) {\n\t        Assert_1.Assert.exists(queryBuilder);\n\t        if (SortCriteria.sortIsField(this.sort)) {\n\t            queryBuilder.sortCriteria = 'field' + this.direction;\n\t            queryBuilder.sortField = this.sort;\n\t        }\n\t        else if (this.direction != '') {\n\t            queryBuilder.sortCriteria = this.sort + this.direction;\n\t        }\n\t        else {\n\t            queryBuilder.sortCriteria = this.sort;\n\t        }\n\t    };\n\t    /**\n\t     * Gets the value of the sort criteria from a single {@link IQueryResult}.<br/>\n\t     * For example, if the sort criteria is 'relevancy', it will return the value of the 'relevancy' field from result.\n\t     * @param result The {@link IQueryResult} from which to get the value.\n\t     */\n\t    SortCriteria.prototype.getValueFromResult = function (result) {\n\t        Assert_1.Assert.exists(result);\n\t        if (SortCriteria.sortIsField(this.sort)) {\n\t            return Utils_1.Utils.getFieldValue(result, this.sort);\n\t        }\n\t        else if (this.sort == 'date') {\n\t            return result.raw['date'];\n\t        }\n\t        else {\n\t            Assert_1.Assert.fail('Cannot retrieve value: ' + this.sort);\n\t        }\n\t    };\n\t    /**\n\t     * Returns a string representation of the sort criteria (e.g.: 'date ascending').\n\t     */\n\t    SortCriteria.prototype.toString = function () {\n\t        if (Utils_1.Utils.isNonEmptyString(this.direction)) {\n\t            return this.sort + ' ' + this.direction;\n\t        }\n\t        else {\n\t            return this.sort;\n\t        }\n\t    };\n\t    /**\n\t     * Checks if the SortCriteria is equal to another.\n\t     * @param criteria The SortCriteria to compare with\n\t     */\n\t    SortCriteria.prototype.equals = function (criteria) {\n\t        Assert_1.Assert.exists(criteria);\n\t        return criteria.sort == this.sort && criteria.direction == this.direction;\n\t    };\n\t    SortCriteria.sortIsField = function (criteria) {\n\t        return criteria.charAt(0) == '@';\n\t    };\n\t    SortCriteria.sortNeedsDirection = function (sort) {\n\t        return _.contains(SortCriteria.sortsNeedingDirection, sort) || SortCriteria.sortIsField(sort);\n\t    };\n\t    return SortCriteria;\n\t}());\n\tSortCriteria.validSorts = ['relevancy', 'date', 'qre'];\n\tSortCriteria.sortsNeedingDirection = ['date'];\n\tSortCriteria.validDirections = ['ascending', 'descending'];\n\texports.SortCriteria = SortCriteria;\n\n\n/***/ },\n/* 213 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The HiddenQuery component handles a \"hidden\" query parameter (`hq`) and its description (`hd`).\n\t *\n\t * Concretely, this means that if a HiddenQuery component is present in your page and you load your search interface\n\t * with `hq=foo&hd=bar` in the URL hash, the component adds `foo` as an expression to the query (`hq` is the hidden\n\t * query) and renders `bar` in the {@link Breadcrumb} (`hd` is the hidden query description).\n\t */\n\tvar HiddenQuery = (function (_super) {\n\t    __extends(HiddenQuery, _super);\n\t    /**\n\t     * Creates a new HiddenQuery component, which binds multiple events ({@link QueryEvents.buildingQuery},\n\t     * {@link BreadcrumbEvents.populateBreadcrumb} and {@link BreadcrumbEvents.clearBreadcrumb}).\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the HiddenQuery component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function HiddenQuery(element, options, bindings) {\n\t        var _this = _super.call(this, element, HiddenQuery.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, HiddenQuery, options);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) { return _this.handlePopulateBreadcrumb(args); });\n\t        _this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function () { return _this.setStateEmpty(); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Clears any `hd` or `hq` set in the {@link QueryStateModel}.\n\t     * Also logs the `contextRemove` event in the usage analytics and triggers a new query.\n\t     */\n\t    HiddenQuery.prototype.clear = function () {\n\t        this.setStateEmpty();\n\t        var hiddenDescriptionRemoved = this.getDescription();\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.contextRemove, { contextName: hiddenDescriptionRemoved });\n\t        this.queryController.executeQuery();\n\t    };\n\t    HiddenQuery.prototype.setStateEmpty = function () {\n\t        this.queryStateModel.set(QueryStateModel_1.QUERY_STATE_ATTRIBUTES.HD, '');\n\t        this.queryStateModel.set(QueryStateModel_1.QUERY_STATE_ATTRIBUTES.HQ, '');\n\t    };\n\t    HiddenQuery.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        var hiddenQuery = this.queryStateModel.get(QueryStateModel_1.QUERY_STATE_ATTRIBUTES.HQ);\n\t        if (Utils_1.Utils.isNonEmptyString(hiddenQuery)) {\n\t            data.queryBuilder.advancedExpression.add(hiddenQuery);\n\t        }\n\t    };\n\t    HiddenQuery.prototype.handlePopulateBreadcrumb = function (args) {\n\t        var _this = this;\n\t        var description = this.getDescription();\n\t        if (!_.isEmpty(description) && !_.isEmpty(this.queryStateModel.get(QueryStateModel_1.QUERY_STATE_ATTRIBUTES.HQ))) {\n\t            var elem = document.createElement('div');\n\t            Dom_1.$$(elem).addClass('coveo-hidden-query-breadcrumb');\n\t            var title = document.createElement('span');\n\t            Dom_1.$$(title).addClass('coveo-hidden-query-breadcrumb-title');\n\t            Dom_1.$$(title).text(this.options.title);\n\t            elem.appendChild(title);\n\t            var values = document.createElement('span');\n\t            Dom_1.$$(values).addClass('coveo-hidden-query-breadcrumb-values');\n\t            elem.appendChild(values);\n\t            var value = document.createElement('span');\n\t            Dom_1.$$(value).addClass('coveo-hidden-query-breadcrumb-value');\n\t            Dom_1.$$(value).text(description);\n\t            values.appendChild(value);\n\t            var clear = document.createElement('span');\n\t            Dom_1.$$(clear).addClass('coveo-hidden-query-breadcrumb-clear');\n\t            elem.appendChild(clear);\n\t            Dom_1.$$(elem).on('click', function () { return _this.clear(); });\n\t            args.breadcrumbs.push({\n\t                element: elem\n\t            });\n\t        }\n\t    };\n\t    HiddenQuery.prototype.getDescription = function () {\n\t        var description = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.hd);\n\t        if (_.isEmpty(description)) {\n\t            description = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.hq);\n\t        }\n\t        if (!_.isEmpty(description)) {\n\t            if (description.length > this.options.maximumDescriptionLength) {\n\t                description = description.slice(0, this.options.maximumDescriptionLength) + ' ...';\n\t            }\n\t        }\n\t        return description;\n\t    };\n\t    return HiddenQuery;\n\t}(Component_1.Component));\n\tHiddenQuery.ID = 'HiddenQuery';\n\t/**\n\t * Possible options for the `HiddenQuery` component\n\t * @componentOptions\n\t */\n\tHiddenQuery.options = {\n\t    /**\n\t     * Specifies the maximum number of characters from the hidden query description (`hd`) to display in the\n\t     * {@link Breadcrumb}.\n\t     *\n\t     * Beyond this length, the HiddenQuery component slices the rest of the description and replaces it by `...`.\n\t     *\n\t     * Default value is `100`. Minimum value is `0`.\n\t     */\n\t    maximumDescriptionLength: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0, defaultValue: 100 }),\n\t    /**\n\t     * Specifies the title that should appear in the {@link Breadcrumb} when the HiddenQuery populates it.\n\t     *\n\t     * Default value is the localized string for `\"Additional filters:\"`\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: Strings_1.l('AdditionalFilters') + ': ' })\n\t};\n\texports.HiddenQuery = HiddenQuery;\n\tInitialization_1.Initialization.registerAutoCreateComponent(HiddenQuery);\n\n\n/***/ },\n/* 214 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../../controllers/HierarchicalFacetQueryController.ts\" />\n\t/// <reference path=\"HierarchicalFacetValuesList.ts\" />\n\t/// <reference path=\"HierarchicalFacetSearch.ts\" />\n\t/// <reference path=\"HierarchicalBreadcrumbValuesList.ts\" />\n\t/// <reference path=\"HierarchicalFacetValueElement.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetValues_1 = __webpack_require__(159);\n\tvar Facet_1 = __webpack_require__(158);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar HierarchicalFacetValuesList_1 = __webpack_require__(215);\n\tvar HierarchicalFacetQueryController_1 = __webpack_require__(98);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Defer_1 = __webpack_require__(34);\n\tvar HierarchicalFacetSearchValuesList_1 = __webpack_require__(216);\n\tvar HierarchicalFacetSearch_1 = __webpack_require__(218);\n\tvar HierarchicalBreadcrumbValuesList_1 = __webpack_require__(219);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar OmniboxHierarchicalValuesList_1 = __webpack_require__(221);\n\tvar HierarchicalFacetValueElement_1 = __webpack_require__(223);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The HierarchicalFacet component inherits all of its options and behavior from the normal {@link Facet} component, but\n\t * is meant to be used for hierarchical values.\n\t *\n\t * The HierarchicalFacet component could be used to display files in a file system, or categories for documents in a\n\t * hierarchy.\n\t *\n\t * This facet requires a group by field with a special format in order to work correctly.\n\t *\n\t * **Example:**\n\t *\n\t * If you have the following files indexed on a file system:\n\t * ```\n\t * c:\\\n\t *    folder1\\\n\t *        text1.txt\n\t *    folder2\\\n\t *      folder3\\\n\t *        text2.txt\n\t * ```\n\t * The document `text1.txt` would need to have a field with the following format:\n\t * `@field : c; c|folder1;`\n\t *\n\t * The document `text2.txt` would have a field with the following format:\n\t * `@field: c; c|folder2; c|folder2|folder3;`\n\t *\n\t * The | character allows the facet to build its hierarchy (`folder3` inside `folder2` inside `c`).\n\t *\n\t * Since both documents contain the `c` value, selecting that value in the facet would return both documents.\n\t *\n\t * Selecting the `folder3` value in the facet would only return the `text2.txt` document.\n\t */\n\tvar HierarchicalFacet = (function (_super) {\n\t    __extends(HierarchicalFacet, _super);\n\t    /**\n\t     * Creates a new HierarchicalFacet.\n\t     * @param element\n\t     * @param options\n\t     * @param bindings\n\t     */\n\t    function HierarchicalFacet(element, options, bindings) {\n\t        var _this = _super.call(this, element, options, bindings, HierarchicalFacet.ID) || this;\n\t        _this.element = element;\n\t        _this.bindings = bindings;\n\t        _this.shouldReshuffleFacetValuesClientSide = false;\n\t        _this.firstPlacement = true;\n\t        _this.correctLevels = [];\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, HierarchicalFacet, _this.options);\n\t        _this.numberOfValuesToShow = _this.originalNumberOfValuesToShow = (_this.options.numberOfValues || 5);\n\t        _this.numberOfValues = Math.max(_this.options.numberOfValues, 10000);\n\t        _this.options.injectionDepth = Math.max(_this.options.injectionDepth, 10000);\n\t        _this.logger.info('Hierarchy facet : Set number of values very high in order to build hierarchy', _this.numberOfValues, _this);\n\t        _this.logger.info('Hierarchy facet : Set injection depth very high in order to build hierarchy', _this.options.injectionDepth);\n\t        return _this;\n\t    }\n\t    HierarchicalFacet.prototype.selectValue = function (value, selectChildren) {\n\t        if (selectChildren === void 0) { selectChildren = !this.options.useAnd; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        var valueHierarchy = this.getValueFromHierarchy(value);\n\t        if (selectChildren) {\n\t            this.selectChilds(valueHierarchy, valueHierarchy.childs);\n\t        }\n\t        this.flagParentForSelection(valueHierarchy);\n\t        _super.prototype.selectValue.call(this, value);\n\t    };\n\t    HierarchicalFacet.prototype.selectMultipleValues = function (values, selectChildren) {\n\t        var _this = this;\n\t        if (selectChildren === void 0) { selectChildren = !this.options.useAnd; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists(values);\n\t        _.each(values, function (value) {\n\t            var valueHierarchy = _this.getValueFromHierarchy(value);\n\t            _this.flagParentForSelection(valueHierarchy);\n\t            if (selectChildren) {\n\t                _.each(valueHierarchy.childs, function (child) {\n\t                    _this.selectValue(child.facetValue);\n\t                });\n\t            }\n\t        });\n\t        _super.prototype.selectMultipleValues.call(this, values);\n\t    };\n\t    HierarchicalFacet.prototype.deselectValue = function (value, deselectChildren) {\n\t        var _this = this;\n\t        if (deselectChildren === void 0) { deselectChildren = true; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        var valueHierarchy = this.getValueFromHierarchy(value);\n\t        if (deselectChildren) {\n\t            var hasChilds = valueHierarchy.childs != undefined;\n\t            if (hasChilds) {\n\t                var activeChilds = _.filter(valueHierarchy.childs, function (child) {\n\t                    var valueToCompare = _this.getFacetValueFromHierarchy(child.facetValue);\n\t                    return valueToCompare.selected || valueToCompare.excluded;\n\t                });\n\t                valueHierarchy.hasChildSelected = false;\n\t                if (activeChilds.length == valueHierarchy.childs.length) {\n\t                    this.deselectChilds(valueHierarchy, valueHierarchy.childs);\n\t                }\n\t            }\n\t        }\n\t        this.deselectParent(valueHierarchy.parent);\n\t        this.unflagParentForSelection(valueHierarchy);\n\t        _super.prototype.deselectValue.call(this, value);\n\t    };\n\t    HierarchicalFacet.prototype.excludeValue = function (value, excludeChildren) {\n\t        if (excludeChildren === void 0) { excludeChildren = !this.options.useAnd; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        var valueHierarchy = this.getValueFromHierarchy(value);\n\t        if (excludeChildren) {\n\t            this.excludeChilds(valueHierarchy.childs);\n\t        }\n\t        else {\n\t            this.deselectChilds(valueHierarchy, valueHierarchy.childs);\n\t            this.close(valueHierarchy);\n\t        }\n\t        this.flagParentForSelection(valueHierarchy);\n\t        _super.prototype.excludeValue.call(this, value);\n\t    };\n\t    HierarchicalFacet.prototype.unexcludeValue = function (value, unexludeChildren) {\n\t        if (unexludeChildren === void 0) { unexludeChildren = !this.options.useAnd; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        var valueHierarchy = this.getValueFromHierarchy(value);\n\t        if (unexludeChildren) {\n\t            this.unexcludeChilds(valueHierarchy.childs);\n\t        }\n\t        this.unflagParentForSelection(valueHierarchy);\n\t        _super.prototype.unexcludeValue.call(this, value);\n\t    };\n\t    HierarchicalFacet.prototype.deselectMultipleValues = function (values, deselectChildren) {\n\t        var _this = this;\n\t        if (deselectChildren === void 0) { deselectChildren = !this.options.useAnd; }\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists(values);\n\t        _.each(values, function (value) {\n\t            var valueHierarchy = _this.getValueFromHierarchy(value);\n\t            valueHierarchy.hasChildSelected = false;\n\t            _this.unflagParentForSelection(valueHierarchy);\n\t            if (deselectChildren) {\n\t                _.each(valueHierarchy.childs, function (child) {\n\t                    var childInHierarchy = _this.getValueFromHierarchy(child.facetValue);\n\t                    childInHierarchy.hasChildSelected = false;\n\t                    _this.deselectValue(child.facetValue);\n\t                });\n\t            }\n\t        });\n\t        _super.prototype.deselectMultipleValues.call(this, values);\n\t    };\n\t    HierarchicalFacet.prototype.toggleSelectValue = function (value) {\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        if (this.getFacetValueFromHierarchy(value).selected == false) {\n\t            this.selectValue(value);\n\t        }\n\t        else {\n\t            this.deselectValue(value);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.toggleExcludeValue = function (value) {\n\t        this.ensureDom();\n\t        this.ensureValueHierarchyExists([value]);\n\t        if (this.getFacetValueFromHierarchy(value).excluded == false) {\n\t            this.excludeValue(value);\n\t        }\n\t        else {\n\t            this.unexcludeValue(value);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.getValueCaption = function (facetValue) {\n\t        var stringValue = this.getSelf(facetValue);\n\t        var ret = stringValue;\n\t        if (Utils_1.Utils.exists(this.options.valueCaption)) {\n\t            if (typeof this.options.valueCaption == 'object') {\n\t                ret = this.options.valueCaption[stringValue] || ret;\n\t            }\n\t            if (typeof this.options.valueCaption == 'function') {\n\t                ret = this.options.valueCaption.call(this, facetValue);\n\t            }\n\t        }\n\t        return ret;\n\t    };\n\t    /**\n\t     * Gets the values that the HierarchicalFacet is currently displaying.\n\t     * @returns {any[]} An array containing all the values that the HierarchicalFacet is currently displaying.\n\t     */\n\t    HierarchicalFacet.prototype.getDisplayedValues = function () {\n\t        var _this = this;\n\t        var displayed = _.filter(this.values.getAll(), function (v) {\n\t            var valFromHierarchy = _this.getValueFromHierarchy(v);\n\t            if (valFromHierarchy) {\n\t                var elem = _this.getElementFromFacetValueList(v);\n\t                return !Dom_1.$$(elem).hasClass('coveo-inactive');\n\t            }\n\t            return false;\n\t        });\n\t        return _.pluck(displayed, 'value');\n\t    };\n\t    /**\n\t     * Updates the sort criteria for the HierarchicalFacet.\n\t     * @param criteria The new sort criteria.\n\t     */\n\t    HierarchicalFacet.prototype.updateSort = function (criteria) {\n\t        this.firstPlacement = true;\n\t        _super.prototype.updateSort.call(this, criteria);\n\t    };\n\t    HierarchicalFacet.prototype.open = function (value) {\n\t        var getter;\n\t        if (_.isString(value)) {\n\t            getter = this.getValueHierarchy(value);\n\t        }\n\t        else if (value instanceof FacetValues_1.FacetValue) {\n\t            getter = this.getValueHierarchy(value.value);\n\t        }\n\t        else {\n\t            getter = value;\n\t        }\n\t        if (getter != undefined) {\n\t            Dom_1.$$(this.getElementFromFacetValueList(getter.facetValue.value)).addClass('coveo-open');\n\t            this.showChilds(getter.childs);\n\t            if (getter.parent != undefined) {\n\t                this.open(this.getValueHierarchy(getter.facetValue.value).parent);\n\t            }\n\t            this.getValueHierarchy(getter.facetValue.value).keepOpened = true;\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.close = function (value) {\n\t        var _this = this;\n\t        var getter;\n\t        if (_.isString(value)) {\n\t            getter = this.getValueHierarchy(value);\n\t        }\n\t        else if (value instanceof FacetValues_1.FacetValue) {\n\t            getter = this.getValueHierarchy(value.value);\n\t        }\n\t        else {\n\t            getter = value;\n\t        }\n\t        if (getter != undefined) {\n\t            Dom_1.$$(this.getElementFromFacetValueList(getter.facetValue)).removeClass('coveo-open');\n\t            this.hideChilds(getter.childs);\n\t            _.each(getter.childs, function (child) {\n\t                _this.close(_this.getValueHierarchy(child.facetValue.value));\n\t            });\n\t            this.getValueHierarchy(getter.facetValue.value).keepOpened = false;\n\t        }\n\t    };\n\t    /**\n\t     * Resets the HierarchicalFacet state.\n\t     */\n\t    HierarchicalFacet.prototype.reset = function () {\n\t        var _this = this;\n\t        _.each(this.getAllValueHierarchy(), function (valueHierarchy) {\n\t            valueHierarchy.hasChildSelected = false;\n\t            valueHierarchy.allChildShouldBeSelected = false;\n\t        });\n\t        // Need to close all values, otherwise we might end up with orphan(s)\n\t        // if a parent value, after reset, is no longer visible.\n\t        _.each(this.getAllValueHierarchy(), function (valueHierarchy) {\n\t            _this.close(valueHierarchy);\n\t        });\n\t        _super.prototype.reset.call(this);\n\t    };\n\t    HierarchicalFacet.prototype.processFacetSearchAllResultsSelected = function (facetValues) {\n\t        this.selectMultipleValues(facetValues);\n\t        this.triggerNewQuery();\n\t    };\n\t    HierarchicalFacet.prototype.triggerUpdateDeltaQuery = function (facetValues) {\n\t        this.shouldReshuffleFacetValuesClientSide = this.keepDisplayedValuesNextTime;\n\t        _super.prototype.triggerUpdateDeltaQuery.call(this, facetValues);\n\t    };\n\t    HierarchicalFacet.prototype.updateSearchInNewDesign = function (moreValuesAvailable) {\n\t        if (moreValuesAvailable === void 0) { moreValuesAvailable = true; }\n\t        // We always want to show search for hierarchical facet :\n\t        // It's useful since child values are folded under their parent most of the time\n\t        _super.prototype.updateSearchInNewDesign.call(this, true);\n\t    };\n\t    HierarchicalFacet.prototype.facetValueHasChanged = function () {\n\t        var _this = this;\n\t        this.updateQueryStateModel();\n\t        Defer_1.Defer.defer(function () {\n\t            _this.updateAppearanceDependingOnState();\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.initFacetQueryController = function () {\n\t        this.facetQueryController = new HierarchicalFacetQueryController_1.HierarchicalFacetQueryController(this);\n\t    };\n\t    HierarchicalFacet.prototype.initFacetSearch = function () {\n\t        this.facetSearch = new HierarchicalFacetSearch_1.HierarchicalFacetSearch(this, HierarchicalFacetSearchValuesList_1.HierarchicalFacetSearchValuesList, this.root);\n\t        this.element.appendChild(this.facetSearch.build());\n\t    };\n\t    HierarchicalFacet.prototype.handleDeferredQuerySuccess = function (data) {\n\t        this.updateAppearanceDependingOnState();\n\t        _super.prototype.handleDeferredQuerySuccess.call(this, data);\n\t    };\n\t    HierarchicalFacet.prototype.handlePopulateSearchAlerts = function (args) {\n\t        if (this.values.hasSelectedOrExcludedValues()) {\n\t            args.text.push(new HierarchicalBreadcrumbValuesList_1.HierarchicalBreadcrumbValuesList(this, this.values.getSelected().concat(this.values.getExcluded()), this.getAllValueHierarchy()).buildAsString());\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.handlePopulateBreadcrumb = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        if (this.values.hasSelectedOrExcludedValues()) {\n\t            var element = new HierarchicalBreadcrumbValuesList_1.HierarchicalBreadcrumbValuesList(this, this.values.getSelected().concat(this.values.getExcluded()), this.getAllValueHierarchy()).build();\n\t            args.breadcrumbs.push({\n\t                element: element\n\t            });\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.handleOmniboxWithStaticValue = function (eventArg) {\n\t        var _this = this;\n\t        var regex = eventArg.completeQueryExpression.regex;\n\t        var match = _.first(_.filter(this.getAllValueHierarchy(), function (existingValue) {\n\t            return regex.test(_this.getValueCaption(existingValue.facetValue));\n\t        }), this.options.numberOfValuesInOmnibox);\n\t        var facetValues = _.compact(_.map(match, function (gotAMatch) {\n\t            var fromList = _this.getFromFacetValueList(gotAMatch.facetValue);\n\t            return fromList ? fromList.facetValue : undefined;\n\t        }));\n\t        var element = new OmniboxHierarchicalValuesList_1.OmniboxHierarchicalValuesList(this, facetValues, eventArg).build();\n\t        eventArg.rows.push({\n\t            element: element,\n\t            zIndex: this.omniboxZIndex\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.rebuildValueElements = function () {\n\t        this.shouldReshuffleFacetValuesClientSide = this.shouldReshuffleFacetValuesClientSide || this.keepDisplayedValuesNextTime;\n\t        this.numberOfValues = Math.max(this.numberOfValues, 10000);\n\t        this.processHierarchy();\n\t        this.setValueListContent();\n\t        _super.prototype.rebuildValueElements.call(this);\n\t        this.buildParentChildRelationship();\n\t        this.checkForOrphans();\n\t        this.checkForNewUnselectedChild();\n\t        this.crop();\n\t        this.shouldReshuffleFacetValuesClientSide = false;\n\t    };\n\t    HierarchicalFacet.prototype.initFacetValuesList = function () {\n\t        this.facetValuesList = new HierarchicalFacetValuesList_1.HierarchicalFacetValuesList(this, HierarchicalFacetValueElement_1.HierarchicalFacetValueElement);\n\t        this.element.appendChild(this.facetValuesList.build());\n\t    };\n\t    HierarchicalFacet.prototype.updateMoreLess = function () {\n\t        var moreValuesAvailable = this.numberOfValuesToShow < this.topLevelHierarchy.length;\n\t        var lessIsShown = this.numberOfValuesToShow > this.originalNumberOfValuesToShow;\n\t        _super.prototype.updateMoreLess.call(this, lessIsShown, moreValuesAvailable);\n\t    };\n\t    HierarchicalFacet.prototype.handleClickMore = function () {\n\t        this.numberOfValuesToShow += this.originalNumberOfValuesToShow;\n\t        this.numberOfValuesToShow = Math.min(this.numberOfValuesToShow, this.values.size());\n\t        this.crop();\n\t        this.updateMoreLess();\n\t    };\n\t    HierarchicalFacet.prototype.handleClickLess = function () {\n\t        this.numberOfValuesToShow = this.originalNumberOfValuesToShow;\n\t        this.crop();\n\t        this.updateMoreLess();\n\t    };\n\t    HierarchicalFacet.prototype.updateNumberOfValues = function () {\n\t        this.numberOfValues = Math.max(this.numberOfValues, 10000);\n\t    };\n\t    HierarchicalFacet.prototype.ensureValueHierarchyExists = function (facetValues) {\n\t        var _this = this;\n\t        if (facetValues[0] && typeof facetValues[0] == 'string') {\n\t            facetValues = _.map(facetValues, function (value) {\n\t                return FacetValues_1.FacetValue.createFromValue(value);\n\t            });\n\t        }\n\t        var atLeastOneDoesNotExists = false;\n\t        _.each(facetValues, function (facetValue) {\n\t            if (_this.getValueHierarchy(facetValue.value) == undefined) {\n\t                atLeastOneDoesNotExists = true;\n\t            }\n\t        });\n\t        if (atLeastOneDoesNotExists) {\n\t            this.processHierarchy(facetValues);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.crop = function () {\n\t        var _this = this;\n\t        // Partition the top level or the facet to only operate on the values that are not selected or excluded\n\t        var partition = _.partition(this.topLevelHierarchy, function (hierarchy) {\n\t            return hierarchy.facetValue.selected || hierarchy.facetValue.excluded || hierarchy.hasChildSelected;\n\t        });\n\t        // Hide and show the partitionned top level values, depending on the numberOfValuesToShow\n\t        var numberOfValuesLeft = this.numberOfValuesToShow - partition[0].length;\n\t        _.each(_.last(partition[1], partition[1].length - numberOfValuesLeft), function (toHide) {\n\t            _this.hideFacetValue(toHide);\n\t            _this.hideChilds(toHide.childs);\n\t        });\n\t        _.each(_.first(partition[1], numberOfValuesLeft), function (toShow) {\n\t            _this.showFacetValue(toShow);\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.placeChildsUnderTheirParent = function (hierarchy, hierarchyElement) {\n\t        var _this = this;\n\t        var toIterateOver = hierarchy.childs;\n\t        if (toIterateOver) {\n\t            var toIterateOverSorted = this.facetValuesList.sortFacetValues(_.pluck(toIterateOver, 'facetValue')).reverse();\n\t            _.each(toIterateOverSorted, function (child) {\n\t                var childFromHierarchy = _this.getValueFromHierarchy(child);\n\t                if (childFromHierarchy) {\n\t                    var childElement = _this.getElementFromFacetValueList(child);\n\t                    Dom_1.$$(childElement).insertAfter(hierarchyElement);\n\t                    if (childFromHierarchy.childs && childFromHierarchy.childs.length != 0) {\n\t                        _this.placeChildsUnderTheirParent(childFromHierarchy, childElement);\n\t                    }\n\t                }\n\t            });\n\t        }\n\t        if (hierarchy.keepOpened) {\n\t            this.open(hierarchy);\n\t            this.showChilds(hierarchy.childs);\n\t        }\n\t        else {\n\t            this.hideChilds(hierarchy.childs);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.addCssClassToParentAndChilds = function (hierarchy, hierarchyElement) {\n\t        var _this = this;\n\t        Dom_1.$$(hierarchyElement).addClass('coveo-has-childs');\n\t        if (hierarchy.hasChildSelected) {\n\t            Dom_1.$$(hierarchyElement).addClass('coveo-has-childs-selected');\n\t        }\n\t        var openAndCloseChilds = Dom_1.$$('div', {\n\t            className: 'coveo-has-childs-toggle'\n\t        }).el;\n\t        Dom_1.$$(openAndCloseChilds).on('click', function () {\n\t            Dom_1.$$(hierarchyElement).hasClass('coveo-open') ? _this.close(hierarchy) : _this.open(hierarchy);\n\t        });\n\t        Dom_1.$$(hierarchyElement).prepend(openAndCloseChilds);\n\t    };\n\t    HierarchicalFacet.prototype.buildParentChildRelationship = function () {\n\t        var _this = this;\n\t        var fragment = document.createDocumentFragment();\n\t        fragment.appendChild(this.facetValuesList.valueContainer);\n\t        var sorted = _.map(this.facetValuesList.sortFacetValues(), function (facetValue) {\n\t            return _this.getValueFromHierarchy(facetValue);\n\t        });\n\t        _.each(sorted, function (hierarchy) {\n\t            var hierarchyElement = _this.getElementFromFacetValueList(hierarchy.facetValue);\n\t            if (Utils_1.Utils.isNonEmptyArray(hierarchy.childs)) {\n\t                _this.placeChildsUnderTheirParent(hierarchy, hierarchyElement);\n\t                _this.addCssClassToParentAndChilds(hierarchy, hierarchyElement);\n\t            }\n\t            else {\n\t                Dom_1.$$(hierarchyElement).addClass('coveo-no-childs');\n\t            }\n\t            hierarchyElement.style.marginLeft = (_this.options.marginByLevel * (hierarchy.level - _this.options.levelStart)) + 'px';\n\t        });\n\t        Dom_1.$$(fragment).insertAfter(this.headerElement);\n\t    };\n\t    HierarchicalFacet.prototype.setValueListContent = function () {\n\t        var _this = this;\n\t        this.facetValuesList.hierarchyFacetValues = _.map(this.correctLevels, function (hierarchy) {\n\t            if (!_this.values.contains(hierarchy.facetValue.value)) {\n\t                hierarchy.facetValue.occurrences = 0;\n\t                _this.values.add(hierarchy.facetValue);\n\t            }\n\t            return hierarchy.facetValue;\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.createHierarchy = function (valuesToBuildWith) {\n\t        var _this = this;\n\t        var flatHierarchy = _.map(valuesToBuildWith, function (value) {\n\t            var parent = _this.getParent(value);\n\t            var self = value.lookupValue || value.value;\n\t            return {\n\t                facetValue: value,\n\t                level: _this.getLevel(value),\n\t                parent: parent,\n\t                self: self\n\t            };\n\t        });\n\t        this.setInHierarchy(flatHierarchy);\n\t        _.each(this.getAllValueHierarchy(), function (valueHierarchy) {\n\t            if (valueHierarchy.facetValue.selected) {\n\t                _this.flagParentForSelection(valueHierarchy);\n\t            }\n\t        });\n\t        return flatHierarchy;\n\t    };\n\t    HierarchicalFacet.prototype.processHierarchy = function (facetValues) {\n\t        var _this = this;\n\t        if (facetValues === void 0) { facetValues = this.values.getAll(); }\n\t        _.each(this.getAllValueHierarchy(), function (hierarchy) {\n\t            if (_this.values.get(hierarchy.facetValue.value) == undefined) {\n\t                _this.deleteValueHierarchy(_this.getLookupOrValue(hierarchy.facetValue));\n\t            }\n\t        });\n\t        this.createHierarchy(facetValues);\n\t    };\n\t    HierarchicalFacet.prototype.setInHierarchy = function (flatHierarchy) {\n\t        var _this = this;\n\t        this.correctLevels = _.filter(flatHierarchy, function (hierarchy) {\n\t            var isCorrectMinimumLevel = _this.options.levelStart == undefined || hierarchy.level >= _this.options.levelStart;\n\t            var isCorrectMaximumLevel = _this.options.levelEnd == undefined || hierarchy.level < _this.options.levelEnd;\n\t            return isCorrectMinimumLevel && isCorrectMaximumLevel;\n\t        });\n\t        _.each(this.correctLevels, function (hierarchy) {\n\t            var childs = _.map(_.filter(_this.correctLevels, function (possibleChild) {\n\t                return possibleChild.parent != null && possibleChild.parent.toLowerCase() == hierarchy.self.toLowerCase();\n\t            }), function (child) {\n\t                return {\n\t                    facetValue: child.facetValue,\n\t                    level: child.level,\n\t                    keepOpened: false,\n\t                    hasChildSelected: false,\n\t                    allChildShouldBeSelected: false\n\t                };\n\t            });\n\t            var parent = hierarchy.parent != null ? _.find(_this.correctLevels, function (possibleParent) {\n\t                return possibleParent.self.toLowerCase() == hierarchy.parent.toLowerCase();\n\t            }) : null;\n\t            var hierarchyThatAlreadyExists = _this.getValueHierarchy(hierarchy.facetValue.value);\n\t            if (hierarchyThatAlreadyExists && hierarchyThatAlreadyExists.childs.length != childs.length) {\n\t                hierarchyThatAlreadyExists.childs = childs;\n\t            }\n\t            var hierarchyThatAlreadyExistsAtParent;\n\t            if (parent) {\n\t                hierarchyThatAlreadyExistsAtParent = _this.getValueHierarchy(parent.facetValue.value);\n\t            }\n\t            _this.setValueHierarchy(hierarchy.facetValue.value, {\n\t                childs: childs,\n\t                parent: parent == undefined ? undefined : {\n\t                    facetValue: parent.facetValue,\n\t                    level: parent.level,\n\t                    keepOpened: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.keepOpened : false,\n\t                    hasChildSelected: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.hasChildSelected : false,\n\t                    originalPosition: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.originalPosition : undefined,\n\t                    allChildShouldBeSelected: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.allChildShouldBeSelected : false\n\t                },\n\t                facetValue: hierarchy.facetValue,\n\t                level: hierarchy.level,\n\t                keepOpened: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.keepOpened : false,\n\t                hasChildSelected: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.hasChildSelected : false,\n\t                originalPosition: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.originalPosition : undefined,\n\t                allChildShouldBeSelected: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.allChildShouldBeSelected : false\n\t            });\n\t        });\n\t        this.topLevelHierarchy = _.chain(this.values.getAll())\n\t            .filter(function (value) {\n\t            var fromHierarchy = _this.getValueFromHierarchy(value);\n\t            if (fromHierarchy) {\n\t                return fromHierarchy.level == (_this.options.levelStart || 0);\n\t            }\n\t            else {\n\t                return false;\n\t            }\n\t        })\n\t            .map(function (value) {\n\t            return _this.getValueFromHierarchy(value);\n\t        })\n\t            .value();\n\t    };\n\t    HierarchicalFacet.prototype.getParent = function (value) {\n\t        var lastIndexOfDelimiting = this.getLookupOrValue(value).lastIndexOf(this.options.delimitingCharacter);\n\t        if (lastIndexOfDelimiting != -1) {\n\t            return this.getLookupOrValue(value).substring(0, lastIndexOfDelimiting);\n\t        }\n\t        return undefined;\n\t    };\n\t    HierarchicalFacet.prototype.getSelf = function (value) {\n\t        var parent = this.getParent(value);\n\t        if (parent == undefined) {\n\t            return this.getLookupOrValue(value);\n\t        }\n\t        else {\n\t            var indexOfParent = this.getLookupOrValue(value).indexOf(parent);\n\t            return this.getLookupOrValue(value).substring(indexOfParent + parent.length + 1);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.showFacetValue = function (value) {\n\t        Dom_1.$$(this.getElementFromFacetValueList(value.facetValue.value)).removeClass('coveo-inactive');\n\t    };\n\t    HierarchicalFacet.prototype.hideFacetValue = function (value) {\n\t        Dom_1.$$(this.getElementFromFacetValueList(value.facetValue.value)).addClass('coveo-inactive');\n\t    };\n\t    HierarchicalFacet.prototype.hideChilds = function (children) {\n\t        var _this = this;\n\t        _.each(children, function (child) {\n\t            _this.hideFacetValue(child);\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.showChilds = function (children) {\n\t        var _this = this;\n\t        _.each(children, function (child) {\n\t            _this.showFacetValue(child);\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.selectChilds = function (parent, children) {\n\t        this.flagParentForSelection(parent);\n\t        parent.allChildShouldBeSelected = true;\n\t        this.selectMultipleValues(_.map(children, function (child) {\n\t            return child.facetValue;\n\t        }));\n\t    };\n\t    HierarchicalFacet.prototype.deselectChilds = function (parent, children) {\n\t        parent.hasChildSelected = false;\n\t        parent.allChildShouldBeSelected = false;\n\t        this.deselectMultipleValues(_.map(children, function (child) {\n\t            return child.facetValue;\n\t        }));\n\t    };\n\t    HierarchicalFacet.prototype.excludeChilds = function (children) {\n\t        this.excludeMultipleValues(_.map(children, function (child) {\n\t            return child.facetValue;\n\t        }));\n\t    };\n\t    HierarchicalFacet.prototype.unexcludeChilds = function (children) {\n\t        this.unexcludeMultipleValues(_.map(children, function (child) {\n\t            return child.facetValue;\n\t        }));\n\t    };\n\t    HierarchicalFacet.prototype.selectParent = function (parent) {\n\t        if (parent != undefined) {\n\t            this.selectValue(parent.facetValue);\n\t            if (parent.parent) {\n\t                this.selectParent(this.getValueHierarchy(parent.parent.facetValue.value));\n\t            }\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.deselectParent = function (parent) {\n\t        if (parent != undefined) {\n\t            this.deselectValue(parent.facetValue, false);\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.flagParentForSelection = function (valueHierarchy) {\n\t        var parent = valueHierarchy.parent;\n\t        var current = valueHierarchy;\n\t        while (parent) {\n\t            var parentInHierarchy = this.getValueHierarchy(parent.facetValue.value);\n\t            parentInHierarchy.hasChildSelected = true;\n\t            var found = _.find(parentInHierarchy.childs, function (child) {\n\t                return child.facetValue.value.toLowerCase() == current.facetValue.value.toLowerCase();\n\t            });\n\t            if (found) {\n\t                if (this.getValueHierarchy(found.facetValue.value).hasChildSelected) {\n\t                    found.hasChildSelected = true;\n\t                }\n\t            }\n\t            parent = parentInHierarchy.parent;\n\t            current = parentInHierarchy;\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.unflagParentForSelection = function (valueHierarchy) {\n\t        var _this = this;\n\t        var parent = valueHierarchy.parent;\n\t        while (parent) {\n\t            var parentInHierarchy = this.getValueHierarchy(parent.facetValue.value);\n\t            var otherSelectedChilds = _.filter(parentInHierarchy.childs, function (child) {\n\t                var childInHierarchy = _this.getValueHierarchy(child.facetValue.value);\n\t                if (childInHierarchy != undefined) {\n\t                    return childInHierarchy.facetValue.value != valueHierarchy.facetValue.value\n\t                        && (childInHierarchy.facetValue.selected || childInHierarchy.facetValue.excluded || childInHierarchy.hasChildSelected);\n\t                }\n\t            });\n\t            if (otherSelectedChilds.length == 0) {\n\t                parentInHierarchy.hasChildSelected = false;\n\t            }\n\t            parentInHierarchy.allChildShouldBeSelected = false;\n\t            parent = parentInHierarchy.parent;\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.getValueFromHierarchy = function (value) {\n\t        var getter = value instanceof FacetValues_1.FacetValue ? value.value : value;\n\t        return this.getValueHierarchy(getter);\n\t    };\n\t    HierarchicalFacet.prototype.getFacetValueFromHierarchy = function (value) {\n\t        return this.getValueFromHierarchy(value).facetValue;\n\t    };\n\t    HierarchicalFacet.prototype.getLookupOrValue = function (value) {\n\t        return value.lookupValue || value.value;\n\t    };\n\t    HierarchicalFacet.prototype.getElementFromFacetValueList = function (value) {\n\t        var ret = this.getFromFacetValueList(value);\n\t        if (ret) {\n\t            return ret.renderer.listItem;\n\t        }\n\t        else {\n\t            return Dom_1.$$('div').el;\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.getFromFacetValueList = function (value) {\n\t        var fromHierarchy = this.getValueFromHierarchy(value);\n\t        if (fromHierarchy != undefined) {\n\t            return this.facetValuesList.get(value);\n\t        }\n\t        else {\n\t            return undefined;\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.getLevel = function (value) {\n\t        return value.value.split(this.options.delimitingCharacter).length - 1;\n\t    };\n\t    HierarchicalFacet.prototype.getAllValueHierarchy = function () {\n\t        if (this.valueHierarchy == null) {\n\t            this.valueHierarchy = {};\n\t        }\n\t        return this.valueHierarchy;\n\t    };\n\t    HierarchicalFacet.prototype.deleteValueHierarchy = function (key) {\n\t        if (this.valueHierarchy != null) {\n\t            delete this.valueHierarchy[key.toLowerCase()];\n\t        }\n\t    };\n\t    HierarchicalFacet.prototype.getValueHierarchy = function (key) {\n\t        if (this.valueHierarchy == null) {\n\t            return undefined;\n\t        }\n\t        return this.valueHierarchy[key.toLowerCase()];\n\t    };\n\t    HierarchicalFacet.prototype.setValueHierarchy = function (key, value) {\n\t        if (this.valueHierarchy == null) {\n\t            this.valueHierarchy = {};\n\t        }\n\t        this.valueHierarchy[key.toLowerCase()] = value;\n\t    };\n\t    HierarchicalFacet.prototype.checkForOrphans = function () {\n\t        var _this = this;\n\t        _.each(this.valueHierarchy, function (v) {\n\t            if (_this.getLevel(v.facetValue) != _this.options.levelStart) {\n\t                if (_this.getValueHierarchy(_this.getParent(v.facetValue)) == undefined) {\n\t                    _this.logger.error(\"Orphan value found in HierarchicalFacet : \" + v.facetValue.value, \"Needed : \" + _this.getParent(v.facetValue) + \" but not found\");\n\t                    _this.logger.warn(\"Removing incoherent facet value : \" + v.facetValue.value);\n\t                    _this.hideFacetValue(v);\n\t                }\n\t            }\n\t        });\n\t    };\n\t    HierarchicalFacet.prototype.checkForNewUnselectedChild = function () {\n\t        var _this = this;\n\t        // It's possible that after checking a facet value, the index returns new facet values (because of injection depth);\n\t        _.each(this.valueHierarchy, function (v) {\n\t            if (v.allChildShouldBeSelected) {\n\t                var notAlreadySelected = _.find((v.childs), function (child) {\n\t                    return child.facetValue.selected != true;\n\t                });\n\t                if (notAlreadySelected) {\n\t                    _this.selectValue(v.facetValue, true);\n\t                    _this.logger.info('Re-executing query with new facet values returned by index');\n\t                    _this.queryController.deferExecuteQuery();\n\t                }\n\t            }\n\t        });\n\t    };\n\t    return HierarchicalFacet;\n\t}(Facet_1.Facet));\n\tHierarchicalFacet.ID = 'HierarchicalFacet';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tHierarchicalFacet.options = {\n\t    /**\n\t     * The character that allows to specify the hierarchical dependency.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * If your field has the following values:\n\t     *\n\t     * `@field: c; c>folder2; c>folder2>folder3;`\n\t     *\n\t     * Then your delimiting character is `>`.\n\t     *\n\t     * Default value is `|`.\n\t     */\n\t    delimitingCharacter: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '|' }),\n\t    /**\n\t     * Specifies at which level (0-based index) of the hierarchy the HierarchicalFacet should start displaying its\n\t     * values.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * If you have the following files indexed on a file system:\n\t     * ```\n\t     * c:\\\n\t     *    folder1\\\n\t     *        text1.txt\n\t     *    folder2\\\n\t     *      folder3\\\n\t     *        text2.txt\n\t     * ```\n\t     * Then, setting levelStart to `1` displays `folder1` and `folder2` in the HierarchicalFacet, but omits `c:`.\n\t     *\n\t     * Default (and minimum) value is `0`.\n\t     */\n\t    levelStart: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 0, min: 0 }),\n\t    /**\n\t     * Specifies at which level (0-based index) of the hierarchy the HierarchicalFacet should stop displaying its\n\t     * values.\n\t     *\n\t     * Default value is `undefined`, which means the HierarchicalFacet component renders all hierarchical levels.\n\t     * Minimum value is `0`.\n\t     */\n\t    levelEnd: ComponentOptions_1.ComponentOptions.buildNumberOption({ min: 0 }),\n\t    /**\n\t     * Specifies the margin (in pixels) to display between each hierarchical level when expanding.\n\t     *\n\t     * Default value is `10`.\n\t     */\n\t    marginByLevel: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 })\n\t};\n\tHierarchicalFacet.parent = Facet_1.Facet;\n\texports.HierarchicalFacet = HierarchicalFacet;\n\tInitialization_1.Initialization.registerAutoCreateComponent(HierarchicalFacet);\n\n\n/***/ },\n/* 215 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetValuesList_1 = __webpack_require__(167);\n\tvar _ = __webpack_require__(16);\n\tvar HierarchicalFacetValuesList = (function (_super) {\n\t    __extends(HierarchicalFacetValuesList, _super);\n\t    function HierarchicalFacetValuesList(facet, facetValueElementKlass) {\n\t        var _this = _super.call(this, facet, facetValueElementKlass) || this;\n\t        _this.facet = facet;\n\t        _this.facetValueElementKlass = facetValueElementKlass;\n\t        return _this;\n\t    }\n\t    HierarchicalFacetValuesList.prototype.sortFacetValues = function (hierarchyFacetValues) {\n\t        var _this = this;\n\t        if (hierarchyFacetValues === void 0) { hierarchyFacetValues = this.hierarchyFacetValues; }\n\t        if (!this.facet.shouldReshuffleFacetValuesClientSide) {\n\t            var sortArray = _.map(hierarchyFacetValues, function (hierarchy, idx) {\n\t                return {\n\t                    hierarchy: hierarchy,\n\t                    idx: idx\n\t                };\n\t            });\n\t            // If we exclude the top level, the alpha order is not respected (since it is done by the index, and the first level is omitted by client side code).\n\t            // Do the ordering client side, in the precise case where its alpha ordering and the starting level is not 0;\n\t            if (this.facet.options.levelStart != 0 && this.facet.options.sortCriteria && this.facet.options.sortCriteria.toLowerCase().indexOf('alpha') != -1) {\n\t                var reversed_1 = this.facet.options.sortCriteria.toLowerCase().indexOf('descending') != -1;\n\t                sortArray = sortArray.sort(function (first, second) {\n\t                    var firstInTopLevel = _.find(_this.facet.topLevelHierarchy, function (hierarchy) {\n\t                        return hierarchy.facetValue.value.toLowerCase() == first.hierarchy.value.toLowerCase();\n\t                    }) != null;\n\t                    var secondInTopLevel = _.find(_this.facet.topLevelHierarchy, function (hierarchy) {\n\t                        return hierarchy.facetValue.value.toLowerCase() == first.hierarchy.value.toLowerCase();\n\t                    }) != null;\n\t                    if (firstInTopLevel && secondInTopLevel) {\n\t                        var firstValue = _this.facet.getValueCaption(first.hierarchy);\n\t                        var secondValue = _this.facet.getValueCaption(second.hierarchy);\n\t                        var compared = firstValue.localeCompare(secondValue);\n\t                        return reversed_1 ? -1 * compared : compared;\n\t                    }\n\t                    return first.idx - second.idx;\n\t                });\n\t            }\n\t            // Normally facet values are sorted by selected first, then inactive, then excluded values.\n\t            // For hierarchical, we want selected first, then those that have childs selected, then normal sorting.\n\t            sortArray = sortArray.sort(function (first, second) {\n\t                if (first.hierarchy.selected === second.hierarchy.selected) {\n\t                    var firstFromHierarchy = _this.facet.getValueFromHierarchy(first.hierarchy);\n\t                    var secondFromHierarchy = _this.facet.getValueFromHierarchy(second.hierarchy);\n\t                    if (firstFromHierarchy.hasChildSelected === secondFromHierarchy.hasChildSelected) {\n\t                        return first.idx - second.idx;\n\t                    }\n\t                    else {\n\t                        return firstFromHierarchy.hasChildSelected ? -1 : 1;\n\t                    }\n\t                }\n\t                else {\n\t                    return first.hierarchy.selected ? -1 : 1;\n\t                }\n\t            });\n\t            return _.pluck(sortArray, 'hierarchy');\n\t        }\n\t        return hierarchyFacetValues;\n\t    };\n\t    HierarchicalFacetValuesList.prototype.getValuesToBuildWith = function () {\n\t        if (this.facet.shouldReshuffleFacetValuesClientSide) {\n\t            return this.hierarchyFacetValues;\n\t        }\n\t        else {\n\t            return this.sortFacetValues();\n\t        }\n\t    };\n\t    return HierarchicalFacetValuesList;\n\t}(FacetValuesList_1.FacetValuesList));\n\texports.HierarchicalFacetValuesList = HierarchicalFacetValuesList;\n\n\n/***/ },\n/* 216 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../Facet/Facet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetSearchValuesList_1 = __webpack_require__(171);\n\tvar HierarchicalFacetSearchValueElement_1 = __webpack_require__(217);\n\tvar HierarchicalFacetSearchValuesList = (function (_super) {\n\t    __extends(HierarchicalFacetSearchValuesList, _super);\n\t    function HierarchicalFacetSearchValuesList(facet) {\n\t        var _this = _super.call(this, facet, HierarchicalFacetSearchValueElement_1.HierarchicalFacetSearchValueElement) || this;\n\t        _this.facet = facet;\n\t        return _this;\n\t    }\n\t    return HierarchicalFacetSearchValuesList;\n\t}(FacetSearchValuesList_1.FacetSearchValuesList));\n\texports.HierarchicalFacetSearchValuesList = HierarchicalFacetSearchValuesList;\n\n\n/***/ },\n/* 217 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\tvar HierarchicalFacetSearchValueElement = (function (_super) {\n\t    __extends(HierarchicalFacetSearchValueElement, _super);\n\t    function HierarchicalFacetSearchValueElement(facet, facetValue, keepDisplayedValueNextTime) {\n\t        var _this = _super.call(this, facet, facetValue, keepDisplayedValueNextTime) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        _this.keepDisplayedValueNextTime = keepDisplayedValueNextTime;\n\t        return _this;\n\t    }\n\t    HierarchicalFacetSearchValueElement.prototype._handleSelectValue = function (eventBindings) {\n\t        this.facet.open(this.facetValue);\n\t        _super.prototype.handleSelectValue.call(this, eventBindings);\n\t    };\n\t    HierarchicalFacetSearchValueElement.prototype._handleExcludeClick = function (eventBindings) {\n\t        this.facet.open(this.facetValue);\n\t        _super.prototype.handleExcludeClick.call(this, eventBindings);\n\t    };\n\t    return HierarchicalFacetSearchValueElement;\n\t}(FacetValueElement_1.FacetValueElement));\n\texports.HierarchicalFacetSearchValueElement = HierarchicalFacetSearchValueElement;\n\n\n/***/ },\n/* 218 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetSearch_1 = __webpack_require__(160);\n\tvar FacetSearchParameters_1 = __webpack_require__(94);\n\tvar FacetValues_1 = __webpack_require__(159);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\tvar HierarchicalFacetSearch = (function (_super) {\n\t    __extends(HierarchicalFacetSearch, _super);\n\t    function HierarchicalFacetSearch(facet, facetSearchValuesListKlass, root) {\n\t        var _this = _super.call(this, facet, facetSearchValuesListKlass, root) || this;\n\t        _this.facet = facet;\n\t        _this.facetSearchValuesListKlass = facetSearchValuesListKlass;\n\t        return _this;\n\t    }\n\t    HierarchicalFacetSearch.prototype.buildParamsForExcludingCurrentlyDisplayedValues = function () {\n\t        var params = _super.prototype.buildParamsForExcludingCurrentlyDisplayedValues.call(this);\n\t        params.alwaysExclude = this.facet.getDisplayedValues();\n\t        if (this.facet.facetSearch.currentlyDisplayedResults) {\n\t            params.alwaysExclude = params.alwaysExclude.concat(this.facet.facetSearch.currentlyDisplayedResults);\n\t        }\n\t        return params;\n\t    };\n\t    HierarchicalFacetSearch.prototype.selectAllValuesMatchingSearch = function () {\n\t        var _this = this;\n\t        this.facet.showWaitingAnimation();\n\t        var searchParameters = new FacetSearchParameters_1.FacetSearchParameters(this.facet);\n\t        searchParameters.nbResults = this.facet.numberOfValues;\n\t        searchParameters.alwaysInclude = this.facet.getDisplayedValues();\n\t        searchParameters.setValueToSearch(this.getValueInInputForFacetSearch());\n\t        this.facet.facetQueryController.search(searchParameters).then(function (fieldValues) {\n\t            _this.completelyDismissSearch();\n\t            ExternalModulesShim_1.ModalBox.close(true);\n\t            var facetValues = _this.getFacetValues(fieldValues);\n\t            _this.facet.processFacetSearchAllResultsSelected(facetValues);\n\t        });\n\t        this.completelyDismissSearch();\n\t    };\n\t    HierarchicalFacetSearch.prototype.getFacetValues = function (fieldValues) {\n\t        var _this = this;\n\t        var values = [];\n\t        _.each(fieldValues, function (fieldValue) {\n\t            var hierarchy = _this.facet.getValueFromHierarchy(fieldValue.value);\n\t            values.push(_this.createFacetValuesFromHierarchy(hierarchy));\n\t        });\n\t        return _.flatten(values);\n\t    };\n\t    HierarchicalFacetSearch.prototype.createFacetValuesFromHierarchy = function (hierarchy) {\n\t        var _this = this;\n\t        var values = [];\n\t        var fieldValue = hierarchy.facetValue.value;\n\t        var facetValue = this.facet.values.get(fieldValue);\n\t        if (!Utils_1.Utils.exists(facetValue)) {\n\t            facetValue = FacetValues_1.FacetValue.create(fieldValue);\n\t        }\n\t        facetValue.selected = true;\n\t        facetValue.excluded = false;\n\t        values.push(facetValue);\n\t        var childs = hierarchy.childs;\n\t        _.each(childs, function (child) {\n\t            var childHierarchy = _this.facet.getValueFromHierarchy(child.facetValue.value);\n\t            values.push(_this.createFacetValuesFromHierarchy(childHierarchy));\n\t        });\n\t        return values;\n\t    };\n\t    return HierarchicalFacetSearch;\n\t}(FacetSearch_1.FacetSearch));\n\texports.HierarchicalFacetSearch = HierarchicalFacetSearch;\n\n\n/***/ },\n/* 219 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar BreadcrumbValuesList_1 = __webpack_require__(170);\n\tvar HierarchicalBreadcrumbValueElement_1 = __webpack_require__(220);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar HierarchicalBreadcrumbValuesList = (function (_super) {\n\t    __extends(HierarchicalBreadcrumbValuesList, _super);\n\t    function HierarchicalBreadcrumbValuesList(facet, facetValues, valueHierarchy) {\n\t        var _this = _super.call(this, facet, facetValues, HierarchicalBreadcrumbValueElement_1.HierarchicalBreadcrumbValueElement) || this;\n\t        _this.facet = facet;\n\t        _this.facetValues = facetValues;\n\t        _this.valueHierarchy = valueHierarchy;\n\t        return _this;\n\t    }\n\t    HierarchicalBreadcrumbValuesList.prototype.buildAsString = function () {\n\t        this.build();\n\t        if (this.elem) {\n\t            var joined = this.facet.options.title + \": \" + _.map(Dom_1.$$(this.elem).findAll('.coveo-facet-breadcrumb-value'), function (value) {\n\t                _.each(Dom_1.$$(value).findAll('.coveo-hierarchical-breadcrumb-separator'), function (separator) {\n\t                    // small right black triangle\n\t                    Dom_1.$$(separator).text('\\u25B8');\n\t                });\n\t                return Dom_1.$$(value).text();\n\t            }).join(', ');\n\t            return joined;\n\t        }\n\t        return '';\n\t    };\n\t    return HierarchicalBreadcrumbValuesList;\n\t}(BreadcrumbValuesList_1.BreadcrumbValueList));\n\texports.HierarchicalBreadcrumbValuesList = HierarchicalBreadcrumbValuesList;\n\n\n/***/ },\n/* 220 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar BreadcrumbValueElement_1 = __webpack_require__(169);\n\tvar _ = __webpack_require__(16);\n\tvar HierarchicalBreadcrumbValueElement = (function (_super) {\n\t    __extends(HierarchicalBreadcrumbValueElement, _super);\n\t    function HierarchicalBreadcrumbValueElement(facet, facetValue) {\n\t        var _this = _super.call(this, facet, facetValue) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        return _this;\n\t    }\n\t    HierarchicalBreadcrumbValueElement.prototype.build = function () {\n\t        var build = _super.prototype.build.call(this);\n\t        build.addClass('coveo-hierarchical-facet-value');\n\t        var caption = build.find('.coveo-facet-breadcrumb-caption');\n\t        var values = this.facetValue.value.split(this.facet.options.delimitingCharacter);\n\t        values = _.map(values, function (v) {\n\t            return _.escape(v);\n\t        });\n\t        caption.innerHTML = values.join('<span class=\\'coveo-hierarchical-breadcrumb-separator\\'></span>');\n\t        return build;\n\t    };\n\t    return HierarchicalBreadcrumbValueElement;\n\t}(BreadcrumbValueElement_1.BreadcrumbValueElement));\n\texports.HierarchicalBreadcrumbValueElement = HierarchicalBreadcrumbValueElement;\n\n\n/***/ },\n/* 221 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"../HierarchicalFacet/HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OmniboxValuesList_1 = __webpack_require__(173);\n\tvar OmniboxHierarchicalValueElement_1 = __webpack_require__(222);\n\tvar OmniboxHierarchicalValuesList = (function (_super) {\n\t    __extends(OmniboxHierarchicalValuesList, _super);\n\t    function OmniboxHierarchicalValuesList(facet, facetValues, omniboxObject) {\n\t        var _this = _super.call(this, facet, facetValues, omniboxObject, OmniboxHierarchicalValueElement_1.OmniboxHierarchicalValueElement) || this;\n\t        _this.facet = facet;\n\t        _this.facetValues = facetValues;\n\t        _this.omniboxObject = omniboxObject;\n\t        return _this;\n\t    }\n\t    return OmniboxHierarchicalValuesList;\n\t}(OmniboxValuesList_1.OmniboxValuesList));\n\texports.OmniboxHierarchicalValuesList = OmniboxHierarchicalValuesList;\n\n\n/***/ },\n/* 222 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar OmniboxValueElement_1 = __webpack_require__(172);\n\tvar OmniboxHierarchicalValueElement = (function (_super) {\n\t    __extends(OmniboxHierarchicalValueElement, _super);\n\t    function OmniboxHierarchicalValueElement(facet, facetValue, eventArg) {\n\t        var _this = _super.call(this, facet, facetValue, eventArg) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        _this.eventArg = eventArg;\n\t        return _this;\n\t    }\n\t    OmniboxHierarchicalValueElement.prototype._handleSelectValue = function (eventBindings) {\n\t        this.facet.open(this.facetValue);\n\t        _super.prototype.handleSelectValue.call(this, eventBindings);\n\t    };\n\t    OmniboxHierarchicalValueElement.prototype._handleExcludeClick = function (eventBindings) {\n\t        this.facet.open(this.facetValue);\n\t        _super.prototype.handleExcludeClick.call(this, eventBindings);\n\t    };\n\t    return OmniboxHierarchicalValueElement;\n\t}(OmniboxValueElement_1.OmniboxValueElement));\n\texports.OmniboxHierarchicalValueElement = OmniboxHierarchicalValueElement;\n\n\n/***/ },\n/* 223 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/// <reference path=\"HierarchicalFacet.ts\" />\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar FacetValueElement_1 = __webpack_require__(161);\n\tvar HierarchicalFacetValueElement = (function (_super) {\n\t    __extends(HierarchicalFacetValueElement, _super);\n\t    function HierarchicalFacetValueElement(facet, facetValue, keepDisplayedValueNextTime) {\n\t        var _this = _super.call(this, facet, facetValue, keepDisplayedValueNextTime) || this;\n\t        _this.facet = facet;\n\t        _this.facetValue = facetValue;\n\t        _this.keepDisplayedValueNextTime = keepDisplayedValueNextTime;\n\t        return _this;\n\t    }\n\t    return HierarchicalFacetValueElement;\n\t}(FacetValueElement_1.FacetValueElement));\n\texports.HierarchicalFacetValueElement = HierarchicalFacetValueElement;\n\n\n/***/ },\n/* 224 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Cell_1 = __webpack_require__(225);\n\tvar DefaultMatrixResultPreviewTemplate_1 = __webpack_require__(226);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Globalize = __webpack_require__(30);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Matrix component uses the values of two fields (row and column) to display the results of the specified computed\n\t * field in a table.\n\t *\n\t * The user specifies the values to use for the columns. An {@link IGroupByRequest} operation performed at the same time\n\t * as the main query retrieves the values to use for the rows.\n\t *\n\t * In a way that is similar to the {@link Facet} component, selecting a Matrix cell allows the end user to drill down\n\t * inside the results by restricting the row field and the column field to match the values of the selected cell.\n\t */\n\tvar Matrix = (function (_super) {\n\t    __extends(Matrix, _super);\n\t    /**\n\t     * Creates a new Matrix. Also verifies whether options are valid and coherent. Binds query events.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Matrix component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Matrix(element, options, bindings) {\n\t        var _this = _super.call(this, element, Matrix.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.groupByIndex = [];\n\t        _this.rowId = '';\n\t        _this.columnId = '';\n\t        /**\n\t         * The currently selected row value, or `undefined` if nothing is selected.\n\t         */\n\t        _this.selectedRowValue = undefined;\n\t        /**\n\t         * The currently selected column value, or `undefined` if nothing is selected.\n\t         */\n\t        _this.selectedColumnValue = undefined;\n\t        _this.numberOfRows = 0;\n\t        _this.numberOfColumns = 0;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Matrix, options);\n\t        if (!_this.options.previewTemplate) {\n\t            _this.options.previewTemplate = new DefaultMatrixResultPreviewTemplate_1.DefaultMatrixResultPreviewTemplate(_this.options.computedField, _this.options.computedFieldFormat);\n\t        }\n\t        if (!_this.options.previewSortField) {\n\t            _this.options.previewSortField = _this.options.computedField;\n\t        }\n\t        if (_this.options.columnFieldValues.length != _this.options.columnLabels.length) {\n\t            _this.options.columnLabels = _this.options.columnFieldValues;\n\t        }\n\t        _this.buildMatrix();\n\t        if (_this.options.rowField == null) {\n\t            _this.logger.error('\\'rowField\\' option is required in the Matrix component');\n\t        }\n\t        else if (_this.options.columnField == null) {\n\t            _this.logger.error('\\'columnField\\' option is required in the Matrix component');\n\t        }\n\t        else if (_this.options.computedField == null) {\n\t            _this.logger.error('\\'computedField\\' option is required in the Matrix component');\n\t        }\n\t        else {\n\t            _this.bindEvents();\n\t            _this.initQueryState();\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Selects a cell by its row and column number. Does not execute a query.\n\t     * @param rowNumber The row number of the cell to select.\n\t     * @param columnNumber The column number of the cell to select.\n\t     */\n\t    Matrix.prototype.selectCell = function (rowNumber, columnNumber) {\n\t        var rowValue, columnValue;\n\t        if (rowNumber !== 0 && rowNumber !== this.numberOfRows - 1) {\n\t            rowValue = this.getRowValue(rowNumber);\n\t        }\n\t        if (columnNumber !== 0 && columnNumber !== this.numberOfColumns - 1) {\n\t            columnValue = this.getColumnValue(columnNumber);\n\t        }\n\t        if (rowValue && this.isRowFacetPresent()) {\n\t            this.queryStateModel.set(this.rowId, [rowValue]);\n\t        }\n\t        else {\n\t            this.selectedRowValue = rowValue;\n\t            this.queryStateModel.set(this.rowId, []);\n\t        }\n\t        if (columnValue && this.isColumnFacetPresent()) {\n\t            this.queryStateModel.set(this.columnId, [columnValue]);\n\t        }\n\t        else {\n\t            this.selectedColumnValue = columnValue;\n\t            this.queryStateModel.set(this.columnId, []);\n\t        }\n\t    };\n\t    /**\n\t     * Returns the currently selected column value.\n\t     */\n\t    Matrix.prototype.getSelectedColumnValue = function () {\n\t        return this.selectedColumnValue;\n\t    };\n\t    /**\n\t     * Returns the currently selected row value.\n\t     */\n\t    Matrix.prototype.getSelectedRowValue = function () {\n\t        return this.selectedRowValue;\n\t    };\n\t    /**\n\t     * Gets the HTMLElement associated to a cell.\n\t     * @param rowNumber The row number of the cell.\n\t     * @param columnNumber The column number of the cell.\n\t     * @returns {HTMLElement} The associated HTMLElement.\n\t     */\n\t    Matrix.prototype.getCellElement = function (rowNumber, columnNumber) {\n\t        return this.data[rowNumber][columnNumber].getHTML();\n\t    };\n\t    /**\n\t     * Gets the string associated to a cell.\n\t     * @param rowNumber The row number of the cell.\n\t     * @param columnNumber The column number of the cell.\n\t     * @returns {string} The associated string.\n\t     */\n\t    Matrix.prototype.getCellValue = function (rowNumber, columnNumber) {\n\t        var cell = this.getCellElement(rowNumber, columnNumber);\n\t        return Dom_1.$$(cell).text();\n\t    };\n\t    Matrix.prototype.drawMatrix = function () {\n\t        var _this = this;\n\t        var headerRow = Dom_1.$$('div', {\n\t            className: 'coveo-matrix-row matrix-header-row'\n\t        });\n\t        this.drawRow(headerRow.el, 0);\n\t        var numberOfRowsToDraw = this.options.enableColumnTotals ? this.numberOfRows - 1 : this.numberOfRows;\n\t        for (var i = 1; i < numberOfRowsToDraw; i++) {\n\t            var row = Dom_1.$$('div', {\n\t                className: 'coveo-matrix-row'\n\t            }).el;\n\t            this.drawRow(row, i);\n\t        }\n\t        if (this.options.enableColumnTotals) {\n\t            var totalRow = Dom_1.$$('div', {\n\t                className: 'coveo-matrix-row matrix-total-row'\n\t            }).el;\n\t            this.drawRow(totalRow, this.numberOfRows - 1);\n\t        }\n\t        if (this.options.cellFontSize !== '') {\n\t            var cells = Dom_1.$$(this.element).findAll('.coveo-matrix-cell');\n\t            _.each(cells, function (c) {\n\t                c.style.fontSize = _this.options.cellFontSize;\n\t            });\n\t        }\n\t    };\n\t    Matrix.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.doneBuildingQuery, function (args) { return _this.handleDoneBuildingQuery(args); });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.deferredQuerySuccess, function (args) { return _this.handleDeferredQuerySuccess(args); });\n\t    };\n\t    Matrix.prototype.initQueryState = function () {\n\t        this.rowId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.rowField);\n\t        this.columnId = QueryStateModel_1.QueryStateModel.getFacetId(this.options.columnField);\n\t        this.queryStateModel.registerNewAttribute(this.rowId, []);\n\t        this.queryStateModel.registerNewAttribute(this.columnId, []);\n\t    };\n\t    Matrix.prototype.buildMatrix = function () {\n\t        this.buildTitle();\n\t        this.buildBody();\n\t        this.data = new Array();\n\t        this.addHeaderRow();\n\t    };\n\t    Matrix.prototype.buildTitle = function () {\n\t        var title = this.options.title ? this.options.title : '';\n\t        var titleHtml = Dom_1.$$('div', {\n\t            className: 'coveo-matrix-title'\n\t        }, title).el;\n\t        this.element.appendChild(titleHtml);\n\t    };\n\t    Matrix.prototype.buildBody = function () {\n\t        var body = Dom_1.$$('div', {\n\t            className: 'coveo-matrix'\n\t        }).el;\n\t        this.element.appendChild(body);\n\t    };\n\t    Matrix.prototype.handleBuildingQuery = function (args) {\n\t        if (!this.areFacetsPresent()) {\n\t            if (this.selectedRowValue && !this.isRowFacetPresent()) {\n\t                args.queryBuilder.advancedExpression.addFieldExpression(this.options.rowField, '=', [this.selectedRowValue]);\n\t            }\n\t            if (this.selectedColumnValue && !this.isColumnFacetPresent()) {\n\t                args.queryBuilder.advancedExpression.addFieldExpression(this.options.columnField, '=', [this.selectedColumnValue]);\n\t            }\n\t        }\n\t    };\n\t    Matrix.prototype.handleDoneBuildingQuery = function (args) {\n\t        this.groupByIndex = [];\n\t        this.addMainGroubByRequest(args.queryBuilder);\n\t        this.addColumnsGroupByRequests(args.queryBuilder);\n\t    };\n\t    Matrix.prototype.handleDeferredQuerySuccess = function (args) {\n\t        this.reset();\n\t        this.parseResults(args.results);\n\t        this.addTotals();\n\t        this.drawMatrix();\n\t        this.formatCells();\n\t        this.selectedRowValue = undefined;\n\t        this.selectedColumnValue = undefined;\n\t    };\n\t    Matrix.prototype.addMainGroubByRequest = function (queryBuilder) {\n\t        var groupBy = {\n\t            field: this.options.rowField,\n\t            sortCriteria: this.options.sortCriteria,\n\t            computedFields: this.getComputedFields(),\n\t            maximumNumberOfValues: this.options.maximumNumberOfRows\n\t        };\n\t        this.groupByIndex.push(queryBuilder.groupByRequests.length);\n\t        queryBuilder.groupByRequests.push(groupBy);\n\t    };\n\t    Matrix.prototype.addColumnsGroupByRequests = function (queryBuilder) {\n\t        for (var i = 0; i < this.options.columnFieldValues.length; i++) {\n\t            var groupBy = {\n\t                field: this.options.rowField,\n\t                sortCriteria: this.options.sortCriteria,\n\t                computedFields: this.getComputedFields(),\n\t                queryOverride: '(' + this.buildExpression(queryBuilder) + ')' + '(' + this.options.columnField + '=\\'' + this.options.columnFieldValues[i] + '\\')',\n\t                maximumNumberOfValues: this.options.maximumNumberOfValuesInGroupBy\n\t            };\n\t            this.groupByIndex.push(queryBuilder.groupByRequests.length);\n\t            queryBuilder.groupByRequests.push(groupBy);\n\t        }\n\t    };\n\t    Matrix.prototype.buildExpression = function (queryBuilder) {\n\t        var expression = queryBuilder.expression.build();\n\t        var advancedExpression = queryBuilder.advancedExpression.build();\n\t        var constantExpression = queryBuilder.constantExpression.build();\n\t        var totalQuery = '';\n\t        if (expression) {\n\t            totalQuery += ' ' + expression;\n\t        }\n\t        if (advancedExpression) {\n\t            totalQuery += ' ' + advancedExpression;\n\t        }\n\t        if (constantExpression) {\n\t            totalQuery += ' ' + constantExpression;\n\t        }\n\t        return totalQuery;\n\t    };\n\t    Matrix.prototype.getComputedFields = function () {\n\t        var computedFields = [{\n\t                field: this.options.computedField,\n\t                operation: this.options.computedFieldOperation\n\t            }];\n\t        return computedFields;\n\t    };\n\t    Matrix.prototype.getCellResult = function (results, rowNumber, columnNumber) {\n\t        var rowValue = this.getRowValue(rowNumber);\n\t        var columnValue = this.getColumnValue(columnNumber);\n\t        var cellResult = 0;\n\t        for (var i = 0; i < results.values.length; i++) {\n\t            if (results.values[i].value === rowValue) {\n\t                cellResult = results.values[i].computedFieldResults[0];\n\t                break;\n\t            }\n\t        }\n\t        if (this.isAColumnSelected() && !this.isColumnSelected(columnValue)) {\n\t            cellResult = 0;\n\t        }\n\t        return cellResult;\n\t    };\n\t    Matrix.prototype.addTotals = function () {\n\t        if (this.options.enableRowTotals) {\n\t            this.addRowTotals();\n\t        }\n\t        if (this.options.enableColumnTotals) {\n\t            this.addColumnTotals();\n\t        }\n\t    };\n\t    Matrix.prototype.addRowTotals = function () {\n\t        var _this = this;\n\t        this.addColumn();\n\t        this.setValue('Total', 0, this.numberOfColumns - 1);\n\t        for (var i = 1; i < this.numberOfRows; i++) {\n\t            var rowTotal = this.computeRowTotal(i);\n\t            this.setValue(rowTotal, i, this.numberOfColumns - 1);\n\t        }\n\t        // Fix sort ordering when not all columns field values are present.\n\t        if (this.options.sortCriteria.toLowerCase() == 'computedfielddescending') {\n\t            this.data.sort(function (a, b) {\n\t                return b[_this.numberOfColumns - 1].getValue() - a[_this.numberOfColumns - 1].getValue();\n\t            });\n\t        }\n\t        if (this.options.sortCriteria.toLowerCase() == 'computedfieldascending') {\n\t            this.data.sort(function (a, b) {\n\t                return a[_this.numberOfColumns - 1].getValue() - b[_this.numberOfColumns - 1].getValue();\n\t            });\n\t        }\n\t    };\n\t    Matrix.prototype.addColumnTotals = function () {\n\t        this.addRow();\n\t        this.setValue('Total', this.numberOfRows - 1, 0);\n\t        for (var i = 1; i < this.numberOfColumns; i++) {\n\t            var columnTotal = this.computeColumnTotal(i);\n\t            this.setValue(columnTotal, this.numberOfRows - 1, i);\n\t        }\n\t    };\n\t    Matrix.prototype.computeRowTotal = function (rowNumber) {\n\t        var total = 0;\n\t        for (var columnNumber = 1; columnNumber < this.numberOfColumns - 1; columnNumber++) {\n\t            total += parseInt(this.getCellValue(rowNumber, columnNumber));\n\t        }\n\t        return total;\n\t    };\n\t    Matrix.prototype.computeColumnTotal = function (columnNumber) {\n\t        var total = 0;\n\t        for (var rowNumber = 1; rowNumber < this.numberOfRows - 1; rowNumber++) {\n\t            total += parseInt(this.getCellValue(rowNumber, columnNumber));\n\t        }\n\t        return total;\n\t    };\n\t    Matrix.prototype.formatCells = function () {\n\t        for (var i = 1; i < this.numberOfRows; i++) {\n\t            for (var j = 1; j < this.numberOfColumns; j++) {\n\t                var cellValue = this.getCellValue(i, j);\n\t                cellValue = Globalize.format(parseInt(cellValue), this.options.computedFieldFormat);\n\t                this.setValue(cellValue, i, j);\n\t            }\n\t        }\n\t    };\n\t    Matrix.prototype.addHeaderRow = function () {\n\t        this.addRow();\n\t        this.addColumn();\n\t        this.setValue(this.options.columnHeader, 0, 0);\n\t        for (var i = 0; i < this.options.columnLabels.length; i++) {\n\t            this.addColumn();\n\t            this.setValue(this.options.columnLabels[i], 0, i + 1);\n\t        }\n\t    };\n\t    Matrix.prototype.addRow = function () {\n\t        this.data.push(new Array());\n\t        for (var i = 0; i < this.numberOfColumns; i++) {\n\t            this.addCellToRow(this.numberOfRows, i);\n\t        }\n\t        this.numberOfRows++;\n\t    };\n\t    Matrix.prototype.addColumn = function () {\n\t        for (var i = 0; i < this.numberOfRows; i++) {\n\t            this.addCellToRow(i, this.numberOfColumns);\n\t        }\n\t        this.numberOfColumns++;\n\t    };\n\t    Matrix.prototype.addCellToRow = function (rowNumber, columnNumber) {\n\t        var column = Dom_1.$$('div', {\n\t            className: 'coveo-matrix-cell'\n\t        });\n\t        if (columnNumber == 0) {\n\t            column.addClass('matrix-first-column');\n\t        }\n\t        this.data[rowNumber].push(new Cell_1.Cell(0, column.el));\n\t    };\n\t    Matrix.prototype.setValue = function (value, rowNumber, columnNumber) {\n\t        var cell = this.getCellElement(rowNumber, columnNumber);\n\t        if (!Utils_1.Utils.isNullOrUndefined(value)) {\n\t            Dom_1.$$(cell).text(value.toString());\n\t        }\n\t        if (this.isCellSelected(this.getRowValue(rowNumber), this.getColumnValue(columnNumber))) {\n\t            Dom_1.$$(cell).addClass('coveo-matrix-selected');\n\t        }\n\t        if (this.isAColumnSelected() && !this.isColumnSelected(this.getColumnValue(columnNumber))) {\n\t            if (columnNumber != 0 && rowNumber != 0) {\n\t                Dom_1.$$(cell).addClass('coveo-matrix-unimportant');\n\t            }\n\t        }\n\t        this.data[rowNumber][columnNumber].setValue(value);\n\t    };\n\t    Matrix.prototype.handleClick = function (rowNumber, columnNumber) {\n\t        this.selectCell(rowNumber, columnNumber);\n\t        this.queryController.executeQuery();\n\t    };\n\t    Matrix.prototype.getRowValue = function (rowNumber) {\n\t        return this.data[rowNumber][0].getValue();\n\t    };\n\t    Matrix.prototype.getColumnValue = function (columnNumber) {\n\t        return this.options.columnFieldValues[columnNumber - 1];\n\t    };\n\t    Matrix.prototype.isAColumnSelected = function () {\n\t        var selectedColumnValues = this.queryStateModel.get(this.columnId) || [];\n\t        return selectedColumnValues.length !== 0 || this.selectedColumnValue != undefined;\n\t    };\n\t    Matrix.prototype.isColumnSelected = function (columnValue) {\n\t        if (this.isAColumnSelected() && columnValue) {\n\t            var selectedColumnValues = this.queryStateModel.attributes[this.columnId] || [];\n\t            for (var i = 0; i < selectedColumnValues.length; i++) {\n\t                if (selectedColumnValues[i].toLowerCase() === columnValue.toLowerCase()) {\n\t                    return true;\n\t                }\n\t            }\n\t        }\n\t        return this.selectedColumnValue == columnValue;\n\t    };\n\t    Matrix.prototype.isARowSelected = function () {\n\t        var selectedRowValues = this.queryStateModel.get(this.rowId) || [];\n\t        return selectedRowValues.length !== 0 || this.selectedRowValue !== undefined;\n\t    };\n\t    Matrix.prototype.isRowSelected = function (rowValue) {\n\t        if (this.isARowSelected() && rowValue) {\n\t            var selectedRowValues = this.queryStateModel.get(this.rowId) || [];\n\t            for (var i = 0; i < selectedRowValues.length; i++) {\n\t                if (selectedRowValues[i].toLowerCase() === rowValue.toLowerCase()) {\n\t                    return true;\n\t                }\n\t            }\n\t        }\n\t        return this.selectedRowValue == rowValue;\n\t    };\n\t    Matrix.prototype.isCellSelected = function (rowValue, columnValue) {\n\t        if (this.isAColumnSelected() && this.isARowSelected()) {\n\t            return this.isRowSelected(rowValue) && this.isColumnSelected(columnValue);\n\t        }\n\t        else if (this.isAColumnSelected()) {\n\t            return this.isColumnSelected(columnValue);\n\t        }\n\t        return false;\n\t    };\n\t    Matrix.prototype.areFacetsPresent = function () {\n\t        return this.isRowFacetPresent() && this.isColumnFacetPresent();\n\t    };\n\t    Matrix.prototype.isRowFacetPresent = function () {\n\t        var facet = this.componentStateModel.get(this.rowId);\n\t        return facet && !facet[0].disabled;\n\t    };\n\t    Matrix.prototype.isColumnFacetPresent = function () {\n\t        var facet = this.componentStateModel.get(this.columnId);\n\t        return facet && !facet[0].disabled;\n\t    };\n\t    Matrix.prototype.reset = function () {\n\t        Dom_1.$$(this.element).empty();\n\t        this.numberOfRows = 0;\n\t        this.numberOfColumns = 0;\n\t        this.data = new Array();\n\t        this.buildMatrix();\n\t    };\n\t    Matrix.prototype.parseResults = function (results) {\n\t        if (results) {\n\t            var mainResults = results.groupByResults[this.groupByIndex[0]];\n\t            if (mainResults) {\n\t                for (var i = 0; i < mainResults.values.length; i++) {\n\t                    var value = mainResults.values[i].value;\n\t                    this.addRow();\n\t                    this.setValue(value, i + 1, 0);\n\t                }\n\t            }\n\t            for (var i = 1; i < this.numberOfRows; i++) {\n\t                for (var j = 1; j < this.numberOfColumns; j++) {\n\t                    var columnResult = results.groupByResults[this.groupByIndex[j]];\n\t                    var cellValue = this.getCellResult(columnResult, i, j);\n\t                    this.setValue(cellValue, i, j);\n\t                }\n\t            }\n\t        }\n\t    };\n\t    Matrix.prototype.drawRow = function (row, rowNumber) {\n\t        var _this = this;\n\t        var body = Dom_1.$$(this.element).find('.coveo-matrix');\n\t        var _loop_1 = function (i) {\n\t            var cell = this_1.data[rowNumber][i].getHTML();\n\t            Dom_1.$$(cell).on('click', function () {\n\t                var handler = function (num) {\n\t                    _this.handleClick(rowNumber, num);\n\t                };\n\t                handler(i);\n\t            });\n\t            if (this_1.options.enableHoverPreview) {\n\t                (function (num) {\n\t                    Dom_1.$$(cell).on('mouseover', function () { return _this.handleHoverIn(rowNumber, num); });\n\t                    Dom_1.$$(cell).on('mouseout', function () { return _this.handleHoverOut(rowNumber, num); });\n\t                })(i);\n\t            }\n\t            row.appendChild(cell);\n\t        };\n\t        var this_1 = this;\n\t        for (var i = 0; i < this.numberOfColumns; i++) {\n\t            _loop_1(i);\n\t        }\n\t        body.appendChild(row);\n\t    };\n\t    Matrix.prototype.handleHoverIn = function (rowNumber, columnNumber) {\n\t        var _this = this;\n\t        if (this.isHoverWorkingOnRow(rowNumber) && this.isHoverWorkingOnColumn(columnNumber)) {\n\t            this.previewTimeout = setTimeout(function () {\n\t                _this.displayResultsPreview(rowNumber, columnNumber);\n\t            }, this.options.previewDelay);\n\t        }\n\t    };\n\t    Matrix.prototype.handleHoverOut = function (rowNumber, columnNumber) {\n\t        clearTimeout(this.previewTimeout);\n\t        var cell = this.data[rowNumber][columnNumber];\n\t        cell.removePreview();\n\t    };\n\t    Matrix.prototype.displayResultsPreview = function (rowNumber, columnNumber) {\n\t        var _this = this;\n\t        var query = this.createPreviewQuery(rowNumber, columnNumber);\n\t        var cell = this.data[rowNumber][columnNumber];\n\t        cell.addPreview(this.options.previewMinWidth, this.options.previewMaxWidth);\n\t        var endpoint = this.queryController.getEndpoint();\n\t        endpoint.search(query).then(function (data) {\n\t            // During the time it take for the query to return, the matrix can change size depending\n\t            // on if another query was performed : Need to check for undefined before accessing the data\n\t            // we're trying to render;\n\t            if (!_this.isDataAvailable(rowNumber, columnNumber)) {\n\t                return;\n\t            }\n\t            var cell = _this.data[rowNumber][columnNumber];\n\t            var instantiatedResults = _.map(data.results, function (r) {\n\t                return _this.instantiateTemplate(r);\n\t            });\n\t            var html = '';\n\t            _.each(instantiatedResults, function (result) {\n\t                html += result.outerHTML;\n\t            });\n\t            cell.updatePreview(html);\n\t        });\n\t    };\n\t    Matrix.prototype.instantiateTemplate = function (result) {\n\t        var content = this.options.previewTemplate.instantiateToElement(result, {\n\t            checkCondition: false,\n\t            responsiveComponents: this.searchInterface.responsiveComponents\n\t        });\n\t        var initParameters = {\n\t            options: this.options,\n\t            bindings: this.getBindings(),\n\t            result: result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(content, initParameters);\n\t        return content;\n\t    };\n\t    Matrix.prototype.createPreviewQuery = function (rowNumber, columnNumber) {\n\t        var rowFieldExpression = '(' + QueryUtils_1.QueryUtils.buildFieldExpression(this.options.rowField, '=', [this.getRowValue(rowNumber)]) + ')';\n\t        var columnFieldExpression = '(' + QueryUtils_1.QueryUtils.buildFieldExpression(this.options.columnField, '=', [this.getColumnValue(columnNumber)]) + ')';\n\t        var query = this.queryController.getLastQuery();\n\t        query.aq = rowFieldExpression;\n\t        query.aq += columnFieldExpression;\n\t        query.sortCriteria = this.options.previewSortCriteria;\n\t        query.sortField = this.options.previewSortField;\n\t        var fieldSliced = this.options.computedField.slice(1);\n\t        var fieldExists = _.find(query.fieldsToInclude, function (field) {\n\t            return field == fieldSliced;\n\t        });\n\t        if (!fieldExists && query.fieldsToInclude) {\n\t            query.fieldsToInclude.push(fieldSliced);\n\t        }\n\t        return query;\n\t    };\n\t    Matrix.prototype.isHoverWorkingOnRow = function (rowNumber) {\n\t        if (this.options.enableColumnTotals) {\n\t            return rowNumber !== 0 && rowNumber !== this.numberOfRows - 1;\n\t        }\n\t        return rowNumber !== 0;\n\t    };\n\t    Matrix.prototype.isHoverWorkingOnColumn = function (columnNumber) {\n\t        if (this.options.enableRowTotals) {\n\t            return columnNumber !== 0 && columnNumber !== this.numberOfColumns - 1;\n\t        }\n\t        return columnNumber !== 0;\n\t    };\n\t    Matrix.prototype.isDataAvailable = function (row, column) {\n\t        return this.data[row] !== undefined && this.data[row][column] !== undefined;\n\t    };\n\t    return Matrix;\n\t}(Component_1.Component));\n\tMatrix.ID = 'Matrix';\n\t/**\n\t * The possible options for the component\n\t * @componentOptions\n\t */\n\tMatrix.options = {\n\t    /**\n\t     * Specifies the text to display at the top of the Matrix.\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the field to use for the rows.\n\t     *\n\t     * Specifying a value for this options is required for this component to work.\n\t     */\n\t    rowField: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies the field to use for the columns.\n\t     *\n\t     * Specifying a value for this options is required for this component to work.\n\t     */\n\t    columnField: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies the criteria to use for sorting the rows.\n\t     *\n\t     * See {@link IGroupByRequest.sortCriteria} for the list of possible values.\n\t     *\n\t     * Default value is `ComputedFieldDescending`.\n\t     */\n\t    sortCriteria: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'ComputedFieldDescending' }),\n\t    /**\n\t     * Specifies the maximum number of rows to display in the Matrix.\n\t     *\n\t     * Default value is `10`. Minimum value is `0`.\n\t     */\n\t    maximumNumberOfRows: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 }),\n\t    /**\n\t     * Specifies whether to display a **Total** column containing the sum of each row.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableRowTotals: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the field values to use for each column.\n\t     *\n\t     * See also {@link Matrix.options.columnLabels}.\n\t     *\n\t     * Default valus is `[]`, which means that the Matrix will not generate any column (except the **Total** column, if\n\t     * {@link Matrix.options.enableRowTotals} is `true`).\n\t     */\n\t    columnFieldValues: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: [] }),\n\t    /**\n\t     * Specifies the label values to use for each column.\n\t     *\n\t     * Default value is `[]`. The array set for this options should match the {@link Matrix.options.columnFieldValues}.\n\t     */\n\t    columnLabels: ComponentOptions_1.ComponentOptions.buildListOption({ defaultValue: [] }),\n\t    /**\n\t     * Specifies the label for the first column on the left as a description of the {@link Matrix.options.columnField}.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    columnHeader: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the maximum number of results to include in the {@link IGroupByRequest} for the columns.\n\t     *\n\t     * This value should always be greater than the {@link Matrix.options.maximumNumberOfRows}. If it is too small, some\n\t     * of the results will not be displayed in the Matrix.\n\t     *\n\t     * Default value is `100`. Minimum value is `0`.\n\t     */\n\t    maximumNumberOfValuesInGroupBy: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 100, min: 0 }),\n\t    /**\n\t     * Specifies whether to add a **Total** row containing the total of each column.\n\t     *\n\t     * Default value is `true`\n\t     */\n\t    enableColumnTotals: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the field whose computed values you want to display in the cells.\n\t     *\n\t     * Specifying a value for this options is required for this component to work.\n\t     */\n\t    computedField: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies the type of aggregate operation to perform on the {@link Matrix.options.computedField}.\n\t     *\n\t     * The possible values are:\n\t     * - `sum` - Computes the sum of the computed field values.\n\t     * - `average` - Computes the average of the computed field values.\n\t     * - `minimum` - Finds the minimum value of the computed field values.\n\t     * - `maximum` - Finds the maximum value of the computed field values.\n\t     *\n\t     * Default value is `sum`.\n\t     */\n\t    computedFieldOperation: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'sum' }),\n\t    /**\n\t     * Specifies how to format the values resulting from a {@link Matrix.options.computedFieldOperation}.\n\t     *\n\t     * The Globalize library defines all available formats (see\n\t     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-)).\n\t     *\n\t     * The most commonly used formats are:\n\t     * - `c0` - Formats the value as a currency.\n\t     * - `n0` - Formats the value as an integer.\n\t     * - `n2` - Formats the value as a floating point with 2 decimal digits.\n\t     *\n\t     * Default value is `c0`.\n\t     */\n\t    computedFieldFormat: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'c0' }),\n\t    /**\n\t     * Specifies the font-size to use for displaying text inside the cells.\n\t     *\n\t     * This option is mainly useful to prevent a Matrix containing many columns from cropping some of its values.\n\t     *\n\t     * However, instead of using this option to solve this kind of issue, you could also remove some of the less\n\t     * important columns from your Matrix or modify the CSS of your page to allow the Matrix to occupy a larger space.\n\t     *\n\t     * Default value is `''`.\n\t     */\n\t    cellFontSize: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '' }),\n\t    /**\n\t     * Specifies whether to show a preview popup of cell results when hovering over a cell.\n\t     *\n\t     * See also {@link Matrix.options.previewSortCriteria}, {@link Matrix.options.previewMaxWidth},\n\t     * {@link Matrix.options.previewMinWidth}, {@link Matrix.options.previewDelay} and\n\t     * {@link Matrix.options.previewTemplate}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableHoverPreview: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the criteria to use for sorting the results of\n\t     * the hover preview.\n\t     *\n\t     * The available sort criteria values are the same as those of the {@link IQuery}.\n\t     *\n\t     * The possible values are:\n\t     * - `relevancy`: Uses all configured ranking weights and any specified ranking expressions to sort the results.\n\t     * - `dateascending` / `datedescending`: Sorts the results using the `@date` field value, which is typically the\n\t     * last modification date of an item in the index.\n\t     * - `qre`: Sorts the results using only the weights applied by ranking expressions. Using `qre` is much like using\n\t     * `relevancy`, except that `qre` does not compute automatic weights, such as weights based on keyword proximity.\n\t     * - `nosort`: Does not sort the results. Using `nosort` returns the items in an essentially random order.\n\t     * - `fieldascending` / `fielddescending`: Sorts the results using the value of a custom field.\n\t     * - `fieldascending` / `fielddescending`: Sorts the results using the value of a custom field.\n\t     *\n\t     * See also {@link Matrix.options.previewSortField}.\n\t     *\n\t     * Default value is `FieldDescending`.\n\t     */\n\t    previewSortCriteria: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'FieldDescending' }),\n\t    /**\n\t     * If {@link Matrix.options.previewSortCriteria} is `fieldascending` or `fielddescending`, specifies the field to\n\t     * use for sorting the results of the hover preview.\n\t     *\n\t     * Default value is the value of {@link Matrix.options.computedField}.\n\t     */\n\t    previewSortField: ComponentOptions_1.ComponentOptions.buildFieldOption(),\n\t    /**\n\t     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the maximum width (in pixels) of the preview\n\t     * popup.\n\t     *\n\t     * Default value is `500px`.\n\t     */\n\t    previewMaxWidth: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '500px' }),\n\t    /**\n\t     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the minimum width (in pixels) of the preview\n\t     * popup.\n\t     *\n\t     * Default value is `0`.\n\t     */\n\t    previewMinWidth: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '0' }),\n\t    /**\n\t     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the delay (in milliseconds) before sending the\n\t     * query to get the preview results.\n\t     *\n\t     * Default value is `500`.\n\t     */\n\t    previewDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 500 }),\n\t    /**\n\t     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the template ID or CSS selector of the template\n\t     * to use to render the results of the hover preview.\n\t     *\n\t     * You must use either `data-template-id` or `data-template-selector` in the markup to specify a value for this\n\t     * option.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * Specifying what template to use by referring to its template ID:\n\t     * ```html\n\t     * <div class='CoveoMatrix' data-template-id='TemplateId'></div>\n\t     * ```\n\t     *\n\t     * Specifying what template to use by referring to its CSS selector:\n\t     * ```html\n\t     * <div class='CoveoMatrix' data-template-selector='.templateSelector'></div>\n\t     * ```\n\t     */\n\t    previewTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption()\n\t};\n\texports.Matrix = Matrix;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Matrix);\n\n\n/***/ },\n/* 225 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * Represent a single cell of data in the {@link Matrix} component.\n\t */\n\tvar Cell = (function () {\n\t    function Cell(value, el) {\n\t        if (value === void 0) { value = 0; }\n\t        this.previewActive = false;\n\t        this.element = el;\n\t        this.value = value;\n\t    }\n\t    /**\n\t     * Return the value of the cell.\n\t     * @returns {any}\n\t     */\n\t    Cell.prototype.getValue = function () {\n\t        return this.value;\n\t    };\n\t    /**\n\t     * Return the `HTMLElement` for the cell.\n\t     * @returns {HTMLElement}\n\t     */\n\t    Cell.prototype.getHTML = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Set the value if the cell.\n\t     * @param value\n\t     */\n\t    Cell.prototype.setValue = function (value) {\n\t        this.value = value;\n\t    };\n\t    /**\n\t     * Set the `HTMLElement` for the cell.\n\t     * @param html\n\t     */\n\t    Cell.prototype.setHTML = function (html) {\n\t        this.element = html;\n\t    };\n\t    /**\n\t     * Show the preview of the cell.\n\t     * @param minWidth css minWidth property : eg 100px\n\t     * @param maxWidth css maxWidth property : eg 100px\n\t     */\n\t    Cell.prototype.addPreview = function (minWidth, maxWidth) {\n\t        this.previewActive = true;\n\t        var previewContainer = Dom_1.$$('div', {\n\t            className: 'matrix-results-preview-container'\n\t        });\n\t        previewContainer.el.style.minWidth = minWidth;\n\t        previewContainer.el.style.maxWidth = maxWidth;\n\t        previewContainer.on('click', function (e) {\n\t            e.stopPropagation();\n\t        });\n\t        this.element.appendChild(previewContainer.el);\n\t        var container = Dom_1.$$(this.element).findAll('.matrix-results-preview-container');\n\t        _.each(container, function (c) {\n\t            Dom_1.$$(c).hide();\n\t        });\n\t    };\n\t    /**\n\t     * Remove the preview of the cell\n\t     */\n\t    Cell.prototype.removePreview = function () {\n\t        this.previewActive = false;\n\t        var container = Dom_1.$$(this.element).find('.matrix-results-preview-container');\n\t        if (container) {\n\t            Dom_1.$$(container).detach();\n\t        }\n\t    };\n\t    /**\n\t     * Update the preview with a new template\n\t     * @param template\n\t     */\n\t    Cell.prototype.updatePreview = function (template) {\n\t        if (this.previewActive) {\n\t            var preview = Dom_1.$$(this.element).find('.matrix-results-preview-container');\n\t            preview.innerHTML += template;\n\t            Dom_1.$$(preview).show();\n\t        }\n\t    };\n\t    return Cell;\n\t}());\n\texports.Cell = Cell;\n\n\n/***/ },\n/* 226 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Globalize = __webpack_require__(30);\n\tvar DefaultMatrixResultPreviewTemplate = (function (_super) {\n\t    __extends(DefaultMatrixResultPreviewTemplate, _super);\n\t    function DefaultMatrixResultPreviewTemplate(computedField, format) {\n\t        var _this = _super.call(this) || this;\n\t        _this.computedField = computedField;\n\t        _this.format = format;\n\t        return _this;\n\t    }\n\t    DefaultMatrixResultPreviewTemplate.prototype.instantiateToString = function (object, instantiateOptions) {\n\t        var preview = '<div class=\\'coveo-result-frame\\'>' +\n\t            '<div class=\\'coveo-result-row\\'>' +\n\t            '<div class=\\'coveo-result-cell\\' style=\\'width: 40px; padding-right:5px;vertical-align: middle\\'>' +\n\t            '<a class=\\'CoveoIcon\\' data-small=\\'true\\'></a>' +\n\t            '</div>' +\n\t            '<div class=\\'coveo-result-cell\\' style=\\'font-size:13px;vertical-align: middle\\'>' +\n\t            '<a class=\\'CoveoResultLink\\'></a>' +\n\t            '</div>' +\n\t            '<div class=\\'coveo-result-cell\\' style=\\'width:80px; text-align:right; font-size:13px; padding-right: 5px;vertical-align: middle\\'>' +\n\t            Globalize.format(parseInt(object.raw[this.computedField.slice(1)]), this.format) +\n\t            '</div>' +\n\t            '</div>' +\n\t            '</div>';\n\t        return preview;\n\t    };\n\t    DefaultMatrixResultPreviewTemplate.prototype.instantiateToElement = function (object, instantiateOptions) {\n\t        return Dom_1.$$('div', undefined, this.instantiateToString(object)).el;\n\t    };\n\t    return DefaultMatrixResultPreviewTemplate;\n\t}(Template_1.Template));\n\texports.DefaultMatrixResultPreviewTemplate = DefaultMatrixResultPreviewTemplate;\n\n\n/***/ },\n/* 227 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ResultLink_1 = __webpack_require__(203);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\tvar RegisteredNamedMethods_1 = __webpack_require__(107);\n\t/**\n\t * The YouTubeThumbnail component automatically fetches the thumbnail of a YouTube video.\n\t *\n\t * This component differs from the standard {@link Thumbnail} component because the thumbnail it outputs is always\n\t * clickable.\n\t *\n\t * Depending on the component configuration, clicking a YouTube thumbnail can either automatically open a modal box\n\t * containing the `iframe` from YouTube, or open the target URL in the current window (see\n\t * {@link YouTubeThumbnail.options.embed}).\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar YouTubeThumbnail = (function (_super) {\n\t    __extends(YouTubeThumbnail, _super);\n\t    function YouTubeThumbnail(element, options, bindings, result, ModalBox) {\n\t        if (ModalBox === void 0) { ModalBox = ExternalModulesShim_1.ModalBox; }\n\t        var _this = _super.call(this, element, YouTubeThumbnail.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.ModalBox = ModalBox;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, YouTubeThumbnail, options);\n\t        _this.resultLink = Dom_1.$$('a');\n\t        _this.resultLink.addClass(Component_1.Component.computeCssClassName(ResultLink_1.ResultLink));\n\t        var thumbnailDiv = Dom_1.$$('div');\n\t        thumbnailDiv.addClass('coveo-youtube-thumbnail-container');\n\t        _this.resultLink.append(thumbnailDiv.el);\n\t        var img = Dom_1.$$('img');\n\t        img.el.style.width = _this.options.width;\n\t        img.el.style.height = _this.options.height;\n\t        img.setAttribute('src', result.raw['ytthumbnailurl']);\n\t        img.addClass('coveo-youtube-thumbnail-img');\n\t        thumbnailDiv.append(img.el);\n\t        var span = Dom_1.$$('span');\n\t        span.addClass('coveo-youtube-thumbnail-play-button');\n\t        thumbnailDiv.append(span.el);\n\t        Dom_1.$$(_this.element).append(_this.resultLink.el);\n\t        if (_this.options.embed) {\n\t            _this.options = _.extend(_this.options, {\n\t                onClick: function () { return _this.openYoutubeIframe(); }\n\t            });\n\t        }\n\t        var initOptions = _this.searchInterface.options.originalOptionsObject;\n\t        var resultComponentBindings = _.extend({}, _this.getBindings(), {\n\t            resultElement: element\n\t        });\n\t        var initParameters = {\n\t            options: _.extend({}, { initOptions: { ResultLink: options } }, initOptions),\n\t            bindings: resultComponentBindings,\n\t            result: result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t        return _this;\n\t    }\n\t    /**\n\t     * Open the result link embedded in this component.\n\t     *\n\t     * With a standard configuration of this component, this will open an iframe that automatically plays the video.\n\t     */\n\t    YouTubeThumbnail.prototype.openResultLink = function () {\n\t        var resultLinkComponent = RegisteredNamedMethods_1.get(this.resultLink.el);\n\t        resultLinkComponent.openLinkAsConfigured();\n\t    };\n\t    YouTubeThumbnail.prototype.openYoutubeIframe = function () {\n\t        var _this = this;\n\t        // need to put iframe inside div : iframe with position absolute and left:0, right : 0 , bottom: 0 is not standard/supported\n\t        var iframe = Dom_1.$$('iframe'), div = Dom_1.$$('div');\n\t        iframe.setAttribute('src', 'https://www.youtube.com/embed/' + this.extractVideoId() + '?autoplay=1');\n\t        iframe.setAttribute('allowfullscreen', 'allowfullscreen');\n\t        iframe.setAttribute('webkitallowfullscreen', 'webkitallowfullscreen');\n\t        iframe.setAttribute('width', '100%');\n\t        iframe.setAttribute('height', '100%');\n\t        div.append(iframe.el);\n\t        this.modalbox = this.ModalBox.open(div.el, {\n\t            overlayClose: true,\n\t            title: DomUtils_1.DomUtils.getQuickviewHeader(this.result, { showDate: true, title: this.result.title }, this.bindings).el.outerHTML,\n\t            className: 'coveo-quick-view coveo-youtube-player',\n\t            validation: function () { return true; },\n\t            body: this.element.ownerDocument.body\n\t        });\n\t        Dom_1.$$(Dom_1.$$(this.modalbox.wrapper).find('.coveo-quickview-close-button')).on('click', function () {\n\t            _this.modalbox.close();\n\t        });\n\t    };\n\t    YouTubeThumbnail.prototype.extractVideoId = function () {\n\t        return this.result.clickUri.split('watch?v=')[1];\n\t    };\n\t    return YouTubeThumbnail;\n\t}(Component_1.Component));\n\tYouTubeThumbnail.ID = 'YouTubeThumbnail';\n\t/**\n\t * @componentOptions\n\t */\n\tYouTubeThumbnail.options = {\n\t    /**\n\t     * Specifies the width (in pixels) of the YouTube thumbnail.\n\t     *\n\t     * Default value is `200px`.\n\t     */\n\t    width: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '200px' }),\n\t    /**\n\t     * Specifies the height (in pixels) of the YouTube thumbnail.\n\t     *\n\t     * Default value is `112px`.\n\t     */\n\t    height: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '112px' }),\n\t    /**\n\t     * Specifies whether clicking on the YouTube thumbnail loads the video in a modal box.\n\t     *\n\t     * Setting this option to `false` causes the browser to change its current location to that of the target URL when\n\t     * the end user clicks the YouTube thumbnail.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    embed: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\tYouTubeThumbnail.fields = [\n\t    'ytthumbnailurl'\n\t];\n\texports.YouTubeThumbnail = YouTubeThumbnail;\n\tInitialization_1.Initialization.registerAutoCreateComponent(YouTubeThumbnail);\n\n\n/***/ },\n/* 228 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DefaultResultAttachmentTemplate_1 = __webpack_require__(229);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ResultAttachments component renders attachments in a result set, for example when displaying emails. This\n\t * component is usable inside a result template when there is an active {@link Folding} component in the page.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar ResultAttachments = (function (_super) {\n\t    __extends(ResultAttachments, _super);\n\t    /**\n\t     * Creates a new ResultAttachments component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultAttachments component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     * @param attachmentLevel The nesting depth.\n\t     */\n\t    function ResultAttachments(element, options, bindings, result, attachmentLevel) {\n\t        if (attachmentLevel === void 0) { attachmentLevel = 0; }\n\t        var _this = _super.call(this, element, ResultAttachments.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.attachmentLevel = attachmentLevel;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultAttachments, options);\n\t        _this.attachments = result.attachments;\n\t        if (Utils_1.Utils.isNonEmptyArray(_this.attachments)) {\n\t            _this.renderAttachments();\n\t        }\n\t        return _this;\n\t    }\n\t    ResultAttachments.prototype.renderAttachments = function () {\n\t        var _this = this;\n\t        _.each(this.attachments, function (attachment) {\n\t            QueryUtils_1.QueryUtils.setStateObjectOnQueryResult(_this.queryStateModel.get(), attachment);\n\t            QueryUtils_1.QueryUtils.setSearchInterfaceObjectOnQueryResult(_this.searchInterface, attachment);\n\t            var container = _this.attachmentLevel > 0 ? _this.options.subResultTemplate.instantiateToElement(attachment) : _this.options.resultTemplate.instantiateToElement(attachment);\n\t            _this.autoCreateComponentsInsideResult(container, _.extend({}, attachment, { attachments: [] }));\n\t            Dom_1.$$(container).addClass('coveo-result-attachments-container');\n\t            _this.element.appendChild(container);\n\t            if (_this.attachmentHasSubAttachment(attachment) && _this.attachmentLevel < _this.options.maximumAttachmentLevel) {\n\t                var childAttachmentContainer = Dom_1.$$('div').el;\n\t                container.appendChild(childAttachmentContainer);\n\t                new ResultAttachments(childAttachmentContainer, _this.options, _this.bindings, attachment, _this.attachmentLevel + 1);\n\t            }\n\t        });\n\t    };\n\t    ResultAttachments.prototype.attachmentHasSubAttachment = function (attachment) {\n\t        if (Utils_1.Utils.isNonEmptyArray(attachment.attachments)) {\n\t            return true;\n\t        }\n\t        else if (Utils_1.Utils.isNonEmptyArray(attachment.childResults)) {\n\t            attachment.attachments = attachment.childResults;\n\t            return true;\n\t        }\n\t        else {\n\t            return false;\n\t        }\n\t    };\n\t    ResultAttachments.prototype.autoCreateComponentsInsideResult = function (element, result) {\n\t        Assert_1.Assert.exists(element);\n\t        var initOptions = this.searchInterface.options;\n\t        var initParameters = {\n\t            options: initOptions,\n\t            bindings: this.getBindings(),\n\t            result: result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(element, initParameters, [ResultAttachments.ID]);\n\t    };\n\t    return ResultAttachments;\n\t}(Component_1.Component));\n\tResultAttachments.ID = 'ResultAttachments';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tResultAttachments.options = {\n\t    /**\n\t     * Specifies the template to use to render each attachment for a top result.\n\t     *\n\t     * You can specify a previously registered template for this option by referring the HTML `id` attribute or a CSS\n\t     * selector for the template (see {@link TemplateCache}).\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * Specifying a previously registered template by referring to its HTML `id` attribute:\n\t     *\n\t     * ```html\n\t     * <div class=\"CoveoResultAttachments\" data-result-template-id=\"Foo\"></div>\n\t     * ```\n\t     *\n\t     * Specifying a previously registered template by referring to a CSS selector:\n\t     *\n\t     * ```html\n\t     * <div class='CoveoResultAttachments' data-result-template-selector=\".Foo\"></div>\n\t     * ```\n\t     *\n\t     * By default, this option uses the template specified in a child element with a `script` tag\n\t     */\n\t    resultTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption({ defaultFunction: function (e) { return new DefaultResultAttachmentTemplate_1.DefaultResultAttachmentTemplate(); } }),\n\t    /**\n\t     * Specifies the template to use to render sub-attachments, which are attachments within attachments, for example\n\t     * when multiple files are embedded within a .zip attachment.\n\t     *\n\t     * Sub-attachments can themselves contain sub-attachments, and so on up to a certain level (see\n\t     * {@link ResultAttachments.options.maximumAttachmentLevel}).\n\t     *\n\t     * You can specify a previously registered template for this option by referring the HTML `id` attribute or a CSS\n\t     * selector for the template (see {@link TemplateCache}).\n\t     *\n\t     * **Example:**\n\t     *\n\t     * Specifying a previously registered template by referring to its HTML `id` attribute:\n\t     *\n\t     * ```html\n\t     * <div class=\"CoveoResultAttachments\" data-sub-result-template-id=\"Foo\"></div>\n\t     * ```\n\t     *\n\t     * Specifying a previously registered template by referring to a CSS selector:\n\t     *\n\t     * ```html\n\t     * <div class=\"CoveoResultAttachments\" data-sub-result-template-selector=\".Foo\"></div>\n\t     * ```\n\t     *\n\t     * By default, this option uses the same value as {@link ResultAttachments.options.resultTemplate}.\n\t     */\n\t    subResultTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption({ postProcessing: function (value, options) { return value != null ? value : options.resultTemplate; } }),\n\t    /**\n\t     * Specifies the maximum nesting depth. Beyond this depth, the component stops rendering sub-attachments.\n\t     *\n\t     * Default value is `5`. Minimum value is `0`.\n\t     */\n\t    maximumAttachmentLevel: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0 })\n\t};\n\texports.ResultAttachments = ResultAttachments;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultAttachments);\n\n\n/***/ },\n/* 229 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar DefaultResultAttachmentTemplate = (function (_super) {\n\t    __extends(DefaultResultAttachmentTemplate, _super);\n\t    function DefaultResultAttachmentTemplate() {\n\t        return _super.call(this) || this;\n\t    }\n\t    DefaultResultAttachmentTemplate.prototype.instantiateToString = function (queryResult) {\n\t        return '<div><span class=\"CoveoIcon\"></span> <a class=\"CoveoResultLink\"></a> <span class=\"CoveoQuickview\"></span></div>';\n\t    };\n\t    return DefaultResultAttachmentTemplate;\n\t}(Template_1.Template));\n\texports.DefaultResultAttachmentTemplate = DefaultResultAttachmentTemplate;\n\n\n/***/ },\n/* 230 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar DefaultFoldingTemplate_1 = __webpack_require__(231);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ResultFolding component renders folded result sets. It is usable inside a result template when there is an active\n\t * {@link Folding} component in the page. This component takes care of rendering the parent result and its child results\n\t * in a coherent manner.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar ResultFolding = (function (_super) {\n\t    __extends(ResultFolding, _super);\n\t    /**\n\t     * Creates a new ResultFolding component.\n\t     * @param options The options for the ResultFolding component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function ResultFolding(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ResultFolding.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.showingMoreResults = false;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(_this.element, ResultFolding, options);\n\t        Assert_1.Assert.exists(result);\n\t        _this.buildElements();\n\t        _this.displayThoseResults(_this.result.childResults);\n\t        _this.updateElementVisibility();\n\t        if (Dom_1.$$(_this.element.parentElement).hasClass('CoveoCardOverlay')) {\n\t            _this.bindOverlayEvents();\n\t        }\n\t        if (_this.result.childResults.length == 0 && !_this.result.moreResults) {\n\t            Dom_1.$$(_this.element).hide();\n\t        }\n\t        return _this;\n\t    }\n\t    ResultFolding.prototype.showMoreResults = function () {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(this.result.moreResults);\n\t        this.cancelAnyPendingShowMore();\n\t        this.moreResultsPromise = this.result.moreResults();\n\t        this.waitAnimation = Dom_1.$$('div', { className: 'coveo-loading-spinner' }).el;\n\t        this.results.appendChild(this.waitAnimation);\n\t        this.updateElementVisibility();\n\t        this.moreResultsPromise\n\t            .then(function (results) {\n\t            _this.childResults = results;\n\t            _this.showingMoreResults = true;\n\t            _this.displayThoseResults(results);\n\t            _this.updateElementVisibility(results.length);\n\t            return results;\n\t        })\n\t            .finally(function (results) {\n\t            _this.moreResultsPromise = undefined;\n\t            Dom_1.$$(_this.waitAnimation).detach();\n\t            _this.waitAnimation = undefined;\n\t        });\n\t    };\n\t    ResultFolding.prototype.showLessResults = function () {\n\t        this.cancelAnyPendingShowMore();\n\t        this.showingMoreResults = false;\n\t        this.displayThoseResults(this.result.childResults);\n\t        this.updateElementVisibility();\n\t        this.scrollToResultElement();\n\t    };\n\t    ResultFolding.prototype.buildElements = function () {\n\t        this.buildHeader();\n\t        this.buildResults();\n\t        this.buildFooter();\n\t    };\n\t    ResultFolding.prototype.buildHeader = function () {\n\t        var header = Dom_1.$$('div', { className: 'coveo-folding-header' }).el;\n\t        this.element.appendChild(header);\n\t        if (this.options.normalCaption != undefined && this.options.expandedCaption != undefined) {\n\t            this.normalCaption = Dom_1.$$('div', { className: 'coveo-folding-normal-caption' }, this.options.normalCaption).el;\n\t            header.appendChild(this.normalCaption);\n\t            this.expandedCaption = Dom_1.$$('div', { className: 'coveo-folding-expanded-caption' }, this.options.expandedCaption).el;\n\t            header.appendChild(this.expandedCaption);\n\t        }\n\t        this.oneResultCaption = Dom_1.$$('div', { className: 'coveo-folding-oneresult-caption' }, this.options.oneResultCaption).el;\n\t        header.appendChild(this.oneResultCaption);\n\t    };\n\t    ResultFolding.prototype.buildResults = function () {\n\t        this.results = Dom_1.$$('div', { className: 'coveo-folding-results' }).el;\n\t        this.element.appendChild(this.results);\n\t    };\n\t    ResultFolding.prototype.buildFooter = function () {\n\t        var _this = this;\n\t        var footer = Dom_1.$$('div', { className: 'coveo-folding-footer' }).el;\n\t        this.element.parentElement.appendChild(footer);\n\t        if (this.result.moreResults) {\n\t            this.showMore = Dom_1.$$('div', { className: 'coveo-folding-footer-section-for-less' }).el;\n\t            Dom_1.$$(this.showMore).on('click', function () { return _this.showMoreResults(); });\n\t            footer.appendChild(this.showMore);\n\t            this.showLess = Dom_1.$$('div', { className: 'coveo-folding-footer-section-for-more' }).el;\n\t            Dom_1.$$(this.showLess).on('click', function () { return _this.showLessResults(); });\n\t            footer.appendChild(this.showLess);\n\t            var footerIconShowMore = Dom_1.$$('div', { className: 'coveo-more' }, Dom_1.$$('span', { className: 'coveo-folding-footer-icon' }).el).el;\n\t            var footerIconShowLess = Dom_1.$$('div', { className: 'coveo-less' }, Dom_1.$$('span', { className: 'coveo-folding-footer-icon' }).el).el;\n\t            var showMoreLink = Dom_1.$$('a', { className: 'coveo-folding-show-more' }, this.options.moreCaption).el;\n\t            var showLessLink = Dom_1.$$('a', { className: 'coveo-folding-show-less' }, this.options.lessCaption).el;\n\t            this.showMore.appendChild(showMoreLink);\n\t            this.showLess.appendChild(showLessLink);\n\t            this.showMore.appendChild(footerIconShowMore);\n\t            this.showLess.appendChild(footerIconShowLess);\n\t        }\n\t    };\n\t    ResultFolding.prototype.updateElementVisibility = function (subResultsLength) {\n\t        if (this.normalCaption) {\n\t            Dom_1.$$(this.normalCaption).toggle(!this.showingMoreResults && this.result.childResults.length > 0);\n\t        }\n\t        if (this.expandedCaption) {\n\t            Dom_1.$$(this.expandedCaption).toggle(this.showingMoreResults);\n\t        }\n\t        Dom_1.$$(this.oneResultCaption).toggleClass('coveo-hidden', !(subResultsLength && subResultsLength == 1));\n\t        if (this.showMore) {\n\t            Dom_1.$$(this.showMore).toggle(!this.showingMoreResults && !Utils_1.Utils.exists(this.moreResultsPromise));\n\t            Dom_1.$$(this.showLess).toggle(this.showingMoreResults);\n\t        }\n\t        var showIfNormal = Dom_1.$$(this.element).find('.coveo-show-if-normal');\n\t        if (showIfNormal) {\n\t            Dom_1.$$(showIfNormal).toggle(!this.showingMoreResults);\n\t        }\n\t        var showIfExpanded = Dom_1.$$(this.element).find('.coveo-show-if-expanded');\n\t        if (showIfExpanded) {\n\t            Dom_1.$$(showIfExpanded).toggle(this.showingMoreResults);\n\t        }\n\t    };\n\t    ResultFolding.prototype.scrollToResultElement = function () {\n\t        var resultElem = Dom_1.$$(this.element).closest('CoveoResult');\n\t        window.scrollTo(0, window.scrollY + resultElem.getBoundingClientRect().top);\n\t    };\n\t    ResultFolding.prototype.displayThoseResults = function (results) {\n\t        var _this = this;\n\t        Dom_1.$$(this.results).empty();\n\t        _.each(results, function (result) {\n\t            _this.renderChildResult(result);\n\t        });\n\t    };\n\t    ResultFolding.prototype.renderChildResult = function (childResult) {\n\t        QueryUtils_1.QueryUtils.setStateObjectOnQueryResult(this.queryStateModel.get(), childResult);\n\t        QueryUtils_1.QueryUtils.setSearchInterfaceObjectOnQueryResult(this.searchInterface, childResult);\n\t        var oneChild = this.options.resultTemplate.instantiateToElement(childResult, {\n\t            wrapInDiv: false,\n\t            checkCondition: false,\n\t            responsiveComponents: this.searchInterface.responsiveComponents\n\t        });\n\t        Dom_1.$$(oneChild).addClass('coveo-result-folding-child-result');\n\t        this.results.appendChild(oneChild);\n\t        Dom_1.$$(oneChild).toggleClass('coveo-normal-child-result', !this.showingMoreResults);\n\t        Dom_1.$$(oneChild).toggleClass('coveo-expanded-child-result', this.showingMoreResults);\n\t        this.autoCreateComponentsInsideResult(oneChild, childResult);\n\t    };\n\t    ResultFolding.prototype.autoCreateComponentsInsideResult = function (element, result) {\n\t        Assert_1.Assert.exists(element);\n\t        var initOptions = this.searchInterface.options;\n\t        var initParameters = { options: initOptions, bindings: this.getBindings(), result: result };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\t    };\n\t    ResultFolding.prototype.cancelAnyPendingShowMore = function () {\n\t        if (this.moreResultsPromise) {\n\t            this.moreResultsPromise = undefined;\n\t        }\n\t        Assert_1.Assert.doesNotExists(this.moreResultsPromise);\n\t        Assert_1.Assert.doesNotExists(this.waitAnimation);\n\t    };\n\t    ResultFolding.prototype.bindOverlayEvents = function () {\n\t        var _this = this;\n\t        this.bind.one(this.element.parentElement, 'openCardOverlay', function () {\n\t            if (_this.result.moreResults) {\n\t                _this.showMoreResults();\n\t            }\n\t        });\n\t    };\n\t    return ResultFolding;\n\t}(Component_1.Component));\n\tResultFolding.ID = 'ResultFolding';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tResultFolding.options = {\n\t    /**\n\t     * Specifies the template to use to render each of the child results for a top result.\n\t     *\n\t     * By default, it will use the template specified in a child element with a `script` tag. This can be specified\n\t     * directly as an attribute of the element.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * With the following markup, the ResultFolding component will use a previously registered template ID (see\n\t     * {@link TemplateCache}):\n\t     *\n\t     * ```html\n\t     * <div class='CoveoResultFolding' data-result-template-id='Foo'></div>\n\t     * ```\n\t     */\n\t    resultTemplate: ComponentOptions_1.ComponentOptions.buildTemplateOption({ defaultFunction: function () { return new DefaultFoldingTemplate_1.DefaultFoldingTemplate(); } }),\n\t    /**\n\t     * Specifies the caption to display at the top of the child results when the folding result set is not expanded.\n\t     *\n\t     * Default value is `undefined`, which displays no caption.\n\t     */\n\t    normalCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption(),\n\t    /**\n\t     * Specifies the caption to display at the top of the child results when the folding result set is expanded.\n\t     *\n\t     * Default value is `undefined`, which displays no caption.\n\t     */\n\t    expandedCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption(),\n\t    /**\n\t     * Specifies the caption to display on the link to expand / show child results.\n\t     *\n\t     * Default value is the localized string for `ShowMore`.\n\t     */\n\t    moreCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ postProcessing: function (value) { return value || Strings_1.l('ShowMore'); } }),\n\t    /**\n\t     * Specifies the caption to display on the link to shrink the loaded folding result set back to only the top result.\n\t     *\n\t     * Default value is the localized string for `ShowLess`.\n\t     */\n\t    lessCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ postProcessing: function (value) { return value || Strings_1.l('ShowLess'); } }),\n\t    /**\n\t     * Specifies the caption to display when there is only one result in a folding result set.\n\t     *\n\t     * Default value is the localized string for `DisplayingTheOnlyMessage`\n\t     */\n\t    oneResultCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ postProcessing: function (value) { return value || Strings_1.l('DisplayingTheOnlyMessage'); } })\n\t};\n\texports.ResultFolding = ResultFolding;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultFolding);\n\n\n/***/ },\n/* 231 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Template_1 = __webpack_require__(113);\n\tvar DefaultFoldingTemplate = (function (_super) {\n\t    __extends(DefaultFoldingTemplate, _super);\n\t    function DefaultFoldingTemplate() {\n\t        return _super.call(this) || this;\n\t    }\n\t    DefaultFoldingTemplate.prototype.instantiateToString = function (queryResult) {\n\t        return '<div class=\"coveo-child-result\"><span class=\"CoveoIcon\"></span> <a class=\"CoveoResultLink\"></a> <span class=\"CoveoQuickview\"></span></div>';\n\t    };\n\t    DefaultFoldingTemplate.prototype.getType = function () {\n\t        return 'DefaultFoldingTemplate';\n\t    };\n\t    return DefaultFoldingTemplate;\n\t}(Template_1.Template));\n\texports.DefaultFoldingTemplate = DefaultFoldingTemplate;\n\n\n/***/ },\n/* 232 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar FieldValue_1 = __webpack_require__(206);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Badge component outputs a field value with customizable colors and an icon preceding it.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)). It\n\t * extends the {@link FieldValue} component. Therefore all FieldValue options are also available for a Badge component.\n\t */\n\tvar Badge = (function (_super) {\n\t    __extends(Badge, _super);\n\t    /**\n\t     * Creates a new Badge component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Badge component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function Badge(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ComponentOptions_1.ComponentOptions.initComponentOptions(element, Badge, options), bindings, result, Badge.ID) || this;\n\t        _this.options = options;\n\t        if (_.isString(_this.options.colors)) {\n\t            // to support the old string options\n\t            _this.options.colors = Badge.parseColors(_this.options.colors);\n\t        }\n\t        if (_this.options.colors.values == null) {\n\t            _this.options.colors.values = {};\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Parses a {@link Badge.options.colors} option string into a workable JSON format.\n\t     *\n\t     * @param colorsOption The colors option string to parse. See {@link Badge.options.colors}.\n\t     */\n\t    Badge.parseColors = function (colorsOption) {\n\t        if (colorsOption) {\n\t            if (Badge.colorsRegex.test(colorsOption)) {\n\t                var badgeColors_1 = {\n\t                    values: {}\n\t                };\n\t                var colors = StringUtils_1.StringUtils.match(colorsOption, Badge.colorRegex);\n\t                _.each(colors, function (color) {\n\t                    var fieldValue = color[1], colorValue = color[2];\n\t                    if (fieldValue != null) {\n\t                        badgeColors_1.values[fieldValue.replace(/\\\\(:|;)/g, '$1')] = {\n\t                            icon: colorValue\n\t                        };\n\t                    }\n\t                    else {\n\t                        badgeColors_1.icon = colorValue;\n\t                    }\n\t                });\n\t                return badgeColors_1;\n\t            }\n\t            try {\n\t                return JSON.parse(colorsOption);\n\t            }\n\t            catch (e) {\n\t                Assert_1.Assert.fail(\"Invalid colors for badge '\" + colorsOption + \"'\");\n\t            }\n\t        }\n\t        return {};\n\t    };\n\t    /**\n\t     * Gets the icon and text color of a field value.\n\t     *\n\t     * @param value The field value whose colors to return.\n\t     * @returns {{icon: string, text: string}} An object with the `icon` and `text` keys.\n\t     */\n\t    Badge.prototype.getColor = function (value) {\n\t        if (value === void 0) { value = ''; }\n\t        var colorKey = _.find(_.keys(this.options.colors.values), function (key) { return value.toLowerCase() == key.toLowerCase(); });\n\t        var color = colorKey ? this.options.colors.values[colorKey] : {};\n\t        return {\n\t            icon: color.icon || this.options.colors.icon,\n\t            text: color.text || this.options.colors.text,\n\t        };\n\t    };\n\t    /**\n\t     * Renders one string value with the appropriate colors and icon.\n\t     *\n\t     * @param value The field value to render.\n\t     * @returns {HTMLElement} An HTML `<span>` tag containing the rendered value.\n\t     */\n\t    Badge.prototype.renderOneValue = function (value) {\n\t        var valueDom = _super.prototype.renderOneValue.call(this, value);\n\t        Dom_1.$$(valueDom).addClass('coveo-value');\n\t        var color = this.getColor(value);\n\t        if (this.searchInterface.isNewDesign()) {\n\t            var icon = Dom_1.$$('span', { className: 'coveo-badge-icon' }).el;\n\t            if (color.icon != null) {\n\t                icon.style.color = color.icon;\n\t            }\n\t        }\n\t        else if (color.icon != null) {\n\t            valueDom.style.background = color.icon;\n\t        }\n\t        var label = Dom_1.$$('span', { className: 'coveo-badge-label' }, valueDom.innerHTML).el;\n\t        if (color.text != null) {\n\t            label.style.color = color.text;\n\t        }\n\t        Dom_1.$$(valueDom).empty();\n\t        if (this.searchInterface.isNewDesign()) {\n\t            valueDom.appendChild(icon);\n\t        }\n\t        valueDom.appendChild(label);\n\t        return valueDom;\n\t    };\n\t    // Override the protected method from FieldValue class to ignore a potential textCaption on a Badge.\n\t    Badge.prototype.prependTextCaptionToDom = function () {\n\t        return;\n\t    };\n\t    return Badge;\n\t}(FieldValue_1.FieldValue));\n\tBadge.ID = 'Badge';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tBadge.options = {\n\t    /**\n\t     * Specifies the colors for the Badge component.\n\t     *\n\t     * You must specify the colors in a JSON format similar to what follows:\n\t     * ```json\n\t     * {\n\t     *   \"values\":{\n\t     *     \"foo\":{\n\t     *       \"icon\":\"blue\",\n\t     *       \"text\":\"#222\"\n\t     *     },\n\t     *     \"bar\":{\n\t     *       \"icon\":\"green\",\n\t     *       \"text\":\"lightgreen\"\n\t     *     }\n\t     *   },\n\t     *   \"icon\":\"red\",\n\t     *   \"text\":\"#9ab52b\"\n\t     * }\n\t     * ```\n\t     * This format allows you to customize both the icon and text colors for each field value as well as the default\n\t     * values.\n\t     *\n\t     * Colors can be specified in HTML or hexadecimal format.\n\t     */\n\t    colors: ComponentOptions_1.ComponentOptions.buildCustomOption(function (value) { return Badge.parseColors(value); }, { defaultValue: { values: {} } }),\n\t    textCaption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption()\n\t};\n\tBadge.parent = FieldValue_1.FieldValue;\n\t// The following regexes are used to match the old color format:\n\t// This one matches a single color, e.g. either \"red\" or \"foo: blue\".\n\t// Its capture groups will be the following :\n\t// 0:( 1:() 2:(red)) or 0:( 1:(foo) 2:(blue))\n\tBadge.colorRegex = /(?:\\s*((?:[^:;]|\\\\[;:])*)\\s*:\\s*)?(\\w+|#[A-Fa-f0-9]{6}|#[A-Fa-f0-9]{3})/g;\n\t// This one matches all colors, separated by semicolons, e.g. \"red; foo: blue; bar: green\".\n\t// It wraps 'colorRegex' in other capture groups, such as the following:\n\t// 0:(red) 1:(foo: blue;) 2:(bar: green)\n\tBadge.colorsRegex = new RegExp('^(\\\\s*' + Badge.colorRegex.source + '\\\\s*;)*(\\\\s*' + Badge.colorRegex.source + ')?\\\\s*$');\n\texports.Badge = Badge;\n\tBadge.options = _.omit(Badge.options, 'textCaption');\n\tInitialization_1.Initialization.registerAutoCreateComponent(Badge);\n\n\n/***/ },\n/* 233 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar RatingValues;\n\t(function (RatingValues) {\n\t    RatingValues[RatingValues[\"Undefined\"] = 0] = \"Undefined\";\n\t    RatingValues[RatingValues[\"Lowest\"] = 1] = \"Lowest\";\n\t    RatingValues[RatingValues[\"Low\"] = 2] = \"Low\";\n\t    RatingValues[RatingValues[\"Average\"] = 3] = \"Average\";\n\t    RatingValues[RatingValues[\"Good\"] = 4] = \"Good\";\n\t    RatingValues[RatingValues[\"Best\"] = 5] = \"Best\";\n\t})(RatingValues = exports.RatingValues || (exports.RatingValues = {}));\n\t;\n\t/**\n\t * The ResultRating component renders a 5-star rating widget. Interactive rating is possible if\n\t * {@link SearchInterface.options.enableCollaborativeRating} is `true`.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar ResultRating = (function (_super) {\n\t    __extends(ResultRating, _super);\n\t    /**\n\t     * Creates a new ResultRating component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultRating component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function ResultRating(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ResultRating.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultRating, options);\n\t        if (!Utils_1.Utils.isNullOrUndefined(result.rating)) {\n\t            _this.renderComponent(element, result.rating);\n\t        }\n\t        return _this;\n\t    }\n\t    ResultRating.prototype.renderComponent = function (element, rating) {\n\t        for (var starNumber = 1; starNumber <= 5; starNumber++) {\n\t            this.renderStar(element, starNumber <= rating, starNumber);\n\t        }\n\t    };\n\t    ResultRating.prototype.renderStar = function (element, isChecked, value) {\n\t        var _this = this;\n\t        var star;\n\t        var starElement = Dom_1.$$(element).find('a[rating-value=\"' + value + '\"]');\n\t        if (starElement == null) {\n\t            star = Dom_1.$$('a');\n\t            element.appendChild(star.el);\n\t            if (this.bindings.searchInterface.options.enableCollaborativeRating) {\n\t                star.on('click', function (e) {\n\t                    var targetElement = e.currentTarget;\n\t                    _this.rateDocument(parseInt(targetElement.getAttribute('rating-value')));\n\t                });\n\t                star.on('mouseover', function (e) {\n\t                    var targetElement = e.currentTarget;\n\t                    _this.renderComponent(element, parseInt(targetElement.getAttribute('rating-value')));\n\t                });\n\t                star.on('mouseout', function () {\n\t                    _this.renderComponent(element, _this.result.rating);\n\t                });\n\t            }\n\t            star.el.setAttribute('rating-value', value.toString());\n\t        }\n\t        else {\n\t            star = Dom_1.$$(starElement);\n\t        }\n\t        var basePath = '';\n\t        if (this.searchInterface.isNewDesign()) {\n\t            basePath = 'coveo-sprites-';\n\t        }\n\t        else {\n\t            basePath = 'coveo-sprites-common-';\n\t        }\n\t        star.toggleClass(basePath + 'star_placeholder', !isChecked);\n\t        star.toggleClass(basePath + 'star_active', isChecked);\n\t    };\n\t    /**\n\t     * Rates a document using the the specified `rating` value.\n\t     * @param rating The rating to assign to the document.\n\t     *\n\t     * The possible values are:\n\t     *\n\t     * - `0`: renders no star.\n\t     * - `1`: renders 1 star.\n\t     * - `2`: renders 2 stars.\n\t     * - `3`: renders 3 stars.\n\t     * - `4`: renders 4 stars.\n\t     * - `5`: renders 5 stars.\n\t     */\n\t    ResultRating.prototype.rateDocument = function (rating) {\n\t        var _this = this;\n\t        var request = {\n\t            rating: RatingValues[rating],\n\t            uniqueId: this.result.uniqueId\n\t        };\n\t        this.queryController.getEndpoint().rateDocument(request)\n\t            .then(function () {\n\t            _this.result.rating = rating;\n\t            _this.renderComponent(_this.element, rating);\n\t        })\n\t            .catch(function () {\n\t            _this.logger.error('An error occurred while rating the document');\n\t        });\n\t    };\n\t    return ResultRating;\n\t}(Component_1.Component));\n\tResultRating.ID = 'ResultRating';\n\texports.ResultRating = ResultRating;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultRating);\n\n\n/***/ },\n/* 234 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar PreferencesPanelEvents_1 = __webpack_require__(49);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * The PreferencesPanel component renders a **Preferences** item inside the {@link Settings} component which the end\n\t * user can click to access a panel from which it is possible to specify certain customization options for the search\n\t * interface. These customization options are then saved in the browser local storage.\n\t *\n\t * See also the {@link ResultsFiltersPreferences} and {@link ResultsPreferences} components.\n\t */\n\tvar PreferencesPanel = (function (_super) {\n\t    __extends(PreferencesPanel, _super);\n\t    /**\n\t     * Creates a new PreferencesPanel.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the PreferencesPanel component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function PreferencesPanel(element, options, bindings) {\n\t        var _this = _super.call(this, element, PreferencesPanel.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, PreferencesPanel, options);\n\t        _this.buildCloseButton();\n\t        _this.buildTitle();\n\t        _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t            args.menuData.push({\n\t                className: 'coveo-preferences-panel',\n\t                text: Strings_1.l('Preferences'),\n\t                onOpen: function () { return _this.open(); },\n\t                onClose: function () { return _this.close(); }\n\t            });\n\t        });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Opens the PreferencesPanel.\n\t     */\n\t    PreferencesPanel.prototype.open = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-active');\n\t    };\n\t    /**\n\t     * Closes the PreferencesPanel without saving changes.\n\t     *\n\t     * Also triggers the `exitPreferencesWithoutSave` event.\n\t     */\n\t    PreferencesPanel.prototype.close = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-active');\n\t        Dom_1.$$(this.element).trigger(PreferencesPanelEvents_1.PreferencesPanelEvents.exitPreferencesWithoutSave);\n\t    };\n\t    /**\n\t     * Saves the changes and executes a new query.\n\t     *\n\t     * Also triggers the `savePreferences` event.\n\t     */\n\t    PreferencesPanel.prototype.save = function () {\n\t        Dom_1.$$(this.element).trigger(PreferencesPanelEvents_1.PreferencesPanelEvents.savePreferences);\n\t        this.queryController.executeQuery();\n\t    };\n\t    PreferencesPanel.prototype.buildCloseButton = function () {\n\t        var _this = this;\n\t        var closeButton = Dom_1.$$('div', { className: 'coveo-preferences-panel-close' }, Dom_1.$$('span', { className: 'coveo-icon' }).el);\n\t        closeButton.on('click', function () {\n\t            _this.close();\n\t        });\n\t        Dom_1.$$(this.element).prepend(closeButton.el);\n\t    };\n\t    PreferencesPanel.prototype.buildTitle = function () {\n\t        var title = Dom_1.$$('div', { className: 'coveo-preferences-panel-title' }, Strings_1.l('Preferences')).el;\n\t        Dom_1.$$(this.element).prepend(title);\n\t    };\n\t    return PreferencesPanel;\n\t}(Component_1.Component));\n\tPreferencesPanel.ID = 'PreferencesPanel';\n\tPreferencesPanel.options = {};\n\texports.PreferencesPanel = PreferencesPanel;\n\tInitialization_1.Initialization.registerAutoCreateComponent(PreferencesPanel);\n\n\n/***/ },\n/* 235 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar PreferencesPanel_1 = __webpack_require__(234);\n\tvar PreferencesPanelItem_1 = __webpack_require__(236);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar PreferencesPanelEvents_1 = __webpack_require__(49);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar BreadcrumbEvents_1 = __webpack_require__(44);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ResultFiltersPreferences component allows the end user to create custom filters to apply to queries. These\n\t * filters are saved in the local storage of the end user.\n\t *\n\t * Only advanced end users who understand the Coveo query syntax should actually use this feature (see\n\t * [Coveo Query Sytax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t *\n\t * This component is normally accessible through the {@link Settings} menu. Its usual location in the DOM is inside the\n\t * {@link PreferencesPanel} component.\n\t *\n\t * See also the {@link ResultsPreferences} component.\n\t */\n\tvar ResultsFiltersPreferences = (function (_super) {\n\t    __extends(ResultsFiltersPreferences, _super);\n\t    /**\n\t     * Creates a new ResultsFiltersPreferences component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultsFiltersPreferences component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ResultsFiltersPreferences(element, options, bindings) {\n\t        var _this = _super.call(this, element, ResultsFiltersPreferences.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultsFiltersPreferences, options);\n\t        _this.preferencePanel = Dom_1.$$(_this.element).closest(Component_1.Component.computeCssClassName(PreferencesPanel_1.PreferencesPanel));\n\t        _this.preferencePanelLocalStorage = new LocalStorageUtils_1.LocalStorageUtils(ResultsFiltersPreferences.ID);\n\t        _this.mergeLocalPreferencesWithStaticPreferences();\n\t        _this.bindPreferencePanelEvent();\n\t        _this.bindBreadcrumbEvent();\n\t        _this.bindQueryEvent();\n\t        // We need to wait after all components are initialized before building the dom, because this component interacts with Tab\n\t        // And we don't know if Tab(s) are initialized before or after this component.\n\t        _this.bind.oneRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.createDom(); });\n\t        _this.bind.oneQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.T, function () { return _this.fromPreferencesToCheckboxInput(); });\n\t        return _this;\n\t    }\n\t    ResultsFiltersPreferences.prototype.createDom = function () {\n\t        this.buildTitle();\n\t        this.buildCheckboxesInput();\n\t        if (this.options.showAdvancedFilters) {\n\t            this.buildAdvancedFilters();\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.save = function () {\n\t        this.fromCheckboxInputToPreferences();\n\t        var toSave = _.omit(this.preferences, 'tab');\n\t        this.logger.info('Saving preferences', toSave);\n\t        this.preferencePanelLocalStorage.save(toSave);\n\t    };\n\t    ResultsFiltersPreferences.prototype.exitWithoutSave = function () {\n\t        this.fromPreferencesToCheckboxInput();\n\t    };\n\t    ResultsFiltersPreferences.prototype.bindPreferencePanelEvent = function () {\n\t        var _this = this;\n\t        this.bind.on(this.preferencePanel, PreferencesPanelEvents_1.PreferencesPanelEvents.savePreferences, function () { return _this.save(); });\n\t        this.bind.on(this.preferencePanel, PreferencesPanelEvents_1.PreferencesPanelEvents.exitPreferencesWithoutSave, function () { return _this.exitWithoutSave(); });\n\t    };\n\t    ResultsFiltersPreferences.prototype.bindBreadcrumbEvent = function () {\n\t        var _this = this;\n\t        if (this.options.includeInBreadcrumb) {\n\t            this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.populateBreadcrumb, function (args) { return _this.handlePopulateBreadcrumb(args); });\n\t            this.bind.onRootElement(BreadcrumbEvents_1.BreadcrumbEvents.clearBreadcrumb, function () { return _this.handleClearBreadcrumb(); });\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.bindQueryEvent = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t    };\n\t    ResultsFiltersPreferences.prototype.handleBuildingQuery = function (args) {\n\t        _.each(this.getActiveFilters(), function (filter) {\n\t            args.queryBuilder.advancedExpression.add(filter.expression);\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.handlePopulateBreadcrumb = function (args) {\n\t        var actives = this.getActiveFilters();\n\t        if (Utils_1.Utils.isNonEmptyArray(actives)) {\n\t            var container = Dom_1.$$('div', { className: 'coveo-results-filter-preferences-breadcrumb' });\n\t            var title = Dom_1.$$('span', { className: 'coveo-title' });\n\t            title.text(Strings_1.l('FiltersInYourPreferences') + ':');\n\t            container.el.appendChild(title.el);\n\t            var valuesContainer = Dom_1.$$('span', { className: 'coveo-values' });\n\t            container.el.appendChild(valuesContainer.el);\n\t            for (var i = 0; i < actives.length; i++) {\n\t                if (i != 0) {\n\t                    var separator = Dom_1.$$('span', {\n\t                        className: 'coveo-separator'\n\t                    });\n\t                    separator.text(', ');\n\t                    valuesContainer.el.appendChild(separator.el);\n\t                }\n\t                valuesContainer.el.appendChild(this.buildBreadcrumb(actives[i]));\n\t            }\n\t            args.breadcrumbs.push({ element: container.el });\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.handleClearBreadcrumb = function () {\n\t        _.each(this.getActiveFilters(), function (filter) {\n\t            filter.selected = false;\n\t        });\n\t        this.fromPreferencesToCheckboxInput();\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildTitle = function () {\n\t        this.element.appendChild(Dom_1.$$('div', {\n\t            className: 'coveo-title'\n\t        }, Strings_1.l('ResultsFilteringExpression')).el);\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildAdvancedFilters = function () {\n\t        var _this = this;\n\t        this.advancedFilters = Dom_1.$$('div', { className: 'coveo-advanced-filters' }, Strings_1.l('Create')).el;\n\t        this.buildAdvancedFilterInput();\n\t        this.buildAdvancedFilterFormValidate();\n\t        this.advancedFiltersBuilder = Dom_1.$$('div', { className: 'coveo-advanced-filters-builder' }).el;\n\t        this.advancedFiltersBuilder.appendChild(this.advancedFilterFormValidate);\n\t        Dom_1.$$(this.advancedFilters).on('click', function () { return _this.openAdvancedFilterSectionOrSaveFilters(); });\n\t        var onlineHelp = Dom_1.$$('a', {\n\t            href: 'http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10006',\n\t            className: 'coveo-online-help'\n\t        }, '?');\n\t        var title = Dom_1.$$(this.element).find('.coveo-title');\n\t        onlineHelp.insertAfter(title);\n\t        Dom_1.$$(this.advancedFilters).insertAfter(title);\n\t        this.element.appendChild(this.advancedFiltersBuilder);\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildAdvancedFilterInput = function () {\n\t        this.advancedFiltersTextInputCaption = new PreferencesPanelItem_1.PreferencesPanelTextAreaInput([{\n\t                label: Strings_1.l('Caption'),\n\t                placeholder: Strings_1.l('EnterExpressionName'),\n\t                otherAttribute: 'required'\n\t            }], ResultsFiltersPreferences.ID + '-advanced-caption');\n\t        this.advancedFiltersTextInputExpression = new PreferencesPanelItem_1.PreferencesPanelTextAreaInput([{\n\t                label: Strings_1.l('Expression'),\n\t                placeholder: Strings_1.l('EnterExpressionToFilterWith'),\n\t                otherAttribute: 'required'\n\t            }], ResultsFiltersPreferences.ID + '-advanced-expression');\n\t        this.advancedFiltersTabSelect = new PreferencesPanelItem_1.PreferencePanelMultiSelectInput({\n\t            label: Strings_1.l('Tab'),\n\t            placeholder: Strings_1.l('SelectTab')\n\t        }, this.getAllTabs(), ResultsFiltersPreferences.ID + '-multiselect');\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildAdvancedFilterFormValidate = function () {\n\t        var _this = this;\n\t        this.advancedFilterFormValidate = Dom_1.$$('form').el;\n\t        var formSubmit = Dom_1.$$('input', {\n\t            type: 'submit'\n\t        });\n\t        var saveFormButton = Dom_1.$$('span', {\n\t            className: 'coveo-save'\n\t        });\n\t        var closeFormButton = Dom_1.$$('span', {\n\t            className: 'coveo-close'\n\t        });\n\t        var saveAndCloseContainer = Dom_1.$$('div', {\n\t            className: 'coveo-choice-container coveo-close-and-save'\n\t        });\n\t        saveAndCloseContainer.el.appendChild(saveFormButton.el);\n\t        saveAndCloseContainer.el.appendChild(closeFormButton.el);\n\t        var inputCaption = this.advancedFiltersTextInputCaption.build();\n\t        Dom_1.$$(inputCaption).addClass('coveo-caption');\n\t        var filtersTabSelect = this.advancedFiltersTabSelect.build();\n\t        Dom_1.$$(filtersTabSelect).addClass('coveo-tab');\n\t        var filtersExpression = this.advancedFiltersTextInputExpression.build();\n\t        Dom_1.$$(filtersExpression).addClass('coveo-expression');\n\t        _.each([inputCaption, filtersTabSelect, filtersExpression, saveAndCloseContainer.el, formSubmit.el], function (el) {\n\t            _this.advancedFilterFormValidate.appendChild(el);\n\t        });\n\t        saveFormButton.on('click', function () {\n\t            formSubmit.el.click();\n\t        });\n\t        closeFormButton.on('click', function () { return Dom_1.$$(_this.advancedFiltersBuilder).toggleClass('coveo-active'); });\n\t        Dom_1.$$(Dom_1.$$(this.advancedFilterFormValidate).find('textarea')).on('keyup', function (e) {\n\t            if (e.keyCode == KeyboardUtils_1.KEYBOARD.ENTER) {\n\t                formSubmit.trigger('click');\n\t            }\n\t        });\n\t        Dom_1.$$(this.advancedFilterFormValidate).on('submit', function (e) { return _this.validateAndSaveAdvancedFilter(e); });\n\t    };\n\t    ResultsFiltersPreferences.prototype.getAllTabs = function () {\n\t        var tabRef = Component_1.Component.getComponentRef('Tab');\n\t        if (tabRef) {\n\t            var tabsElement = Dom_1.$$(this.root).findAll('.' + Component_1.Component.computeCssClassName(tabRef));\n\t            return _.map(tabsElement, function (tabElement) {\n\t                var tab = Component_1.Component.get(tabElement);\n\t                return tab.options.id;\n\t            });\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.getPreferencesBoxInputToBuild = function () {\n\t        return _.map(this.preferences, function (filter) {\n\t            return {\n\t                label: filter.caption,\n\t                tab: filter.tab,\n\t                expression: filter.expression\n\t            };\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildCheckboxesInput = function () {\n\t        var _this = this;\n\t        if (this.preferenceContainer != undefined) {\n\t            this.preferenceContainer.remove();\n\t        }\n\t        var toBuild = this.getPreferencesBoxInputToBuild();\n\t        if (Utils_1.Utils.isNonEmptyArray(toBuild)) {\n\t            this.preferencePanelCheckboxInput = new PreferencesPanelItem_1.PreferencesPanelCheckboxInput(toBuild, ResultsFiltersPreferences.ID);\n\t            this.preferenceContainer = Dom_1.$$('div', {\n\t                className: 'coveo-choices-container'\n\t            }).el;\n\t            this.preferenceContainer.appendChild(this.preferencePanelCheckboxInput.build());\n\t            _.each(Dom_1.$$(this.preferenceContainer).findAll('.coveo-choice-container'), function (choiceContainer) {\n\t                choiceContainer.appendChild(Dom_1.$$('div', { className: 'coveo-section coveo-section-edit-delete' }).el);\n\t            });\n\t            Dom_1.$$(this.element).append(this.preferenceContainer);\n\t            this.buildEditAdvancedFilter();\n\t            this.buildDeleteAdvancedFilter();\n\t            this.fromPreferencesToCheckboxInput();\n\t            _.each(Dom_1.$$(this.preferenceContainer).findAll('input'), function (input) {\n\t                Dom_1.$$(input).on('change', function (e) {\n\t                    _this.save();\n\t                    var target = e.target;\n\t                    var filter = _this.preferences[target.value];\n\t                    _this.fromFilterToAnalyticsEvent(filter, filter.selected ? 'selected' : 'unselected');\n\t                    _this.queryController.executeQuery();\n\t                });\n\t            });\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildDeleteAdvancedFilter = function () {\n\t        var _this = this;\n\t        _.each(this.preferences, function (filter) {\n\t            if (filter.custom) {\n\t                var deleteElement = Dom_1.$$('span', {\n\t                    className: 'coveo-delete'\n\t                }, Dom_1.$$('span', {\n\t                    className: 'coveo-icon'\n\t                }).el).el;\n\t                var filterElement = _this.getFilterElementByCaption(filter.caption);\n\t                var insertInto = Dom_1.$$(Dom_1.$$(filterElement).closest('coveo-section').parentElement).find('.coveo-section-edit-delete');\n\t                insertInto.appendChild(deleteElement);\n\t                Dom_1.$$(deleteElement).on('click', function () { return _this.confirmDelete(filter, filterElement); });\n\t            }\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildEditAdvancedFilter = function () {\n\t        var _this = this;\n\t        _.each(this.preferences, function (filter) {\n\t            if (filter.custom) {\n\t                var editElement = Dom_1.$$('span', {\n\t                    className: 'coveo-edit'\n\t                }, Dom_1.$$('span', { className: 'coveo-icon' }));\n\t                var filterElement = _this.getFilterElementByCaption(filter.caption);\n\t                var insertInto = Dom_1.$$(Dom_1.$$(filterElement).closest('coveo-section').parentElement).find('.coveo-section-edit-delete');\n\t                insertInto.appendChild(editElement.el);\n\t                editElement.on('click', function () { return _this.editElement(filter, filterElement); });\n\t            }\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.buildBreadcrumb = function (filter) {\n\t        var _this = this;\n\t        var elem = Dom_1.$$('span', { className: 'coveo-value' });\n\t        var caption = Dom_1.$$('span', { className: 'coveo-caption' });\n\t        caption.text(filter.caption);\n\t        elem.el.appendChild(caption.el);\n\t        var clear = Dom_1.$$('span', { className: 'coveo-clear' });\n\t        elem.el.appendChild(clear.el);\n\t        elem.on('click', function () {\n\t            filter.selected = false;\n\t            _this.fromFilterToAnalyticsEvent(filter, 'cleared from breadcrumb');\n\t            _this.fromPreferencesToCheckboxInput();\n\t            _this.queryController.executeQuery();\n\t        });\n\t        return elem.el;\n\t    };\n\t    ResultsFiltersPreferences.prototype.confirmDelete = function (filter, filterElement) {\n\t        if (confirm(Strings_1.l('AreYouSureDeleteFilter', filter.caption, filter.expression))) {\n\t            var isSelected = filter.selected;\n\t            this.deleteFilterPreference(filter, filterElement);\n\t            if (isSelected) {\n\t                this.fromFilterToAnalyticsEvent(filter, 'deleted');\n\t                this.queryController.executeQuery();\n\t            }\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.editElement = function (filter, filterElement) {\n\t        var oldCaption = this.preferences[filter.caption].caption;\n\t        var oldTab = this.preferences[filter.caption].tab;\n\t        var oldExpression = this.preferences[filter.caption].expression;\n\t        this.deleteFilterPreference(filter, filterElement);\n\t        this.openAdvancedFilterSectionOrSaveFilters();\n\t        this.populateEditSection({ tab: oldTab, caption: oldCaption, expression: oldExpression });\n\t    };\n\t    ResultsFiltersPreferences.prototype.populateEditSection = function (toPopulate) {\n\t        if (toPopulate === void 0) { toPopulate = { tab: [''], caption: '', expression: '' }; }\n\t        this.advancedFiltersTextInputCaption.setValue(Strings_1.l('Caption'), toPopulate.caption);\n\t        this.advancedFiltersTextInputExpression.setValue(Strings_1.l('Expression'), toPopulate.expression);\n\t        this.advancedFiltersTabSelect.setValues(toPopulate.tab);\n\t    };\n\t    ResultsFiltersPreferences.prototype.deleteFilterPreference = function (filter, filterElement) {\n\t        this.preferencePanelLocalStorage.remove(filter.caption);\n\t        delete this.preferences[filter.caption];\n\t        Dom_1.$$(Dom_1.$$(filterElement).closest('.coveo-choice-container')).detach();\n\t    };\n\t    ResultsFiltersPreferences.prototype.openAdvancedFilterSectionOrSaveFilters = function () {\n\t        if (Dom_1.$$(this.advancedFiltersBuilder).hasClass('coveo-active')) {\n\t            Dom_1.$$(Dom_1.$$(this.advancedFilterFormValidate).find('input[type=submit]')).trigger('click');\n\t        }\n\t        else {\n\t            this.populateEditSection();\n\t            Dom_1.$$(this.advancedFiltersBuilder).toggleClass('coveo-active');\n\t        }\n\t    };\n\t    ResultsFiltersPreferences.prototype.validateAndSaveAdvancedFilter = function (e) {\n\t        e.preventDefault();\n\t        Dom_1.$$(this.advancedFiltersBuilder).removeClass('coveo-active');\n\t        var caption = this.advancedFiltersTextInputCaption.getValues()[0];\n\t        var expression = this.advancedFiltersTextInputExpression.getValues()[0];\n\t        var tabs = this.advancedFiltersTabSelect.getValues();\n\t        this.preferences[caption] = {\n\t            caption: caption,\n\t            custom: true,\n\t            expression: expression,\n\t            tab: tabs,\n\t            selected: true\n\t        };\n\t        this.buildCheckboxesInput();\n\t        this.save();\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.t, this.getActiveTab());\n\t        this.advancedFiltersTextInputCaption.reset();\n\t        this.advancedFiltersTextInputExpression.reset();\n\t        this.advancedFiltersTabSelect.reset();\n\t        this.element.appendChild(this.advancedFiltersBuilder);\n\t        this.fromFilterToAnalyticsEvent(this.preferences[caption], 'saved');\n\t        this.queryController.executeQuery();\n\t    };\n\t    ResultsFiltersPreferences.prototype.fromPreferencesToCheckboxInput = function () {\n\t        var _this = this;\n\t        _.each(this.getActiveFilters(), function (filter) {\n\t            _this.preferencePanelCheckboxInput.select(filter.caption);\n\t        });\n\t        _.each(this.getInactiveFilters(), function (filter) {\n\t            _this.preferencePanelCheckboxInput.unselect(filter.caption);\n\t        });\n\t        _.each(this.getDormantFilters(), function (filter) {\n\t            _this.preferencePanelCheckboxInput.select(filter.caption);\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.fromCheckboxInputToPreferences = function () {\n\t        var selecteds = this.preferencePanelCheckboxInput.getSelecteds();\n\t        _.each(this.preferences, function (filter) {\n\t            if (_.contains(selecteds, filter.caption)) {\n\t                filter.selected = true;\n\t            }\n\t            else {\n\t                filter.selected = false;\n\t            }\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.getDormantFilters = function () {\n\t        var _this = this;\n\t        var activeTab = this.getActiveTab();\n\t        return _.filter(this.preferences, function (filter) {\n\t            return filter.selected && !_this.filterIsInActiveTab(filter, activeTab);\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.getActiveFilters = function () {\n\t        var _this = this;\n\t        var activeTab = this.getActiveTab();\n\t        return _.filter(this.preferences, function (filter) {\n\t            return filter.selected && _this.filterIsInActiveTab(filter, activeTab);\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.getInactiveFilters = function () {\n\t        var _this = this;\n\t        var activeTab = this.getActiveTab();\n\t        return _.filter(this.preferences, function (filter) {\n\t            return !filter.selected || !_this.filterIsInActiveTab(filter, activeTab);\n\t        });\n\t    };\n\t    ResultsFiltersPreferences.prototype.getActiveTab = function () {\n\t        return this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t);\n\t    };\n\t    ResultsFiltersPreferences.prototype.filterIsInActiveTab = function (filter, tab) {\n\t        filter.tab = _.compact(filter.tab);\n\t        return _.contains(filter.tab, tab) || Utils_1.Utils.isEmptyArray(filter.tab);\n\t    };\n\t    ResultsFiltersPreferences.prototype.getFilterElementByCaption = function (caption) {\n\t        return Dom_1.$$(this.preferenceContainer).find('input[value=\\'' + caption + '\\']').parentElement;\n\t    };\n\t    ResultsFiltersPreferences.prototype.fromResultsFilterOptionToResultsPreferenceInterface = function () {\n\t        var ret = {};\n\t        _.each(this.options.filters, function (filter, caption) {\n\t            ret[caption] = {\n\t                expression: filter.expression,\n\t                tab: filter.tab,\n\t                selected: filter.selected ? filter.selected : false,\n\t                custom: false,\n\t                caption: caption\n\t            };\n\t        });\n\t        return ret;\n\t    };\n\t    ResultsFiltersPreferences.prototype.mergeLocalPreferencesWithStaticPreferences = function () {\n\t        var staticPreferences = this.fromResultsFilterOptionToResultsPreferenceInterface();\n\t        var localPreferences = this.preferencePanelLocalStorage.load();\n\t        var localPreferencesWithoutRemoved = _.filter(localPreferences, function (preference) {\n\t            var isCustom = preference.custom;\n\t            var existsInStatic = _.find(staticPreferences, function (staticPreference) {\n\t                return staticPreference.caption == preference.caption;\n\t            });\n\t            return isCustom || existsInStatic != undefined;\n\t        });\n\t        var localToMerge = {};\n\t        _.each(localPreferencesWithoutRemoved, function (filter) {\n\t            localToMerge[filter.caption] = {\n\t                expression: filter.expression,\n\t                tab: filter.tab,\n\t                selected: filter.selected,\n\t                custom: filter.custom,\n\t                caption: filter.caption\n\t            };\n\t        });\n\t        this.preferences = Utils_1.Utils.extendDeep(staticPreferences, localToMerge);\n\t    };\n\t    ResultsFiltersPreferences.prototype.fromFilterToAnalyticsEvent = function (filter, type) {\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.customfiltersChange, {\n\t            customFilterName: filter.caption,\n\t            customFilterExpression: filter.expression,\n\t            customFilterType: type\n\t        });\n\t    };\n\t    return ResultsFiltersPreferences;\n\t}(Component_1.Component));\n\tResultsFiltersPreferences.ID = 'ResultsFiltersPreferences';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tResultsFiltersPreferences.options = {\n\t    /**\n\t     * Specifies whether to include the active filter(s) in the {@link Breadcrumb}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    includeInBreadcrumb: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to show the **Create** button that allows the end user to create filters.\n\t     *\n\t     * If you set this option to `false`, only the pre-populated {@link ResultsFiltersPreferences.options.filters} will\n\t     * be available to the end user.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    showAdvancedFilters: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies the default filters that all end users can apply.\n\t     *\n\t     * End users will not be able to modify or delete these filters. They do not count as \"user-made\" filters, but\n\t     * rather as \"built-in\" filters created by the developer of the search page.\n\t     *\n\t     * You can only set this option in the `init` call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * Filters should follow this definition:\n\t     *\n\t     * `filters: { [caption: string]: { expression: string; tab?: string[]; } }`;\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *   ResultsFiltersPreferences : {\n\t     *     filters : {\n\t     *       \"Only Google Drive Items\" : {\n\t     *         expression : \"@connectortype == 'GoogleDriveCrawler'\"\n\t     *         tab: ['Tab1', 'Tab2'],\n\t     *       },\n\t     *       \"Another Filter\" : {\n\t     *         expression : [ ... another expression ... ]\n\t     *       },\n\t     *       [ ... ]\n\t     *     }\n\t     *   }\n\t     * });\n\t     * ```\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    filters: ComponentOptions_1.ComponentOptions.buildJsonOption()\n\t};\n\texports.ResultsFiltersPreferences = ResultsFiltersPreferences;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultsFiltersPreferences);\n\n\n/***/ },\n/* 236 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar _ = __webpack_require__(16);\n\tvar PreferencesPanelBoxInput = (function () {\n\t    function PreferencesPanelBoxInput(boxInputToBuild, nameOfInput, type) {\n\t        this.boxInputToBuild = boxInputToBuild;\n\t        this.nameOfInput = nameOfInput;\n\t        this.type = type;\n\t        this.inputs = {};\n\t    }\n\t    PreferencesPanelBoxInput.prototype.build = function () {\n\t        var _this = this;\n\t        return _.reduce(_.map(this.boxInputToBuild, function (toBuild) {\n\t            var choiceContainer = Dom_1.$$('div', {\n\t                className: 'coveo-choice-container'\n\t            });\n\t            var sectionInput = Dom_1.$$('div', {\n\t                className: 'coveo-section coveo-section-input'\n\t            });\n\t            var input = Dom_1.$$('input', {\n\t                className: \"coveo-\" + toBuild.label,\n\t                id: \"coveo-\" + toBuild.label,\n\t                type: _this.type,\n\t                name: _this.nameOfInput,\n\t                value: toBuild.label\n\t            });\n\t            if (toBuild.otherAttribute) {\n\t                input.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n\t            }\n\t            var inputIcon = Dom_1.$$('span', {\n\t                className: 'coveo-input-icon'\n\t            });\n\t            var label = Dom_1.$$('label', {\n\t                className: 'coveo-preferences-panel-item-label',\n\t                'for': \"coveo-\" + toBuild.label,\n\t            });\n\t            label.text(toBuild.label);\n\t            sectionInput.append(input.el);\n\t            sectionInput.append(inputIcon.el);\n\t            sectionInput.append(label.el);\n\t            var sectionTab = Dom_1.$$('div', {\n\t                className: 'coveo-section coveo-section-tab'\n\t            });\n\t            if (toBuild.tab) {\n\t                sectionTab.text(toBuild.tab.join(' '));\n\t            }\n\t            var sectionExpression = Dom_1.$$('div', {\n\t                className: 'coveo-section coveo-section-expression'\n\t            });\n\t            sectionExpression.text(toBuild.expression);\n\t            choiceContainer.append(sectionInput.el);\n\t            choiceContainer.append(sectionTab.el);\n\t            choiceContainer.append(sectionExpression.el);\n\t            _this.inputs[toBuild.label] = Dom_1.$$('div', undefined, choiceContainer).el;\n\t            return _this.inputs[toBuild.label];\n\t        }), function (memo, input) {\n\t            memo.appendChild(input);\n\t            return memo;\n\t        }, Dom_1.$$('div').el);\n\t    };\n\t    PreferencesPanelBoxInput.prototype.select = function (toSelect) {\n\t        Assert_1.Assert.exists(this.inputs[toSelect]);\n\t        var input = Dom_1.$$(this.inputs[toSelect]).find('input');\n\t        input.checked = true;\n\t        Dom_1.$$(Dom_1.$$(this.inputs[toSelect]).find('.coveo-input-icon')).addClass('coveo-selected');\n\t    };\n\t    PreferencesPanelBoxInput.prototype.unselect = function (toUnselect) {\n\t        Assert_1.Assert.exists(this.inputs[toUnselect]);\n\t        var input = Dom_1.$$(this.inputs[toUnselect]).find('input');\n\t        input.checked = false;\n\t        Dom_1.$$(Dom_1.$$(this.inputs[toUnselect]).find('.coveo-input-icon')).removeClass('coveo-selected');\n\t    };\n\t    PreferencesPanelBoxInput.prototype.getSelected = function () {\n\t        var checked = _.find(this.inputs, function (el) {\n\t            var input = Dom_1.$$(el).find('input');\n\t            return input.checked;\n\t        });\n\t        return Dom_1.$$(checked).find('input').value;\n\t    };\n\t    PreferencesPanelBoxInput.prototype.getSelecteds = function () {\n\t        var checkeds = _.filter(this.inputs, function (el) {\n\t            var input = Dom_1.$$(el).find('input');\n\t            return input.checked;\n\t        });\n\t        return _.map(checkeds, function (checked) {\n\t            return Dom_1.$$(checked).find('input').value;\n\t        });\n\t    };\n\t    return PreferencesPanelBoxInput;\n\t}());\n\texports.PreferencesPanelBoxInput = PreferencesPanelBoxInput;\n\tvar PreferencesPanelRadioInput = (function (_super) {\n\t    __extends(PreferencesPanelRadioInput, _super);\n\t    function PreferencesPanelRadioInput(radioElementToBuild, name) {\n\t        var _this = _super.call(this, radioElementToBuild, name, 'radio') || this;\n\t        _this.radioElementToBuild = radioElementToBuild;\n\t        _this.name = name;\n\t        return _this;\n\t    }\n\t    return PreferencesPanelRadioInput;\n\t}(PreferencesPanelBoxInput));\n\texports.PreferencesPanelRadioInput = PreferencesPanelRadioInput;\n\tvar PreferencesPanelCheckboxInput = (function (_super) {\n\t    __extends(PreferencesPanelCheckboxInput, _super);\n\t    function PreferencesPanelCheckboxInput(checkboxElementToBuild, name) {\n\t        var _this = _super.call(this, checkboxElementToBuild, name, 'checkbox') || this;\n\t        _this.checkboxElementToBuild = checkboxElementToBuild;\n\t        _this.name = name;\n\t        return _this;\n\t    }\n\t    PreferencesPanelCheckboxInput.prototype.build = function () {\n\t        var build = _super.prototype.build.call(this);\n\t        var icons = Dom_1.$$(build).findAll('.coveo-input-icon');\n\t        _.each(icons, function (icon) {\n\t            var input = Dom_1.$$(icon.parentElement).find('input');\n\t            Dom_1.$$(input).on('change', function () {\n\t                var checked = input.checked;\n\t                Dom_1.$$(icon).toggleClass('coveo-selected', checked);\n\t            });\n\t            Dom_1.$$(icon).on('click', function () {\n\t                input.checked = !input.checked;\n\t                Dom_1.$$(input).trigger('change');\n\t            });\n\t        });\n\t        return build;\n\t    };\n\t    return PreferencesPanelCheckboxInput;\n\t}(PreferencesPanelBoxInput));\n\texports.PreferencesPanelCheckboxInput = PreferencesPanelCheckboxInput;\n\tvar PreferencesPanelTextInput = (function () {\n\t    function PreferencesPanelTextInput(textElementToBuild, name) {\n\t        this.textElementToBuild = textElementToBuild;\n\t        this.name = name;\n\t        this.inputs = {};\n\t    }\n\t    PreferencesPanelTextInput.prototype.build = function () {\n\t        var _this = this;\n\t        return _.reduce(_.map(this.textElementToBuild, function (toBuild) {\n\t            var choiceContainer = Dom_1.$$('div', {\n\t                className: 'coveo-choice-container'\n\t            });\n\t            var input = Dom_1.$$('input', {\n\t                className: \"coveo-\" + toBuild.label,\n\t                id: \"coveo-\" + toBuild.label,\n\t                type: 'text',\n\t                name: _this.name,\n\t                placeholder: toBuild.placeholder || toBuild.label\n\t            });\n\t            if (toBuild.otherAttribute) {\n\t                input.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n\t            }\n\t            choiceContainer.append(input.el);\n\t            _this.inputs[toBuild.label] = Dom_1.$$('div', undefined, choiceContainer).el;\n\t            return _this.inputs[toBuild.label];\n\t        }), function (memo, input) {\n\t            memo.appendChild(input);\n\t            return memo;\n\t        }, Dom_1.$$('div').el);\n\t    };\n\t    PreferencesPanelTextInput.prototype.getValues = function () {\n\t        var _this = this;\n\t        return _.map(this.inputs, function (input, key) {\n\t            return _this.getInput(key).value;\n\t        });\n\t    };\n\t    PreferencesPanelTextInput.prototype.setValue = function (input, value) {\n\t        Assert_1.Assert.exists(this.inputs[input]);\n\t        this.getInput(input).value = value;\n\t    };\n\t    PreferencesPanelTextInput.prototype.reset = function () {\n\t        _.each(this.inputs, function (input) {\n\t            var inputElement = Dom_1.$$(input).find('input');\n\t            if (!inputElement) {\n\t                inputElement = Dom_1.$$(input).find('textarea');\n\t            }\n\t            inputElement.value = '';\n\t        });\n\t    };\n\t    PreferencesPanelTextInput.prototype.getInput = function (input) {\n\t        Assert_1.Assert.exists(this.inputs[input]);\n\t        var found = Dom_1.$$(this.inputs[input]).find('input');\n\t        if (!found) {\n\t            found = Dom_1.$$(this.inputs[input]).find('textarea');\n\t        }\n\t        return found;\n\t    };\n\t    return PreferencesPanelTextInput;\n\t}());\n\texports.PreferencesPanelTextInput = PreferencesPanelTextInput;\n\tvar PreferencesPanelTextAreaInput = (function (_super) {\n\t    __extends(PreferencesPanelTextAreaInput, _super);\n\t    function PreferencesPanelTextAreaInput() {\n\t        return _super !== null && _super.apply(this, arguments) || this;\n\t    }\n\t    PreferencesPanelTextAreaInput.prototype.build = function () {\n\t        var _this = this;\n\t        return _.reduce(_.map(this.textElementToBuild, function (toBuild) {\n\t            var choiceContainer = Dom_1.$$('div', {\n\t                className: 'coveo-choice-container'\n\t            });\n\t            var textArea = Dom_1.$$('textarea', {\n\t                className: \"coveo-\" + toBuild.label,\n\t                name: \"coveo-\" + toBuild.label,\n\t                placeholder: toBuild.placeholder || toBuild.label\n\t            });\n\t            if (toBuild.otherAttribute) {\n\t                textArea.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n\t            }\n\t            choiceContainer.append(textArea.el);\n\t            _this.inputs[toBuild.label] = Dom_1.$$('div', undefined, choiceContainer).el;\n\t            return _this.inputs[toBuild.label];\n\t        }), function (memo, input) {\n\t            memo.appendChild(input);\n\t            return memo;\n\t        }, Dom_1.$$('div').el);\n\t    };\n\t    return PreferencesPanelTextAreaInput;\n\t}(PreferencesPanelTextInput));\n\texports.PreferencesPanelTextAreaInput = PreferencesPanelTextAreaInput;\n\tvar PreferencePanelMultiSelectInput = (function () {\n\t    function PreferencePanelMultiSelectInput(toBuild, options, name) {\n\t        this.toBuild = toBuild;\n\t        this.options = options;\n\t        this.name = name;\n\t        this.textInput = new PreferencesPanelTextAreaInput([{ label: toBuild.label, otherAttribute: 'readonly' }], name);\n\t    }\n\t    PreferencePanelMultiSelectInput.prototype.build = function () {\n\t        var _this = this;\n\t        this.select = Dom_1.$$('select').el;\n\t        this.select.setAttribute('multiple', 'multiple');\n\t        _.each(this.options, function (option) {\n\t            var optEl = Dom_1.$$('option', undefined, option).el;\n\t            _this.select.appendChild(optEl);\n\t        });\n\t        Dom_1.$$(this.select).on('change', function () {\n\t            var values = _.chain(_this.select.options)\n\t                .filter(function (opt) {\n\t                return opt.selected;\n\t            })\n\t                .map(function (opt) {\n\t                return opt.value;\n\t            })\n\t                .value();\n\t            if (!Utils_1.Utils.isNullOrUndefined(values) && !Utils_1.Utils.isEmptyArray(values)) {\n\t                _this.textInput.setValue(_this.toBuild.label, values.join(','));\n\t            }\n\t            else {\n\t                _this.reset();\n\t            }\n\t        });\n\t        var el = this.textInput.build();\n\t        el.appendChild(this.select);\n\t        return el;\n\t    };\n\t    PreferencePanelMultiSelectInput.prototype.getValues = function () {\n\t        return this.textInput.getValues()[0].split(',');\n\t    };\n\t    PreferencePanelMultiSelectInput.prototype.setValues = function (values) {\n\t        this.textInput.setValue(this.toBuild.label, values.join(','));\n\t    };\n\t    PreferencePanelMultiSelectInput.prototype.reset = function () {\n\t        this.textInput.setValue(this.toBuild.label, '');\n\t    };\n\t    return PreferencePanelMultiSelectInput;\n\t}());\n\texports.PreferencePanelMultiSelectInput = PreferencePanelMultiSelectInput;\n\n\n/***/ },\n/* 237 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Globalize = __webpack_require__(30);\n\t/**\n\t * The QueryDuration component displays the duration of the last query execution.\n\t *\n\t * When a {@link QueryEvents.querySuccess} event is triggered, the QueryDuration component becomes visible. It also\n\t * displays the global duration, the index duration, the proxy duration, and the client duration in a single tooltip.\n\t *\n\t * If a {@link QueryEvents.queryError} event is triggered, the QueryDuration component becomes hidden.\n\t */\n\tvar QueryDuration = (function (_super) {\n\t    __extends(QueryDuration, _super);\n\t    /**\n\t     * Creates a new QueryDuration component.\n\t     * Binds handlers on the {@link QueryEvents.querySuccess} and {@link QueryEvents.queryError} events.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the QueryDuration component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function QueryDuration(element, options, bindings) {\n\t        var _this = _super.call(this, element, QueryDuration.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, QueryDuration, options);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (data) { return _this.handleQuerySuccess(data); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return Dom_1.$$(_this.element).hide(); });\n\t        _this.element.style.display = 'none';\n\t        _this.textContainer = Dom_1.$$('span').el;\n\t        _this.element.appendChild(_this.textContainer);\n\t        return _this;\n\t    }\n\t    QueryDuration.prototype.handleQuerySuccess = function (data) {\n\t        if (!this.disabled && data.results.results.length > 0) {\n\t            Assert_1.Assert.exists(data);\n\t            var tooltip = [\n\t                Strings_1.l('Duration', this.formatQueryDuration(data.results.duration)),\n\t                Strings_1.l('IndexDuration', this.formatQueryDuration(data.results.indexDuration)),\n\t                Strings_1.l('ProxyDuration', this.formatQueryDuration(data.results.proxyDuration)),\n\t                Strings_1.l('ClientDuration', this.formatQueryDuration(data.results.clientDuration))\n\t            ].join('\\n');\n\t            this.textContainer.textContent = this.formatQueryDuration(data.results.duration);\n\t            this.element.setAttribute('title', tooltip);\n\t            this.element.style.display = 'inline';\n\t        }\n\t        else {\n\t            this.element.style.display = 'none';\n\t        }\n\t    };\n\t    QueryDuration.prototype.formatQueryDuration = function (durationInMillis) {\n\t        if (durationInMillis == undefined) {\n\t            return Strings_1.l('Unavailable');\n\t        }\n\t        else {\n\t            var seconds = Math.max(durationInMillis / 1000, 0.01);\n\t            if (String['locale'] === 'en') {\n\t                return Strings_1.l('Seconds', Globalize.format(seconds, 'n2'), seconds, true);\n\t            }\n\t            else {\n\t                return Strings_1.l('Seconds', Globalize.format(seconds, 'n2'), seconds);\n\t            }\n\t        }\n\t    };\n\t    return QueryDuration;\n\t}(Component_1.Component));\n\tQueryDuration.ID = 'QueryDuration';\n\tQueryDuration.options = {};\n\texports.QueryDuration = QueryDuration;\n\tInitialization_1.Initialization.registerAutoCreateComponent(QueryDuration);\n\n\n/***/ },\n/* 238 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Globalize = __webpack_require__(30);\n\tvar QuerySummaryEvents_1 = __webpack_require__(239);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The QuerySummary component can display information about the currently displayed range of results (e.g., \"Results\n\t * 1-10 of 123\").\n\t *\n\t * If the query matches no document, the QuerySummary component can instead display tips to help the end user formulate\n\t * a better query.\n\t */\n\tvar QuerySummary = (function (_super) {\n\t    __extends(QuerySummary, _super);\n\t    /**\n\t     * Creates a new QuerySummary component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the QuerySummary component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function QuerySummary(element, options, bindings) {\n\t        var _this = _super.call(this, element, QuerySummary.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, QuerySummary, options);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (data) { return _this.handleQuerySuccess(data); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return _this.hide(); });\n\t        _this.hide();\n\t        _this.textContainer = Dom_1.$$('span').el;\n\t        _this.element.appendChild(_this.textContainer);\n\t        return _this;\n\t    }\n\t    QuerySummary.prototype.hide = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-hidden');\n\t    };\n\t    QuerySummary.prototype.show = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-hidden');\n\t    };\n\t    QuerySummary.prototype.handleQuerySuccess = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        Dom_1.$$(this.textContainer).empty();\n\t        this.show();\n\t        if (!this.options.onlyDisplaySearchTips) {\n\t            if (data.results.results.length > 0) {\n\t                var first = Globalize.format(data.query.firstResult + 1, 'n0');\n\t                var last = Globalize.format(data.query.firstResult + data.results.results.length, 'n0');\n\t                var totalCount = Globalize.format(data.results.totalCountFiltered, 'n0');\n\t                var highlightFirst = Dom_1.$$('span', { className: 'coveo-highlight' }, first).el;\n\t                var highlightLast = Dom_1.$$('span', { className: 'coveo-highlight' }, last).el;\n\t                var highlightTotal = Dom_1.$$('span', { className: 'coveo-highlight' }, totalCount).el;\n\t                this.textContainer.innerHTML = Strings_1.l('ShowingResultsOf', highlightFirst.outerHTML, highlightLast.outerHTML, highlightTotal.outerHTML, data.results.results.length);\n\t            }\n\t        }\n\t        if (data.results.exception != null && data.results.exception.code != null) {\n\t            var code = ('QueryException' + data.results.exception.code).toLocaleString();\n\t            this.textContainer.innerHTML = Strings_1.l('QueryException', code);\n\t        }\n\t        else if (data.results.results.length == 0) {\n\t            this.displayInfoOnNoResults();\n\t        }\n\t        else {\n\t            this.lastKnownGoodState = this.queryStateModel.getAttributes();\n\t        }\n\t    };\n\t    QuerySummary.prototype.displayInfoOnNoResults = function () {\n\t        var _this = this;\n\t        var queryEscaped = _.escape(this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.q));\n\t        var noResultsForString;\n\t        if (queryEscaped != '') {\n\t            noResultsForString = Dom_1.$$('div', {\n\t                className: 'coveo-query-summary-no-results-string'\n\t            }, Strings_1.l('noResultFor', Dom_1.$$('span', { className: 'coveo-highlight' }, queryEscaped).el.outerHTML));\n\t        }\n\t        var cancelLastAction = Dom_1.$$('div', {\n\t            className: 'coveo-query-summary-cancel-last'\n\t        }, Strings_1.l('CancelLastAction'));\n\t        cancelLastAction.on('click', function () {\n\t            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.noResultsBack, {}, _this.root);\n\t            _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.noResultsBack, {});\n\t            if (_this.lastKnownGoodState) {\n\t                _this.queryStateModel.reset();\n\t                _this.queryStateModel.setMultiple(_this.lastKnownGoodState);\n\t                Dom_1.$$(_this.root).trigger(QuerySummaryEvents_1.QuerySummaryEvents.cancelLastAction);\n\t                _this.queryController.executeQuery();\n\t            }\n\t            else {\n\t                history.back();\n\t            }\n\t        });\n\t        var searchTipsInfo = Dom_1.$$('div', {\n\t            className: 'coveo-query-summary-search-tips-info'\n\t        });\n\t        searchTipsInfo.text(Strings_1.l('SearchTips'));\n\t        var searchTips = Dom_1.$$('ul');\n\t        var checkSpelling = Dom_1.$$('li');\n\t        checkSpelling.text(Strings_1.l('CheckSpelling'));\n\t        var fewerKeywords = Dom_1.$$('li');\n\t        fewerKeywords.text(Strings_1.l('TryUsingFewerKeywords'));\n\t        searchTips.el.appendChild(checkSpelling.el);\n\t        searchTips.el.appendChild(fewerKeywords.el);\n\t        if (this.queryStateModel.atLeastOneFacetIsActive()) {\n\t            var fewerFilter = Dom_1.$$('li');\n\t            fewerFilter.text(Strings_1.l('SelectFewerFilters'));\n\t            searchTips.el.appendChild(fewerFilter.el);\n\t        }\n\t        if (this.options.enableSearchTips) {\n\t            if (noResultsForString) {\n\t                this.textContainer.appendChild(noResultsForString.el);\n\t            }\n\t            this.textContainer.appendChild(cancelLastAction.el);\n\t            this.textContainer.appendChild(searchTipsInfo.el);\n\t            this.textContainer.appendChild(searchTips.el);\n\t        }\n\t        else {\n\t            if (noResultsForString) {\n\t                this.textContainer.appendChild(noResultsForString.el);\n\t            }\n\t            this.textContainer.appendChild(cancelLastAction.el);\n\t        }\n\t    };\n\t    return QuerySummary;\n\t}(Component_1.Component));\n\tQuerySummary.ID = 'QuerySummary';\n\t/**\n\t * Options for the component\n\t * @componentOptions\n\t */\n\tQuerySummary.options = {\n\t    /**\n\t     * Specifies whether to display the search tips to the end user when there are no search results.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableSearchTips: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to hide the information about the currently displayed range of results and only display the\n\t     * search tips instead.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    onlyDisplaySearchTips: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false })\n\t};\n\texports.QuerySummary = QuerySummary;\n\tInitialization_1.Initialization.registerAutoCreateComponent(QuerySummary);\n\n\n/***/ },\n/* 239 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * This static class is there to contains the different string definition for all the events related to the {@link AdvancedSearch} component.\n\t */\n\tvar QuerySummaryEvents = (function () {\n\t    function QuerySummaryEvents() {\n\t    }\n\t    return QuerySummaryEvents;\n\t}());\n\t/**\n\t * Triggered when the last action is being cancelled by the query summary component\n\t *\n\t * Allows external code to revert their last action.\n\t * @type {string}\n\t */\n\tQuerySummaryEvents.cancelLastAction = 'cancelLastAction';\n\texports.QuerySummaryEvents = QuerySummaryEvents;\n\n\n/***/ },\n/* 240 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Settings component renders a **Settings** button that the end user can click to access a popup menu from which\n\t * it is possible to perform several contextual actions. The usual location of the **Settings** button in the page is to\n\t * the right of the {@link Searchbox}.\n\t *\n\t * This component can reference several components to populate its popup menu:\n\t * - {@link AdvancedSearch}\n\t * - {@link ExportToExcel}\n\t * - {@link PreferencesPanel} (see also {@link ResultsFiltersPreferences} and {@link ResultsPreferences})\n\t * - {@link SearchAlerts} (see also {@link SearchAlertsMessage})\n\t * - {@link ShareQuery}\n\t */\n\tvar Settings = (function (_super) {\n\t    __extends(Settings, _super);\n\t    /**\n\t     * Creates a new Settings component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Settings component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Settings(element, options, bindings) {\n\t        var _this = _super.call(this, element, Settings.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.isOpened = false;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Settings, options);\n\t        _this.bind.onRootElement(InitializationEvents_1.InitializationEvents.afterInitialization, function () { return _this.init(); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Opens the **Settings** popup menu.\n\t     */\n\t    Settings.prototype.open = function () {\n\t        var _this = this;\n\t        this.isOpened = true;\n\t        if (this.menu != null) {\n\t            Dom_1.$$(this.menu).detach();\n\t        }\n\t        this.menu = this.buildMenu();\n\t        Dom_1.$$(this.menu).on('mouseleave', function () { return _this.mouseleave(); });\n\t        Dom_1.$$(this.menu).on('mouseenter', function () { return _this.mouseenter(); });\n\t        PopupUtils_1.PopupUtils.positionPopup(this.menu, this.element, this.root, this.getPopupPositioning(), this.root);\n\t    };\n\t    /**\n\t     * Closes the **Settings** popup menu.\n\t     */\n\t    Settings.prototype.close = function () {\n\t        this.isOpened = false;\n\t        if (this.menu != null) {\n\t            Dom_1.$$(this.menu).detach();\n\t            this.menu = null;\n\t        }\n\t    };\n\t    Settings.prototype.init = function () {\n\t        var _this = this;\n\t        if (this.searchInterface.isNewDesign()) {\n\t            var square = Dom_1.$$('span', { className: 'coveo-settings-square' }).el;\n\t            var squares = Dom_1.$$('span', { className: 'coveo-settings-squares' }).el;\n\t            _.times(3, function () { return squares.appendChild(square.cloneNode()); });\n\t            this.element.appendChild(squares);\n\t        }\n\t        else {\n\t            var icon = Dom_1.$$('span', { className: 'coveo-settings-icon' }).el;\n\t            this.element.appendChild(icon);\n\t        }\n\t        Dom_1.$$(this.element).on('click', function () {\n\t            if (_this.isOpened) {\n\t                _this.close();\n\t            }\n\t            else {\n\t                _this.open();\n\t            }\n\t        });\n\t        Dom_1.$$(this.element).on('mouseleave', function () { return _this.mouseleave(); });\n\t        Dom_1.$$(this.element).on('mouseenter', function () { return _this.mouseenter(); });\n\t    };\n\t    Settings.prototype.buildMenu = function () {\n\t        var _this = this;\n\t        var menu = Dom_1.$$('div', { className: 'coveo-settings-advanced-menu' }).el;\n\t        var settingsPopulateMenuArgs = {\n\t            settings: this,\n\t            menuData: []\n\t        };\n\t        Dom_1.$$(this.root).trigger(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, settingsPopulateMenuArgs);\n\t        _.each(settingsPopulateMenuArgs.menuData, function (menuItem) {\n\t            var menuItemDom = Dom_1.$$('div', {\n\t                className: \"coveo-settings-item \" + menuItem.className,\n\t                title: _.escape(menuItem.tooltip || '')\n\t            }).el;\n\t            menuItemDom.appendChild(Dom_1.$$('div', { className: 'coveo-icon' }).el);\n\t            menuItemDom.appendChild(Dom_1.$$('div', { className: 'coveo-settings-text' }, _.escape(menuItem.text)).el);\n\t            Dom_1.$$(menuItemDom).on('click', function () {\n\t                _this.close();\n\t                _.each(settingsPopulateMenuArgs.menuData, function (menuItem) {\n\t                    menuItem.onClose && menuItem.onClose();\n\t                });\n\t                menuItem.onOpen();\n\t            });\n\t            menu.appendChild(menuItemDom);\n\t        });\n\t        return menu;\n\t    };\n\t    Settings.prototype.mouseleave = function () {\n\t        var _this = this;\n\t        clearTimeout(this.closeTimeout);\n\t        this.closeTimeout = setTimeout(function () {\n\t            _this.close();\n\t        }, this.options.menuDelay);\n\t    };\n\t    Settings.prototype.mouseenter = function () {\n\t        clearTimeout(this.closeTimeout);\n\t    };\n\t    Settings.prototype.getPopupPositioning = function () {\n\t        return {\n\t            horizontal: PopupUtils_1.HorizontalAlignment.INNERRIGHT,\n\t            vertical: PopupUtils_1.VerticalAlignment.BOTTOM,\n\t            verticalOffset: 8\n\t        };\n\t    };\n\t    return Settings;\n\t}(Component_1.Component));\n\tSettings.ID = 'Settings';\n\t/**\n\t * The options for Settings\n\t * @componentOptions\n\t */\n\tSettings.options = {\n\t    /**\n\t     * Specifies the delay (in milliseconds) before hiding the popup menu when the cursor is not hovering over it.\n\t     *\n\t     * Default value is `300`. Minimum value is `0 `.\n\t     */\n\t    menuDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 300, min: 0 })\n\t};\n\texports.Settings = Settings;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Settings);\n\n\n/***/ },\n/* 241 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\t/**\n\t * The ShareQuery component populates the {@link Settings} popup menu with the **Share Query** menu item. When the end\n\t * user clicks this item, it displays a panel containing two input boxes: one containing a shareable link and the other\n\t * containing the complete current query expression.\n\t */\n\tvar ShareQuery = (function (_super) {\n\t    __extends(ShareQuery, _super);\n\t    /**\n\t     * Creates a new ShareQuery component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ShareQuery component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ShareQuery(element, options, bindings) {\n\t        var _this = _super.call(this, element, ShareQuery.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.dialogBoxContent = _this.buildContent();\n\t        element.appendChild(_this.dialogBoxContent);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleProcessNewQueryResults(args); });\n\t        _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t            args.menuData.push({\n\t                className: 'coveo-share-query',\n\t                text: Strings_1.l('ShareQuery'),\n\t                onOpen: function () { return _this.open(); },\n\t                onClose: function () { return _this.close(); }\n\t            });\n\t        });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Shows the **Share Query** panel.\n\t     */\n\t    ShareQuery.prototype.open = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-share-query-opened');\n\t    };\n\t    /**\n\t     * Hides the **Share Query** panel.\n\t     */\n\t    ShareQuery.prototype.close = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-share-query-opened');\n\t    };\n\t    /**\n\t     * Gets the link to the current query.\n\t     */\n\t    ShareQuery.prototype.getLinkToThisQuery = function () {\n\t        return this.linkToThisQuery.value;\n\t    };\n\t    /**\n\t     * Sets the link to the current query.\n\t     */\n\t    ShareQuery.prototype.setLinkToThisQuery = function (link) {\n\t        this.linkToThisQuery.value = link;\n\t    };\n\t    /**\n\t     * Gets the complete query expression string\n\t     */\n\t    ShareQuery.prototype.getCompleteQuery = function () {\n\t        return this.completeQuery.value;\n\t    };\n\t    /**\n\t     * Set the complete query expression string.\n\t     */\n\t    ShareQuery.prototype.setCompleteQuery = function (completeQuery) {\n\t        this.completeQuery.value = completeQuery;\n\t    };\n\t    ShareQuery.prototype.handleProcessNewQueryResults = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        Assert_1.Assert.exists(args.results);\n\t        var query = args.query;\n\t        this.linkToThisQuery.value = window.location.href;\n\t        this.completeQuery.value = Utils_1.Utils.trim(this.outputIfNotNull(query.q) + ' ' + this.outputIfNotNull(query.aq) + ' ' + this.outputIfNotNull(query.cq));\n\t        this.logger.trace('Received query results from new query', query);\n\t    };\n\t    ShareQuery.prototype.outputIfNotNull = function (value) {\n\t        if (value) {\n\t            return '(' + value + ')';\n\t        }\n\t        return '';\n\t    };\n\t    ShareQuery.prototype.buildContent = function () {\n\t        var _this = this;\n\t        var content = Dom_1.$$('div', { className: 'coveo-share-query-summary-info' }).el;\n\t        content.appendChild(Dom_1.$$('span', { className: 'coveo-query-summary-info-title' }, Strings_1.l('ShareQuery')).el);\n\t        var close = Dom_1.$$('div', { className: 'coveo-share-query-summary-info-close' }).el;\n\t        close.appendChild(Dom_1.$$('span').el);\n\t        Dom_1.$$(close).on('click', function () { return _this.close(); });\n\t        content.appendChild(close);\n\t        var boxes = Dom_1.$$('div', { className: 'coveo-share-query-summary-info-boxes' }).el;\n\t        this.linkToThisQuery = Dom_1.$$('input', {\n\t            'type': 'text',\n\t            className: 'coveo-share-query-summary-info-input'\n\t        }).el;\n\t        Dom_1.$$(this.linkToThisQuery).on('click', function () { return _this.linkToThisQuery.select(); });\n\t        this.completeQuery = Dom_1.$$('input').el;\n\t        this.completeQuery.setAttribute('type', 'text');\n\t        Dom_1.$$(this.completeQuery).addClass('coveo-share-query-summary-info-input');\n\t        boxes.appendChild(this.buildTextBoxWithLabel(Strings_1.l('Link') + ':', this.linkToThisQuery));\n\t        boxes.appendChild(this.buildTextBoxWithLabel(Strings_1.l('CompleteQuery') + ':', this.completeQuery));\n\t        content.appendChild(boxes);\n\t        Component_1.Component.pointElementsToDummyForm(content);\n\t        return content;\n\t    };\n\t    ShareQuery.prototype.buildTextBoxWithLabel = function (label, input) {\n\t        var labelElement = Dom_1.$$('span', { className: 'coveo-share-query-summary-info-label' });\n\t        labelElement.text(label);\n\t        var returnDiv = Dom_1.$$('div').el;\n\t        returnDiv.appendChild(labelElement.el);\n\t        returnDiv.appendChild(input);\n\t        return returnDiv;\n\t    };\n\t    ShareQuery.create = function (element, options, root) {\n\t        Assert_1.Assert.exists(element);\n\t        return new ShareQuery(element, options, root);\n\t    };\n\t    return ShareQuery;\n\t}(Component_1.Component));\n\tShareQuery.ID = 'ShareQuery';\n\tShareQuery.options = {};\n\texports.ShareQuery = ShareQuery;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ShareQuery);\n\n\n/***/ },\n/* 242 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar SortCriteria_ts_1 = __webpack_require__(212);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Sort component renders a widget that the end user can interact with to sort query results according to a single\n\t * criterion or list of criteria.\n\t */\n\tvar Sort = (function (_super) {\n\t    __extends(Sort, _super);\n\t    /**\n\t     * Creates a new Sort component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Sort component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Sort(element, options, bindings) {\n\t        var _this = _super.call(this, element, Sort.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Sort, options);\n\t        Assert_1.Assert.isLargerOrEqualsThan(1, _this.options.sortCriteria.length);\n\t        _this.bind.onQueryState(Model_1.MODEL_EVENTS.CHANGE_ONE, QueryStateModel_1.QUERY_STATE_ATTRIBUTES.SORT, function (args) { return _this.handleQueryStateChanged(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (args) { return _this.handleQuerySuccess(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function (args) { return _this.handleQueryError(args); });\n\t        var clickAction = function () { return _this.handleClick(); };\n\t        _this.bind.on(_this.element, 'click', clickAction);\n\t        _this.bind.on(_this.element, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, clickAction));\n\t        _this.element.setAttribute('tabindex', '0');\n\t        if (Utils_1.Utils.isNonEmptyString(_this.options.caption)) {\n\t            Dom_1.$$(_this.element).text(_this.options.caption);\n\t        }\n\t        if (_this.isToggle()) {\n\t            _this.element.innerHTML += '<span class=\"coveo-icon\" />';\n\t        }\n\t        _this.updateAppearance();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Selects the Sort component. Triggers a new query if selecting the component changes the current\n\t     * {@link Sort.options.sortCriteria} (if it is toggled).\n\t     * @param direction The sort direction. Can be either `ascending` or `descending`.\n\t     */\n\t    Sort.prototype.select = function (direction) {\n\t        if (direction) {\n\t            this.currentCriteria = _.find(this.options.sortCriteria, function (criteria) {\n\t                return criteria.direction == direction;\n\t            });\n\t        }\n\t        else if (Utils_1.Utils.exists(this.currentCriteria)) {\n\t            var indexOfCurrentCriteria = _.indexOf(this.options.sortCriteria, this.currentCriteria);\n\t            Assert_1.Assert.check(indexOfCurrentCriteria >= 0);\n\t            this.currentCriteria = this.options.sortCriteria[(indexOfCurrentCriteria + 1) % this.options.sortCriteria.length];\n\t        }\n\t        else {\n\t            this.currentCriteria = this.options.sortCriteria[0];\n\t        }\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.sort, this.currentCriteria.toString());\n\t    };\n\t    Sort.prototype.enable = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-tab-disabled');\n\t        this.update();\n\t        _super.prototype.enable.call(this);\n\t    };\n\t    Sort.prototype.disable = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-tab-disabled');\n\t        _super.prototype.disable.call(this);\n\t    };\n\t    /**\n\t     * Gets the current {@link Sort.options.sortCriteria}.\n\t     * @returns {SortCriteria}\n\t     */\n\t    Sort.prototype.getCurrentCriteria = function () {\n\t        return this.currentCriteria;\n\t    };\n\t    /**\n\t     * Indicates whether the name of any of the {@link Sort.options.sortCriteria} matches the argument.\n\t     * @param sortId The sort criteria name to look for (e.g., `date descending`).\n\t     */\n\t    Sort.prototype.match = function (sortId) {\n\t        return _.any(this.options.sortCriteria, function (sortCriteria) { return sortId == sortCriteria.toString(); });\n\t    };\n\t    Sort.prototype.handleQueryStateChanged = function (data) {\n\t        this.update();\n\t    };\n\t    Sort.prototype.update = function () {\n\t        // Basically, if the criteria in the model fits with one of ours, it'll become our active criteria\n\t        var sortCriteria = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.sort);\n\t        if (Utils_1.Utils.isNonEmptyString(sortCriteria)) {\n\t            var criteriaFromModel = SortCriteria_ts_1.SortCriteria.parse(sortCriteria);\n\t            this.currentCriteria = _.find(this.options.sortCriteria, function (criteria) { return criteriaFromModel.equals(criteria); });\n\t        }\n\t        else {\n\t            this.currentCriteria = null;\n\t        }\n\t        this.updateAppearance();\n\t    };\n\t    Sort.prototype.handleBuildingQuery = function (data) {\n\t        Assert_1.Assert.exists(data);\n\t        var sort = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.sort);\n\t        if (sort == QueryStateModel_1.QueryStateModel.defaultAttributes.sort || this.isSelected()) {\n\t            if (this.currentCriteria) {\n\t                this.currentCriteria.putInQueryBuilder(data.queryBuilder);\n\t            }\n\t        }\n\t    };\n\t    Sort.prototype.handleQuerySuccess = function (data) {\n\t        if (data.results.results.length == 0) {\n\t            Dom_1.$$(this.element).addClass('coveo-sort-hidden');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).removeClass('coveo-sort-hidden');\n\t        }\n\t    };\n\t    Sort.prototype.handleQueryError = function (data) {\n\t        Dom_1.$$(this.element).addClass('coveo-sort-hidden');\n\t    };\n\t    Sort.prototype.handleClick = function () {\n\t        var _this = this;\n\t        var oldCriteria = this.currentCriteria;\n\t        this.select();\n\t        if (oldCriteria != this.currentCriteria) {\n\t            this.queryController.deferExecuteQuery({\n\t                beforeExecuteQuery: function () { return _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.resultsSort, { resultsSortBy: _this.currentCriteria.sort + _this.currentCriteria.direction }); }\n\t            });\n\t        }\n\t    };\n\t    Sort.prototype.isToggle = function () {\n\t        return this.options.sortCriteria.length > 1;\n\t    };\n\t    Sort.prototype.isSelected = function () {\n\t        return Utils_1.Utils.exists(this.currentCriteria);\n\t    };\n\t    Sort.prototype.updateAppearance = function () {\n\t        Dom_1.$$(this.element).toggleClass('coveo-selected', this.isSelected());\n\t        if (this.isToggle()) {\n\t            var direction = this.currentCriteria ? this.currentCriteria.direction : this.options.sortCriteria[0].direction;\n\t            Dom_1.$$(this.element).toggleClass('coveo-ascending', direction == 'ascending');\n\t        }\n\t    };\n\t    return Sort;\n\t}(Component_1.Component));\n\tSort.ID = 'Sort';\n\t/**\n\t * Options for the component\n\t * @componentOptions\n\t */\n\tSort.options = {\n\t    /**\n\t     * Specifies the criterion (or criteria) for sorting.\n\t     *\n\t     * The possible criteria are:\n\t     * - `relevancy`\n\t     * - `date`\n\t     * - `qre`\n\t     * - `@fieldname` (replace `fieldname` with an actual field name (e.g., `@size`)\n\t     *\n\t     * You can also specify a direction (`ascending` or `descending`), for example `date ascending`.\n\t     *\n\t     * You can pass an array containing multiple criteria to the Sort component.\n\t     * If you specify multiple criteria, all criteria must have the same direction (either `ascending` or\n\t     * `descending`).\n\t     * You can only use the `date` and `@fieldname` criteria when specifying multiple criteria.\n\t     * Multiple criteria are evaluated in the order you specify them.\n\t     *\n\t     * It is necessary to specify a value for this option in order for this component to work.\n\t     */\n\t    sortCriteria: ComponentOptions_1.ComponentOptions.buildCustomListOption(function (values) {\n\t        return _.map(values, function (criteria) {\n\t            if (typeof criteria === 'string') {\n\t                return SortCriteria_ts_1.SortCriteria.parse(criteria);\n\t            }\n\t            else {\n\t                return criteria;\n\t            }\n\t        });\n\t    }, { required: true }),\n\t    /**\n\t     * Specifies the caption to display on the element.\n\t     *\n\t     * If you do not specify a value for this option, the component uses the tag body of the element.\n\t     */\n\t    caption: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ required: true })\n\t};\n\texports.Sort = Sort;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Sort);\n\n\n/***/ },\n/* 243 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n\t * Search API (see [Trigger](https://developers.coveo.com/x/lIM9AQ)) in the query pipeline (see\n\t * [Managing the Query Pipeline](https://developers.coveo.com/x/KYOy)).\n\t */\n\tvar Triggers = (function (_super) {\n\t    __extends(Triggers, _super);\n\t    /**\n\t     * Creates a new Triggers component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Triggers component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param _window The window on which to execute the triggers.\n\t     */\n\t    function Triggers(element, options, bindings, _window) {\n\t        var _this = _super.call(this, element, Triggers.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this._window = _window;\n\t        _this._window = _this._window || window;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Triggers, options);\n\t        Assert_1.Assert.exists(element);\n\t        Assert_1.Assert.exists(_this.options);\n\t        _this.notifications = [];\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, _this.handleProcessNewQueryResults);\n\t        return _this;\n\t    }\n\t    Triggers.prototype.handleProcessNewQueryResults = function (data) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(data);\n\t        Assert_1.Assert.exists(data.results);\n\t        Dom_1.$$(this.element).empty();\n\t        this.notifications.length = 0;\n\t        var showElement = false;\n\t        if (data.results.triggers === undefined) {\n\t            Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n\t            return;\n\t        }\n\t        this.executeTriggers(data.results.triggers, 'notify', function (trigger) {\n\t            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerNotify, {\n\t                notification: trigger.content\n\t            }, _this.element);\n\t            _this.notifications.push(trigger.content);\n\t            _this.element.appendChild(Dom_1.$$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n\t            showElement = true;\n\t        });\n\t        this.executeTriggers(data.results.triggers, 'redirect', function (trigger) {\n\t            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerRedirect, {\n\t                redirectedTo: trigger.content\n\t            }, _this.element);\n\t            _this._window.location.replace(trigger.content);\n\t        }, true);\n\t        this.executeTriggers(data.results.triggers, 'query', function (trigger) {\n\t            _this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, trigger.content);\n\t            _this.queryController.executeQuery({\n\t                beforeExecuteQuery: function () {\n\t                    _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerQuery, {\n\t                        query: trigger.content\n\t                    }, _this.element);\n\t                }\n\t            });\n\t        }, true);\n\t        this.executeTriggers(data.results.triggers, 'execute', function (trigger) {\n\t            try {\n\t                var func = _this._window['' + trigger.content.name];\n\t                if (typeof func === 'function') {\n\t                    var params = _.object(_.map(trigger.content.params, function (value, index) {\n\t                        return ['param' + (index + 1), value];\n\t                    }));\n\t                    params['element'] = _this.element;\n\t                    _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerExecute, {\n\t                        executed: trigger.content.name\n\t                    }, _this.element);\n\t                    func.apply(_this._window, [params]);\n\t                }\n\t                else {\n\t                    _this.logger.error(\"A trigger tried to call the function '\" + trigger.content.name + \"', which doesn't exist.\", _this, data.query, trigger);\n\t                }\n\t            }\n\t            catch (error) {\n\t                _this.logger.error(\"A trigger called the function '\" + trigger.content.name + \"', which threw an error.\", _this, data.query, trigger);\n\t            }\n\t        });\n\t        Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n\t    };\n\t    Triggers.prototype.executeTriggers = function (trigger, type, func, single) {\n\t        if (single === void 0) { single = false; }\n\t        var triggersOfType = _.filter(trigger, function (trigger) {\n\t            return trigger.type == type;\n\t        });\n\t        var oneOrAllTriggers = _.take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n\t        _.each(oneOrAllTriggers, func);\n\t    };\n\t    return Triggers;\n\t}(Component_1.Component));\n\tTriggers.ID = 'Triggers';\n\tTriggers.options = {};\n\texports.Triggers = Triggers;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Triggers);\n\n\n/***/ },\n/* 244 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar RecommendationQuery = (function (_super) {\n\t    __extends(RecommendationQuery, _super);\n\t    function RecommendationQuery(element, options, bindings) {\n\t        var _this = _super.call(this, element, RecommendationQuery.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, RecommendationQuery, options);\n\t        if (_this.element.tagName.toLowerCase() === 'script') {\n\t            try {\n\t                _this.content = Utils_1.Utils.decodeHTMLEntities(Dom_1.$$(_this.element).text());\n\t            }\n\t            catch (e) {\n\t                return _this;\n\t            }\n\t            if (!_.isUndefined(_this.content) && _this.content != '') {\n\t                _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, _this.handleBuildingQuery);\n\t            }\n\t        }\n\t        return _this;\n\t    }\n\t    RecommendationQuery.prototype.handleBuildingQuery = function (data) {\n\t        data.queryBuilder.advancedExpression.add(this.content);\n\t    };\n\t    return RecommendationQuery;\n\t}(Component_1.Component));\n\tRecommendationQuery.ID = 'RecommendationQuery';\n\t/**\n\t * The options for the RecommendationQuery component\n\t * @componentOptions\n\t */\n\tRecommendationQuery.options = {};\n\texports.RecommendationQuery = RecommendationQuery;\n\tInitialization_1.Initialization.registerAutoCreateComponent(RecommendationQuery);\n\n\n/***/ },\n/* 245 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The TemplateLoader component can load one result template into another. You should normally declare any reusable\n\t * result template outside of the {@link ResultList} component. Otherwise, the framework will evaluate the\n\t * `data-condition` of the reusable result template and possibly render it.\n\t *\n\t * **Example:**\n\t *\n\t * ```html\n\t * [ ... ]\n\t *\n\t * <!-- A reusable result template. Note that it is important to declare it outside of the ResultList component. -->\n\t * <script type='text/underscore' class='result-template' id='ReusableTemplate'>\n\t *   <table class='CoveoFieldTable'>\n\t *     <tr data-field='@source' data-caption='Source'></tr>\n\t *     <tr data-field='@percentScore' data-caption='Score'></tr>\n\t *   </table>\n\t * </script>\n\t *\n\t * [ ... ]\n\t *\n\t * <div class=\"CoveoResultList\" data-wait-animation=\"fade\" data-auto-select-fields-to-include=\"true\">\n\t *\n\t *   <!-- A custom result template for Lithium messages. -->\n\t *   <script type='text/underscore' class='result-template' data-condition='raw.filetype == \"lithiummessage\"'>\n\t *     <div>\n\t *       <img class='CoveoIcon' data-small='true'>\n\t *       <a class='CoveoResultLink'></a>\n\t *       <div class='CoveoTemplateLoader' data-template-id='ReusableTemplate'></div>\n\t *     </div>\n\t *   </script>\n\t *\n\t *   <!-- A custom result template for images. -->\n\t *   <script type='text/underscore' class='result-template' data-condition='raw.filetype == \"Image\"'>\n\t *     <div>\n\t *       <img class='CoveoIcon' data-small='true'></img>\n\t *         <a class='CoveoResultLink'>\n\t *           <img class='CoveoThumbnail'>\n\t *         </a>\n\t *       <div class='CoveoTemplateLoader' data-template-id='ReusableTemplate'></div>\n\t *     </div>\n\t *   </script>\n\t * </div>\n\t *\n\t * [ ... ]\n\t * ```\n\t *\n\t * See [Result Templates](https://developers.coveo.com/x/aIGfAQ).\n\t */\n\tvar TemplateLoader = (function (_super) {\n\t    __extends(TemplateLoader, _super);\n\t    /**\n\t     * Creates a new TemplateLoader.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the TemplateLoader component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function TemplateLoader(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, TemplateLoader.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, TemplateLoader, options);\n\t        _this.result = _this.result || _this.resolveResult();\n\t        Assert_1.Assert.exists(_this.result);\n\t        if (_this.options.condition != null) {\n\t            var conditionFunction = new Function('obj', 'with(obj||{}){return ' + _this.options.condition + '}');\n\t            if (conditionFunction(_this.result)) {\n\t                _this.initialize();\n\t            }\n\t        }\n\t        else {\n\t            _this.initialize();\n\t        }\n\t        return _this;\n\t    }\n\t    TemplateLoader.prototype.initialize = function () {\n\t        var _this = this;\n\t        if (this.options.template != null) {\n\t            var initOptions = this.searchInterface.options;\n\t            var initParameters = {\n\t                options: initOptions,\n\t                bindings: this.bindings,\n\t                result: this.result\n\t            };\n\t            var parents = Dom_1.$$(this.element).parents(Component_1.Component.computeCssClassName(TemplateLoader));\n\t            _.each(parents, function (parent) {\n\t                var clone = parent.cloneNode();\n\t                Dom_1.$$(clone).empty();\n\t                var outerHTMLParent = clone.outerHTML;\n\t                Assert_1.Assert.check(outerHTMLParent.indexOf(_this.element.outerHTML) === -1, 'TemplateLoader cannot load a template into itself.');\n\t            });\n\t            this.element.innerHTML = this.options.template.instantiateToString(this.result, {\n\t                checkCondition: false,\n\t                responsiveComponents: this.bindings ? this.bindings.searchInterface.responsiveComponents : null\n\t            });\n\t            Initialization_1.Initialization.automaticallyCreateComponentsInside(this.element, initParameters);\n\t        }\n\t    };\n\t    return TemplateLoader;\n\t}(Component_1.Component));\n\tTemplateLoader.ID = 'TemplateLoader';\n\t/**\n\t * The possible options for a TemplateLoader.\n\t * @componentOptions\n\t */\n\tTemplateLoader.options = {\n\t    /**\n\t     * Specifies how to find the template. This can be either a CSS selector or an HTML `id` attribute.\n\t     *\n\t     * **Examples:**\n\t     *\n\t     * - With a CSS selector: `data-template-selector='.MySelector'`\n\t     * - With an HTML `id`: `data-template-id='MyId'`\n\t     */\n\t    template: ComponentOptions_1.ComponentOptions.buildTemplateOption(),\n\t    /**\n\t     * Specifies the boolean condition that the result must satisfy in order for the template to load.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * `data-condition='percentScore > 80'`\n\t     */\n\t    condition: ComponentOptions_1.ComponentOptions.buildStringOption()\n\t};\n\texports.TemplateLoader = TemplateLoader;\n\tInitialization_1.Initialization.registerAutoCreateComponent(TemplateLoader);\n\n\n/***/ },\n/* 246 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar SuggestionForOmnibox = (function () {\n\t    function SuggestionForOmnibox(structure, onSelect, onTabPress) {\n\t        this.structure = structure;\n\t        this.onSelect = onSelect;\n\t        this.onTabPress = onTabPress;\n\t    }\n\t    SuggestionForOmnibox.prototype.buildOmniboxElement = function (results, args) {\n\t        var element;\n\t        if (results.length != 0) {\n\t            element = Dom_1.$$('div').el;\n\t            if (this.structure.header) {\n\t                var header = this.buildElementHeader();\n\t                element.appendChild(header);\n\t            }\n\t            var rows = this.buildRowElements(results, args);\n\t            _.each(rows, function (row) {\n\t                element.appendChild(row);\n\t            });\n\t        }\n\t        return element;\n\t    };\n\t    SuggestionForOmnibox.prototype.buildElementHeader = function () {\n\t        return Dom_1.$$('div', undefined, this.structure.header.template({\n\t            headerTitle: this.structure.header.title\n\t        })).el;\n\t    };\n\t    SuggestionForOmnibox.prototype.buildRowElements = function (results, args) {\n\t        var _this = this;\n\t        var ret = [];\n\t        _.each(results, function (result) {\n\t            var row = Dom_1.$$('div', undefined, _this.structure.row({\n\t                rawValue: result.value,\n\t                data: DomUtils_1.DomUtils.highlightElement(result.value, args.completeQueryExpression.word)\n\t            })).el;\n\t            Dom_1.$$(row).on('click', function () {\n\t                _this.onSelect.call(_this, result.value, args);\n\t            });\n\t            Dom_1.$$(row).on('keyboardSelect', function () {\n\t                _this.onSelect.call(_this, result.value, args);\n\t            });\n\t            Dom_1.$$(row).on('tabSelect', function () {\n\t                _this.onTabPress.call(_this, result.value, args);\n\t            });\n\t            ret.push(row);\n\t        });\n\t        return ret;\n\t    };\n\t    return SuggestionForOmnibox;\n\t}());\n\texports.SuggestionForOmnibox = SuggestionForOmnibox;\n\n\n/***/ },\n/* 247 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SuggestionForOmnibox_1 = __webpack_require__(246);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar SearchInterface_1 = __webpack_require__(110);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The AnalyticsSuggestion component provides query suggestions based on the queries that a Coveo Analytics service most\n\t * commonly logs.\n\t *\n\t * This component orders possible query suggestions by their respective number of successful document views, thus\n\t * prioritizing the most relevant query suggestions. Consequently, when better options are available, this component\n\t * does not suggest queries resulting in no clicks from users or requiring refinements.\n\t *\n\t * The query suggestions appear in the {@link Omnibox} Component. The AnalyticsSuggestion component strongly\n\t * relates to the {@link Analytics} component. While a user is typing in a query box, the AnalyticsSuggestion component\n\t * allows them to see and select the most commonly used and relevant queries.\n\t */\n\tvar AnalyticsSuggestions = (function (_super) {\n\t    __extends(AnalyticsSuggestions, _super);\n\t    /**\n\t     * Creates a new AnalyticsSuggestions component.\n\t     *\n\t     * Also binds event handlers so that when a user selects a suggestion, an `omniboxFromLink` usage analytics event is\n\t     * logged if the suggestion comes from a standalone search box, or an `omniboxAnalytics` usage analytics\n\t     * event is logged otherwise.\n\t     *\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the AnalyticsSuggestions component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function AnalyticsSuggestions(element, options, bindings) {\n\t        var _this = _super.call(this, element, AnalyticsSuggestions.ID, bindings) || this;\n\t        _this.options = options;\n\t        _this.partialQueries = [];\n\t        _this.lastSuggestions = [];\n\t        _this.resultsToBuildWith = [];\n\t        if (_this.options && 'omniboxSuggestionOptions' in _this.options) {\n\t            _this.options = _.extend(_this.options, _this.options['omniboxSuggestionOptions']);\n\t        }\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, AnalyticsSuggestions, _this.options);\n\t        var rowTemplate = function (toRender) {\n\t            var rowElement = Dom_1.$$('div', {\n\t                className: 'magic-box-suggestion coveo-omnibox-selectable coveo-top-analytics-suggestion-row'\n\t            });\n\t            if (toRender['data']) {\n\t                rowElement.el.innerHTML = toRender['data'];\n\t            }\n\t            return rowElement.el.outerHTML;\n\t        };\n\t        _this.options.onSelect = _this.options.onSelect || _this.onRowSelection;\n\t        var suggestionStructure;\n\t        if (_this.searchInterface.isNewDesign()) {\n\t            suggestionStructure = {\n\t                row: rowTemplate\n\t            };\n\t        }\n\t        else {\n\t            var headerTemplate = function () {\n\t                var headerElement = Dom_1.$$('div', {\n\t                    className: 'coveo-top-analytics-suggestion-header'\n\t                });\n\t                var iconElement = Dom_1.$$('span', {\n\t                    className: 'coveo-icon-top-analytics'\n\t                });\n\t                var captionElement = Dom_1.$$('span', {\n\t                    className: 'coveo-caption'\n\t                });\n\t                if (_this.options.headerTitle) {\n\t                    captionElement.text(_this.options.headerTitle);\n\t                }\n\t                headerElement.append(iconElement.el);\n\t                headerElement.append(captionElement.el);\n\t                return headerElement.el.outerHTML;\n\t            };\n\t            suggestionStructure = {\n\t                header: { template: headerTemplate, title: _this.options.headerTitle },\n\t                row: rowTemplate\n\t            };\n\t        }\n\t        _this.suggestionForOmnibox = new SuggestionForOmnibox_1.SuggestionForOmnibox(suggestionStructure, function (value, args) {\n\t            _this.options.onSelect.call(_this, value, args);\n\t        }, function (value, args) {\n\t            _this.onRowTab.call(_this, value, args);\n\t        });\n\t        _this.bind.onRootElement(OmniboxEvents_1.OmniboxEvents.populateOmnibox, function (args) { return _this.handlePopulateOmnibox(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function () { return _this.partialQueries = []; });\n\t        return _this;\n\t    }\n\t    AnalyticsSuggestions.prototype.selectSuggestion = function (suggestion) {\n\t        if (this.currentlyDisplayedSuggestions) {\n\t            if (isNaN(suggestion)) {\n\t                if (this.currentlyDisplayedSuggestions[suggestion]) {\n\t                    Dom_1.$$(this.currentlyDisplayedSuggestions[suggestion].element).trigger('click');\n\t                }\n\t            }\n\t            else {\n\t                var currentlySuggested = _.findWhere(this.currentlyDisplayedSuggestions, { pos: suggestion });\n\t                if (currentlySuggested) {\n\t                    Dom_1.$$(currentlySuggested.element).trigger('click');\n\t                }\n\t            }\n\t        }\n\t    };\n\t    AnalyticsSuggestions.prototype.handlePopulateOmnibox = function (args) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(args);\n\t        var promise = new Promise(function (resolve, reject) {\n\t            var searchPromise = _this.usageAnalytics.getTopQueries({\n\t                pageSize: _this.options.numberOfSuggestions,\n\t                queryText: args.completeQueryExpression.word\n\t            });\n\t            searchPromise.then(function (results) {\n\t                _this.resultsToBuildWith = _.map(results, function (result) {\n\t                    return {\n\t                        value: result\n\t                    };\n\t                });\n\t                _this.lastSuggestions = results;\n\t                if (!_.isEmpty(_this.resultsToBuildWith) && args.completeQueryExpression.word != '') {\n\t                    _this.partialQueries.push(args.completeQueryExpression.word);\n\t                }\n\t                var element = _this.suggestionForOmnibox.buildOmniboxElement(_this.resultsToBuildWith, args);\n\t                _this.currentlyDisplayedSuggestions = {};\n\t                if (element) {\n\t                    _.map(Dom_1.$$(element).findAll('.coveo-omnibox-selectable'), function (selectable, i) {\n\t                        _this.currentlyDisplayedSuggestions[Dom_1.$$(selectable).text()] = {\n\t                            element: selectable,\n\t                            pos: i\n\t                        };\n\t                    });\n\t                }\n\t                resolve({\n\t                    element: element,\n\t                    zIndex: _this.options.omniboxZIndex\n\t                });\n\t            });\n\t            searchPromise.catch(function () {\n\t                resolve({\n\t                    element: undefined\n\t                });\n\t            });\n\t        });\n\t        args.rows.push({ deferred: promise });\n\t    };\n\t    AnalyticsSuggestions.prototype.onRowSelection = function (value, args) {\n\t        args.clear();\n\t        args.closeOmnibox();\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, value);\n\t        this.usageAnalytics.logSearchEvent(this.getOmniboxAnalyticsEventCause(), {\n\t            partialQueries: this.cleanCustomData(this.partialQueries),\n\t            suggestionRanking: _.indexOf(_.pluck(this.resultsToBuildWith, 'value'), value),\n\t            suggestions: this.cleanCustomData(this.lastSuggestions),\n\t            partialQuery: args.completeQueryExpression.word\n\t        });\n\t        this.queryController.executeQuery();\n\t    };\n\t    AnalyticsSuggestions.prototype.onRowTab = function (value, args) {\n\t        args.clear();\n\t        args.closeOmnibox();\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, \"\" + value);\n\t        this.usageAnalytics.logCustomEvent(this.getOmniboxAnalyticsEventCause(), {\n\t            partialQueries: this.cleanCustomData(this.partialQueries),\n\t            suggestionRanking: _.indexOf(_.pluck(this.resultsToBuildWith, 'value'), value),\n\t            suggestions: this.cleanCustomData(this.lastSuggestions),\n\t            partialQuery: args.completeQueryExpression.word\n\t        }, this.element);\n\t    };\n\t    AnalyticsSuggestions.prototype.cleanCustomData = function (toClean, rejectLength) {\n\t        if (rejectLength === void 0) { rejectLength = 256; }\n\t        // Filter out only consecutive values that are the identical\n\t        toClean = _.compact(_.filter(toClean, function (partial, pos, array) {\n\t            return pos === 0 || partial !== array[pos - 1];\n\t        }));\n\t        // Custom dimensions cannot be an array in analytics service: Send a string joined by ; instead.\n\t        // Need to replace ;\n\t        toClean = _.map(toClean, function (partial) {\n\t            return partial.replace(/;/g, '');\n\t        });\n\t        // Reduce right to get the last X words that adds to less then rejectLength\n\t        var reducedToRejectLengthOrLess = [];\n\t        _.reduceRight(toClean, function (memo, partial) {\n\t            var totalSoFar = memo + partial.length;\n\t            if (totalSoFar <= rejectLength) {\n\t                reducedToRejectLengthOrLess.push(partial);\n\t            }\n\t            return totalSoFar;\n\t        }, 0);\n\t        toClean = reducedToRejectLengthOrLess.reverse();\n\t        var ret = toClean.join(';');\n\t        // analytics service can store max 256 char in a custom event\n\t        // if we're over that, call cleanup again with an arbitrary 10 less char accepted\n\t        if (ret.length >= 256) {\n\t            return this.cleanCustomData(toClean, rejectLength - 10);\n\t        }\n\t        return toClean.join(';');\n\t    };\n\t    AnalyticsSuggestions.prototype.getOmniboxAnalyticsEventCause = function () {\n\t        if (this.searchInterface instanceof SearchInterface_1.StandaloneSearchInterface) {\n\t            return AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxFromLink;\n\t        }\n\t        return AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxAnalytics;\n\t    };\n\t    return AnalyticsSuggestions;\n\t}(Component_1.Component));\n\tAnalyticsSuggestions.ID = 'AnalyticsSuggestions';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tAnalyticsSuggestions.options = {\n\t    /**\n\t     * Specifies the z-index position at which the query suggestions render themselves in the {@link Omnibox}\n\t     * component. Higher values are placed first.\n\t     *\n\t     * Default value is `52` and minimum value is `0`.\n\t     */\n\t    omniboxZIndex: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 52, min: 0 }),\n\t    /**\n\t     * Specifies the title of the query suggestions group in the {@link Omnibox} component. This option is not available\n\t     * when using the default Lightning Friendly Theme (see\n\t     * [Lightning Friendly Theme](https://developers.coveo.com/x/Y4EAAg)).\n\t     *\n\t     * Default value is the localized string for `\"Suggested Queries\"`.\n\t     */\n\t    headerTitle: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: Strings_1.l('SuggestedQueries') }),\n\t    /**\n\t     * Specifies the number of query suggestions to request and display in the {@link Omnibox} component.\n\t     *\n\t     * Default value is `5` and minimum value is `1`.\n\t     */\n\t    numberOfSuggestions: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 })\n\t};\n\texports.AnalyticsSuggestions = AnalyticsSuggestions;\n\tInitialization_1.Initialization.registerAutoCreateComponent(AnalyticsSuggestions);\n\n\n/***/ },\n/* 248 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar SuggestionForOmnibox_1 = __webpack_require__(246);\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The FieldSuggestions component provides query suggestions based on a particular facet field. For example, you could\n\t * use this component to provide auto-complete suggestions while the end user is typing a document\n\t * title.\n\t *\n\t * The query suggestions that this component provides appear in the {@link Omnibox} component.\n\t */\n\tvar FieldSuggestions = (function (_super) {\n\t    __extends(FieldSuggestions, _super);\n\t    /**\n\t     * Creates a new FieldSuggestions component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FieldSuggestions component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function FieldSuggestions(element, options, bindings) {\n\t        var _this = _super.call(this, element, FieldSuggestions.ID, bindings) || this;\n\t        _this.options = options;\n\t        if (_this.options && 'omniboxSuggestionOptions' in _this.options) {\n\t            _this.options = _.extend(_this.options, _this.options['omniboxSuggestionOptions']);\n\t        }\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, FieldSuggestions, options);\n\t        Assert_1.Assert.check(Utils_1.Utils.isCoveoField(_this.options.field), _this.options.field + ' is not a valid field');\n\t        _this.options.onSelect = _this.options.onSelect || _this.onRowSelection;\n\t        var rowTemplate = function (toRender) {\n\t            var rowElement = Dom_1.$$('div', {\n\t                className: 'magic-box-suggestion coveo-omnibox-selectable coveo-top-field-suggestion-row'\n\t            });\n\t            if (toRender['data']) {\n\t                rowElement.el.innerHTML = toRender['data'];\n\t            }\n\t            return rowElement.el.outerHTML;\n\t        };\n\t        var suggestionStructure;\n\t        if (_this.searchInterface.isNewDesign()) {\n\t            suggestionStructure = {\n\t                row: rowTemplate\n\t            };\n\t        }\n\t        else {\n\t            var headerTemplate = function () {\n\t                var headerElement = Dom_1.$$('div', {\n\t                    className: 'coveo-top-field-suggestion-header'\n\t                });\n\t                var iconElement = Dom_1.$$('span', {\n\t                    className: 'coveo-icon-top-field'\n\t                });\n\t                var captionElement = Dom_1.$$('span', {\n\t                    className: 'coveo-caption'\n\t                });\n\t                if (_this.options.headerTitle) {\n\t                    captionElement.text(_this.options.headerTitle);\n\t                }\n\t                headerElement.append(iconElement.el);\n\t                headerElement.append(captionElement.el);\n\t                return headerElement.el.outerHTML;\n\t            };\n\t            suggestionStructure = {\n\t                header: { template: headerTemplate, title: _this.options.headerTitle },\n\t                row: rowTemplate\n\t            };\n\t        }\n\t        _this.suggestionForOmnibox = new SuggestionForOmnibox_1.SuggestionForOmnibox(suggestionStructure, function (value, args) {\n\t            _this.options.onSelect.call(_this, value, args);\n\t        }, function (value, args) {\n\t            _this.onRowTab(value, args);\n\t        });\n\t        _this.bind.onRootElement(OmniboxEvents_1.OmniboxEvents.populateOmnibox, function (args) { return _this.handlePopulateOmnibox(args); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Selects a currently displayed query suggestion. This implies that at least one suggestion must have been returned\n\t     * at least once.\n\t     * @param suggestion Either a number (0-based index position of the query suggestion to select) or a string that\n\t     * matches the suggestion to select.\n\t     */\n\t    FieldSuggestions.prototype.selectSuggestion = function (suggestion) {\n\t        if (this.currentlyDisplayedSuggestions) {\n\t            if (isNaN(suggestion)) {\n\t                if (this.currentlyDisplayedSuggestions[suggestion]) {\n\t                    Dom_1.$$(this.currentlyDisplayedSuggestions[suggestion].element).trigger('click');\n\t                }\n\t            }\n\t            else {\n\t                var currentlySuggested = _.findWhere(this.currentlyDisplayedSuggestions, { pos: suggestion });\n\t                if (currentlySuggested) {\n\t                    Dom_1.$$(currentlySuggested.element).trigger('click');\n\t                }\n\t            }\n\t        }\n\t    };\n\t    FieldSuggestions.prototype.handlePopulateOmnibox = function (args) {\n\t        var _this = this;\n\t        Assert_1.Assert.exists(args);\n\t        var valueToSearch = args.completeQueryExpression.word;\n\t        var promise = new Promise(function (resolve) {\n\t            _this.queryController.getEndpoint().listFieldValues(_this.buildListFieldValueRequest(valueToSearch)).then(function (results) {\n\t                var element = _this.suggestionForOmnibox.buildOmniboxElement(results, args);\n\t                _this.currentlyDisplayedSuggestions = {};\n\t                if (element) {\n\t                    _.map(Dom_1.$$(element).findAll('.coveo-omnibox-selectable'), function (selectable, i) {\n\t                        _this.currentlyDisplayedSuggestions[Dom_1.$$(selectable).text()] = {\n\t                            element: selectable,\n\t                            pos: i\n\t                        };\n\t                    });\n\t                    resolve({\n\t                        element: element,\n\t                        zIndex: _this.options.omniboxZIndex\n\t                    });\n\t                }\n\t                else {\n\t                    resolve({\n\t                        element: undefined\n\t                    });\n\t                }\n\t            }).catch(function () {\n\t                resolve({\n\t                    element: undefined\n\t                });\n\t            });\n\t        });\n\t        args.rows.push({\n\t            deferred: promise\n\t        });\n\t    };\n\t    FieldSuggestions.prototype.onRowSelection = function (value, args) {\n\t        args.clear();\n\t        args.closeOmnibox();\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, value);\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxField, {});\n\t        this.queryController.executeQuery();\n\t    };\n\t    FieldSuggestions.prototype.onRowTab = function (value, args) {\n\t        args.clear();\n\t        args.closeOmnibox();\n\t        this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, \"\" + value);\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.omniboxField, {}, this.element);\n\t    };\n\t    FieldSuggestions.prototype.buildListFieldValueRequest = function (valueToSearch) {\n\t        return {\n\t            field: this.options.field,\n\t            ignoreAccents: true,\n\t            sortCriteria: 'occurrences',\n\t            maximumNumberOfValues: this.options.numberOfSuggestions,\n\t            patternType: 'Wildcards',\n\t            pattern: '*' + valueToSearch + '*',\n\t            queryOverride: this.options.queryOverride\n\t        };\n\t    };\n\t    return FieldSuggestions;\n\t}(Component_1.Component));\n\tFieldSuggestions.ID = 'FieldSuggestions';\n\t/**\n\t * @componentOptions\n\t */\n\tFieldSuggestions.options = {\n\t    /**\n\t     * Specifies the field from which to provide suggestions.\n\t     *\n\t     * Specifying a value for this option is required for the FieldSuggestions component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({ required: true }),\n\t    /**\n\t     * Specifies a query override to apply when retrieving suggestions. You can use any valid query expression (see\n\t     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n\t     *\n\t     * Default value is `''`, which means that the component applies no query override by default.\n\t     */\n\t    queryOverride: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: '' }),\n\t    /**\n\t     * Specifies the z-index position at which the suggestions render themselves in the {@link Omnibox}.\n\t     *\n\t     * When there are multiple suggestion providers (e.g., {@link Facet} or {@link AnalyticsSuggestions}), components\n\t     * with a higher omniboxZIndex values render themselves first.\n\t     *\n\t     * Default value is `51`. Minimum value is `0`.\n\t     */\n\t    omniboxZIndex: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 51, min: 0 }),\n\t    /**\n\t     * Specifies the title of the result suggestions group in the {@link Omnibox} component. This option is not\n\t     * available when using the default Lightning Friendly Theme (see\n\t     * [Lightning Friendly Theme](https://developers.coveo.com/x/Y4EAAg)).\n\t     *\n\t     * Default value is the localized string for `\"SuggestedResults\"`.\n\t     */\n\t    headerTitle: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption({ defaultValue: Strings_1.l('SuggestedResults') }),\n\t    /**\n\t     * Specifies the number of suggestions to render in the {@link Omnibox}.\n\t     *\n\t     * Default value is `5`. Minimum value is `1`.\n\t     */\n\t    numberOfSuggestions: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 }),\n\t    /**\n\t     * Specifies the event handler function to execute when the end user selects a suggested value un the\n\t     * {@link Omnibox}. By default, the query box text is replaced by what the end user selected and a new query is\n\t     * executed. You can, however, replace this default behavior by providing a callback function to execute when the\n\t     * value is selected.\n\t     *\n\t     * You can only set this option in the `init` call of your search interface. You cannot set it directly in the\n\t     * markup as an HTML attribute.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * // You can call the init script using \"pure\" JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    FieldSuggestions : {\n\t     *      omniboxSuggestionOptions : {\n\t     *        onSelect : function(valueSelected, populateOmniBoxEventArgs){\n\t     *          // Do something special when a value is selected.\n\t     *          // You receive the selected value as the first argument, and the Omnibox object as the second argument.\n\t     *        }\n\t     *      }\n\t     *    }\n\t     * })\n\t     *\n\t     * // Or you can call the init script using the jQuery extension:\n\t     * $('#mySearch').coveo('init', {\n\t     *    FieldSuggestions : {\n\t     *      omniboxSuggestionOptions : {\n\t     *        onSelect : function(valueSelected, populateOmniBoxEventArgs){\n\t     *          // Do something special when a value is selected.\n\t     *          // You receive the selected value as the first argument, and the Omnibox object as the second argument.\n\t     *        }\n\t     *      }\n\t     *    }\n\t     * })\n\t     * ```\n\t     */\n\t    onSelect: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    })\n\t};\n\texports.FieldSuggestions = FieldSuggestions;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FieldSuggestions);\n\n\n/***/ },\n/* 249 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar DomUtils_1 = __webpack_require__(62);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The AuthenticationProvider component arranges for queries to execute with an identity that the user obtains using an\n\t * Authentication Provider configured on the Coveo Search API\n\t * (see [On-Premises SharePoint Claims Authentication](https://developers.coveo.com/x/hQLL)).\n\t *\n\t * When necessary, this component handles redirecting the browser to the address that starts the authentication process.\n\t *\n\t * Using the standard `data-tab` attribute, you can enable the AuthenticationProvider component only for tabs requiring\n\t * authentication (see {@link Tab}).\n\t */\n\tvar AuthenticationProvider = (function (_super) {\n\t    __extends(AuthenticationProvider, _super);\n\t    /**\n\t     * Creates a new AuthenticationProvider component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the AuthenticationProvider component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function AuthenticationProvider(element, options, bindings, _window) {\n\t        if (options === void 0) { options = {}; }\n\t        var _this = _super.call(this, element, AuthenticationProvider.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this._window = _window;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, AuthenticationProvider, options);\n\t        Assert_1.Assert.exists(_this.options.name);\n\t        _this.handlers = [];\n\t        _this._window = _this._window || window;\n\t        _this.redirectCount = 0;\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingCallOptions, _this.handleBuildingCallOptions);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, _this.handleQueryError);\n\t        _this.bind.onRootElement(InitializationEvents_1.InitializationEvents.nuke, _this.handleNuke);\n\t        _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t            args.menuData.push({\n\t                text: Strings_1.l('Reauthenticate', _this.options.caption),\n\t                className: 'coveo-authentication-provider',\n\t                onOpen: function () { return _this.authenticateWithProvider(); }\n\t            });\n\t        });\n\t        return _this;\n\t    }\n\t    AuthenticationProvider.prototype.handleBuildingCallOptions = function (args) {\n\t        args.options.authentication.push(this.options.name);\n\t    };\n\t    AuthenticationProvider.prototype.handleQueryError = function (args) {\n\t        var missingAuthError = args.error;\n\t        if (missingAuthError.isMissingAuthentication && missingAuthError.provider === this.options.name && this.redirectCount < 2 && this.redirectCount !== -1) {\n\t            ++this.redirectCount;\n\t            this.authenticateWithProvider();\n\t        }\n\t        else {\n\t            this.logger.error('The AuthenticationProvider is in a redirect loop. This may be due to a back-end configuration problem.');\n\t            this.redirectCount = -1;\n\t        }\n\t    };\n\t    AuthenticationProvider.prototype.authenticateWithProvider = function () {\n\t        this.options.useIFrame ? this.authenticateWithIFrame() : this.redirectToAuthenticationProvider();\n\t    };\n\t    AuthenticationProvider.prototype.redirectToAuthenticationProvider = function () {\n\t        this.logger.info(\"Redirecting to authentication provider \" + this.options.name);\n\t        this._window.location.href = this.getAuthenticationProviderUriForRedirect();\n\t    };\n\t    AuthenticationProvider.prototype.authenticateWithIFrame = function () {\n\t        this.logger.info(\"Using iframe to retrieve authentication for provider \" + this.options.name);\n\t        var iframe = Dom_1.$$('iframe', {\n\t            'src': this.getAuthenticationProviderUriForIFrame()\n\t        }).el;\n\t        var modalbox;\n\t        modalbox = this.options.showIFrame ? this.createPopupForVisibleIFrame(iframe) : this.createPopupForWaitMessage(iframe);\n\t        var handler = this.createHandler(modalbox, iframe);\n\t        Dom_1.$$(this._window).one('message', handler);\n\t        this.handlers.push(handler);\n\t    };\n\t    AuthenticationProvider.prototype.createHandler = function (modalbox, iframe) {\n\t        var _this = this;\n\t        return function () {\n\t            modalbox.close();\n\t            Dom_1.$$(iframe).detach();\n\t            _this.logger.info(\"Got authentication for provider \" + _this.options.name + \"; retrying query.\");\n\t            _this.queryController.executeQuery();\n\t        };\n\t    };\n\t    AuthenticationProvider.prototype.handleNuke = function () {\n\t        var _this = this;\n\t        _.each(this.handlers, function (handler) { return Dom_1.$$(_this._window).off('message', handler); });\n\t    };\n\t    AuthenticationProvider.prototype.createPopupForWaitMessage = function (iframe) {\n\t        var popup = Dom_1.$$('div', {\n\t            className: 'coveo-waiting-for-authentication-popup'\n\t        }, DomUtils_1.DomUtils.getBasicLoadingAnimation()).el;\n\t        Dom_1.$$(iframe).hide();\n\t        document.body.appendChild(iframe);\n\t        ExternalModulesShim_1.ModalBox.open(popup, {\n\t            title: Strings_1.l('Authenticating', this.options.caption)\n\t        });\n\t        return ExternalModulesShim_1.ModalBox;\n\t    };\n\t    AuthenticationProvider.prototype.createPopupForVisibleIFrame = function (iframe) {\n\t        Dom_1.$$(iframe).addClass('coveo-authentication-iframe');\n\t        var popup = Dom_1.$$('div', {}, iframe).el;\n\t        ExternalModulesShim_1.ModalBox.open(popup, {\n\t            title: Strings_1.l('Authenticating', this.options.caption),\n\t            className: 'coveo-authentication-popup'\n\t        });\n\t        return ExternalModulesShim_1.ModalBox;\n\t    };\n\t    AuthenticationProvider.prototype.getAuthenticationProviderUriForRedirect = function () {\n\t        return this.queryController.getEndpoint().getAuthenticationProviderUri(this.options.name, this._window.location.href, undefined);\n\t    };\n\t    AuthenticationProvider.prototype.getAuthenticationProviderUriForIFrame = function () {\n\t        return this.queryController.getEndpoint().getAuthenticationProviderUri(this.options.name, undefined, 'success');\n\t    };\n\t    return AuthenticationProvider;\n\t}(Component_1.Component));\n\tAuthenticationProvider.ID = 'AuthenticationProvider';\n\t/**\n\t * The options for the component.\n\t * @componentOptions\n\t */\n\tAuthenticationProvider.options = {\n\t    /**\n\t     * Specifies the name of the authentication provider.\n\t     *\n\t     * See [Windows Service Configuration File](https://developers.coveo.com/x/OQMv).\n\t     */\n\t    name: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the friendly name of the authentication provider. This is the name that you want to display in the user\n\t     * interface when a user is logging in.\n\t     *\n\t     * Default value is the value set to {@link AuthenticationProvider.options.name}.\n\t     */\n\t    caption: ComponentOptions_1.ComponentOptions.buildStringOption({ postProcessing: function (value, options) { return value || options.name; } }),\n\t    /**\n\t     * Specifies whether to use an `<iframe>` to host the chain of redirections that make up the authentication\n\t     * process.\n\t     *\n\t     * Default value is `false`.\n\t     *\n\t     * Using an `<iframe>` prevents leaving the search page as part of the authentication process. However, some login\n\t     * providers will refuse to load in an `<iframe>`.\n\t     */\n\t    useIFrame: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, attrName: 'data-use-iframe' }),\n\t    /**\n\t     * If the {@link AuthenticationProvider.options.useIFrame} is set to `true`, specifies whether to make the\n\t     * authentication `<iframe>` visible to the user (inside a popup).\n\t     *\n\t     * Default value is `true`.\n\t     *\n\t     * When the underlying authentication provider requires no user interaction (for example, when a user authenticates\n\t     * using Windows Authentication along with SharePoint Claims), setting this option to `false` reduces the visual\n\t     * impact of the authentication process.\n\t     *\n\t     */\n\t    showIFrame: ComponentOptions_1.ComponentOptions.buildBooleanOption({\n\t        defaultValue: true,\n\t        attrName: 'data-show-iframe',\n\t        depend: 'useIFrame'\n\t    })\n\t};\n\texports.AuthenticationProvider = AuthenticationProvider;\n\tInitialization_1.Initialization.registerAutoCreateComponent(AuthenticationProvider);\n\n\n/***/ },\n/* 250 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar StringUtils_1 = __webpack_require__(64);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ResultTagging component lists the current tag field values of its associated result and renders a control that\n\t * allows the end user to add values to a tag field.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar ResultTagging = (function (_super) {\n\t    __extends(ResultTagging, _super);\n\t    /**\n\t     * Creates a new ResultTagging component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultTagging component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function ResultTagging(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ResultTagging.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultTagging, options);\n\t        _this.result = result || _this.resolveResult();\n\t        Assert_1.Assert.exists(_this.componentOptionsModel);\n\t        Assert_1.Assert.exists(_this.result);\n\t        if (!_this.options.field) {\n\t            _this.logger.error('You must specify a field to the ResultTagging component');\n\t            return _this;\n\t        }\n\t        var fieldValue = Utils_1.Utils.getFieldValue(_this.result, _this.options.field);\n\t        if (fieldValue && Utils_1.Utils.isNonEmptyString(fieldValue)) {\n\t            _this.tags = fieldValue.split(';');\n\t        }\n\t        else if (fieldValue && Utils_1.Utils.isNonEmptyArray(fieldValue)) {\n\t            _this.tags = fieldValue;\n\t        }\n\t        else {\n\t            _this.tags = [];\n\t        }\n\t        _this.tags = _.map(_this.tags, function (t) {\n\t            return t.trim();\n\t        });\n\t        _this.tagZone = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-tag-zone'\n\t        }).el;\n\t        element.appendChild(_this.tagZone);\n\t        element.appendChild(_this.buildTagIcon());\n\t        _this.autoCompleteZone = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-auto-complete-zone'\n\t        }).el;\n\t        element.appendChild(_this.autoCompleteZone);\n\t        _this.autoCompleteZone.appendChild(_this.buildTextBox());\n\t        _this.autoCompleteZone.appendChild(_this.buildAddIcon());\n\t        _this.autoCompleteZone.appendChild(_this.buildClearIcon());\n\t        _this.buildExistingTags();\n\t        return _this;\n\t    }\n\t    ResultTagging.prototype.buildExistingTags = function () {\n\t        var _this = this;\n\t        if (this.tags) {\n\t            _.each(this.tags, function (tag) {\n\t                _this.tagZone.appendChild(_this.buildTagValue(tag));\n\t            });\n\t        }\n\t    };\n\t    ResultTagging.prototype.buildTagIcon = function () {\n\t        var _this = this;\n\t        var tagZone = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-add-tag'\n\t        });\n\t        var tagTextBox = Dom_1.$$('span', {\n\t            className: 'coveo-result-tagging-add-tag-text'\n\t        });\n\t        tagTextBox.text(Strings_1.l('EnterTag'));\n\t        var tagIcon = Dom_1.$$('span', {\n\t            className: 'coveo-result-tagging-add-tag-icon'\n\t        });\n\t        tagIcon.on('click', function () {\n\t            _.defer(function () {\n\t                _this.focusOnTextBox();\n\t            }, 20);\n\t        });\n\t        tagZone.el.appendChild(tagIcon.el);\n\t        tagZone.append(tagTextBox.el);\n\t        tagZone.setAttribute('title', Strings_1.l('EnterTag'));\n\t        return tagZone.el;\n\t    };\n\t    ResultTagging.prototype.focusOnTextBox = function () {\n\t        this.textBox.focus();\n\t    };\n\t    ResultTagging.prototype.buildTagValue = function (tagValue) {\n\t        var _this = this;\n\t        var tag = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-coveo-tag'\n\t        });\n\t        tag.el.appendChild(this.buildShortenedTagWithTitle(tagValue));\n\t        var deleteIcon = Dom_1.$$('span', {\n\t            className: 'coveo-result-tagging-delete-icon'\n\t        });\n\t        tag.el.appendChild(deleteIcon.el);\n\t        deleteIcon.on('click', function () {\n\t            _this.doRemoveTag(tag.el, tagValue.toLowerCase());\n\t        });\n\t        return tag.el;\n\t    };\n\t    ResultTagging.prototype.buildShortenedTagWithTitle = function (tagValue) {\n\t        var shortenedTag = StringUtils_1.StringUtils.removeMiddle(tagValue, 16, '...');\n\t        var clickableValue = Dom_1.$$('a', {\n\t            title: tagValue,\n\t            href: 'javascript:void(0);'\n\t        });\n\t        clickableValue.text(shortenedTag);\n\t        this.bindFacetEventOnValue(clickableValue.el, tagValue);\n\t        return clickableValue.el;\n\t    };\n\t    ResultTagging.prototype.buildTextBox = function () {\n\t        var _this = this;\n\t        this.textBox = Dom_1.$$('input', {\n\t            type: 'text',\n\t            className: 'coveo-add-tag-textbox',\n\t            placeholder: Strings_1.l('EnterTag')\n\t        }).el;\n\t        this.autoCompletePopup = Dom_1.$$('div', {\n\t            className: ResultTagging.autoCompleteClass\n\t        }).el;\n\t        this.autoCompleteZone.appendChild(this.autoCompletePopup);\n\t        this.manageAutocompleteAutoHide();\n\t        Dom_1.$$(this.textBox).on('keyup', (function (e) {\n\t            if (e.keyCode == KeyboardUtils_1.KEYBOARD.UP_ARROW || e.keyCode == KeyboardUtils_1.KEYBOARD.DOWN_ARROW || e.keyCode == KeyboardUtils_1.KEYBOARD.ENTER) {\n\t                _this.manageUpDownEnter(e.keyCode);\n\t            }\n\t            else if (!KeyboardUtils_1.KeyboardUtils.isArrowKeyPushed(e.keyCode)) {\n\t                _this.populateSuggestions();\n\t            }\n\t            Dom_1.$$(_this.element).removeClass('coveo-error');\n\t        }));\n\t        Dom_1.$$(this.textBox).on('click', function () {\n\t            _this.populateSuggestions();\n\t        });\n\t        return this.textBox;\n\t    };\n\t    ResultTagging.prototype.buildAddIcon = function () {\n\t        var _this = this;\n\t        var icon = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-add-tag-tick-icon'\n\t        });\n\t        var clickable = Dom_1.$$('span');\n\t        clickable.on('click', function () {\n\t            _this.doAddTag();\n\t        });\n\t        icon.el.appendChild(clickable.el);\n\t        return icon.el;\n\t    };\n\t    ResultTagging.prototype.buildClearIcon = function () {\n\t        var _this = this;\n\t        var icon = Dom_1.$$('div', {\n\t            className: 'coveo-result-tagging-clear-icon'\n\t        });\n\t        var clickable = Dom_1.$$('span');\n\t        clickable.on('click', function () {\n\t            _this.textBox.value = '';\n\t        });\n\t        icon.el.appendChild(clickable.el);\n\t        return icon.el;\n\t    };\n\t    ResultTagging.prototype.bindFacetEventOnValue = function (element, value) {\n\t        var _this = this;\n\t        var facetAttributeName = QueryStateModel_1.QueryStateModel.getFacetId(this.options.field);\n\t        var facetModel = this.queryStateModel.get(facetAttributeName);\n\t        var facets = this.componentStateModel.get(facetAttributeName);\n\t        var atLeastOneFacetIsEnabled = _.filter(facets, function (value) { return !value.disabled; }).length > 0;\n\t        if (facetModel != null && atLeastOneFacetIsEnabled) {\n\t            Dom_1.$$(element).on('click', function () {\n\t                if (_.contains(facetModel, value)) {\n\t                    _this.queryStateModel.set(facetAttributeName, _.without(facetModel, value));\n\t                }\n\t                else {\n\t                    _this.queryStateModel.set(facetAttributeName, _.union(facetModel, [value]));\n\t                }\n\t                _this.queryController.deferExecuteQuery({\n\t                    beforeExecuteQuery: function () { return _this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentTag, {\n\t                        facetId: _this.options.field,\n\t                        facetValue: value\n\t                    }); }\n\t                });\n\t            });\n\t            if (_.contains(facetModel, value)) {\n\t                Dom_1.$$(element).addClass('coveo-selected');\n\t            }\n\t            Dom_1.$$(element).addClass('coveo-clickable');\n\t        }\n\t    };\n\t    ResultTagging.prototype.clearPopup = function () {\n\t        Dom_1.$$(this.autoCompletePopup).hide();\n\t        Dom_1.$$(this.autoCompletePopup).empty();\n\t    };\n\t    ResultTagging.prototype.showPopup = function () {\n\t        Dom_1.$$(this.autoCompletePopup).show();\n\t    };\n\t    ResultTagging.prototype.populateSuggestions = function () {\n\t        var _this = this;\n\t        var endpoint = this.queryController.getEndpoint();\n\t        var searchText = this.textBox.value;\n\t        var searchOptions = {\n\t            field: this.options.field,\n\t            ignoreAccents: true,\n\t            sortCriteria: 'occurences',\n\t            maximumNumberOfValues: this.options.suggestBoxSize,\n\t            queryOverride: '@uri',\n\t            pattern: this.buildRegEx(searchText),\n\t            patternType: 'RegularExpression'\n\t        };\n\t        endpoint.listFieldValues(searchOptions).then(function (fieldValues) {\n\t            _this.clearPopup();\n\t            _.each(fieldValues, function (fieldValue) {\n\t                _this.autoCompletePopup.appendChild(_this.buildSelectableValue(fieldValue.lookupValue));\n\t            });\n\t            _this.showPopup();\n\t            _this.autoCompletePopup.style.width = _this.textBox.offsetWidth + ' px';\n\t        });\n\t    };\n\t    ResultTagging.prototype.manageAutocompleteAutoHide = function () {\n\t        var _this = this;\n\t        var timeout;\n\t        Dom_1.$$(this.textBox).on('mouseover', function () {\n\t            clearTimeout(timeout);\n\t        });\n\t        Dom_1.$$(this.autoCompletePopup).on('mouseout', (function (e) {\n\t            if (Dom_1.$$(e.target).hasClass(ResultTagging.autoCompleteClass)) {\n\t                timeout = setTimeout(function () {\n\t                    _this.clearPopup();\n\t                }, _this.options.autoCompleteTimer);\n\t            }\n\t        }));\n\t        Dom_1.$$(this.autoCompletePopup).on('mouseenter', (function () {\n\t            clearTimeout(timeout);\n\t        }));\n\t        Dom_1.$$(this.element).on('mouseenter', (function () {\n\t            _this.clearPopup();\n\t            Dom_1.$$(_this.element).addClass('coveo-opened');\n\t        }));\n\t        Dom_1.$$(Dom_1.$$(this.element).closest('.CoveoResult')).on('mouseleave', (function () {\n\t            _this.clearPopup();\n\t            if (_this.textBox.value == '') {\n\t                Dom_1.$$(_this.element).removeClass('coveo-opened');\n\t            }\n\t        }));\n\t        Dom_1.$$(Dom_1.$$(this.element).closest('.CoveoResult')).on('focusout', (function (e) {\n\t            if (_this.textBox.value != '' && (Dom_1.$$(e.target).closest('.CoveoResult') != Dom_1.$$(_this.element).closest('.CoveoResult'))) {\n\t                Dom_1.$$(_this.element).addClass('coveo-error');\n\t            }\n\t        }));\n\t        Dom_1.$$(Dom_1.$$(this.element).closest('.CoveoResult')).on('focusin', (function () {\n\t            Dom_1.$$(_this.element).removeClass('coveo-error');\n\t        }));\n\t    };\n\t    // Exclude tags that are already on the result (Since we can tag with the same value twice.\n\t    ResultTagging.prototype.buildRegEx = function (searchTerm) {\n\t        var _this = this;\n\t        return '(?=.*' + searchTerm + ')' + _.map(this.tags, function (tag) { return _this.buildTermToExclude(tag); }).join('') + '.*';\n\t    };\n\t    ResultTagging.prototype.buildTermToExclude = function (term) {\n\t        return '(?!^' + term + '$)';\n\t    };\n\t    ResultTagging.prototype.manageUpDownEnter = function (code) {\n\t        var selectableArray = Dom_1.$$(this.element).findAll('.coveo-selectable');\n\t        if (code == KeyboardUtils_1.KEYBOARD.ENTER) {\n\t            this.doAddTag();\n\t            return;\n\t        }\n\t        if (selectableArray.length > 0) {\n\t            var newIndex = this.computeNextIndex(code, selectableArray);\n\t            newIndex = Math.max(0, newIndex);\n\t            newIndex = Math.min(selectableArray.length - 1, newIndex);\n\t            var selected = Dom_1.$$(selectableArray[newIndex]);\n\t            selected.addClass('coveo-selected');\n\t            this.textBox.value = selected.text();\n\t        }\n\t    };\n\t    ResultTagging.prototype.computeNextIndex = function (code, selectableArray) {\n\t        var nextIndex = 0;\n\t        _.each(selectableArray, function (selectable, index) {\n\t            if (Dom_1.$$(selectable).hasClass('coveo-selected')) {\n\t                if (code == KeyboardUtils_1.KEYBOARD.UP_ARROW) {\n\t                    nextIndex = index - 1;\n\t                }\n\t                else if (code == KeyboardUtils_1.KEYBOARD.DOWN_ARROW) {\n\t                    nextIndex = index + 1;\n\t                }\n\t                Dom_1.$$(selectable).removeClass('coveo-selected');\n\t            }\n\t        });\n\t        return nextIndex;\n\t    };\n\t    ResultTagging.prototype.buildSelectableValue = function (lookupValue) {\n\t        var _this = this;\n\t        var line = Dom_1.$$('div', {\n\t            className: 'coveo-selectable'\n\t        });\n\t        line.el.appendChild(this.buildShortenedTagWithTitle(lookupValue));\n\t        line.on('click', function () {\n\t            _this.doAddTagWithValue(lookupValue);\n\t        });\n\t        return line.el;\n\t    };\n\t    ResultTagging.prototype.doRemoveTag = function (element, tagValue) {\n\t        var _this = this;\n\t        var request = {\n\t            fieldName: this.options.field,\n\t            fieldValue: tagValue,\n\t            doAdd: false,\n\t            uniqueId: this.result.uniqueId\n\t        };\n\t        this.queryController.getEndpoint().tagDocument(request).then(function () {\n\t            _this.tags.splice(_.indexOf(_this.tags, tagValue), 1);\n\t            Dom_1.$$(element).detach();\n\t        });\n\t    };\n\t    ResultTagging.prototype.doAddTagWithValue = function (tagValue) {\n\t        var _this = this;\n\t        _.each(tagValue.split(','), function (tag) {\n\t            _this.doAddSingleTagValue(tag);\n\t        });\n\t    };\n\t    ResultTagging.prototype.doAddSingleTagValue = function (tagValue) {\n\t        var _this = this;\n\t        this.clearPopup();\n\t        if (_.indexOf(this.tags, tagValue) > -1) {\n\t            Dom_1.$$(this.element).addClass('coveo-error');\n\t            return;\n\t        }\n\t        this.tags.push(tagValue);\n\t        var request = {\n\t            fieldName: this.options.field,\n\t            fieldValue: tagValue,\n\t            doAdd: true,\n\t            uniqueId: this.result.uniqueId\n\t        };\n\t        this.queryController.getEndpoint().tagDocument(request).then(function () {\n\t            _this.tagZone.appendChild(_this.buildTagValue(tagValue));\n\t            _this.textBox.value = '';\n\t            Dom_1.$$(_this.element).removeClass('coveo-error');\n\t        }).catch(function () {\n\t            // We do this otherwise it's possible to add the same tag while we wait for the server's response\n\t            _this.tags = _.without(_this.tags, _.findWhere(_this.tags, tagValue));\n\t        });\n\t    };\n\t    ResultTagging.prototype.doAddTag = function () {\n\t        var tagValue = Utils_1.Utils.trim(this.textBox.value.toLowerCase());\n\t        this.doAddTagWithValue(tagValue);\n\t    };\n\t    return ResultTagging;\n\t}(Component_1.Component));\n\tResultTagging.ID = 'ResultTagging';\n\tResultTagging.autoCompleteClass = 'coveo-result-tagging-auto-complete';\n\t/**\n\t * @componentOptions\n\t */\n\tResultTagging.options = {\n\t    /**\n\t     * Specifies the tag field that the component will use.\n\t     *\n\t     * Specifying a value for this options is necessary for this component to work.\n\t     */\n\t    field: ComponentOptions_1.ComponentOptions.buildFieldOption({\n\t        match: function (field) { return field.type == 'Tag'; },\n\t        required: true\n\t    }),\n\t    /**\n\t     * Specifies the number of items to show in the list of suggested items.\n\t     *\n\t     * Default value is `5`. Minimum value is `0 `.\n\t     */\n\t    suggestBoxSize: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0 }),\n\t    /**\n\t     * Specifies how much time (in milliseconds) it takes for the list of suggested items to disappear when it loses\n\t     * focus.\n\t     *\n\t     * Default value is `2000`. Minimum value is `0`.\n\t     */\n\t    autoCompleteTimer: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 2000, min: 0 })\n\t};\n\tResultTagging.AUTO_COMPLETE_CLASS = 'coveo-result-tagging-auto-complete';\n\texports.ResultTagging = ResultTagging;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultTagging);\n\n\n/***/ },\n/* 251 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ComponentOptionsModel_1 = __webpack_require__(104);\n\tvar LocalStorageUtils_1 = __webpack_require__(71);\n\tvar PreferencesPanel_1 = __webpack_require__(234);\n\tvar PreferencesPanelItem_1 = __webpack_require__(236);\n\tvar PreferencesPanelEvents_1 = __webpack_require__(49);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar Defer_1 = __webpack_require__(34);\n\t/**\n\t * The ResultsPreferences component allows the end user to select preferences related to the search results. These\n\t * preferences are then saved in the local storage of the end user.\n\t *\n\t * This component is normally accessible through the {@link Settings} menu. Its usual location in the DOM is inside the\n\t * {@link PreferencesPanel} component.\n\t *\n\t * See also the {@link ResultsFiltersPreferences} component.\n\t */\n\tvar ResultsPreferences = (function (_super) {\n\t    __extends(ResultsPreferences, _super);\n\t    /**\n\t     * Creates a new ResultsPreference component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ResultsPreferences component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function ResultsPreferences(element, options, bindings) {\n\t        var _this = _super.call(this, element, ResultsPreferences.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ResultsPreferences, options);\n\t        _this.preferencesPanel = Dom_1.$$(_this.element).closest(Component_1.Component.computeCssClassName(PreferencesPanel_1.PreferencesPanel));\n\t        _this.preferencePanelLocalStorage = new LocalStorageUtils_1.LocalStorageUtils(ResultsPreferences.ID);\n\t        Assert_1.Assert.exists(_this.componentOptionsModel);\n\t        Assert_1.Assert.exists(window.localStorage);\n\t        Assert_1.Assert.exists(_this.preferencesPanel);\n\t        _this.preferences = _this.preferencePanelLocalStorage.load() || {};\n\t        _this.adjustPreferencesToComponentConfig();\n\t        ComponentOptions_1.ComponentOptions.initComponentOptions(_this.element, ResultsPreferences, _this.preferences);\n\t        _this.updateComponentOptionsModel();\n\t        _this.bind.on(_this.preferencesPanel, PreferencesPanelEvents_1.PreferencesPanelEvents.savePreferences, function () { return _this.save(); });\n\t        _this.bind.on(_this.preferencesPanel, PreferencesPanelEvents_1.PreferencesPanelEvents.exitPreferencesWithoutSave, function () { return _this.exitWithoutSave(); });\n\t        _this.buildTitle();\n\t        _this.buildCheckboxesInput();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Saves the current state of the ResultsPreferences component in the local storage.\n\t     */\n\t    ResultsPreferences.prototype.save = function () {\n\t        this.fromCheckboxInputToPreferences();\n\t        this.logger.info('Saving preferences', this.preferences);\n\t        this.preferencePanelLocalStorage.save(this.preferences);\n\t        this.updateComponentOptionsModel();\n\t    };\n\t    ResultsPreferences.prototype.exitWithoutSave = function () {\n\t        this.fromPreferencesToCheckboxInput();\n\t    };\n\t    ResultsPreferences.prototype.updateComponentOptionsModel = function () {\n\t        this.componentOptionsModel.set(ComponentOptionsModel_1.ComponentOptionsModel.attributesEnum.resultLink, this.preferences);\n\t    };\n\t    ResultsPreferences.prototype.buildTitle = function () {\n\t        var title = Dom_1.$$('div', {\n\t            className: 'coveo-title'\n\t        }, Strings_1.l('LinkOpeningSettings'));\n\t        this.element.appendChild(title.el);\n\t    };\n\t    ResultsPreferences.prototype.buildCheckboxesInput = function () {\n\t        var _this = this;\n\t        var inputs = [];\n\t        if (this.options.enableOpenInOutlook) {\n\t            inputs.push({ label: Strings_1.l('OpenInOutlookWhenPossible') });\n\t        }\n\t        if (this.options.enableOpenInNewWindow) {\n\t            inputs.push({ label: Strings_1.l('AlwaysOpenInNewWindow') });\n\t        }\n\t        this.preferencePanelCheckboxInput = new PreferencesPanelItem_1.PreferencesPanelCheckboxInput(inputs, ResultsPreferences.ID);\n\t        var container = Dom_1.$$('div', {\n\t            className: 'coveo-choices-container'\n\t        });\n\t        container.el.appendChild(this.preferencePanelCheckboxInput.build());\n\t        var executeOnChange = container.findAll('input');\n\t        _.each(executeOnChange, function (toExec) {\n\t            Dom_1.$$(toExec).on('change', function (e) {\n\t                _this.fromPreferenceChangeEventToUsageAnalyticsLog(e);\n\t                _this.save();\n\t                _this.queryController.executeQuery();\n\t            });\n\t        });\n\t        this.element.appendChild(container.el);\n\t        this.fromPreferencesToCheckboxInput();\n\t    };\n\t    ResultsPreferences.prototype.fromCheckboxInputToPreferences = function () {\n\t        var selected = this.preferencePanelCheckboxInput.getSelecteds();\n\t        this.preferences = {\n\t            openInOutlook: false,\n\t            alwaysOpenInNewWindow: false\n\t        };\n\t        if (_.contains(selected, Strings_1.l('OpenInOutlookWhenPossible'))) {\n\t            this.preferences.openInOutlook = true;\n\t        }\n\t        if (_.contains(selected, Strings_1.l('AlwaysOpenInNewWindow'))) {\n\t            this.preferences.alwaysOpenInNewWindow = true;\n\t        }\n\t    };\n\t    ResultsPreferences.prototype.fromPreferencesToCheckboxInput = function () {\n\t        if (this.preferences.openInOutlook) {\n\t            this.preferencePanelCheckboxInput.select(Strings_1.l('OpenInOutlookWhenPossible'));\n\t        }\n\t        if (this.preferences.alwaysOpenInNewWindow) {\n\t            this.preferencePanelCheckboxInput.select(Strings_1.l('AlwaysOpenInNewWindow'));\n\t        }\n\t    };\n\t    ResultsPreferences.prototype.fromPreferenceChangeEventToUsageAnalyticsLog = function (e) {\n\t        var type = e.target.checked ? 'selected' : 'unselected';\n\t        var preference = e.target.value;\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.preferencesChange, { preferenceName: preference, preferenceType: type }, this.element);\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.preferencesChange, { preferenceName: preference, preferenceType: type });\n\t    };\n\t    ResultsPreferences.prototype.adjustPreferencesToComponentConfig = function () {\n\t        var _this = this;\n\t        // This method is used when there are illogical configuration between what's saved in local storage (the preferences)\n\t        // and how the component is configured.\n\t        // This can happen if an admin change the component configuration after end users have already selected a preferences.\n\t        // We need to adapt the saved preferences to what's actually available in the component\n\t        var needToSave = false;\n\t        if (this.preferences.alwaysOpenInNewWindow && !this.options.enableOpenInNewWindow) {\n\t            this.preferences.alwaysOpenInNewWindow = null;\n\t            needToSave = true;\n\t        }\n\t        if (this.preferences.openInOutlook && !this.options.enableOpenInOutlook) {\n\t            this.preferences.openInOutlook = null;\n\t            needToSave = true;\n\t        }\n\t        if (needToSave) {\n\t            Defer_1.Defer.defer(function () {\n\t                _this.save();\n\t            });\n\t        }\n\t    };\n\t    return ResultsPreferences;\n\t}(Component_1.Component));\n\tResultsPreferences.ID = 'ResultsPreferences';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tResultsPreferences.options = {\n\t    /**\n\t     * Specifies whether to make the option to open results in Microsoft Outlook available.\n\t     *\n\t     * Default value is `false`\n\t     */\n\t    enableOpenInOutlook: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    /**\n\t     * Specifies whether to make the option to open results in a new window available.\n\t     *\n\t     * Default value is `true`\n\t     */\n\t    enableOpenInNewWindow: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\texports.ResultsPreferences = ResultsPreferences;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ResultsPreferences);\n\n\n/***/ },\n/* 252 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * A PipelineContext is used to add contextual information about the environment inside which the query is executed.\n\t *\n\t * It allows to pass arbitrary key values pairs ( think `JSON` ), which can then be leveraged by the [Query Pipeline](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=108),\n\t * or by Reveal.\n\t *\n\t * This can be any arbitrary information that you can use to contextualize the query and help Coveo improve relevance by returning results tailored to a specific context.\n\t *\n\t * This component is meant to be configured using a script tag, with a JSON content.\n\t *\n\t * ```\n\t * <script class='CoveoPipelineContext' type='text/context'>\n\t *   {\n\t *      \"foo\" : \"bar\"\n\t *   }\n\t * </script>\n\t * ```\n\t *\n\t * You can also simply use JavaScript code to pass context values, using the {@link QueryBuilder.addContextValue} method.\n\t *\n\t * This mean you do not necessarily need to use this component to pass context.\n\t * ```\n\t * Coveo.$$(root).on('buildingQuery', function(args) {\n\t *     args.queryBuilder.addContextValue('foo', 'bar');\n\t * })\n\t * ```\n\t *\n\t * Using this component as opposed to JavaScript code means you will be able to leverage the interface editor.\n\t *\n\t * Regardless of if you use this component or JavaScript to add context, both will add the needed data in the [Query.Context]{@link IQuery.context} parameter.\n\t */\n\tvar PipelineContext = (function (_super) {\n\t    __extends(PipelineContext, _super);\n\t    function PipelineContext(element, options, bindings) {\n\t        var _this = _super.call(this, element, PipelineContext.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, PipelineContext, options);\n\t        if (_this.element.tagName.toLowerCase() == 'script') {\n\t            try {\n\t                // Content can be HTML encoded for special char ({!})\n\t                _this.content = JSON.parse(Utils_1.Utils.decodeHTMLEntities(Dom_1.$$(_this.element).text()));\n\t            }\n\t            catch (e) {\n\t                try {\n\t                    _this.content = JSON.parse(Dom_1.$$(_this.element).text());\n\t                }\n\t                catch (e) {\n\t                    return _this;\n\t                }\n\t            }\n\t        }\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleBuildingQuery(args); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Return all the context keys configured for context.\n\t     * @returns {string[]|Array}\n\t     */\n\t    PipelineContext.prototype.getContextKeys = function () {\n\t        return this.content ? _.keys(this.content) : [];\n\t    };\n\t    /**\n\t     * Get the context value associated to the given key.\n\t     * @param key\n\t     * @returns {string}\n\t     */\n\t    PipelineContext.prototype.getContextValue = function (key) {\n\t        return this.content[key].replace(/\\{\\!([^\\}]+)\\}/g, function (all, contextKey) {\n\t            if (Coveo.context != null && contextKey in Coveo.context) {\n\t                return Coveo.context[contextKey];\n\t            }\n\t            else if (contextKey == PipelineContext.CURRENT_URL) {\n\t                return window.location.href;\n\t            }\n\t            return '';\n\t        });\n\t    };\n\t    PipelineContext.prototype.handleBuildingQuery = function (args) {\n\t        var _this = this;\n\t        var keys = this.getContextKeys();\n\t        _.each(keys, function (key) {\n\t            args.queryBuilder.addContextValue(key, _this.getContextValue(key));\n\t        });\n\t    };\n\t    return PipelineContext;\n\t}(Component_1.Component));\n\tPipelineContext.ID = 'PipelineContext';\n\tPipelineContext.CURRENT_URL = 'CurrentUrl';\n\texports.PipelineContext = PipelineContext;\n\tInitialization_1.Initialization.registerAutoCreateComponent(PipelineContext);\n\n\n/***/ },\n/* 253 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar ResultList_1 = __webpack_require__(183);\n\tvar OmniboxEvents_1 = __webpack_require__(48);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The OmniboxResultList component behaves exactly like the {@link ResultList} component (which it extends), except that\n\t * it renders itself inside the {@link Omnibox} component.\n\t *\n\t * This component can provide a kind of search-as-you-type functionality, allowing you to easily render complex Result\n\t * Templates inside the Omnibox component.\n\t *\n\t * **Example:**\n\t *\n\t * ```html\n\t * <div class=\"CoveoOmniboxResultList\">\n\t *   <script class=\"result-template\" type=\"text/x-underscore\">\n\t *     <div>\n\t *       <a class='CoveoResultLink'></a>\n\t *     </div>\n\t *   </script>\n\t * </div>\n\t * ```\n\t */\n\tvar OmniboxResultList = (function (_super) {\n\t    __extends(OmniboxResultList, _super);\n\t    /**\n\t     * Creates a new OmniboxResultList component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the OmniboxResultList component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function OmniboxResultList(element, options, bindings) {\n\t        var _this = _super.call(this, element, options, bindings, OmniboxResultList.ID) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, OmniboxResultList, options);\n\t        _this.setupOptions();\n\t        _this.bind.onRootElement(OmniboxEvents_1.OmniboxEvents.populateOmnibox, function (args) { return _this.handlePopulateOmnibox(args); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (args) { return _this.handleQueryOverride(args); });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Builds and returns an array of `HTMLElement` from the {@link IQueryResults} set received as an argument.\n\t     * @param results The IQueryResults set to build an array of `HTMLElement` from.\n\t     */\n\t    OmniboxResultList.prototype.buildResults = function (results) {\n\t        var _this = this;\n\t        return _.map(results.results, function (result) {\n\t            var resultElement = Dom_1.$$(_this.buildResult(result));\n\t            resultElement.addClass(['coveo-omnibox-selectable', 'coveo-omnibox-result-list-element']);\n\t            resultElement.on('keyboardSelect', function () {\n\t                _this.options.onSelect.call(_this, result, resultElement.el, _this.lastOmniboxRequest.omniboxObject);\n\t            });\n\t            _this.autoCreateComponentsInsideResult(resultElement.el, result);\n\t            return resultElement.el;\n\t        });\n\t    };\n\t    /**\n\t     * Creates a result container and appends each element from the received `HTMLElement` array to it. For each element\n\t     * it appends to the result container, this method triggers a `newResultDisplayed` event. Once all elements have been\n\t     * appended to the result container, the method triggers a `newResultsDisplayed` event.\n\t     * @param resultsElement The array of `HTMLElement` to render.\n\t     * @param append\n\t     */\n\t    OmniboxResultList.prototype.renderResults = function (resultsElement, append) {\n\t        var _this = this;\n\t        if (append === void 0) { append = false; }\n\t        if (this.lastOmniboxRequest) {\n\t            var content_1 = Dom_1.$$('div').el;\n\t            content_1.appendChild(Dom_1.$$('div', { className: 'coveo-omnibox-result-list-header' }, Dom_1.$$('span', { className: 'coveo-icon-omnibox-result-list' }).el, Dom_1.$$('span', { className: 'coveo-caption' }, (this.options.headerTitle || Strings_1.l('SuggestedResults'))).el).el);\n\t            _.each(resultsElement, function (resultElement) {\n\t                content_1.appendChild(resultElement);\n\t                _this.triggerNewResultDisplayed(Component_1.Component.getResult(resultElement), resultElement);\n\t            });\n\t            this.triggerNewResultsDisplayed();\n\t            this.lastOmniboxRequest.resolve({ element: content_1, zIndex: this.options.omniboxZIndex });\n\t        }\n\t    };\n\t    OmniboxResultList.prototype.setupOptions = function () {\n\t        this.logger.info('Disabling infinite scroll for OmniboxResultList', this);\n\t        this.options.enableInfiniteScroll = false;\n\t        this.options.onSelect = this.options.onSelect || this.onRowSelection;\n\t    };\n\t    OmniboxResultList.prototype.handlePopulateOmnibox = function (args) {\n\t        var _this = this;\n\t        var promise = new Promise(function (resolve, reject) {\n\t            _this.queryController.executeQuery({\n\t                beforeExecuteQuery: function () { return _this.usageAnalytics.logSearchAsYouType(AnalyticsActionListMeta_1.analyticsActionCauseList.searchboxSubmit, {}); },\n\t                searchAsYouType: true\n\t            });\n\t            _this.lastOmniboxRequest = { omniboxObject: args, resolve: resolve };\n\t        });\n\t        args.rows.push({\n\t            deferred: promise\n\t        });\n\t    };\n\t    OmniboxResultList.prototype.handleQueryOverride = function (args) {\n\t        Assert_1.Assert.exists(args);\n\t        if (Utils_1.Utils.isNonEmptyString(this.options.queryOverride)) {\n\t            args.queryBuilder.constantExpression.add(this.options.queryOverride);\n\t        }\n\t    };\n\t    OmniboxResultList.prototype.onRowSelection = function (result, resultElement, omniboxObject) {\n\t        this.usageAnalytics.logClickEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.documentOpen, { author: Utils_1.Utils.getFieldValue(result, 'author') }, result, this.root);\n\t        window.location.href = result.clickUri;\n\t    };\n\t    return OmniboxResultList;\n\t}(ResultList_1.ResultList));\n\tOmniboxResultList.ID = 'OmniboxResultList';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tOmniboxResultList.options = {\n\t    /**\n\t     * Specifies the z-index at which to render the ResultList inside the Omnibox.\n\t     *\n\t     * Default value is `51`. Minimum value is `16` ({@link Facet} components are at `50` by default)\n\t     */\n\t    omniboxZIndex: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 51, min: 16 }),\n\t    /**\n\t     * Specifies the title to use for this section.\n\t     *\n\t     * Default value is the localized string for `Suggested Results`.\n\t     */\n\t    headerTitle: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the override to use on the query sent to the OmniboxResultList component.\n\t     *\n\t     * Default value is `undefined`, which means no default override is specified.\n\t     */\n\t    queryOverride: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the function to execute when the user selects a result suggestion.\n\t     *\n\t     * The default function opens the corresponding result URI in the browser.\n\t     *\n\t     * It is only possible to specify a value for this option in the {@link init} call of your search interface. You\n\t     * cannot set it directly as an HTML attribute.\n\t     *\n\t     * **Example:**\n\t     *\n\t     * ```javascript\n\t     * // You can call the init script using \"pure\" JavaScript:\n\t     * Coveo.init(document.querySelector('#search'), {\n\t     *    OmniboxResultList : {\n\t     *        //Close the omnibox, change the selected HTMLElement background color and alert the result title.\n\t     *        onSelect : function(result, resultElement, omniBoxObject) {\n\t     *            omniBoxObject.close();\n\t     *            resultElement.css('background-color', 'red');\n\t     *            alert(result.title);\n\t     *        }\n\t     *     }\n\t     * })\n\t     *\n\t     * // Or you can call the init script using the jQuery extension:\n\t     * $(\"#search\").coveo(\"init\", {\n\t     *    OmniboxResultList : {\n\t     *        //Close the Omnibox, change the selected HTMLElement background color and alert the result title.\n\t     *        onSelect : function(result, resultElement, omniBoxObject) {\n\t     *            omniBoxObject.close();\n\t     *            resultElement.css('background-color', 'red');\n\t     *            alert(result.title);\n\t     *        }\n\t     *     }\n\t     * })\n\t     * ```\n\t     */\n\t    onSelect: ComponentOptions_1.ComponentOptions.buildCustomOption(function () {\n\t        return null;\n\t    })\n\t};\n\texports.OmniboxResultList = OmniboxResultList;\n\tInitialization_1.Initialization.registerAutoCreateComponent(OmniboxResultList);\n\n\n/***/ },\n/* 254 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Model_1 = __webpack_require__(100);\n\tvar QueryStateModel_1 = __webpack_require__(103);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Tab_1 = __webpack_require__(138);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * This component is used to display the name of the currently selected tab.\n\t * If no tabs are selected, this component is hidden.\n\t */\n\tvar CurrentTab = (function (_super) {\n\t    __extends(CurrentTab, _super);\n\t    function CurrentTab(element, options, bindings) {\n\t        var _this = _super.call(this, element, CurrentTab.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, CurrentTab, options);\n\t        var eventName = _this.queryStateModel.getEventName(Model_1.Model.eventTypes.changeOne + QueryStateModel_1.QueryStateModel.attributesEnum.t);\n\t        _this.bind.onRootElement(eventName, _this.handleTabChange);\n\t        if (_this.options.tabSectionToOpen) {\n\t            var tabSection_1 = Dom_1.$$(_this.root).find(_this.options.tabSectionToOpen);\n\t            Dom_1.$$(tabSection_1).addClass('coveo-targeted-by-current-tab');\n\t            Dom_1.$$(_this.element).addClass('coveo-targeting-tab-section');\n\t            _this.bind.on(_this.element, 'click', function () {\n\t                var glassElement = Dom_1.$$(_this.root).find('.coveo-glass');\n\t                if (glassElement) {\n\t                    var glass = Dom_1.$$(glassElement);\n\t                    glass.toggleClass('coveo-active-glass');\n\t                    glass.toggleClass('coveo-active-glass-for-current-tab');\n\t                }\n\t                Dom_1.$$(_this.element).toggleClass('coveo-opening-tab-section');\n\t                Dom_1.$$(tabSection_1).toggleClass('coveo-opened-by-current-tab');\n\t                if (Dom_1.$$(_this.element).hasClass('coveo-opening-tab-section')) {\n\t                    tabSection_1.style.zIndex = '1001';\n\t                    _this.element.style.zIndex = '1001';\n\t                }\n\t                else {\n\t                    tabSection_1.style.zIndex = undefined;\n\t                    _this.element.style.zIndex = undefined;\n\t                }\n\t            });\n\t        }\n\t        return _this;\n\t    }\n\t    CurrentTab.prototype.handleTabChange = function () {\n\t        var _this = this;\n\t        var selectedTabId = this.queryStateModel.get(QueryStateModel_1.QueryStateModel.attributesEnum.t);\n\t        if (Utils_1.Utils.isNonEmptyString(selectedTabId)) {\n\t            var found_1 = false;\n\t            var tabs = Dom_1.$$(this.root).findAll(Component_1.Component.computeSelectorForType(Tab_1.Tab.ID));\n\t            _.each(tabs, function (elem) {\n\t                var tab = Component_1.Component.get(elem, Tab_1.Tab);\n\t                if (tab.options.id == selectedTabId) {\n\t                    _this.element.innerHTML = tab.element.innerHTML;\n\t                    found_1 = true;\n\t                }\n\t            });\n\t            Assert_1.Assert.check(found_1, 'Cannot find the currently active tab');\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).hide();\n\t        }\n\t    };\n\t    return CurrentTab;\n\t}(Component_1.Component));\n\tCurrentTab.ID = 'CurrentTab';\n\t/**\n\t * The options for the component\n\t * @componentOptions\n\t */\n\tCurrentTab.options = {\n\t    /**\n\t     * Specifies the CSS selector to the section which contains the tab.\n\t     * Clicking this component will toggle between opening and closing this section.\n\t     */\n\t    tabSectionToOpen: ComponentOptions_1.ComponentOptions.buildStringOption()\n\t};\n\texports.CurrentTab = CurrentTab;\n\tInitialization_1.Initialization.registerAutoCreateComponent(CurrentTab);\n\n\n/***/ },\n/* 255 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ResultList_1 = __webpack_require__(183);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ImageResultListEvents_1 = __webpack_require__(46);\n\tvar ResultListEvents_1 = __webpack_require__(51);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar InitializationEvents_1 = __webpack_require__(47);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The ImageResultList component extends the {@link ResultList} component to display image results.\n\t *\n\t * This component inherits from the {@link ResultList} component. Thus, any option available for a ResultList component\n\t * is also available for an ImageResultList component.\n\t */\n\tvar ImageResultList = (function (_super) {\n\t    __extends(ImageResultList, _super);\n\t    /**\n\t     * Creates a new ImageResultList component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the ImageResultList component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param elementClassId The class that this component should instantiate. Components that extend the base\n\t     * {@link ResultList} component use this. Default value is `CoveoResultList`.\n\t     */\n\t    function ImageResultList(element, options, bindings, elementClassId) {\n\t        if (elementClassId === void 0) { elementClassId = ResultList_1.ResultList.ID; }\n\t        var _this = _super.call(this, element, options, bindings, ImageResultList.ID) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.columnResultsArray = [];\n\t        _this.imagesInCurrentRow = [];\n\t        _this.resultIndex = 0;\n\t        _this.lastRowHeight = 0;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ImageResultList, options);\n\t        _this.lastRowHeight = _this.options.heightThreshold;\n\t        _this.bind.onRootElement(ResultListEvents_1.ResultListEvents.newResultsDisplayed, _this.handleProcessNewResultsDisplayed);\n\t        _this.bind.onRootElement(InitializationEvents_1.InitializationEvents.nuke, _this.handleNuke);\n\t        _this.bindWindowResizeEvent();\n\t        return _this;\n\t    }\n\t    ImageResultList.prototype.getResultsElement = function () {\n\t        return Dom_1.$$(this.element).findAll('.CoveoResult');\n\t    };\n\t    ImageResultList.prototype.getResultsElementImages = function () {\n\t        return Dom_1.$$(this.element).findAll('.CoveoResult img');\n\t    };\n\t    ImageResultList.prototype.getResultsContainerDiv = function () {\n\t        return Dom_1.$$(this.element).find('div');\n\t    };\n\t    ImageResultList.prototype.bindWindowResizeEvent = function () {\n\t        window.addEventListener('resize', this.resize);\n\t    };\n\t    ImageResultList.prototype.handleNuke = function () {\n\t        window.removeEventListener('resize', this.resize);\n\t    };\n\t    ImageResultList.prototype.resize = function () {\n\t        var timeout;\n\t        clearTimeout(timeout);\n\t        timeout = setTimeout(this.retrieveLayoutMethod(), 250);\n\t    };\n\t    ImageResultList.prototype.handleProcessNewResultsDisplayed = function () {\n\t        if (this.disabled) {\n\t            Dom_1.$$(this.element).hide();\n\t        }\n\t        else {\n\t            Dom_1.$$(this.element).show();\n\t        }\n\t        this.onImageProxy(this.retrieveLayoutMethod());\n\t    };\n\t    ImageResultList.prototype.addTransitionAllToElement = function (elements) {\n\t        _.defer(function () {\n\t            _.each(elements, function (element) {\n\t                Dom_1.$$(element).addClass('coveo-transition-all');\n\t            });\n\t        });\n\t    };\n\t    ImageResultList.prototype.retrieveLayoutMethod = function () {\n\t        var _this = this;\n\t        if (!this.disabled) {\n\t            if (this.options.layoutType.toLowerCase() == ImageResultList.columnLayoutTypeStr) {\n\t                return function () { return _this.setupColumns(); };\n\t            }\n\t            else if (this.options.layoutType.toLowerCase() == ImageResultList.rowLayoutTypeStr) {\n\t                return function () { return _this.setupRows(); };\n\t            }\n\t        }\n\t        return function () {\n\t        };\n\t    };\n\t    ImageResultList.prototype.onImageProxy = function (callback) {\n\t        _.each(this.getResultsElement(), function (element) {\n\t            if (Dom_1.$$(element).findAll('img').length == 0) {\n\t                Dom_1.$$(element).detach();\n\t            }\n\t        });\n\t        var images = this.getResultsElementImages();\n\t        var loaded = 0;\n\t        var onImageLoad = function (image) {\n\t            if (Dom_1.$$(image).height() > 0) {\n\t                if (Dom_1.$$(image).getAttribute('width') == null && Dom_1.$$(image).getAttribute('height') == null) {\n\t                    Dom_1.$$(image).setAttribute('height', Dom_1.$$(image).height().toString());\n\t                    Dom_1.$$(image).setAttribute('width', Dom_1.$$(image).width().toString());\n\t                }\n\t                loaded++;\n\t                if (loaded == images.length) {\n\t                    callback();\n\t                }\n\t            }\n\t            else {\n\t                Dom_1.$$(image.parentElement).detach();\n\t                images = _.filter(images, function (img) {\n\t                    return !img.isEqualNode(image);\n\t                });\n\t                if (loaded == images.length) {\n\t                    callback();\n\t                }\n\t            }\n\t        };\n\t        _.each(images, function (e) {\n\t            if ((e.src && e.complete) || Dom_1.$$(e).height() > 0) {\n\t                onImageLoad(e);\n\t            }\n\t            else {\n\t                Dom_1.$$(e).one('load', function () { return onImageLoad(e); });\n\t            }\n\t        });\n\t    };\n\t    ImageResultList.prototype.getHorizontalMargin = function (element) {\n\t        var elementDom = Dom_1.$$(element);\n\t        return parseInt(elementDom.css('margin-left')) + parseInt(elementDom.css('margin-right'));\n\t    };\n\t    ImageResultList.prototype.getVerticalMargin = function (element) {\n\t        var elementDom = Dom_1.$$(element);\n\t        return parseInt(elementDom.css('margin-top')) + parseInt(elementDom.css('margin-bottom'));\n\t    };\n\t    ImageResultList.prototype.setupColumns = function () {\n\t        var containerWidth = Dom_1.$$(this.getResultsContainerDiv()).width();\n\t        var result = this.getResultsElement();\n\t        var colWidth = this.options.columnWidth;\n\t        var margin = this.getHorizontalMargin(result[0]);\n\t        var numberOfColumns = Math.floor(containerWidth / (colWidth + margin));\n\t        this.columnResultsArray = [];\n\t        for (var i = 0; i < numberOfColumns; i++) {\n\t            this.columnResultsArray.push(margin);\n\t        }\n\t        this.positionColumns(colWidth, margin);\n\t        Dom_1.$$(this.element).trigger(ImageResultListEvents_1.ImageResultListEvents.imageResultsLayoutComplete, {});\n\t        if (this.options.enableInfiniteScroll) {\n\t            this.adjustNumberOfResults();\n\t        }\n\t    };\n\t    ImageResultList.prototype.positionColumns = function (colWidth, margin) {\n\t        var _this = this;\n\t        var results = this.getResultsElement();\n\t        _.each(results, function (result) {\n\t            var minTopOffset = _.min(_this.columnResultsArray);\n\t            var resultIndex = _this.columnResultsArray.indexOf(minTopOffset);\n\t            var leftOffset = margin + (resultIndex * (colWidth + margin));\n\t            result.style.left = leftOffset + 'px';\n\t            result.style.top = minTopOffset + 'px';\n\t            result.style.width = colWidth + 'px';\n\t            _this.columnResultsArray[resultIndex] = minTopOffset + result.offsetHeight + margin;\n\t        });\n\t        this.setResultsContainerHeight(_.max(this.columnResultsArray));\n\t        this.addTransitionAllToElement(results);\n\t    };\n\t    ImageResultList.prototype.setResultsContainerHeight = function (height) {\n\t        Dom_1.$$(this.element).setAttribute('height', (Math.ceil(height).toString()));\n\t    };\n\t    ImageResultList.prototype.setupRows = function () {\n\t        var results = this.getResultsElement();\n\t        var containerWidth = Dom_1.$$(this.element).width();\n\t        this.resultIndex = 0;\n\t        var topOffset = 0;\n\t        while (this.resultIndex < results.length) {\n\t            this.imagesInCurrentRow = [];\n\t            var rowHeight = this.getCurrentRowHeight(results, containerWidth);\n\t            this.setCurrentRowImagesDimensions(results, rowHeight, topOffset);\n\t            topOffset += rowHeight;\n\t        }\n\t        this.setResultsContainerHeight(topOffset);\n\t        Dom_1.$$(this.element).trigger(ImageResultListEvents_1.ImageResultListEvents.imageResultsLayoutComplete, {});\n\t        this.addTransitionAllToElement(results);\n\t        if (this.options.enableInfiniteScroll) {\n\t            this.adjustNumberOfResults();\n\t        }\n\t    };\n\t    ImageResultList.prototype.getCurrentRowHeight = function (results, containerWidth) {\n\t        var divider = 0;\n\t        var height = null;\n\t        while ((this.resultIndex < results.length) && (height == null || height >= this.options.heightThreshold)) {\n\t            var imageDimensions = this.getImageDimensionsFromResult(results[this.resultIndex]);\n\t            if (imageDimensions != null) {\n\t                divider += imageDimensions.width / imageDimensions.height;\n\t                height = containerWidth / divider;\n\t            }\n\t            this.imagesInCurrentRow.push(this.resultIndex);\n\t            this.resultIndex++;\n\t        }\n\t        // correct height for last element if it can't be as wide as the container\n\t        if (height > this.options.heightThreshold) {\n\t            height = this.lastRowHeight;\n\t        }\n\t        this.lastRowHeight = height;\n\t        return height;\n\t    };\n\t    ImageResultList.prototype.getImageDimensionsFromResult = function (result) {\n\t        var image = Dom_1.$$(result).find('img');\n\t        var height = parseInt(image.getAttribute('height'));\n\t        var width = parseInt(image.getAttribute('width'));\n\t        return {\n\t            height: height,\n\t            width: width\n\t        };\n\t    };\n\t    ImageResultList.prototype.setCurrentRowImagesDimensions = function (images, height, top) {\n\t        var _this = this;\n\t        var leftOffset = 0;\n\t        _.each(this.imagesInCurrentRow, function (imageIndex) {\n\t            var image = Dom_1.$$(images[imageIndex]).find('img');\n\t            var oldWidth = parseInt(image.getAttribute('width'));\n\t            var oldHeight = parseInt(image.getAttribute('height'));\n\t            var width = oldWidth * height / oldHeight;\n\t            var widthMargin = _this.getHorizontalMargin(image);\n\t            var heightMargin = _this.getVerticalMargin(image);\n\t            image.setAttribute('height', Math.round(height - heightMargin).toString());\n\t            image.setAttribute('width', Math.round(width - widthMargin).toString());\n\t            image.setAttribute('left', Math.round(leftOffset).toString());\n\t            image.setAttribute('top', Math.round(top).toString());\n\t            leftOffset += width;\n\t        });\n\t    };\n\t    ImageResultList.prototype.adjustNumberOfResults = function () {\n\t        var elementHeight = Number(Dom_1.$$(this.element).getAttribute('data-height'));\n\t        if (_.isNumber(elementHeight) == false) {\n\t            elementHeight = Dom_1.$$(this.element).height();\n\t        }\n\t        if ((elementHeight < Dom_1.$$(this.options.infiniteScrollContainer).height()) && _super.prototype.hasPotentiallyMoreResultsToDisplay.call(this)) {\n\t            _super.prototype.displayMoreResults.call(this, this.options.infiniteScrollPageSize);\n\t        }\n\t    };\n\t    return ImageResultList;\n\t}(ResultList_1.ResultList));\n\tImageResultList.ID = 'ImageResultList';\n\tImageResultList.rowLayoutTypeStr = 'row';\n\tImageResultList.columnLayoutTypeStr = 'column';\n\t/**\n\t * The options for the component\n\t * This component inherits the options of the {@link ResultList} component.\n\t * @componentOptions\n\t */\n\tImageResultList.options = {\n\t    /**\n\t     * Specifies the type of layout to display image results with.\n\t     * Available values are:\n\t     * - `row`: Resizes images to make them fit the width of the container and have the same height for each row.\n\t     * - `column`: Displays the images in fixed-size columns.\n\t     * Default value is `row`.\n\t     */\n\t    layoutType: ComponentOptions_1.ComponentOptions.buildStringOption({\n\t        defaultValue: 'row',\n\t        postProcessing: function (value) { return value.toLowerCase(); }\n\t    }),\n\t    /**\n\t     * Specifies the maximum height of a row in a row layout.\n\t     *\n\t     * Default value is `250`. Minimum value is `16`.\n\t     */\n\t    heightThreshold: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 250, min: 16 }),\n\t    /**\n\t     * Specifies the width of a column in a column layout.\n\t     *\n\t     * Default value is `225`. Minimum value is `16`.\n\t     */\n\t    columnWidth: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 225, min: 16 })\n\t};\n\texports.ImageResultList = ImageResultList;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ImageResultList);\n\n\n/***/ },\n/* 256 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar _ = __webpack_require__(16);\n\texports.underscoreInstance = _;\n\tsetCoveoUnderscore();\n\tfunction setCoveoUnderscore() {\n\t    if (window['Coveo'] == undefined) {\n\t        window['Coveo'] = {};\n\t    }\n\t    if (window['Coveo']['_'] == undefined) {\n\t        window['Coveo']['_'] = _;\n\t        exports.underscoreInstance = window['Coveo']['_'];\n\t    }\n\t}\n\twindow['_'] = _;\n\n\n/***/ },\n/* 257 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AdvancedSearchInputFactory_1 = __webpack_require__(258);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QuerySummaryEvents_1 = __webpack_require__(239);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The AdvancedSearch component is meant to render a section in the {@link Settings} menu to allow the user to easily\n\t * create complex queries to send to the index.\n\t *\n\t * You can create custom code that adds new sections in the **Advanced Search** panel generated by this component by\n\t * attaching a handler to the {@link AdvancedSearchEvents.buildingAdvancedSearch} event.\n\t */\n\tvar AdvancedSearch = (function (_super) {\n\t    __extends(AdvancedSearch, _super);\n\t    /**\n\t     * Creates a new AdvancedSearch component.\n\t     *\n\t     * Triggers the {@link AdvancedSearchEvents.buildingAdvancedSearch} event.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the AdvancedSearch component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function AdvancedSearch(element, options, bindings) {\n\t        var _this = _super.call(this, element, AdvancedSearch.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.inputs = [];\n\t        _this.inputFactory = new AdvancedSearchInputFactory_1.AdvancedSearchInputFactory(_this.queryController.getEndpoint());\n\t        _this.externalSections = [];\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, AdvancedSearch, options);\n\t        _this.bindEvents();\n\t        _this.buildComponent();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Launches the advanced search query.\n\t     * If query returns successfully, also logs an `advancedSearch` event in the usage analytics (see\n\t     * {@link Analytics.logSearchEvent}).\n\t     */\n\t    AdvancedSearch.prototype.executeAdvancedSearch = function () {\n\t        this.usageAnalytics.logSearchEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.advancedSearch, {});\n\t        this.queryController.executeQuery();\n\t    };\n\t    /**\n\t     * Resets the state of all form inputs inside the AdvancedSearch component.\n\t     */\n\t    AdvancedSearch.prototype.reset = function () {\n\t        _.each(this.inputs, function (input) {\n\t            input.reset();\n\t        });\n\t    };\n\t    AdvancedSearch.prototype.buildComponent = function () {\n\t        this.buildTitle();\n\t        this.buildCloseButton();\n\t        this.buildContent();\n\t        Dom_1.$$(this.element).hide();\n\t    };\n\t    AdvancedSearch.prototype.buildTitle = function () {\n\t        var title = Dom_1.$$('div', { className: 'coveo-advanced-search-panel-title' }, Strings_1.l('AdvancedSearch')).el;\n\t        Dom_1.$$(this.element).append(title);\n\t    };\n\t    AdvancedSearch.prototype.buildCloseButton = function () {\n\t        var _this = this;\n\t        var closeButton = Dom_1.$$('div', { className: 'coveo-advanced-search-panel-close' }, Dom_1.$$('span', { className: 'coveo-icon' }).el);\n\t        closeButton.on('click', function () { return _this.close(); });\n\t        Dom_1.$$(this.element).append(closeButton.el);\n\t    };\n\t    AdvancedSearch.prototype.buildContent = function () {\n\t        var _this = this;\n\t        var component = Dom_1.$$('div');\n\t        var inputSections = [];\n\t        if (this.options.includeKeywords) {\n\t            inputSections.push(this.getKeywordsSection());\n\t        }\n\t        if (this.options.includeDate) {\n\t            inputSections.push(this.getDateSection());\n\t        }\n\t        if (this.options.includeDocument) {\n\t            inputSections.push(this.getDocumentSection());\n\t        }\n\t        this.externalSections = [];\n\t        Dom_1.$$(this.root).trigger(AdvancedSearchEvents_1.AdvancedSearchEvents.buildingAdvancedSearch, {\n\t            sections: this.externalSections,\n\t            executeQuery: function (options) {\n\t                return _this.queryController.executeQuery(options);\n\t            }\n\t        });\n\t        _.each(this.externalSections, function (section) {\n\t            component.append(_this.buildExternalSection(section));\n\t        });\n\t        _.each(inputSections, function (section) {\n\t            component.append(_this.buildInternalSection(section));\n\t        });\n\t        Dom_1.$$(this.element).append(component.el);\n\t    };\n\t    AdvancedSearch.prototype.open = function () {\n\t        Dom_1.$$(this.element).show();\n\t    };\n\t    AdvancedSearch.prototype.close = function () {\n\t        Dom_1.$$(this.element).hide();\n\t    };\n\t    AdvancedSearch.prototype.getKeywordsSection = function () {\n\t        var sectionName = Strings_1.l('Keywords');\n\t        var keywordsInputs = [];\n\t        keywordsInputs.push(this.inputFactory.createAllKeywordsInput());\n\t        keywordsInputs.push(this.inputFactory.createExactKeywordsInput());\n\t        keywordsInputs.push(this.inputFactory.createAnyKeywordsInput());\n\t        keywordsInputs.push(this.inputFactory.createNoneKeywordsInput());\n\t        return { name: sectionName, inputs: keywordsInputs };\n\t    };\n\t    AdvancedSearch.prototype.getDateSection = function () {\n\t        var sectionName = Strings_1.l('Date');\n\t        var dateInputs = [];\n\t        dateInputs.push(this.inputFactory.createAnytimeDateInput());\n\t        dateInputs.push(this.inputFactory.createInTheLastDateInput());\n\t        dateInputs.push(this.inputFactory.createBetweenDateInput());\n\t        return { name: sectionName, inputs: dateInputs };\n\t    };\n\t    AdvancedSearch.prototype.getDocumentSection = function () {\n\t        var sectionName = Strings_1.l('Document');\n\t        var documentInputs = [];\n\t        documentInputs.push(this.inputFactory.createSimpleFieldInput(Strings_1.l('FileType'), '@filetype'));\n\t        documentInputs.push(this.inputFactory.createSimpleFieldInput(Strings_1.l('Language'), '@language'));\n\t        documentInputs.push(this.inputFactory.createSizeInput());\n\t        documentInputs.push(this.inputFactory.createAdvancedFieldInput(Strings_1.l('Title'), '@title'));\n\t        documentInputs.push(this.inputFactory.createAdvancedFieldInput(Strings_1.l('Author'), '@author'));\n\t        return { name: sectionName, inputs: documentInputs };\n\t    };\n\t    AdvancedSearch.prototype.buildExternalSection = function (section) {\n\t        var sectionHTML = this.buildSectionTitle(section);\n\t        this.inputs = _.union(this.inputs, section.inputs);\n\t        sectionHTML.appendChild(section.content);\n\t        return sectionHTML;\n\t    };\n\t    AdvancedSearch.prototype.buildInternalSection = function (section) {\n\t        var _this = this;\n\t        var sectionHTML = this.buildSectionTitle(section);\n\t        var sectionInputs = [];\n\t        _.each(section.inputs, function (input) {\n\t            sectionInputs.push(_this.buildDefaultInput(input));\n\t        });\n\t        this.inputs = _.union(this.inputs, sectionInputs);\n\t        _.each(sectionInputs, function (input) {\n\t            Dom_1.$$(sectionHTML).append(input.build());\n\t        });\n\t        return sectionHTML;\n\t    };\n\t    AdvancedSearch.prototype.buildSectionTitle = function (section) {\n\t        var sectionHTML = Dom_1.$$('div', { className: 'coveo-advanced-search-section' });\n\t        var title = Dom_1.$$('div', { className: 'coveo-advanced-search-section-title' });\n\t        title.text(section.name);\n\t        sectionHTML.append(title.el);\n\t        return sectionHTML.el;\n\t    };\n\t    AdvancedSearch.prototype.buildDefaultInput = function (input) {\n\t        if (this.isPrebuiltInput(input)) {\n\t            return this.inputFactory.create(input.name, input.parameters);\n\t        }\n\t        else {\n\t            return input;\n\t        }\n\t    };\n\t    AdvancedSearch.prototype.isPrebuiltInput = function (input) {\n\t        return input.name !== undefined;\n\t    };\n\t    AdvancedSearch.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t            args.menuData.push({\n\t                text: Strings_1.l('AdvancedSearch'),\n\t                className: 'coveo-advanced-search',\n\t                onOpen: function () { return _this.open(); },\n\t                onClose: function () { return _this.close(); }\n\t            });\n\t        });\n\t        this.bind.onRootElement(QueryEvents_1.QueryEvents.buildingQuery, function (data) {\n\t            _.each(_this.externalSections, function (section) {\n\t                if (section.updateQuery) {\n\t                    section.updateQuery(section.inputs, data.queryBuilder);\n\t                }\n\t            });\n\t            _.each(_this.inputs, function (input) {\n\t                if (input.updateQuery) {\n\t                    input.updateQuery(data.queryBuilder);\n\t                }\n\t            });\n\t        });\n\t        this.bind.onRootElement(AdvancedSearchEvents_1.AdvancedSearchEvents.executeAdvancedSearch, function () {\n\t            _this.executeAdvancedSearch();\n\t        });\n\t        this.bind.onRootElement(QuerySummaryEvents_1.QuerySummaryEvents.cancelLastAction, function () {\n\t            _this.reset();\n\t        });\n\t    };\n\t    return AdvancedSearch;\n\t}(Component_1.Component));\n\tAdvancedSearch.ID = 'AdvancedSearch';\n\t/**\n\t * @componentOptions\n\t */\n\tAdvancedSearch.options = {\n\t    /**\n\t     * Specifies whether to include the built-in **Keywords** section.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    includeKeywords: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to include the built-in **Date** section.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    includeDate: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to include the built-in **Document** section.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    includeDocument: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\texports.AdvancedSearch = AdvancedSearch;\n\tInitialization_1.Initialization.registerAutoCreateComponent(AdvancedSearch);\n\n\n/***/ },\n/* 258 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar AllKeywordsInput_1 = __webpack_require__(259);\n\tvar ExactKeywordsInput_1 = __webpack_require__(262);\n\tvar AnyKeywordsInput_1 = __webpack_require__(263);\n\tvar NoneKeywordsInput_1 = __webpack_require__(264);\n\tvar AnytimeDateInput_1 = __webpack_require__(265);\n\tvar InTheLastDateInput_1 = __webpack_require__(268);\n\tvar BetweenDateInput_1 = __webpack_require__(271);\n\tvar SimpleFieldInput_1 = __webpack_require__(399);\n\tvar AdvancedFieldInput_1 = __webpack_require__(401);\n\tvar SizeInput_1 = __webpack_require__(402);\n\tvar AdvancedSearchInputFactory = (function () {\n\t    function AdvancedSearchInputFactory(endpoint) {\n\t        this.endpoint = endpoint;\n\t    }\n\t    AdvancedSearchInputFactory.prototype.create = function (name, options) {\n\t        switch (name) {\n\t            case 'keywords_all':\n\t                return this.createAllKeywordsInput();\n\t            case 'keywords_exact':\n\t                return this.createExactKeywordsInput();\n\t            case 'keywords_any':\n\t                return this.createAnyKeywordsInput();\n\t            case 'keywords_none':\n\t                return this.createNoneKeywordsInput();\n\t            case 'date_any':\n\t                return this.createAnytimeDateInput();\n\t            case 'date_last':\n\t                return this.createInTheLastDateInput();\n\t            case 'date_between':\n\t                return this.createBetweenDateInput();\n\t            case 'document_field':\n\t                return this.createSimpleFieldInput(options.name, options.field);\n\t            case 'document_advanced_field':\n\t                return this.createAdvancedFieldInput(options.name, options.field);\n\t            case 'document_size':\n\t                return this.createSizeInput();\n\t            default:\n\t                return null;\n\t        }\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createAllKeywordsInput = function () {\n\t        return new AllKeywordsInput_1.AllKeywordsInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createExactKeywordsInput = function () {\n\t        return new ExactKeywordsInput_1.ExactKeywordsInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createAnyKeywordsInput = function () {\n\t        return new AnyKeywordsInput_1.AnyKeywordsInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createNoneKeywordsInput = function () {\n\t        return new NoneKeywordsInput_1.NoneKeywordsInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createAnytimeDateInput = function () {\n\t        return new AnytimeDateInput_1.AnytimeDateInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createInTheLastDateInput = function () {\n\t        return new InTheLastDateInput_1.InTheLastDateInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createBetweenDateInput = function () {\n\t        return new BetweenDateInput_1.BetweenDateInput();\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createSimpleFieldInput = function (name, field) {\n\t        return new SimpleFieldInput_1.SimpleFieldInput(name, field, this.endpoint);\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createAdvancedFieldInput = function (name, field) {\n\t        return new AdvancedFieldInput_1.AdvancedFieldInput(name, field);\n\t    };\n\t    AdvancedSearchInputFactory.prototype.createSizeInput = function () {\n\t        return new SizeInput_1.SizeInput();\n\t    };\n\t    return AdvancedSearchInputFactory;\n\t}());\n\texports.AdvancedSearchInputFactory = AdvancedSearchInputFactory;\n\n\n/***/ },\n/* 259 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar KeywordsInput_1 = __webpack_require__(260);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar AllKeywordsInput = (function (_super) {\n\t    __extends(AllKeywordsInput, _super);\n\t    function AllKeywordsInput() {\n\t        return _super.call(this, Strings_1.l('AllTheseWords')) || this;\n\t    }\n\t    return AllKeywordsInput;\n\t}(KeywordsInput_1.KeywordsInput));\n\texports.AllKeywordsInput = AllKeywordsInput;\n\n\n/***/ },\n/* 260 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar TextInput_1 = __webpack_require__(261);\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeywordsInput = (function () {\n\t    function KeywordsInput(inputName) {\n\t        this.inputName = inputName;\n\t    }\n\t    KeywordsInput.prototype.reset = function () {\n\t        this.clear();\n\t    };\n\t    KeywordsInput.prototype.build = function () {\n\t        this.input = new TextInput_1.TextInput(this.onChange.bind(this), this.inputName);\n\t        return this.input.getElement();\n\t    };\n\t    KeywordsInput.prototype.setValue = function (value) {\n\t        this.input.setValue(value);\n\t    };\n\t    KeywordsInput.prototype.getValue = function () {\n\t        return this.input.getValue();\n\t    };\n\t    KeywordsInput.prototype.clear = function () {\n\t        this.input.setValue('');\n\t    };\n\t    KeywordsInput.prototype.updateQuery = function (queryBuilder) {\n\t        var value = this.getValue();\n\t        if (value) {\n\t            queryBuilder.advancedExpression.add(value);\n\t        }\n\t    };\n\t    KeywordsInput.prototype.onChange = function () {\n\t        if (this.input) {\n\t            Dom_1.$$(this.input.getElement()).trigger(AdvancedSearchEvents_1.AdvancedSearchEvents.executeAdvancedSearch);\n\t        }\n\t    };\n\t    return KeywordsInput;\n\t}());\n\texports.KeywordsInput = KeywordsInput;\n\n\n/***/ },\n/* 261 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\t/**\n\t * This class will create a text input meant to be used inside the {@link AdvancedSearch} component.\n\t *\n\t * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n\t */\n\tvar TextInput = (function () {\n\t    /**\n\t     * Create a new text input.\n\t     * @param onChange will be called every time the text input change it's value. `this` will be the `TextInput` instance.\n\t     * @param name\n\t     */\n\t    function TextInput(onChange, name) {\n\t        if (onChange === void 0) { onChange = function () { }; }\n\t        this.onChange = onChange;\n\t        this.name = name;\n\t        this.lastQueryText = '';\n\t        this.buildContent();\n\t    }\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    TextInput.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Get the currently entered value in the text input.\n\t     * @returns {string}\n\t     */\n\t    TextInput.prototype.getValue = function () {\n\t        return Dom_1.$$(this.element).find('input').value;\n\t    };\n\t    /**\n\t     * Set the value in the text input.\n\t     * @param value\n\t     */\n\t    TextInput.prototype.setValue = function (value) {\n\t        Dom_1.$$(this.element).find('input').value = value;\n\t    };\n\t    /**\n\t     * Reset the text input\n\t     */\n\t    TextInput.prototype.reset = function () {\n\t        Dom_1.$$(this.element).find('input').value = '';\n\t    };\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    TextInput.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    TextInput.prototype.buildContent = function () {\n\t        var _this = this;\n\t        var container = Dom_1.$$('div', { className: 'coveo-input' });\n\t        var input = Dom_1.$$('input', { type: 'text' });\n\t        input.on(['keydown', 'blur'], function (e) {\n\t            if (e.type == 'blur' || e.keyCode == KeyboardUtils_1.KEYBOARD.ENTER) {\n\t                _this.triggerChange();\n\t            }\n\t        });\n\t        input.el.required = true;\n\t        container.append(input.el);\n\t        if (this.name) {\n\t            var label = Dom_1.$$('label');\n\t            label.text(this.name);\n\t            container.append(label.el);\n\t        }\n\t        this.element = container.el;\n\t    };\n\t    TextInput.prototype.getInput = function () {\n\t        return Dom_1.$$(this.element).find('input');\n\t    };\n\t    TextInput.prototype.triggerChange = function () {\n\t        if (this.lastQueryText != this.getInput().value) {\n\t            this.onChange();\n\t            this.lastQueryText = this.getInput().value;\n\t        }\n\t    };\n\t    return TextInput;\n\t}());\n\texports.TextInput = TextInput;\n\n\n/***/ },\n/* 262 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar KeywordsInput_1 = __webpack_require__(260);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar ExactKeywordsInput = (function (_super) {\n\t    __extends(ExactKeywordsInput, _super);\n\t    function ExactKeywordsInput() {\n\t        return _super.call(this, Strings_1.l('ExactPhrase')) || this;\n\t    }\n\t    ExactKeywordsInput.prototype.getValue = function () {\n\t        var value = _super.prototype.getValue.call(this);\n\t        return value ? '\\\"' + value + '\\\"' : '';\n\t    };\n\t    return ExactKeywordsInput;\n\t}(KeywordsInput_1.KeywordsInput));\n\texports.ExactKeywordsInput = ExactKeywordsInput;\n\n\n/***/ },\n/* 263 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar KeywordsInput_1 = __webpack_require__(260);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\tvar AnyKeywordsInput = (function (_super) {\n\t    __extends(AnyKeywordsInput, _super);\n\t    function AnyKeywordsInput() {\n\t        return _super.call(this, Strings_1.l('AnyOfTheseWords')) || this;\n\t    }\n\t    AnyKeywordsInput.prototype.getValue = function () {\n\t        var value = _super.prototype.getValue.call(this);\n\t        var splitValues = value.split(' ');\n\t        var generatedValue = '';\n\t        _.each(splitValues, function (splitValue) {\n\t            generatedValue += splitValue + ' OR ';\n\t        });\n\t        generatedValue = generatedValue.substr(0, generatedValue.length - 4);\n\t        return generatedValue;\n\t    };\n\t    return AnyKeywordsInput;\n\t}(KeywordsInput_1.KeywordsInput));\n\texports.AnyKeywordsInput = AnyKeywordsInput;\n\n\n/***/ },\n/* 264 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar KeywordsInput_1 = __webpack_require__(260);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\tvar NoneKeywordsInput = (function (_super) {\n\t    __extends(NoneKeywordsInput, _super);\n\t    function NoneKeywordsInput() {\n\t        return _super.call(this, Strings_1.l('NoneOfTheseWords')) || this;\n\t    }\n\t    NoneKeywordsInput.prototype.getValue = function () {\n\t        var value = _super.prototype.getValue.call(this);\n\t        var generatedValue = '';\n\t        if (value) {\n\t            var splitValues = value.split(' ');\n\t            _.each(splitValues, function (splitValue) {\n\t                generatedValue += ' NOT ' + splitValue;\n\t            });\n\t            generatedValue = generatedValue.substr(1);\n\t        }\n\t        return generatedValue;\n\t    };\n\t    return NoneKeywordsInput;\n\t}(KeywordsInput_1.KeywordsInput));\n\texports.NoneKeywordsInput = NoneKeywordsInput;\n\n\n/***/ },\n/* 265 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DateInput_1 = __webpack_require__(266);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\tvar AnytimeDateInput = (function (_super) {\n\t    __extends(AnytimeDateInput, _super);\n\t    function AnytimeDateInput() {\n\t        return _super.call(this, Strings_1.l('Anytime')) || this;\n\t    }\n\t    AnytimeDateInput.prototype.build = function () {\n\t        var _this = this;\n\t        _super.prototype.build.call(this);\n\t        var radio = this.getRadio();\n\t        radio.checked = true;\n\t        Dom_1.$$(radio).on('change', function () {\n\t            Dom_1.$$(_this.element).trigger(AdvancedSearchEvents_1.AdvancedSearchEvents.executeAdvancedSearch);\n\t        });\n\t        return this.element;\n\t    };\n\t    return AnytimeDateInput;\n\t}(DateInput_1.DateInput));\n\texports.AnytimeDateInput = AnytimeDateInput;\n\n\n/***/ },\n/* 266 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar RadioButton_1 = __webpack_require__(267);\n\tvar _ = __webpack_require__(16);\n\tvar DateInput = (function () {\n\t    function DateInput(inputName) {\n\t        this.inputName = inputName;\n\t        this.buildContent();\n\t    }\n\t    DateInput.prototype.reset = function () {\n\t        this.radio.reset();\n\t    };\n\t    DateInput.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    DateInput.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    DateInput.prototype.getValue = function () {\n\t        return '';\n\t    };\n\t    DateInput.prototype.isSelected = function () {\n\t        return this.getRadio().checked;\n\t    };\n\t    DateInput.prototype.updateQuery = function (queryBuilder) {\n\t        var value = this.getValue();\n\t        if (value) {\n\t            queryBuilder.advancedExpression.add(this.getValue());\n\t        }\n\t    };\n\t    DateInput.prototype.getRadio = function () {\n\t        return Dom_1.$$(this.element).find('input');\n\t    };\n\t    DateInput.prototype.buildContent = function () {\n\t        var _this = this;\n\t        this.radio = new RadioButton_1.RadioButton(function () {\n\t            _this.deactivateAllInputs();\n\t            _this.activateSelectedInput();\n\t        }, this.inputName);\n\t        this.element = this.radio.getElement();\n\t        Dom_1.$$(this.element).addClass('coveo-advanced-search-date-input-section');\n\t        Dom_1.$$(this.radio.getRadio()).addClass('coveo-advanced-search-date');\n\t        Dom_1.$$(this.radio.getLabel()).addClass('coveo-advanced-search-label');\n\t    };\n\t    DateInput.prototype.deactivateAllInputs = function () {\n\t        var elements = Dom_1.$$(this.element.parentElement).findAll('fieldset');\n\t        _.each(elements, function (element) {\n\t            element.disabled = true;\n\t        });\n\t    };\n\t    DateInput.prototype.activateSelectedInput = function () {\n\t        var elements = Dom_1.$$(this.element).findAll('fieldset');\n\t        _.each(elements, function (element) {\n\t            element.disabled = false;\n\t        });\n\t    };\n\t    DateInput.prototype.onChange = function () {\n\t        if (this.element) {\n\t            Dom_1.$$(this.element).trigger(AdvancedSearchEvents_1.AdvancedSearchEvents.executeAdvancedSearch);\n\t        }\n\t    };\n\t    return DateInput;\n\t}());\n\texports.DateInput = DateInput;\n\n\n/***/ },\n/* 267 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * This class will create a radio button meant to be used inside the {@link AdvancedSearch} component.\n\t *\n\t * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n\t */\n\tvar RadioButton = (function () {\n\t    /**\n\t     * Create a new Radio button.\n\t     * @param onChange will be called every time the radio button change it's value. `this` will be the `RadioButton` instance.\n\t     * @param label The label for the choice.\n\t     */\n\t    function RadioButton(onChange, label) {\n\t        if (onChange === void 0) { onChange = function () {\n\t        }; }\n\t        this.onChange = onChange;\n\t        this.label = label;\n\t        this.buildContent();\n\t    }\n\t    /**\n\t     * Reset the radio button\n\t     */\n\t    RadioButton.prototype.reset = function () {\n\t        this.element.checked = false;\n\t    };\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    RadioButton.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    RadioButton.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    RadioButton.prototype.getValue = function () {\n\t        return '';\n\t    };\n\t    /**\n\t     * Return true if the radio button is selected.\n\t     * @returns {boolean}\n\t     */\n\t    RadioButton.prototype.isSelected = function () {\n\t        return this.getRadio().checked;\n\t    };\n\t    /**\n\t     * Get the input element (the radio button itself).\n\t     * @returns {HTMLInputElement}\n\t     */\n\t    RadioButton.prototype.getRadio = function () {\n\t        return Dom_1.$$(this.element).find('input');\n\t    };\n\t    /**\n\t     * Get the label element.\n\t     * @returns {HTMLLabelElement}\n\t     */\n\t    RadioButton.prototype.getLabel = function () {\n\t        return Dom_1.$$(this.element).find('label');\n\t    };\n\t    RadioButton.prototype.buildContent = function () {\n\t        var _this = this;\n\t        var section = Dom_1.$$('div', { className: 'coveo-advanced-search-radio-section' });\n\t        var radioOption = Dom_1.$$('div', { className: 'coveo-radio' });\n\t        var radioInput = Dom_1.$$('input', { type: 'radio', name: 'coveo-advanced-search-radio-input', id: this.label });\n\t        var labelInput = Dom_1.$$('label', { className: 'coveo-advanced-search-radio-input-label', 'for': this.label });\n\t        labelInput.text(this.label);\n\t        radioInput.on('change', function () {\n\t            _this.onChange();\n\t        });\n\t        radioOption.append(radioInput.el);\n\t        radioOption.append(labelInput.el);\n\t        section.append(radioOption.el);\n\t        this.element = section.el;\n\t    };\n\t    return RadioButton;\n\t}());\n\texports.RadioButton = RadioButton;\n\n\n/***/ },\n/* 268 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DateInput_1 = __webpack_require__(266);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dropdown_1 = __webpack_require__(269);\n\tvar NumericSpinner_1 = __webpack_require__(270);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar InTheLastDateInput = (function (_super) {\n\t    __extends(InTheLastDateInput, _super);\n\t    function InTheLastDateInput() {\n\t        return _super.call(this, Strings_1.l('InTheLast')) || this;\n\t    }\n\t    InTheLastDateInput.prototype.reset = function () {\n\t        this.dropdown.reset();\n\t        this.spinner.reset();\n\t    };\n\t    InTheLastDateInput.prototype.build = function () {\n\t        _super.prototype.build.call(this);\n\t        var input = Dom_1.$$('fieldset', { className: 'coveo-advanced-search-date-input' });\n\t        input.el.disabled = true;\n\t        this.spinner = new NumericSpinner_1.NumericSpinner(this.onChange.bind(this));\n\t        input.append(this.spinner.getElement());\n\t        this.dropdown = new Dropdown_1.Dropdown(this.onChange.bind(this), ['days', 'months']);\n\t        this.dropdown.setId('coveo-advanced-search-in-the-last-select');\n\t        input.append(this.dropdown.getElement());\n\t        this.element.appendChild(input.el);\n\t        return this.element;\n\t    };\n\t    InTheLastDateInput.prototype.getValue = function () {\n\t        var currentDate = new Date();\n\t        var time = this.spinner.getIntValue();\n\t        var size = this.dropdown.getValue().toLowerCase();\n\t        var date = new Date();\n\t        if (size == 'months') {\n\t            date.setMonth(currentDate.getMonth() - time);\n\t        }\n\t        else {\n\t            date.setDate(currentDate.getDate() - time);\n\t        }\n\t        return this.isSelected() && time ? '@date>=' + DateUtils_1.DateUtils.dateForQuery(date) : '';\n\t    };\n\t    return InTheLastDateInput;\n\t}(DateInput_1.DateInput));\n\texports.InTheLastDateInput = InTheLastDateInput;\n\n\n/***/ },\n/* 269 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * This class will create a dropdown meant to be used inside the {@link AdvancedSearch} component.\n\t *\n\t * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n\t */\n\tvar Dropdown = (function () {\n\t    /**\n\t     * Create a new dropdown.\n\t     * @param onChange will be called every time the dropdown change it's value. `this` will be the `Dropdown` instance.\n\t     * @param listOfValues will be the list of selectable values in the dropdown\n\t     * @param getDisplayValue An optional function that allow to modify the display value vs the actual value from the `listOfValues`\n\t     * @param label A label/title to display for this dropdown\n\t     */\n\t    function Dropdown(onChange, listOfValues, getDisplayValue, label) {\n\t        if (onChange === void 0) { onChange = function () {\n\t        }; }\n\t        if (getDisplayValue === void 0) { getDisplayValue = Strings_1.l; }\n\t        this.onChange = onChange;\n\t        this.listOfValues = listOfValues;\n\t        this.getDisplayValue = getDisplayValue;\n\t        this.label = label;\n\t        this.optionsElement = [];\n\t        this.buildContent();\n\t        this.select(0, false);\n\t        this.bindEvents();\n\t    }\n\t    /**\n\t     * Reset the dropdown\n\t     */\n\t    Dropdown.prototype.reset = function () {\n\t        this.select(0, false);\n\t    };\n\t    Dropdown.prototype.setId = function (id) {\n\t        Dom_1.$$(this.element).setAttribute('id', id);\n\t    };\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    Dropdown.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Get the currently selected value in the dropdown.\n\t     * @returns {string}\n\t     */\n\t    Dropdown.prototype.getValue = function () {\n\t        return this.selectElement.value;\n\t    };\n\t    /**\n\t     * Select a value from it's 0 based index in the {@link Dropdown.listOfValues}.\n\t     * @param index\n\t     */\n\t    Dropdown.prototype.select = function (index, executeOnChange) {\n\t        if (executeOnChange === void 0) { executeOnChange = true; }\n\t        this.selectOption(this.optionsElement[index], executeOnChange);\n\t    };\n\t    /**\n\t     * Return the element on which the dropdown is bound.\n\t     * @returns {HTMLElement}\n\t     */\n\t    Dropdown.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    Dropdown.prototype.buildContent = function () {\n\t        var _this = this;\n\t        this.selectElement = Dom_1.$$('select', { className: 'coveo-dropdown' }).el;\n\t        var selectOptions = this.buildOptions();\n\t        _.each(selectOptions, function (opt) {\n\t            Dom_1.$$(_this.selectElement).append(opt);\n\t        });\n\t        this.element = this.selectElement;\n\t    };\n\t    Dropdown.prototype.selectValue = function (value) {\n\t        var _this = this;\n\t        _.each(this.optionsElement, function (option) {\n\t            if (Dom_1.$$(option).getAttribute('data-value') == value) {\n\t                _this.selectOption(option);\n\t            }\n\t        });\n\t    };\n\t    Dropdown.prototype.selectOption = function (option, executeOnChange) {\n\t        if (executeOnChange === void 0) { executeOnChange = true; }\n\t        this.selectElement.value = option.value;\n\t        if (executeOnChange) {\n\t            this.onChange();\n\t        }\n\t    };\n\t    Dropdown.prototype.buildOptions = function () {\n\t        var _this = this;\n\t        var ret = [];\n\t        _.each(this.listOfValues, function (value) {\n\t            ret.push(_this.buildOption(value));\n\t        });\n\t        return ret;\n\t    };\n\t    Dropdown.prototype.buildOption = function (value) {\n\t        var option = Dom_1.$$('option');\n\t        option.setAttribute('data-value', value);\n\t        option.setAttribute('value', value);\n\t        option.text(this.getDisplayValue(value));\n\t        this.optionsElement.push(option.el);\n\t        return option.el;\n\t    };\n\t    Dropdown.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.selectElement).on('change', function () { return _this.onChange(); });\n\t    };\n\t    return Dropdown;\n\t}());\n\texports.Dropdown = Dropdown;\n\n\n/***/ },\n/* 270 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * This class will create a numeric spinner meant to be used inside the {@link AdvancedSearch} component.\n\t *\n\t * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n\t */\n\tvar NumericSpinner = (function () {\n\t    /**\n\t     * Create a new numeric spinner.\n\t     *\n\t     * @param onChange will be called every time the numeric spinner change it's value. `this` will be the `NumericSpinner` instance.\n\t     * @param min will be the minimum value selectable by the spinner\n\t     * @param max will be the maximum value selectable by the spinner\n\t     */\n\t    function NumericSpinner(onChange, min, max) {\n\t        if (onChange === void 0) { onChange = function () {\n\t        }; }\n\t        if (min === void 0) { min = 0; }\n\t        this.onChange = onChange;\n\t        this.min = min;\n\t        this.max = max;\n\t        this.buildContent();\n\t        this.bindEvents();\n\t    }\n\t    /**\n\t     * Reset the spinner\n\t     */\n\t    NumericSpinner.prototype.reset = function () {\n\t        this.getSpinnerInput().value = '';\n\t    };\n\t    /**\n\t     * Return the element on which the spinner is bound.\n\t     * @returns {HTMLInputElement}\n\t     */\n\t    NumericSpinner.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Return the current selected value in the spinner, as an int.\n\t     * @returns {number}\n\t     */\n\t    NumericSpinner.prototype.getIntValue = function () {\n\t        return this.getSpinnerInput().value ? parseInt(this.getSpinnerInput().value, 10) : this.min;\n\t    };\n\t    /**\n\t     * Return the current selected value in the spinner, as a float.\n\t     * @returns {number}\n\t     */\n\t    NumericSpinner.prototype.getFloatValue = function () {\n\t        return this.getSpinnerInput().value ? parseFloat(this.getSpinnerInput().value) : this.min;\n\t    };\n\t    /**\n\t     * Set the value in the spinner.\n\t     *\n\t     * @param value\n\t     */\n\t    NumericSpinner.prototype.setValue = function (value) {\n\t        if (this.max && value > this.max) {\n\t            value = this.max;\n\t        }\n\t        if (value < this.min) {\n\t            value = this.min;\n\t        }\n\t        this.getSpinnerInput().value = value.toString();\n\t        this.onChange();\n\t    };\n\t    /**\n\t     * Return the element on which the spinner is bound.\n\t     */\n\t    NumericSpinner.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    NumericSpinner.prototype.buildContent = function () {\n\t        var numericSpinner = Dom_1.$$('div', { className: 'coveo-numeric-spinner' });\n\t        var numberInput = Dom_1.$$('input', { className: 'coveo-advanced-search-number-input', type: 'text' });\n\t        var addOn = Dom_1.$$('span', { className: 'coveo-add-on' });\n\t        addOn.el.innerHTML = \"<div class=\\\"coveo-spinner-up\\\">\\n                              <i class=\\\"coveo-sprites-arrow-up\\\"></i>\\n                          </div>\\n                          <div class=\\\"coveo-spinner-down\\\">\\n                              <i class=\\\"coveo-sprites-arrow-down\\\"></i>\\n                          </div>\";\n\t        numericSpinner.append(numberInput.el);\n\t        numericSpinner.append(addOn.el);\n\t        this.element = numericSpinner.el;\n\t    };\n\t    NumericSpinner.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        var up = Dom_1.$$(this.element).find('.coveo-spinner-up');\n\t        Dom_1.$$(up).on('click', function () {\n\t            _this.setValue(_this.getFloatValue() + 1);\n\t        });\n\t        var down = Dom_1.$$(this.element).find('.coveo-spinner-down');\n\t        Dom_1.$$(down).on('click', function () {\n\t            _this.setValue(_this.getFloatValue() - 1);\n\t        });\n\t        var numberInput = Dom_1.$$(this.element).find('input');\n\t        Dom_1.$$(numberInput).on('input', function () {\n\t            if (numberInput.value.match(/[0-9]*/)) {\n\t                _this.onChange();\n\t            }\n\t        });\n\t    };\n\t    NumericSpinner.prototype.getSpinnerInput = function () {\n\t        return Dom_1.$$(this.element).find('.coveo-advanced-search-number-input');\n\t    };\n\t    return NumericSpinner;\n\t}());\n\texports.NumericSpinner = NumericSpinner;\n\n\n/***/ },\n/* 271 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar DateInput_1 = __webpack_require__(266);\n\tvar DatePicker_1 = __webpack_require__(272);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar BetweenDateInput = (function (_super) {\n\t    __extends(BetweenDateInput, _super);\n\t    function BetweenDateInput() {\n\t        var _this = _super.call(this, Strings_1.l('Between')) || this;\n\t        _this.firstDatePicker = new DatePicker_1.DatePicker(_this.onChange.bind(_this));\n\t        _this.secondDatePicker = new DatePicker_1.DatePicker(_this.onChange.bind(_this));\n\t        return _this;\n\t    }\n\t    BetweenDateInput.prototype.reset = function () {\n\t        this.firstDatePicker.reset();\n\t        this.secondDatePicker.reset();\n\t    };\n\t    BetweenDateInput.prototype.build = function () {\n\t        _super.prototype.build.call(this);\n\t        var container = Dom_1.$$('fieldset', { className: 'coveo-advanced-search-date-input' });\n\t        container.el.disabled = true;\n\t        container.append(this.firstDatePicker.getElement());\n\t        container.append(this.buildAnd());\n\t        container.append(this.secondDatePicker.getElement());\n\t        this.element.appendChild(container.el);\n\t        return this.element;\n\t    };\n\t    BetweenDateInput.prototype.getValue = function () {\n\t        var firstDate = this.firstDatePicker.getValue();\n\t        var secondDate = this.secondDatePicker.getValue();\n\t        var query = '';\n\t        if (firstDate) {\n\t            query += \"(@date>=\" + firstDate + \")\";\n\t        }\n\t        if (secondDate) {\n\t            query += \"(@date<=\" + secondDate + \")\";\n\t        }\n\t        return this.isSelected() ? query : '';\n\t    };\n\t    BetweenDateInput.prototype.buildAnd = function () {\n\t        var and = Dom_1.$$('div', { className: 'coveo-advanced-search-and' });\n\t        and.text(Strings_1.l('And').toLowerCase());\n\t        return and.el;\n\t    };\n\t    return BetweenDateInput;\n\t}(DateInput_1.DateInput));\n\texports.BetweenDateInput = BetweenDateInput;\n\n\n/***/ },\n/* 272 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DateUtils_1 = __webpack_require__(60);\n\tvar Pikaday = __webpack_require__(273);\n\t/**\n\t * This class will create a date picker meant to be used inside the {@link AdvancedSearch} component.\n\t *\n\t * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n\t */\n\tvar DatePicker = (function () {\n\t    /**\n\t     * Create a new date picker.\n\t     * @param onChange will be called every time the date picker change it's value. `this` will be the `DatePicker` instance.\n\t     */\n\t    function DatePicker(onChange) {\n\t        if (onChange === void 0) { onChange = function () { }; }\n\t        this.onChange = onChange;\n\t        this.wasReset = false;\n\t        this.buildContent();\n\t    }\n\t    /**\n\t     * Reset the date picker\n\t     */\n\t    DatePicker.prototype.reset = function () {\n\t        this.picker.setDate(undefined);\n\t        this.wasReset = true;\n\t    };\n\t    /**\n\t     * Return the element on which the date picker is bound.\n\t     * @returns {HTMLInputElement}\n\t     */\n\t    DatePicker.prototype.getElement = function () {\n\t        return this.element;\n\t    };\n\t    /**\n\t     * Get the current value for the date picker.\n\t     * @returns {string}\n\t     */\n\t    DatePicker.prototype.getValue = function () {\n\t        if (this.wasReset) {\n\t            return '';\n\t        }\n\t        var date = this.picker.getDate();\n\t        return date ? DateUtils_1.DateUtils.dateForQuery(this.picker.getDate()) : '';\n\t    };\n\t    /**\n\t     * Set the current value for the date picker.\n\t     * @param date\n\t     */\n\t    DatePicker.prototype.setValue = function (date) {\n\t        this.picker.setDate(date);\n\t        this.wasReset = false;\n\t    };\n\t    /**\n\t     * Return the element on which the date picker is bound.\n\t     * @returns {HTMLInputElement}\n\t     */\n\t    DatePicker.prototype.build = function () {\n\t        return this.element;\n\t    };\n\t    DatePicker.prototype.buildContent = function () {\n\t        this.element = Dom_1.$$('input', { className: 'coveo-button' }).el;\n\t        this.element.readOnly = true;\n\t        this.picker = new Pikaday({\n\t            field: this.element,\n\t            onSelect: this.onChange\n\t        });\n\t    };\n\t    return DatePicker;\n\t}());\n\texports.DatePicker = DatePicker;\n\n\n/***/ },\n/* 273 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/*!\n\t * Pikaday\n\t *\n\t * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n\t */\n\t\n\t(function (root, factory)\n\t{\n\t    'use strict';\n\t\n\t    var moment;\n\t    if (true) {\n\t        // CommonJS module\n\t        // Load moment.js as an optional dependency\n\t        try { moment = __webpack_require__(274); } catch (e) {}\n\t        module.exports = factory(moment);\n\t    } else if (typeof define === 'function' && define.amd) {\n\t        // AMD. Register as an anonymous module.\n\t        define(function (req)\n\t        {\n\t            // Load moment.js as an optional dependency\n\t            var id = 'moment';\n\t            try { moment = req(id); } catch (e) {}\n\t            return factory(moment);\n\t        });\n\t    } else {\n\t        root.Pikaday = factory(root.moment);\n\t    }\n\t}(this, function (moment)\n\t{\n\t    'use strict';\n\t\n\t    /**\n\t     * feature detection and helper functions\n\t     */\n\t    var hasMoment = typeof moment === 'function',\n\t\n\t    hasEventListeners = !!window.addEventListener,\n\t\n\t    document = window.document,\n\t\n\t    sto = window.setTimeout,\n\t\n\t    addEvent = function(el, e, callback, capture)\n\t    {\n\t        if (hasEventListeners) {\n\t            el.addEventListener(e, callback, !!capture);\n\t        } else {\n\t            el.attachEvent('on' + e, callback);\n\t        }\n\t    },\n\t\n\t    removeEvent = function(el, e, callback, capture)\n\t    {\n\t        if (hasEventListeners) {\n\t            el.removeEventListener(e, callback, !!capture);\n\t        } else {\n\t            el.detachEvent('on' + e, callback);\n\t        }\n\t    },\n\t\n\t    fireEvent = function(el, eventName, data)\n\t    {\n\t        var ev;\n\t\n\t        if (document.createEvent) {\n\t            ev = document.createEvent('HTMLEvents');\n\t            ev.initEvent(eventName, true, false);\n\t            ev = extend(ev, data);\n\t            el.dispatchEvent(ev);\n\t        } else if (document.createEventObject) {\n\t            ev = document.createEventObject();\n\t            ev = extend(ev, data);\n\t            el.fireEvent('on' + eventName, ev);\n\t        }\n\t    },\n\t\n\t    trim = function(str)\n\t    {\n\t        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n\t    },\n\t\n\t    hasClass = function(el, cn)\n\t    {\n\t        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n\t    },\n\t\n\t    addClass = function(el, cn)\n\t    {\n\t        if (!hasClass(el, cn)) {\n\t            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n\t        }\n\t    },\n\t\n\t    removeClass = function(el, cn)\n\t    {\n\t        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n\t    },\n\t\n\t    isArray = function(obj)\n\t    {\n\t        return (/Array/).test(Object.prototype.toString.call(obj));\n\t    },\n\t\n\t    isDate = function(obj)\n\t    {\n\t        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n\t    },\n\t\n\t    isWeekend = function(date)\n\t    {\n\t        var day = date.getDay();\n\t        return day === 0 || day === 6;\n\t    },\n\t\n\t    isLeapYear = function(year)\n\t    {\n\t        // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n\t        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n\t    },\n\t\n\t    getDaysInMonth = function(year, month)\n\t    {\n\t        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t    },\n\t\n\t    setToStartOfDay = function(date)\n\t    {\n\t        if (isDate(date)) date.setHours(0,0,0,0);\n\t    },\n\t\n\t    compareDates = function(a,b)\n\t    {\n\t        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n\t        return a.getTime() === b.getTime();\n\t    },\n\t\n\t    extend = function(to, from, overwrite)\n\t    {\n\t        var prop, hasProp;\n\t        for (prop in from) {\n\t            hasProp = to[prop] !== undefined;\n\t            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n\t                if (isDate(from[prop])) {\n\t                    if (overwrite) {\n\t                        to[prop] = new Date(from[prop].getTime());\n\t                    }\n\t                }\n\t                else if (isArray(from[prop])) {\n\t                    if (overwrite) {\n\t                        to[prop] = from[prop].slice(0);\n\t                    }\n\t                } else {\n\t                    to[prop] = extend({}, from[prop], overwrite);\n\t                }\n\t            } else if (overwrite || !hasProp) {\n\t                to[prop] = from[prop];\n\t            }\n\t        }\n\t        return to;\n\t    },\n\t\n\t    adjustCalendar = function(calendar) {\n\t        if (calendar.month < 0) {\n\t            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n\t            calendar.month += 12;\n\t        }\n\t        if (calendar.month > 11) {\n\t            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n\t            calendar.month -= 12;\n\t        }\n\t        return calendar;\n\t    },\n\t\n\t    /**\n\t     * defaults and localisation\n\t     */\n\t    defaults = {\n\t\n\t        // bind the picker to a form field\n\t        field: null,\n\t\n\t        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n\t        bound: undefined,\n\t\n\t        // position of the datepicker, relative to the field (default to bottom & left)\n\t        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n\t        position: 'bottom left',\n\t\n\t        // automatically fit in the viewport even if it means repositioning from the position option\n\t        reposition: true,\n\t\n\t        // the default output format for `.toString()` and `field` value\n\t        format: 'YYYY-MM-DD',\n\t\n\t        // the initial date to view when first opened\n\t        defaultDate: null,\n\t\n\t        // make the `defaultDate` the initial selected value\n\t        setDefaultDate: false,\n\t\n\t        // first day of week (0: Sunday, 1: Monday etc)\n\t        firstDay: 0,\n\t\n\t        // the minimum/earliest date that can be selected\n\t        minDate: null,\n\t        // the maximum/latest date that can be selected\n\t        maxDate: null,\n\t\n\t        // number of years either side, or array of upper/lower range\n\t        yearRange: 10,\n\t\n\t        // show week numbers at head of row\n\t        showWeekNumber: false,\n\t\n\t        // used internally (don't config outside)\n\t        minYear: 0,\n\t        maxYear: 9999,\n\t        minMonth: undefined,\n\t        maxMonth: undefined,\n\t\n\t        startRange: null,\n\t        endRange: null,\n\t\n\t        isRTL: false,\n\t\n\t        // Additional text to append to the year in the calendar title\n\t        yearSuffix: '',\n\t\n\t        // Render the month after year in the calendar title\n\t        showMonthAfterYear: false,\n\t\n\t        // how many months are visible\n\t        numberOfMonths: 1,\n\t\n\t        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n\t        // only used for the first display or when a selected date is not visible\n\t        mainCalendar: 'left',\n\t\n\t        // Specify a DOM element to render the calendar in\n\t        container: undefined,\n\t\n\t        // internationalization\n\t        i18n: {\n\t            previousMonth : 'Previous Month',\n\t            nextMonth     : 'Next Month',\n\t            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n\t            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n\t            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n\t        },\n\t\n\t        // Theme Classname\n\t        theme: null,\n\t\n\t        // callback function\n\t        onSelect: null,\n\t        onOpen: null,\n\t        onClose: null,\n\t        onDraw: null\n\t    },\n\t\n\t\n\t    /**\n\t     * templating functions to abstract HTML rendering\n\t     */\n\t    renderDayName = function(opts, day, abbr)\n\t    {\n\t        day += opts.firstDay;\n\t        while (day >= 7) {\n\t            day -= 7;\n\t        }\n\t        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n\t    },\n\t\n\t    renderDay = function(opts)\n\t    {\n\t        if (opts.isEmpty) {\n\t            return '<td class=\"is-empty\"></td>';\n\t        }\n\t        var arr = [];\n\t        if (opts.isDisabled) {\n\t            arr.push('is-disabled');\n\t        }\n\t        if (opts.isToday) {\n\t            arr.push('is-today');\n\t        }\n\t        if (opts.isSelected) {\n\t            arr.push('is-selected');\n\t        }\n\t        if (opts.isInRange) {\n\t            arr.push('is-inrange');\n\t        }\n\t        if (opts.isStartRange) {\n\t            arr.push('is-startrange');\n\t        }\n\t        if (opts.isEndRange) {\n\t            arr.push('is-endrange');\n\t        }\n\t        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\">' +\n\t                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n\t                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n\t                        opts.day +\n\t                 '</button>' +\n\t               '</td>';\n\t    },\n\t\n\t    renderWeek = function (d, m, y) {\n\t        // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n\t        var onejan = new Date(y, 0, 1),\n\t            weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n\t        return '<td class=\"pika-week\">' + weekNum + '</td>';\n\t    },\n\t\n\t    renderRow = function(days, isRTL)\n\t    {\n\t        return '<tr>' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n\t    },\n\t\n\t    renderBody = function(rows)\n\t    {\n\t        return '<tbody>' + rows.join('') + '</tbody>';\n\t    },\n\t\n\t    renderHead = function(opts)\n\t    {\n\t        var i, arr = [];\n\t        if (opts.showWeekNumber) {\n\t            arr.push('<th></th>');\n\t        }\n\t        for (i = 0; i < 7; i++) {\n\t            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n\t        }\n\t        return '<thead>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</thead>';\n\t    },\n\t\n\t    renderTitle = function(instance, c, year, month, refYear)\n\t    {\n\t        var i, j, arr,\n\t            opts = instance._o,\n\t            isMinYear = year === opts.minYear,\n\t            isMaxYear = year === opts.maxYear,\n\t            html = '<div class=\"pika-title\">',\n\t            monthHtml,\n\t            yearHtml,\n\t            prev = true,\n\t            next = true;\n\t\n\t        for (arr = [], i = 0; i < 12; i++) {\n\t            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n\t                (i === month ? ' selected': '') +\n\t                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled' : '') + '>' +\n\t                opts.i18n.months[i] + '</option>');\n\t        }\n\t        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\t\n\t        if (isArray(opts.yearRange)) {\n\t            i = opts.yearRange[0];\n\t            j = opts.yearRange[1] + 1;\n\t        } else {\n\t            i = year - opts.yearRange;\n\t            j = 1 + year + opts.yearRange;\n\t        }\n\t\n\t        for (arr = []; i < j && i <= opts.maxYear; i++) {\n\t            if (i >= opts.minYear) {\n\t                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected': '') + '>' + (i) + '</option>');\n\t            }\n\t        }\n\t        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\t\n\t        if (opts.showMonthAfterYear) {\n\t            html += yearHtml + monthHtml;\n\t        } else {\n\t            html += monthHtml + yearHtml;\n\t        }\n\t\n\t        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n\t            prev = false;\n\t        }\n\t\n\t        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n\t            next = false;\n\t        }\n\t\n\t        if (c === 0) {\n\t            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n\t        }\n\t        if (c === (instance._o.numberOfMonths - 1) ) {\n\t            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n\t        }\n\t\n\t        return html += '</div>';\n\t    },\n\t\n\t    renderTable = function(opts, data)\n\t    {\n\t        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\">' + renderHead(opts) + renderBody(data) + '</table>';\n\t    },\n\t\n\t\n\t    /**\n\t     * Pikaday constructor\n\t     */\n\t    Pikaday = function(options)\n\t    {\n\t        var self = this,\n\t            opts = self.config(options);\n\t\n\t        self._onMouseDown = function(e)\n\t        {\n\t            if (!self._v) {\n\t                return;\n\t            }\n\t            e = e || window.event;\n\t            var target = e.target || e.srcElement;\n\t            if (!target) {\n\t                return;\n\t            }\n\t\n\t            if (!hasClass(target, 'is-disabled')) {\n\t                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty')) {\n\t                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n\t                    if (opts.bound) {\n\t                        sto(function() {\n\t                            self.hide();\n\t                            if (opts.field) {\n\t                                opts.field.blur();\n\t                            }\n\t                        }, 100);\n\t                    }\n\t                }\n\t                else if (hasClass(target, 'pika-prev')) {\n\t                    self.prevMonth();\n\t                }\n\t                else if (hasClass(target, 'pika-next')) {\n\t                    self.nextMonth();\n\t                }\n\t            }\n\t            if (!hasClass(target, 'pika-select')) {\n\t                // if this is touch event prevent mouse events emulation\n\t                if (e.preventDefault) {\n\t                    e.preventDefault();\n\t                } else {\n\t                    e.returnValue = false;\n\t                    return false;\n\t                }\n\t            } else {\n\t                self._c = true;\n\t            }\n\t        };\n\t\n\t        self._onChange = function(e)\n\t        {\n\t            e = e || window.event;\n\t            var target = e.target || e.srcElement;\n\t            if (!target) {\n\t                return;\n\t            }\n\t            if (hasClass(target, 'pika-select-month')) {\n\t                self.gotoMonth(target.value);\n\t            }\n\t            else if (hasClass(target, 'pika-select-year')) {\n\t                self.gotoYear(target.value);\n\t            }\n\t        };\n\t\n\t        self._onInputChange = function(e)\n\t        {\n\t            var date;\n\t\n\t            if (e.firedBy === self) {\n\t                return;\n\t            }\n\t            if (hasMoment) {\n\t                date = moment(opts.field.value, opts.format);\n\t                date = (date && date.isValid()) ? date.toDate() : null;\n\t            }\n\t            else {\n\t                date = new Date(Date.parse(opts.field.value));\n\t            }\n\t            if (isDate(date)) {\n\t              self.setDate(date);\n\t            }\n\t            if (!self._v) {\n\t                self.show();\n\t            }\n\t        };\n\t\n\t        self._onInputFocus = function()\n\t        {\n\t            self.show();\n\t        };\n\t\n\t        self._onInputClick = function()\n\t        {\n\t            self.show();\n\t        };\n\t\n\t        self._onInputBlur = function()\n\t        {\n\t            // IE allows pika div to gain focus; catch blur the input field\n\t            var pEl = document.activeElement;\n\t            do {\n\t                if (hasClass(pEl, 'pika-single')) {\n\t                    return;\n\t                }\n\t            }\n\t            while ((pEl = pEl.parentNode));\n\t\n\t            if (!self._c) {\n\t                self._b = sto(function() {\n\t                    self.hide();\n\t                }, 50);\n\t            }\n\t            self._c = false;\n\t        };\n\t\n\t        self._onClick = function(e)\n\t        {\n\t            e = e || window.event;\n\t            var target = e.target || e.srcElement,\n\t                pEl = target;\n\t            if (!target) {\n\t                return;\n\t            }\n\t            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n\t                if (!target.onchange) {\n\t                    target.setAttribute('onchange', 'return;');\n\t                    addEvent(target, 'change', self._onChange);\n\t                }\n\t            }\n\t            do {\n\t                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n\t                    return;\n\t                }\n\t            }\n\t            while ((pEl = pEl.parentNode));\n\t            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n\t                self.hide();\n\t            }\n\t        };\n\t\n\t        self.el = document.createElement('div');\n\t        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\t\n\t        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n\t        addEvent(self.el, 'touchend', self._onMouseDown, true);\n\t        addEvent(self.el, 'change', self._onChange);\n\t\n\t        if (opts.field) {\n\t            if (opts.container) {\n\t                opts.container.appendChild(self.el);\n\t            } else if (opts.bound) {\n\t                document.body.appendChild(self.el);\n\t            } else {\n\t                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n\t            }\n\t            addEvent(opts.field, 'change', self._onInputChange);\n\t\n\t            if (!opts.defaultDate) {\n\t                if (hasMoment && opts.field.value) {\n\t                    opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n\t                } else {\n\t                    opts.defaultDate = new Date(Date.parse(opts.field.value));\n\t                }\n\t                opts.setDefaultDate = true;\n\t            }\n\t        }\n\t\n\t        var defDate = opts.defaultDate;\n\t\n\t        if (isDate(defDate)) {\n\t            if (opts.setDefaultDate) {\n\t                self.setDate(defDate, true);\n\t            } else {\n\t                self.gotoDate(defDate);\n\t            }\n\t        } else {\n\t            self.gotoDate(new Date());\n\t        }\n\t\n\t        if (opts.bound) {\n\t            this.hide();\n\t            self.el.className += ' is-bound';\n\t            addEvent(opts.trigger, 'click', self._onInputClick);\n\t            addEvent(opts.trigger, 'focus', self._onInputFocus);\n\t            addEvent(opts.trigger, 'blur', self._onInputBlur);\n\t        } else {\n\t            this.show();\n\t        }\n\t    };\n\t\n\t\n\t    /**\n\t     * public Pikaday API\n\t     */\n\t    Pikaday.prototype = {\n\t\n\t\n\t        /**\n\t         * configure functionality\n\t         */\n\t        config: function(options)\n\t        {\n\t            if (!this._o) {\n\t                this._o = extend({}, defaults, true);\n\t            }\n\t\n\t            var opts = extend(this._o, options, true);\n\t\n\t            opts.isRTL = !!opts.isRTL;\n\t\n\t            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\t\n\t            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\t\n\t            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\t\n\t            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\t\n\t            opts.disableWeekends = !!opts.disableWeekends;\n\t\n\t            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\t\n\t            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n\t            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\t\n\t            if (!isDate(opts.minDate)) {\n\t                opts.minDate = false;\n\t            }\n\t            if (!isDate(opts.maxDate)) {\n\t                opts.maxDate = false;\n\t            }\n\t            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n\t                opts.maxDate = opts.minDate = false;\n\t            }\n\t            if (opts.minDate) {\n\t                this.setMinDate(opts.minDate);\n\t            }\n\t            if (opts.maxDate) {\n\t                this.setMaxDate(opts.maxDate);\n\t            }\n\t\n\t            if (isArray(opts.yearRange)) {\n\t                var fallback = new Date().getFullYear() - 10;\n\t                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n\t                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n\t            } else {\n\t                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n\t                if (opts.yearRange > 100) {\n\t                    opts.yearRange = 100;\n\t                }\n\t            }\n\t\n\t            return opts;\n\t        },\n\t\n\t        /**\n\t         * return a formatted string of the current selection (using Moment.js if available)\n\t         */\n\t        toString: function(format)\n\t        {\n\t            return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString();\n\t        },\n\t\n\t        /**\n\t         * return a Moment.js object of the current selection (if available)\n\t         */\n\t        getMoment: function()\n\t        {\n\t            return hasMoment ? moment(this._d) : null;\n\t        },\n\t\n\t        /**\n\t         * set the current selection from a Moment.js object (if available)\n\t         */\n\t        setMoment: function(date, preventOnSelect)\n\t        {\n\t            if (hasMoment && moment.isMoment(date)) {\n\t                this.setDate(date.toDate(), preventOnSelect);\n\t            }\n\t        },\n\t\n\t        /**\n\t         * return a Date object of the current selection\n\t         */\n\t        getDate: function()\n\t        {\n\t            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n\t        },\n\t\n\t        /**\n\t         * set the current selection\n\t         */\n\t        setDate: function(date, preventOnSelect)\n\t        {\n\t            if (!date) {\n\t                this._d = null;\n\t\n\t                if (this._o.field) {\n\t                    this._o.field.value = '';\n\t                    fireEvent(this._o.field, 'change', { firedBy: this });\n\t                }\n\t\n\t                return this.draw();\n\t            }\n\t            if (typeof date === 'string') {\n\t                date = new Date(Date.parse(date));\n\t            }\n\t            if (!isDate(date)) {\n\t                return;\n\t            }\n\t\n\t            var min = this._o.minDate,\n\t                max = this._o.maxDate;\n\t\n\t            if (isDate(min) && date < min) {\n\t                date = min;\n\t            } else if (isDate(max) && date > max) {\n\t                date = max;\n\t            }\n\t\n\t            this._d = new Date(date.getTime());\n\t            setToStartOfDay(this._d);\n\t            this.gotoDate(this._d);\n\t\n\t            if (this._o.field) {\n\t                this._o.field.value = this.toString();\n\t                fireEvent(this._o.field, 'change', { firedBy: this });\n\t            }\n\t            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n\t                this._o.onSelect.call(this, this.getDate());\n\t            }\n\t        },\n\t\n\t        /**\n\t         * change view to a specific date\n\t         */\n\t        gotoDate: function(date)\n\t        {\n\t            var newCalendar = true;\n\t\n\t            if (!isDate(date)) {\n\t                return;\n\t            }\n\t\n\t            if (this.calendars) {\n\t                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n\t                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n\t                    visibleDate = date.getTime();\n\t                // get the end of the month\n\t                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n\t                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n\t                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n\t            }\n\t\n\t            if (newCalendar) {\n\t                this.calendars = [{\n\t                    month: date.getMonth(),\n\t                    year: date.getFullYear()\n\t                }];\n\t                if (this._o.mainCalendar === 'right') {\n\t                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n\t                }\n\t            }\n\t\n\t            this.adjustCalendars();\n\t        },\n\t\n\t        adjustCalendars: function() {\n\t            this.calendars[0] = adjustCalendar(this.calendars[0]);\n\t            for (var c = 1; c < this._o.numberOfMonths; c++) {\n\t                this.calendars[c] = adjustCalendar({\n\t                    month: this.calendars[0].month + c,\n\t                    year: this.calendars[0].year\n\t                });\n\t            }\n\t            this.draw();\n\t        },\n\t\n\t        gotoToday: function()\n\t        {\n\t            this.gotoDate(new Date());\n\t        },\n\t\n\t        /**\n\t         * change view to a specific month (zero-index, e.g. 0: January)\n\t         */\n\t        gotoMonth: function(month)\n\t        {\n\t            if (!isNaN(month)) {\n\t                this.calendars[0].month = parseInt(month, 10);\n\t                this.adjustCalendars();\n\t            }\n\t        },\n\t\n\t        nextMonth: function()\n\t        {\n\t            this.calendars[0].month++;\n\t            this.adjustCalendars();\n\t        },\n\t\n\t        prevMonth: function()\n\t        {\n\t            this.calendars[0].month--;\n\t            this.adjustCalendars();\n\t        },\n\t\n\t        /**\n\t         * change view to a specific full year (e.g. \"2012\")\n\t         */\n\t        gotoYear: function(year)\n\t        {\n\t            if (!isNaN(year)) {\n\t                this.calendars[0].year = parseInt(year, 10);\n\t                this.adjustCalendars();\n\t            }\n\t        },\n\t\n\t        /**\n\t         * change the minDate\n\t         */\n\t        setMinDate: function(value)\n\t        {\n\t            setToStartOfDay(value);\n\t            this._o.minDate = value;\n\t            this._o.minYear  = value.getFullYear();\n\t            this._o.minMonth = value.getMonth();\n\t            this.draw();\n\t        },\n\t\n\t        /**\n\t         * change the maxDate\n\t         */\n\t        setMaxDate: function(value)\n\t        {\n\t            setToStartOfDay(value);\n\t            this._o.maxDate = value;\n\t            this._o.maxYear = value.getFullYear();\n\t            this._o.maxMonth = value.getMonth();\n\t            this.draw();\n\t        },\n\t\n\t        setStartRange: function(value)\n\t        {\n\t            this._o.startRange = value;\n\t        },\n\t\n\t        setEndRange: function(value)\n\t        {\n\t            this._o.endRange = value;\n\t        },\n\t\n\t        /**\n\t         * refresh the HTML\n\t         */\n\t        draw: function(force)\n\t        {\n\t            if (!this._v && !force) {\n\t                return;\n\t            }\n\t            var opts = this._o,\n\t                minYear = opts.minYear,\n\t                maxYear = opts.maxYear,\n\t                minMonth = opts.minMonth,\n\t                maxMonth = opts.maxMonth,\n\t                html = '';\n\t\n\t            if (this._y <= minYear) {\n\t                this._y = minYear;\n\t                if (!isNaN(minMonth) && this._m < minMonth) {\n\t                    this._m = minMonth;\n\t                }\n\t            }\n\t            if (this._y >= maxYear) {\n\t                this._y = maxYear;\n\t                if (!isNaN(maxMonth) && this._m > maxMonth) {\n\t                    this._m = maxMonth;\n\t                }\n\t            }\n\t\n\t            for (var c = 0; c < opts.numberOfMonths; c++) {\n\t                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year) + this.render(this.calendars[c].year, this.calendars[c].month) + '</div>';\n\t            }\n\t\n\t            this.el.innerHTML = html;\n\t\n\t            if (opts.bound) {\n\t                if(opts.field.type !== 'hidden') {\n\t                    sto(function() {\n\t                        opts.trigger.focus();\n\t                    }, 1);\n\t                }\n\t            }\n\t\n\t            if (typeof this._o.onDraw === 'function') {\n\t                var self = this;\n\t                sto(function() {\n\t                    self._o.onDraw.call(self);\n\t                }, 0);\n\t            }\n\t        },\n\t\n\t        adjustPosition: function()\n\t        {\n\t            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\t\n\t            if (this._o.container) return;\n\t\n\t            this.el.style.position = 'absolute';\n\t\n\t            field = this._o.trigger;\n\t            pEl = field;\n\t            width = this.el.offsetWidth;\n\t            height = this.el.offsetHeight;\n\t            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n\t            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\t            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\t\n\t            if (typeof field.getBoundingClientRect === 'function') {\n\t                clientRect = field.getBoundingClientRect();\n\t                left = clientRect.left + window.pageXOffset;\n\t                top = clientRect.bottom + window.pageYOffset;\n\t            } else {\n\t                left = pEl.offsetLeft;\n\t                top  = pEl.offsetTop + pEl.offsetHeight;\n\t                while((pEl = pEl.offsetParent)) {\n\t                    left += pEl.offsetLeft;\n\t                    top  += pEl.offsetTop;\n\t                }\n\t            }\n\t\n\t            // default position is bottom & left\n\t            if ((this._o.reposition && left + width > viewportWidth) ||\n\t                (\n\t                    this._o.position.indexOf('right') > -1 &&\n\t                    left - width + field.offsetWidth > 0\n\t                )\n\t            ) {\n\t                left = left - width + field.offsetWidth;\n\t            }\n\t            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n\t                (\n\t                    this._o.position.indexOf('top') > -1 &&\n\t                    top - height - field.offsetHeight > 0\n\t                )\n\t            ) {\n\t                top = top - height - field.offsetHeight;\n\t            }\n\t\n\t            this.el.style.left = left + 'px';\n\t            this.el.style.top = top + 'px';\n\t        },\n\t\n\t        /**\n\t         * render HTML for a particular month\n\t         */\n\t        render: function(year, month)\n\t        {\n\t            var opts   = this._o,\n\t                now    = new Date(),\n\t                days   = getDaysInMonth(year, month),\n\t                before = new Date(year, month, 1).getDay(),\n\t                data   = [],\n\t                row    = [];\n\t            setToStartOfDay(now);\n\t            if (opts.firstDay > 0) {\n\t                before -= opts.firstDay;\n\t                if (before < 0) {\n\t                    before += 7;\n\t                }\n\t            }\n\t            var cells = days + before,\n\t                after = cells;\n\t            while(after > 7) {\n\t                after -= 7;\n\t            }\n\t            cells += 7 - after;\n\t            for (var i = 0, r = 0; i < cells; i++)\n\t            {\n\t                var day = new Date(year, month, 1 + (i - before)),\n\t                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n\t                    isToday = compareDates(day, now),\n\t                    isEmpty = i < before || i >= (days + before),\n\t                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n\t                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n\t                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n\t                    isDisabled = (opts.minDate && day < opts.minDate) ||\n\t                                 (opts.maxDate && day > opts.maxDate) ||\n\t                                 (opts.disableWeekends && isWeekend(day)) ||\n\t                                 (opts.disableDayFn && opts.disableDayFn(day)),\n\t                    dayConfig = {\n\t                        day: 1 + (i - before),\n\t                        month: month,\n\t                        year: year,\n\t                        isSelected: isSelected,\n\t                        isToday: isToday,\n\t                        isDisabled: isDisabled,\n\t                        isEmpty: isEmpty,\n\t                        isStartRange: isStartRange,\n\t                        isEndRange: isEndRange,\n\t                        isInRange: isInRange\n\t                    };\n\t\n\t                row.push(renderDay(dayConfig));\n\t\n\t                if (++r === 7) {\n\t                    if (opts.showWeekNumber) {\n\t                        row.unshift(renderWeek(i - before, month, year));\n\t                    }\n\t                    data.push(renderRow(row, opts.isRTL));\n\t                    row = [];\n\t                    r = 0;\n\t                }\n\t            }\n\t            return renderTable(opts, data);\n\t        },\n\t\n\t        isVisible: function()\n\t        {\n\t            return this._v;\n\t        },\n\t\n\t        show: function()\n\t        {\n\t            if (!this._v) {\n\t                removeClass(this.el, 'is-hidden');\n\t                this._v = true;\n\t                this.draw();\n\t                if (this._o.bound) {\n\t                    addEvent(document, 'click', this._onClick);\n\t                    this.adjustPosition();\n\t                }\n\t                if (typeof this._o.onOpen === 'function') {\n\t                    this._o.onOpen.call(this);\n\t                }\n\t            }\n\t        },\n\t\n\t        hide: function()\n\t        {\n\t            var v = this._v;\n\t            if (v !== false) {\n\t                if (this._o.bound) {\n\t                    removeEvent(document, 'click', this._onClick);\n\t                }\n\t                this.el.style.position = 'static'; // reset\n\t                this.el.style.left = 'auto';\n\t                this.el.style.top = 'auto';\n\t                addClass(this.el, 'is-hidden');\n\t                this._v = false;\n\t                if (v !== undefined && typeof this._o.onClose === 'function') {\n\t                    this._o.onClose.call(this);\n\t                }\n\t            }\n\t        },\n\t\n\t        /**\n\t         * GAME OVER\n\t         */\n\t        destroy: function()\n\t        {\n\t            this.hide();\n\t            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n\t            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n\t            removeEvent(this.el, 'change', this._onChange);\n\t            if (this._o.field) {\n\t                removeEvent(this._o.field, 'change', this._onInputChange);\n\t                if (this._o.bound) {\n\t                    removeEvent(this._o.trigger, 'click', this._onInputClick);\n\t                    removeEvent(this._o.trigger, 'focus', this._onInputFocus);\n\t                    removeEvent(this._o.trigger, 'blur', this._onInputBlur);\n\t                }\n\t            }\n\t            if (this.el.parentNode) {\n\t                this.el.parentNode.removeChild(this.el);\n\t            }\n\t        }\n\t\n\t    };\n\t\n\t    return Pikaday;\n\t\n\t}));\n\n\n/***/ },\n/* 274 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js\n\t\n\t;(function (global, factory) {\n\t     true ? module.exports = factory() :\n\t    typeof define === 'function' && define.amd ? define(factory) :\n\t    global.moment = factory()\n\t}(this, (function () { 'use strict';\n\t\n\t    var hookCallback;\n\t\n\t    function hooks () {\n\t        return hookCallback.apply(null, arguments);\n\t    }\n\t\n\t    // This is done to register the method called with moment()\n\t    // without creating circular dependencies.\n\t    function setHookCallback (callback) {\n\t        hookCallback = callback;\n\t    }\n\t\n\t    function isArray(input) {\n\t        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n\t    }\n\t\n\t    function isObject(input) {\n\t        // IE8 will treat undefined and null as object if it wasn't for\n\t        // input != null\n\t        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n\t    }\n\t\n\t    function isObjectEmpty(obj) {\n\t        if (Object.getOwnPropertyNames) {\n\t            return (Object.getOwnPropertyNames(obj).length === 0);\n\t        } else {\n\t            var k;\n\t            for (k in obj) {\n\t                if (obj.hasOwnProperty(k)) {\n\t                    return false;\n\t                }\n\t            }\n\t            return true;\n\t        }\n\t    }\n\t\n\t    function isUndefined(input) {\n\t        return input === void 0;\n\t    }\n\t\n\t    function isNumber(input) {\n\t        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n\t    }\n\t\n\t    function isDate(input) {\n\t        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n\t    }\n\t\n\t    function map(arr, fn) {\n\t        var res = [], i;\n\t        for (i = 0; i < arr.length; ++i) {\n\t            res.push(fn(arr[i], i));\n\t        }\n\t        return res;\n\t    }\n\t\n\t    function hasOwnProp(a, b) {\n\t        return Object.prototype.hasOwnProperty.call(a, b);\n\t    }\n\t\n\t    function extend(a, b) {\n\t        for (var i in b) {\n\t            if (hasOwnProp(b, i)) {\n\t                a[i] = b[i];\n\t            }\n\t        }\n\t\n\t        if (hasOwnProp(b, 'toString')) {\n\t            a.toString = b.toString;\n\t        }\n\t\n\t        if (hasOwnProp(b, 'valueOf')) {\n\t            a.valueOf = b.valueOf;\n\t        }\n\t\n\t        return a;\n\t    }\n\t\n\t    function createUTC (input, format, locale, strict) {\n\t        return createLocalOrUTC(input, format, locale, strict, true).utc();\n\t    }\n\t\n\t    function defaultParsingFlags() {\n\t        // We need to deep clone this object.\n\t        return {\n\t            empty           : false,\n\t            unusedTokens    : [],\n\t            unusedInput     : [],\n\t            overflow        : -2,\n\t            charsLeftOver   : 0,\n\t            nullInput       : false,\n\t            invalidMonth    : null,\n\t            invalidFormat   : false,\n\t            userInvalidated : false,\n\t            iso             : false,\n\t            parsedDateParts : [],\n\t            meridiem        : null,\n\t            rfc2822         : false,\n\t            weekdayMismatch : false\n\t        };\n\t    }\n\t\n\t    function getParsingFlags(m) {\n\t        if (m._pf == null) {\n\t            m._pf = defaultParsingFlags();\n\t        }\n\t        return m._pf;\n\t    }\n\t\n\t    var some;\n\t    if (Array.prototype.some) {\n\t        some = Array.prototype.some;\n\t    } else {\n\t        some = function (fun) {\n\t            var t = Object(this);\n\t            var len = t.length >>> 0;\n\t\n\t            for (var i = 0; i < len; i++) {\n\t                if (i in t && fun.call(this, t[i], i, t)) {\n\t                    return true;\n\t                }\n\t            }\n\t\n\t            return false;\n\t        };\n\t    }\n\t\n\t    function isValid(m) {\n\t        if (m._isValid == null) {\n\t            var flags = getParsingFlags(m);\n\t            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n\t                return i != null;\n\t            });\n\t            var isNowValid = !isNaN(m._d.getTime()) &&\n\t                flags.overflow < 0 &&\n\t                !flags.empty &&\n\t                !flags.invalidMonth &&\n\t                !flags.invalidWeekday &&\n\t                !flags.weekdayMismatch &&\n\t                !flags.nullInput &&\n\t                !flags.invalidFormat &&\n\t                !flags.userInvalidated &&\n\t                (!flags.meridiem || (flags.meridiem && parsedParts));\n\t\n\t            if (m._strict) {\n\t                isNowValid = isNowValid &&\n\t                    flags.charsLeftOver === 0 &&\n\t                    flags.unusedTokens.length === 0 &&\n\t                    flags.bigHour === undefined;\n\t            }\n\t\n\t            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n\t                m._isValid = isNowValid;\n\t            }\n\t            else {\n\t                return isNowValid;\n\t            }\n\t        }\n\t        return m._isValid;\n\t    }\n\t\n\t    function createInvalid (flags) {\n\t        var m = createUTC(NaN);\n\t        if (flags != null) {\n\t            extend(getParsingFlags(m), flags);\n\t        }\n\t        else {\n\t            getParsingFlags(m).userInvalidated = true;\n\t        }\n\t\n\t        return m;\n\t    }\n\t\n\t    // Plugins that add properties should also add the key here (null value),\n\t    // so we can properly clone ourselves.\n\t    var momentProperties = hooks.momentProperties = [];\n\t\n\t    function copyConfig(to, from) {\n\t        var i, prop, val;\n\t\n\t        if (!isUndefined(from._isAMomentObject)) {\n\t            to._isAMomentObject = from._isAMomentObject;\n\t        }\n\t        if (!isUndefined(from._i)) {\n\t            to._i = from._i;\n\t        }\n\t        if (!isUndefined(from._f)) {\n\t            to._f = from._f;\n\t        }\n\t        if (!isUndefined(from._l)) {\n\t            to._l = from._l;\n\t        }\n\t        if (!isUndefined(from._strict)) {\n\t            to._strict = from._strict;\n\t        }\n\t        if (!isUndefined(from._tzm)) {\n\t            to._tzm = from._tzm;\n\t        }\n\t        if (!isUndefined(from._isUTC)) {\n\t            to._isUTC = from._isUTC;\n\t        }\n\t        if (!isUndefined(from._offset)) {\n\t            to._offset = from._offset;\n\t        }\n\t        if (!isUndefined(from._pf)) {\n\t            to._pf = getParsingFlags(from);\n\t        }\n\t        if (!isUndefined(from._locale)) {\n\t            to._locale = from._locale;\n\t        }\n\t\n\t        if (momentProperties.length > 0) {\n\t            for (i = 0; i < momentProperties.length; i++) {\n\t                prop = momentProperties[i];\n\t                val = from[prop];\n\t                if (!isUndefined(val)) {\n\t                    to[prop] = val;\n\t                }\n\t            }\n\t        }\n\t\n\t        return to;\n\t    }\n\t\n\t    var updateInProgress = false;\n\t\n\t    // Moment prototype object\n\t    function Moment(config) {\n\t        copyConfig(this, config);\n\t        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\t        if (!this.isValid()) {\n\t            this._d = new Date(NaN);\n\t        }\n\t        // Prevent infinite loop in case updateOffset creates new moment\n\t        // objects.\n\t        if (updateInProgress === false) {\n\t            updateInProgress = true;\n\t            hooks.updateOffset(this);\n\t            updateInProgress = false;\n\t        }\n\t    }\n\t\n\t    function isMoment (obj) {\n\t        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n\t    }\n\t\n\t    function absFloor (number) {\n\t        if (number < 0) {\n\t            // -0 -> 0\n\t            return Math.ceil(number) || 0;\n\t        } else {\n\t            return Math.floor(number);\n\t        }\n\t    }\n\t\n\t    function toInt(argumentForCoercion) {\n\t        var coercedNumber = +argumentForCoercion,\n\t            value = 0;\n\t\n\t        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n\t            value = absFloor(coercedNumber);\n\t        }\n\t\n\t        return value;\n\t    }\n\t\n\t    // compare two arrays, return the number of differences\n\t    function compareArrays(array1, array2, dontConvert) {\n\t        var len = Math.min(array1.length, array2.length),\n\t            lengthDiff = Math.abs(array1.length - array2.length),\n\t            diffs = 0,\n\t            i;\n\t        for (i = 0; i < len; i++) {\n\t            if ((dontConvert && array1[i] !== array2[i]) ||\n\t                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n\t                diffs++;\n\t            }\n\t        }\n\t        return diffs + lengthDiff;\n\t    }\n\t\n\t    function warn(msg) {\n\t        if (hooks.suppressDeprecationWarnings === false &&\n\t                (typeof console !==  'undefined') && console.warn) {\n\t            console.warn('Deprecation warning: ' + msg);\n\t        }\n\t    }\n\t\n\t    function deprecate(msg, fn) {\n\t        var firstTime = true;\n\t\n\t        return extend(function () {\n\t            if (hooks.deprecationHandler != null) {\n\t                hooks.deprecationHandler(null, msg);\n\t            }\n\t            if (firstTime) {\n\t                var args = [];\n\t                var arg;\n\t                for (var i = 0; i < arguments.length; i++) {\n\t                    arg = '';\n\t                    if (typeof arguments[i] === 'object') {\n\t                        arg += '\\n[' + i + '] ';\n\t                        for (var key in arguments[0]) {\n\t                            arg += key + ': ' + arguments[0][key] + ', ';\n\t                        }\n\t                        arg = arg.slice(0, -2); // Remove trailing comma and space\n\t                    } else {\n\t                        arg = arguments[i];\n\t                    }\n\t                    args.push(arg);\n\t                }\n\t                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n\t                firstTime = false;\n\t            }\n\t            return fn.apply(this, arguments);\n\t        }, fn);\n\t    }\n\t\n\t    var deprecations = {};\n\t\n\t    function deprecateSimple(name, msg) {\n\t        if (hooks.deprecationHandler != null) {\n\t            hooks.deprecationHandler(name, msg);\n\t        }\n\t        if (!deprecations[name]) {\n\t            warn(msg);\n\t            deprecations[name] = true;\n\t        }\n\t    }\n\t\n\t    hooks.suppressDeprecationWarnings = false;\n\t    hooks.deprecationHandler = null;\n\t\n\t    function isFunction(input) {\n\t        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t    }\n\t\n\t    function set (config) {\n\t        var prop, i;\n\t        for (i in config) {\n\t            prop = config[i];\n\t            if (isFunction(prop)) {\n\t                this[i] = prop;\n\t            } else {\n\t                this['_' + i] = prop;\n\t            }\n\t        }\n\t        this._config = config;\n\t        // Lenient ordinal parsing accepts just a number in addition to\n\t        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n\t        // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t        this._dayOfMonthOrdinalParseLenient = new RegExp(\n\t            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n\t                '|' + (/\\d{1,2}/).source);\n\t    }\n\t\n\t    function mergeConfigs(parentConfig, childConfig) {\n\t        var res = extend({}, parentConfig), prop;\n\t        for (prop in childConfig) {\n\t            if (hasOwnProp(childConfig, prop)) {\n\t                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n\t                    res[prop] = {};\n\t                    extend(res[prop], parentConfig[prop]);\n\t                    extend(res[prop], childConfig[prop]);\n\t                } else if (childConfig[prop] != null) {\n\t                    res[prop] = childConfig[prop];\n\t                } else {\n\t                    delete res[prop];\n\t                }\n\t            }\n\t        }\n\t        for (prop in parentConfig) {\n\t            if (hasOwnProp(parentConfig, prop) &&\n\t                    !hasOwnProp(childConfig, prop) &&\n\t                    isObject(parentConfig[prop])) {\n\t                // make sure changes to properties don't modify parent config\n\t                res[prop] = extend({}, res[prop]);\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t\n\t    function Locale(config) {\n\t        if (config != null) {\n\t            this.set(config);\n\t        }\n\t    }\n\t\n\t    var keys;\n\t\n\t    if (Object.keys) {\n\t        keys = Object.keys;\n\t    } else {\n\t        keys = function (obj) {\n\t            var i, res = [];\n\t            for (i in obj) {\n\t                if (hasOwnProp(obj, i)) {\n\t                    res.push(i);\n\t                }\n\t            }\n\t            return res;\n\t        };\n\t    }\n\t\n\t    var defaultCalendar = {\n\t        sameDay : '[Today at] LT',\n\t        nextDay : '[Tomorrow at] LT',\n\t        nextWeek : 'dddd [at] LT',\n\t        lastDay : '[Yesterday at] LT',\n\t        lastWeek : '[Last] dddd [at] LT',\n\t        sameElse : 'L'\n\t    };\n\t\n\t    function calendar (key, mom, now) {\n\t        var output = this._calendar[key] || this._calendar['sameElse'];\n\t        return isFunction(output) ? output.call(mom, now) : output;\n\t    }\n\t\n\t    var defaultLongDateFormat = {\n\t        LTS  : 'h:mm:ss A',\n\t        LT   : 'h:mm A',\n\t        L    : 'MM/DD/YYYY',\n\t        LL   : 'MMMM D, YYYY',\n\t        LLL  : 'MMMM D, YYYY h:mm A',\n\t        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t    };\n\t\n\t    function longDateFormat (key) {\n\t        var format = this._longDateFormat[key],\n\t            formatUpper = this._longDateFormat[key.toUpperCase()];\n\t\n\t        if (format || !formatUpper) {\n\t            return format;\n\t        }\n\t\n\t        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n\t            return val.slice(1);\n\t        });\n\t\n\t        return this._longDateFormat[key];\n\t    }\n\t\n\t    var defaultInvalidDate = 'Invalid date';\n\t\n\t    function invalidDate () {\n\t        return this._invalidDate;\n\t    }\n\t\n\t    var defaultOrdinal = '%d';\n\t    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\t\n\t    function ordinal (number) {\n\t        return this._ordinal.replace('%d', number);\n\t    }\n\t\n\t    var defaultRelativeTime = {\n\t        future : 'in %s',\n\t        past   : '%s ago',\n\t        s  : 'a few seconds',\n\t        ss : '%d seconds',\n\t        m  : 'a minute',\n\t        mm : '%d minutes',\n\t        h  : 'an hour',\n\t        hh : '%d hours',\n\t        d  : 'a day',\n\t        dd : '%d days',\n\t        M  : 'a month',\n\t        MM : '%d months',\n\t        y  : 'a year',\n\t        yy : '%d years'\n\t    };\n\t\n\t    function relativeTime (number, withoutSuffix, string, isFuture) {\n\t        var output = this._relativeTime[string];\n\t        return (isFunction(output)) ?\n\t            output(number, withoutSuffix, string, isFuture) :\n\t            output.replace(/%d/i, number);\n\t    }\n\t\n\t    function pastFuture (diff, output) {\n\t        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n\t        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n\t    }\n\t\n\t    var aliases = {};\n\t\n\t    function addUnitAlias (unit, shorthand) {\n\t        var lowerCase = unit.toLowerCase();\n\t        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n\t    }\n\t\n\t    function normalizeUnits(units) {\n\t        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n\t    }\n\t\n\t    function normalizeObjectUnits(inputObject) {\n\t        var normalizedInput = {},\n\t            normalizedProp,\n\t            prop;\n\t\n\t        for (prop in inputObject) {\n\t            if (hasOwnProp(inputObject, prop)) {\n\t                normalizedProp = normalizeUnits(prop);\n\t                if (normalizedProp) {\n\t                    normalizedInput[normalizedProp] = inputObject[prop];\n\t                }\n\t            }\n\t        }\n\t\n\t        return normalizedInput;\n\t    }\n\t\n\t    var priorities = {};\n\t\n\t    function addUnitPriority(unit, priority) {\n\t        priorities[unit] = priority;\n\t    }\n\t\n\t    function getPrioritizedUnits(unitsObj) {\n\t        var units = [];\n\t        for (var u in unitsObj) {\n\t            units.push({unit: u, priority: priorities[u]});\n\t        }\n\t        units.sort(function (a, b) {\n\t            return a.priority - b.priority;\n\t        });\n\t        return units;\n\t    }\n\t\n\t    function zeroFill(number, targetLength, forceSign) {\n\t        var absNumber = '' + Math.abs(number),\n\t            zerosToFill = targetLength - absNumber.length,\n\t            sign = number >= 0;\n\t        return (sign ? (forceSign ? '+' : '') : '-') +\n\t            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n\t    }\n\t\n\t    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\t\n\t    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\t\n\t    var formatFunctions = {};\n\t\n\t    var formatTokenFunctions = {};\n\t\n\t    // token:    'M'\n\t    // padded:   ['MM', 2]\n\t    // ordinal:  'Mo'\n\t    // callback: function () { this.month() + 1 }\n\t    function addFormatToken (token, padded, ordinal, callback) {\n\t        var func = callback;\n\t        if (typeof callback === 'string') {\n\t            func = function () {\n\t                return this[callback]();\n\t            };\n\t        }\n\t        if (token) {\n\t            formatTokenFunctions[token] = func;\n\t        }\n\t        if (padded) {\n\t            formatTokenFunctions[padded[0]] = function () {\n\t                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n\t            };\n\t        }\n\t        if (ordinal) {\n\t            formatTokenFunctions[ordinal] = function () {\n\t                return this.localeData().ordinal(func.apply(this, arguments), token);\n\t            };\n\t        }\n\t    }\n\t\n\t    function removeFormattingTokens(input) {\n\t        if (input.match(/\\[[\\s\\S]/)) {\n\t            return input.replace(/^\\[|\\]$/g, '');\n\t        }\n\t        return input.replace(/\\\\/g, '');\n\t    }\n\t\n\t    function makeFormatFunction(format) {\n\t        var array = format.match(formattingTokens), i, length;\n\t\n\t        for (i = 0, length = array.length; i < length; i++) {\n\t            if (formatTokenFunctions[array[i]]) {\n\t                array[i] = formatTokenFunctions[array[i]];\n\t            } else {\n\t                array[i] = removeFormattingTokens(array[i]);\n\t            }\n\t        }\n\t\n\t        return function (mom) {\n\t            var output = '', i;\n\t            for (i = 0; i < length; i++) {\n\t                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n\t            }\n\t            return output;\n\t        };\n\t    }\n\t\n\t    // format date using native date object\n\t    function formatMoment(m, format) {\n\t        if (!m.isValid()) {\n\t            return m.localeData().invalidDate();\n\t        }\n\t\n\t        format = expandFormat(format, m.localeData());\n\t        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\t\n\t        return formatFunctions[format](m);\n\t    }\n\t\n\t    function expandFormat(format, locale) {\n\t        var i = 5;\n\t\n\t        function replaceLongDateFormatTokens(input) {\n\t            return locale.longDateFormat(input) || input;\n\t        }\n\t\n\t        localFormattingTokens.lastIndex = 0;\n\t        while (i >= 0 && localFormattingTokens.test(format)) {\n\t            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n\t            localFormattingTokens.lastIndex = 0;\n\t            i -= 1;\n\t        }\n\t\n\t        return format;\n\t    }\n\t\n\t    var match1         = /\\d/;            //       0 - 9\n\t    var match2         = /\\d\\d/;          //      00 - 99\n\t    var match3         = /\\d{3}/;         //     000 - 999\n\t    var match4         = /\\d{4}/;         //    0000 - 9999\n\t    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n\t    var match1to2      = /\\d\\d?/;         //       0 - 99\n\t    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n\t    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n\t    var match1to3      = /\\d{1,3}/;       //       0 - 999\n\t    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n\t    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\t\n\t    var matchUnsigned  = /\\d+/;           //       0 - inf\n\t    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\t\n\t    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\t    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\t\n\t    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\t\n\t    // any word (or two) characters or numbers including two/three word month in arabic.\n\t    // includes scottish gaelic two word and hyphenated months\n\t    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\t\n\t    var regexes = {};\n\t\n\t    function addRegexToken (token, regex, strictRegex) {\n\t        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n\t            return (isStrict && strictRegex) ? strictRegex : regex;\n\t        };\n\t    }\n\t\n\t    function getParseRegexForToken (token, config) {\n\t        if (!hasOwnProp(regexes, token)) {\n\t            return new RegExp(unescapeFormat(token));\n\t        }\n\t\n\t        return regexes[token](config._strict, config._locale);\n\t    }\n\t\n\t    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\t    function unescapeFormat(s) {\n\t        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n\t            return p1 || p2 || p3 || p4;\n\t        }));\n\t    }\n\t\n\t    function regexEscape(s) {\n\t        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t    }\n\t\n\t    var tokens = {};\n\t\n\t    function addParseToken (token, callback) {\n\t        var i, func = callback;\n\t        if (typeof token === 'string') {\n\t            token = [token];\n\t        }\n\t        if (isNumber(callback)) {\n\t            func = function (input, array) {\n\t                array[callback] = toInt(input);\n\t            };\n\t        }\n\t        for (i = 0; i < token.length; i++) {\n\t            tokens[token[i]] = func;\n\t        }\n\t    }\n\t\n\t    function addWeekParseToken (token, callback) {\n\t        addParseToken(token, function (input, array, config, token) {\n\t            config._w = config._w || {};\n\t            callback(input, config._w, config, token);\n\t        });\n\t    }\n\t\n\t    function addTimeToArrayFromToken(token, input, config) {\n\t        if (input != null && hasOwnProp(tokens, token)) {\n\t            tokens[token](input, config._a, config, token);\n\t        }\n\t    }\n\t\n\t    var YEAR = 0;\n\t    var MONTH = 1;\n\t    var DATE = 2;\n\t    var HOUR = 3;\n\t    var MINUTE = 4;\n\t    var SECOND = 5;\n\t    var MILLISECOND = 6;\n\t    var WEEK = 7;\n\t    var WEEKDAY = 8;\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('Y', 0, 0, function () {\n\t        var y = this.year();\n\t        return y <= 9999 ? '' + y : '+' + y;\n\t    });\n\t\n\t    addFormatToken(0, ['YY', 2], 0, function () {\n\t        return this.year() % 100;\n\t    });\n\t\n\t    addFormatToken(0, ['YYYY',   4],       0, 'year');\n\t    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n\t    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('year', 'y');\n\t\n\t    // PRIORITIES\n\t\n\t    addUnitPriority('year', 1);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('Y',      matchSigned);\n\t    addRegexToken('YY',     match1to2, match2);\n\t    addRegexToken('YYYY',   match1to4, match4);\n\t    addRegexToken('YYYYY',  match1to6, match6);\n\t    addRegexToken('YYYYYY', match1to6, match6);\n\t\n\t    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n\t    addParseToken('YYYY', function (input, array) {\n\t        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n\t    });\n\t    addParseToken('YY', function (input, array) {\n\t        array[YEAR] = hooks.parseTwoDigitYear(input);\n\t    });\n\t    addParseToken('Y', function (input, array) {\n\t        array[YEAR] = parseInt(input, 10);\n\t    });\n\t\n\t    // HELPERS\n\t\n\t    function daysInYear(year) {\n\t        return isLeapYear(year) ? 366 : 365;\n\t    }\n\t\n\t    function isLeapYear(year) {\n\t        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\t    }\n\t\n\t    // HOOKS\n\t\n\t    hooks.parseTwoDigitYear = function (input) {\n\t        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n\t    };\n\t\n\t    // MOMENTS\n\t\n\t    var getSetYear = makeGetSet('FullYear', true);\n\t\n\t    function getIsLeapYear () {\n\t        return isLeapYear(this.year());\n\t    }\n\t\n\t    function makeGetSet (unit, keepTime) {\n\t        return function (value) {\n\t            if (value != null) {\n\t                set$1(this, unit, value);\n\t                hooks.updateOffset(this, keepTime);\n\t                return this;\n\t            } else {\n\t                return get(this, unit);\n\t            }\n\t        };\n\t    }\n\t\n\t    function get (mom, unit) {\n\t        return mom.isValid() ?\n\t            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n\t    }\n\t\n\t    function set$1 (mom, unit, value) {\n\t        if (mom.isValid() && !isNaN(value)) {\n\t            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n\t                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n\t            }\n\t            else {\n\t                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n\t            }\n\t        }\n\t    }\n\t\n\t    // MOMENTS\n\t\n\t    function stringGet (units) {\n\t        units = normalizeUnits(units);\n\t        if (isFunction(this[units])) {\n\t            return this[units]();\n\t        }\n\t        return this;\n\t    }\n\t\n\t\n\t    function stringSet (units, value) {\n\t        if (typeof units === 'object') {\n\t            units = normalizeObjectUnits(units);\n\t            var prioritized = getPrioritizedUnits(units);\n\t            for (var i = 0; i < prioritized.length; i++) {\n\t                this[prioritized[i].unit](units[prioritized[i].unit]);\n\t            }\n\t        } else {\n\t            units = normalizeUnits(units);\n\t            if (isFunction(this[units])) {\n\t                return this[units](value);\n\t            }\n\t        }\n\t        return this;\n\t    }\n\t\n\t    function mod(n, x) {\n\t        return ((n % x) + x) % x;\n\t    }\n\t\n\t    var indexOf;\n\t\n\t    if (Array.prototype.indexOf) {\n\t        indexOf = Array.prototype.indexOf;\n\t    } else {\n\t        indexOf = function (o) {\n\t            // I know\n\t            var i;\n\t            for (i = 0; i < this.length; ++i) {\n\t                if (this[i] === o) {\n\t                    return i;\n\t                }\n\t            }\n\t            return -1;\n\t        };\n\t    }\n\t\n\t    function daysInMonth(year, month) {\n\t        if (isNaN(year) || isNaN(month)) {\n\t            return NaN;\n\t        }\n\t        var modMonth = mod(month, 12);\n\t        year += (month - modMonth) / 12;\n\t        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('M', ['MM', 2], 'Mo', function () {\n\t        return this.month() + 1;\n\t    });\n\t\n\t    addFormatToken('MMM', 0, 0, function (format) {\n\t        return this.localeData().monthsShort(this, format);\n\t    });\n\t\n\t    addFormatToken('MMMM', 0, 0, function (format) {\n\t        return this.localeData().months(this, format);\n\t    });\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('month', 'M');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('month', 8);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('M',    match1to2);\n\t    addRegexToken('MM',   match1to2, match2);\n\t    addRegexToken('MMM',  function (isStrict, locale) {\n\t        return locale.monthsShortRegex(isStrict);\n\t    });\n\t    addRegexToken('MMMM', function (isStrict, locale) {\n\t        return locale.monthsRegex(isStrict);\n\t    });\n\t\n\t    addParseToken(['M', 'MM'], function (input, array) {\n\t        array[MONTH] = toInt(input) - 1;\n\t    });\n\t\n\t    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n\t        var month = config._locale.monthsParse(input, token, config._strict);\n\t        // if we didn't find a month name, mark the date as invalid.\n\t        if (month != null) {\n\t            array[MONTH] = month;\n\t        } else {\n\t            getParsingFlags(config).invalidMonth = input;\n\t        }\n\t    });\n\t\n\t    // LOCALES\n\t\n\t    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n\t    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\t    function localeMonths (m, format) {\n\t        if (!m) {\n\t            return isArray(this._months) ? this._months :\n\t                this._months['standalone'];\n\t        }\n\t        return isArray(this._months) ? this._months[m.month()] :\n\t            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n\t    }\n\t\n\t    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\t    function localeMonthsShort (m, format) {\n\t        if (!m) {\n\t            return isArray(this._monthsShort) ? this._monthsShort :\n\t                this._monthsShort['standalone'];\n\t        }\n\t        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n\t            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n\t    }\n\t\n\t    function handleStrictParse(monthName, format, strict) {\n\t        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n\t        if (!this._monthsParse) {\n\t            // this is not used\n\t            this._monthsParse = [];\n\t            this._longMonthsParse = [];\n\t            this._shortMonthsParse = [];\n\t            for (i = 0; i < 12; ++i) {\n\t                mom = createUTC([2000, i]);\n\t                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n\t                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n\t            }\n\t        }\n\t\n\t        if (strict) {\n\t            if (format === 'MMM') {\n\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else {\n\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            }\n\t        } else {\n\t            if (format === 'MMM') {\n\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else {\n\t                ii = indexOf.call(this._longMonthsParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._shortMonthsParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            }\n\t        }\n\t    }\n\t\n\t    function localeMonthsParse (monthName, format, strict) {\n\t        var i, mom, regex;\n\t\n\t        if (this._monthsParseExact) {\n\t            return handleStrictParse.call(this, monthName, format, strict);\n\t        }\n\t\n\t        if (!this._monthsParse) {\n\t            this._monthsParse = [];\n\t            this._longMonthsParse = [];\n\t            this._shortMonthsParse = [];\n\t        }\n\t\n\t        // TODO: add sorting\n\t        // Sorting makes sure if one month (or abbr) is a prefix of another\n\t        // see sorting in computeMonthsParse\n\t        for (i = 0; i < 12; i++) {\n\t            // make the regex if we don't have it already\n\t            mom = createUTC([2000, i]);\n\t            if (strict && !this._longMonthsParse[i]) {\n\t                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n\t                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n\t            }\n\t            if (!strict && !this._monthsParse[i]) {\n\t                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n\t                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t            }\n\t            // test the regex\n\t            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n\t                return i;\n\t            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n\t                return i;\n\t            } else if (!strict && this._monthsParse[i].test(monthName)) {\n\t                return i;\n\t            }\n\t        }\n\t    }\n\t\n\t    // MOMENTS\n\t\n\t    function setMonth (mom, value) {\n\t        var dayOfMonth;\n\t\n\t        if (!mom.isValid()) {\n\t            // No op\n\t            return mom;\n\t        }\n\t\n\t        if (typeof value === 'string') {\n\t            if (/^\\d+$/.test(value)) {\n\t                value = toInt(value);\n\t            } else {\n\t                value = mom.localeData().monthsParse(value);\n\t                // TODO: Another silent failure?\n\t                if (!isNumber(value)) {\n\t                    return mom;\n\t                }\n\t            }\n\t        }\n\t\n\t        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\t        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\t        return mom;\n\t    }\n\t\n\t    function getSetMonth (value) {\n\t        if (value != null) {\n\t            setMonth(this, value);\n\t            hooks.updateOffset(this, true);\n\t            return this;\n\t        } else {\n\t            return get(this, 'Month');\n\t        }\n\t    }\n\t\n\t    function getDaysInMonth () {\n\t        return daysInMonth(this.year(), this.month());\n\t    }\n\t\n\t    var defaultMonthsShortRegex = matchWord;\n\t    function monthsShortRegex (isStrict) {\n\t        if (this._monthsParseExact) {\n\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t                computeMonthsParse.call(this);\n\t            }\n\t            if (isStrict) {\n\t                return this._monthsShortStrictRegex;\n\t            } else {\n\t                return this._monthsShortRegex;\n\t            }\n\t        } else {\n\t            if (!hasOwnProp(this, '_monthsShortRegex')) {\n\t                this._monthsShortRegex = defaultMonthsShortRegex;\n\t            }\n\t            return this._monthsShortStrictRegex && isStrict ?\n\t                this._monthsShortStrictRegex : this._monthsShortRegex;\n\t        }\n\t    }\n\t\n\t    var defaultMonthsRegex = matchWord;\n\t    function monthsRegex (isStrict) {\n\t        if (this._monthsParseExact) {\n\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t                computeMonthsParse.call(this);\n\t            }\n\t            if (isStrict) {\n\t                return this._monthsStrictRegex;\n\t            } else {\n\t                return this._monthsRegex;\n\t            }\n\t        } else {\n\t            if (!hasOwnProp(this, '_monthsRegex')) {\n\t                this._monthsRegex = defaultMonthsRegex;\n\t            }\n\t            return this._monthsStrictRegex && isStrict ?\n\t                this._monthsStrictRegex : this._monthsRegex;\n\t        }\n\t    }\n\t\n\t    function computeMonthsParse () {\n\t        function cmpLenRev(a, b) {\n\t            return b.length - a.length;\n\t        }\n\t\n\t        var shortPieces = [], longPieces = [], mixedPieces = [],\n\t            i, mom;\n\t        for (i = 0; i < 12; i++) {\n\t            // make the regex if we don't have it already\n\t            mom = createUTC([2000, i]);\n\t            shortPieces.push(this.monthsShort(mom, ''));\n\t            longPieces.push(this.months(mom, ''));\n\t            mixedPieces.push(this.months(mom, ''));\n\t            mixedPieces.push(this.monthsShort(mom, ''));\n\t        }\n\t        // Sorting makes sure if one month (or abbr) is a prefix of another it\n\t        // will match the longer piece.\n\t        shortPieces.sort(cmpLenRev);\n\t        longPieces.sort(cmpLenRev);\n\t        mixedPieces.sort(cmpLenRev);\n\t        for (i = 0; i < 12; i++) {\n\t            shortPieces[i] = regexEscape(shortPieces[i]);\n\t            longPieces[i] = regexEscape(longPieces[i]);\n\t        }\n\t        for (i = 0; i < 24; i++) {\n\t            mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t        }\n\t\n\t        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t        this._monthsShortRegex = this._monthsRegex;\n\t        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t    }\n\t\n\t    function createDate (y, m, d, h, M, s, ms) {\n\t        // can't just apply() to create a date:\n\t        // https://stackoverflow.com/q/181348\n\t        var date = new Date(y, m, d, h, M, s, ms);\n\t\n\t        // the date constructor remaps years 0-99 to 1900-1999\n\t        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n\t            date.setFullYear(y);\n\t        }\n\t        return date;\n\t    }\n\t\n\t    function createUTCDate (y) {\n\t        var date = new Date(Date.UTC.apply(null, arguments));\n\t\n\t        // the Date.UTC function remaps years 0-99 to 1900-1999\n\t        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n\t            date.setUTCFullYear(y);\n\t        }\n\t        return date;\n\t    }\n\t\n\t    // start-of-first-week - start-of-year\n\t    function firstWeekOffset(year, dow, doy) {\n\t        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n\t            fwd = 7 + dow - doy,\n\t            // first-week day local weekday -- which local weekday is fwd\n\t            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\t\n\t        return -fwdlw + fwd - 1;\n\t    }\n\t\n\t    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\t    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n\t        var localWeekday = (7 + weekday - dow) % 7,\n\t            weekOffset = firstWeekOffset(year, dow, doy),\n\t            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n\t            resYear, resDayOfYear;\n\t\n\t        if (dayOfYear <= 0) {\n\t            resYear = year - 1;\n\t            resDayOfYear = daysInYear(resYear) + dayOfYear;\n\t        } else if (dayOfYear > daysInYear(year)) {\n\t            resYear = year + 1;\n\t            resDayOfYear = dayOfYear - daysInYear(year);\n\t        } else {\n\t            resYear = year;\n\t            resDayOfYear = dayOfYear;\n\t        }\n\t\n\t        return {\n\t            year: resYear,\n\t            dayOfYear: resDayOfYear\n\t        };\n\t    }\n\t\n\t    function weekOfYear(mom, dow, doy) {\n\t        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n\t            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n\t            resWeek, resYear;\n\t\n\t        if (week < 1) {\n\t            resYear = mom.year() - 1;\n\t            resWeek = week + weeksInYear(resYear, dow, doy);\n\t        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n\t            resWeek = week - weeksInYear(mom.year(), dow, doy);\n\t            resYear = mom.year() + 1;\n\t        } else {\n\t            resYear = mom.year();\n\t            resWeek = week;\n\t        }\n\t\n\t        return {\n\t            week: resWeek,\n\t            year: resYear\n\t        };\n\t    }\n\t\n\t    function weeksInYear(year, dow, doy) {\n\t        var weekOffset = firstWeekOffset(year, dow, doy),\n\t            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n\t        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('w', ['ww', 2], 'wo', 'week');\n\t    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('week', 'w');\n\t    addUnitAlias('isoWeek', 'W');\n\t\n\t    // PRIORITIES\n\t\n\t    addUnitPriority('week', 5);\n\t    addUnitPriority('isoWeek', 5);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('w',  match1to2);\n\t    addRegexToken('ww', match1to2, match2);\n\t    addRegexToken('W',  match1to2);\n\t    addRegexToken('WW', match1to2, match2);\n\t\n\t    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n\t        week[token.substr(0, 1)] = toInt(input);\n\t    });\n\t\n\t    // HELPERS\n\t\n\t    // LOCALES\n\t\n\t    function localeWeek (mom) {\n\t        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n\t    }\n\t\n\t    var defaultLocaleWeek = {\n\t        dow : 0, // Sunday is the first day of the week.\n\t        doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t    };\n\t\n\t    function localeFirstDayOfWeek () {\n\t        return this._week.dow;\n\t    }\n\t\n\t    function localeFirstDayOfYear () {\n\t        return this._week.doy;\n\t    }\n\t\n\t    // MOMENTS\n\t\n\t    function getSetWeek (input) {\n\t        var week = this.localeData().week(this);\n\t        return input == null ? week : this.add((input - week) * 7, 'd');\n\t    }\n\t\n\t    function getSetISOWeek (input) {\n\t        var week = weekOfYear(this, 1, 4).week;\n\t        return input == null ? week : this.add((input - week) * 7, 'd');\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('d', 0, 'do', 'day');\n\t\n\t    addFormatToken('dd', 0, 0, function (format) {\n\t        return this.localeData().weekdaysMin(this, format);\n\t    });\n\t\n\t    addFormatToken('ddd', 0, 0, function (format) {\n\t        return this.localeData().weekdaysShort(this, format);\n\t    });\n\t\n\t    addFormatToken('dddd', 0, 0, function (format) {\n\t        return this.localeData().weekdays(this, format);\n\t    });\n\t\n\t    addFormatToken('e', 0, 0, 'weekday');\n\t    addFormatToken('E', 0, 0, 'isoWeekday');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('day', 'd');\n\t    addUnitAlias('weekday', 'e');\n\t    addUnitAlias('isoWeekday', 'E');\n\t\n\t    // PRIORITY\n\t    addUnitPriority('day', 11);\n\t    addUnitPriority('weekday', 11);\n\t    addUnitPriority('isoWeekday', 11);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('d',    match1to2);\n\t    addRegexToken('e',    match1to2);\n\t    addRegexToken('E',    match1to2);\n\t    addRegexToken('dd',   function (isStrict, locale) {\n\t        return locale.weekdaysMinRegex(isStrict);\n\t    });\n\t    addRegexToken('ddd',   function (isStrict, locale) {\n\t        return locale.weekdaysShortRegex(isStrict);\n\t    });\n\t    addRegexToken('dddd',   function (isStrict, locale) {\n\t        return locale.weekdaysRegex(isStrict);\n\t    });\n\t\n\t    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n\t        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n\t        // if we didn't get a weekday name, mark the date as invalid\n\t        if (weekday != null) {\n\t            week.d = weekday;\n\t        } else {\n\t            getParsingFlags(config).invalidWeekday = input;\n\t        }\n\t    });\n\t\n\t    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n\t        week[token] = toInt(input);\n\t    });\n\t\n\t    // HELPERS\n\t\n\t    function parseWeekday(input, locale) {\n\t        if (typeof input !== 'string') {\n\t            return input;\n\t        }\n\t\n\t        if (!isNaN(input)) {\n\t            return parseInt(input, 10);\n\t        }\n\t\n\t        input = locale.weekdaysParse(input);\n\t        if (typeof input === 'number') {\n\t            return input;\n\t        }\n\t\n\t        return null;\n\t    }\n\t\n\t    function parseIsoWeekday(input, locale) {\n\t        if (typeof input === 'string') {\n\t            return locale.weekdaysParse(input) % 7 || 7;\n\t        }\n\t        return isNaN(input) ? null : input;\n\t    }\n\t\n\t    // LOCALES\n\t\n\t    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\t    function localeWeekdays (m, format) {\n\t        if (!m) {\n\t            return isArray(this._weekdays) ? this._weekdays :\n\t                this._weekdays['standalone'];\n\t        }\n\t        return isArray(this._weekdays) ? this._weekdays[m.day()] :\n\t            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n\t    }\n\t\n\t    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\t    function localeWeekdaysShort (m) {\n\t        return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n\t    }\n\t\n\t    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\t    function localeWeekdaysMin (m) {\n\t        return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n\t    }\n\t\n\t    function handleStrictParse$1(weekdayName, format, strict) {\n\t        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n\t        if (!this._weekdaysParse) {\n\t            this._weekdaysParse = [];\n\t            this._shortWeekdaysParse = [];\n\t            this._minWeekdaysParse = [];\n\t\n\t            for (i = 0; i < 7; ++i) {\n\t                mom = createUTC([2000, 1]).day(i);\n\t                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n\t                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n\t                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n\t            }\n\t        }\n\t\n\t        if (strict) {\n\t            if (format === 'dddd') {\n\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else if (format === 'ddd') {\n\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else {\n\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            }\n\t        } else {\n\t            if (format === 'dddd') {\n\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else if (format === 'ddd') {\n\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            } else {\n\t                ii = indexOf.call(this._minWeekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._weekdaysParse, llc);\n\t                if (ii !== -1) {\n\t                    return ii;\n\t                }\n\t                ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t                return ii !== -1 ? ii : null;\n\t            }\n\t        }\n\t    }\n\t\n\t    function localeWeekdaysParse (weekdayName, format, strict) {\n\t        var i, mom, regex;\n\t\n\t        if (this._weekdaysParseExact) {\n\t            return handleStrictParse$1.call(this, weekdayName, format, strict);\n\t        }\n\t\n\t        if (!this._weekdaysParse) {\n\t            this._weekdaysParse = [];\n\t            this._minWeekdaysParse = [];\n\t            this._shortWeekdaysParse = [];\n\t            this._fullWeekdaysParse = [];\n\t        }\n\t\n\t        for (i = 0; i < 7; i++) {\n\t            // make the regex if we don't have it already\n\t\n\t            mom = createUTC([2000, 1]).day(i);\n\t            if (strict && !this._fullWeekdaysParse[i]) {\n\t                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n\t                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n\t                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n\t            }\n\t            if (!this._weekdaysParse[i]) {\n\t                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n\t                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t            }\n\t            // test the regex\n\t            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n\t                return i;\n\t            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n\t                return i;\n\t            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n\t                return i;\n\t            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n\t                return i;\n\t            }\n\t        }\n\t    }\n\t\n\t    // MOMENTS\n\t\n\t    function getSetDayOfWeek (input) {\n\t        if (!this.isValid()) {\n\t            return input != null ? this : NaN;\n\t        }\n\t        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\t        if (input != null) {\n\t            input = parseWeekday(input, this.localeData());\n\t            return this.add(input - day, 'd');\n\t        } else {\n\t            return day;\n\t        }\n\t    }\n\t\n\t    function getSetLocaleDayOfWeek (input) {\n\t        if (!this.isValid()) {\n\t            return input != null ? this : NaN;\n\t        }\n\t        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n\t        return input == null ? weekday : this.add(input - weekday, 'd');\n\t    }\n\t\n\t    function getSetISODayOfWeek (input) {\n\t        if (!this.isValid()) {\n\t            return input != null ? this : NaN;\n\t        }\n\t\n\t        // behaves the same as moment#day except\n\t        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n\t        // as a setter, sunday should belong to the previous week.\n\t\n\t        if (input != null) {\n\t            var weekday = parseIsoWeekday(input, this.localeData());\n\t            return this.day(this.day() % 7 ? weekday : weekday - 7);\n\t        } else {\n\t            return this.day() || 7;\n\t        }\n\t    }\n\t\n\t    var defaultWeekdaysRegex = matchWord;\n\t    function weekdaysRegex (isStrict) {\n\t        if (this._weekdaysParseExact) {\n\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t                computeWeekdaysParse.call(this);\n\t            }\n\t            if (isStrict) {\n\t                return this._weekdaysStrictRegex;\n\t            } else {\n\t                return this._weekdaysRegex;\n\t            }\n\t        } else {\n\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t                this._weekdaysRegex = defaultWeekdaysRegex;\n\t            }\n\t            return this._weekdaysStrictRegex && isStrict ?\n\t                this._weekdaysStrictRegex : this._weekdaysRegex;\n\t        }\n\t    }\n\t\n\t    var defaultWeekdaysShortRegex = matchWord;\n\t    function weekdaysShortRegex (isStrict) {\n\t        if (this._weekdaysParseExact) {\n\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t                computeWeekdaysParse.call(this);\n\t            }\n\t            if (isStrict) {\n\t                return this._weekdaysShortStrictRegex;\n\t            } else {\n\t                return this._weekdaysShortRegex;\n\t            }\n\t        } else {\n\t            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n\t                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n\t            }\n\t            return this._weekdaysShortStrictRegex && isStrict ?\n\t                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n\t        }\n\t    }\n\t\n\t    var defaultWeekdaysMinRegex = matchWord;\n\t    function weekdaysMinRegex (isStrict) {\n\t        if (this._weekdaysParseExact) {\n\t            if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t                computeWeekdaysParse.call(this);\n\t            }\n\t            if (isStrict) {\n\t                return this._weekdaysMinStrictRegex;\n\t            } else {\n\t                return this._weekdaysMinRegex;\n\t            }\n\t        } else {\n\t            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n\t                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n\t            }\n\t            return this._weekdaysMinStrictRegex && isStrict ?\n\t                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n\t        }\n\t    }\n\t\n\t\n\t    function computeWeekdaysParse () {\n\t        function cmpLenRev(a, b) {\n\t            return b.length - a.length;\n\t        }\n\t\n\t        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n\t            i, mom, minp, shortp, longp;\n\t        for (i = 0; i < 7; i++) {\n\t            // make the regex if we don't have it already\n\t            mom = createUTC([2000, 1]).day(i);\n\t            minp = this.weekdaysMin(mom, '');\n\t            shortp = this.weekdaysShort(mom, '');\n\t            longp = this.weekdays(mom, '');\n\t            minPieces.push(minp);\n\t            shortPieces.push(shortp);\n\t            longPieces.push(longp);\n\t            mixedPieces.push(minp);\n\t            mixedPieces.push(shortp);\n\t            mixedPieces.push(longp);\n\t        }\n\t        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n\t        // will match the longer piece.\n\t        minPieces.sort(cmpLenRev);\n\t        shortPieces.sort(cmpLenRev);\n\t        longPieces.sort(cmpLenRev);\n\t        mixedPieces.sort(cmpLenRev);\n\t        for (i = 0; i < 7; i++) {\n\t            shortPieces[i] = regexEscape(shortPieces[i]);\n\t            longPieces[i] = regexEscape(longPieces[i]);\n\t            mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t        }\n\t\n\t        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t        this._weekdaysShortRegex = this._weekdaysRegex;\n\t        this._weekdaysMinRegex = this._weekdaysRegex;\n\t\n\t        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    function hFormat() {\n\t        return this.hours() % 12 || 12;\n\t    }\n\t\n\t    function kFormat() {\n\t        return this.hours() || 24;\n\t    }\n\t\n\t    addFormatToken('H', ['HH', 2], 0, 'hour');\n\t    addFormatToken('h', ['hh', 2], 0, hFormat);\n\t    addFormatToken('k', ['kk', 2], 0, kFormat);\n\t\n\t    addFormatToken('hmm', 0, 0, function () {\n\t        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n\t    });\n\t\n\t    addFormatToken('hmmss', 0, 0, function () {\n\t        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n\t            zeroFill(this.seconds(), 2);\n\t    });\n\t\n\t    addFormatToken('Hmm', 0, 0, function () {\n\t        return '' + this.hours() + zeroFill(this.minutes(), 2);\n\t    });\n\t\n\t    addFormatToken('Hmmss', 0, 0, function () {\n\t        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n\t            zeroFill(this.seconds(), 2);\n\t    });\n\t\n\t    function meridiem (token, lowercase) {\n\t        addFormatToken(token, 0, 0, function () {\n\t            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n\t        });\n\t    }\n\t\n\t    meridiem('a', true);\n\t    meridiem('A', false);\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('hour', 'h');\n\t\n\t    // PRIORITY\n\t    addUnitPriority('hour', 13);\n\t\n\t    // PARSING\n\t\n\t    function matchMeridiem (isStrict, locale) {\n\t        return locale._meridiemParse;\n\t    }\n\t\n\t    addRegexToken('a',  matchMeridiem);\n\t    addRegexToken('A',  matchMeridiem);\n\t    addRegexToken('H',  match1to2);\n\t    addRegexToken('h',  match1to2);\n\t    addRegexToken('k',  match1to2);\n\t    addRegexToken('HH', match1to2, match2);\n\t    addRegexToken('hh', match1to2, match2);\n\t    addRegexToken('kk', match1to2, match2);\n\t\n\t    addRegexToken('hmm', match3to4);\n\t    addRegexToken('hmmss', match5to6);\n\t    addRegexToken('Hmm', match3to4);\n\t    addRegexToken('Hmmss', match5to6);\n\t\n\t    addParseToken(['H', 'HH'], HOUR);\n\t    addParseToken(['k', 'kk'], function (input, array, config) {\n\t        var kInput = toInt(input);\n\t        array[HOUR] = kInput === 24 ? 0 : kInput;\n\t    });\n\t    addParseToken(['a', 'A'], function (input, array, config) {\n\t        config._isPm = config._locale.isPM(input);\n\t        config._meridiem = input;\n\t    });\n\t    addParseToken(['h', 'hh'], function (input, array, config) {\n\t        array[HOUR] = toInt(input);\n\t        getParsingFlags(config).bigHour = true;\n\t    });\n\t    addParseToken('hmm', function (input, array, config) {\n\t        var pos = input.length - 2;\n\t        array[HOUR] = toInt(input.substr(0, pos));\n\t        array[MINUTE] = toInt(input.substr(pos));\n\t        getParsingFlags(config).bigHour = true;\n\t    });\n\t    addParseToken('hmmss', function (input, array, config) {\n\t        var pos1 = input.length - 4;\n\t        var pos2 = input.length - 2;\n\t        array[HOUR] = toInt(input.substr(0, pos1));\n\t        array[MINUTE] = toInt(input.substr(pos1, 2));\n\t        array[SECOND] = toInt(input.substr(pos2));\n\t        getParsingFlags(config).bigHour = true;\n\t    });\n\t    addParseToken('Hmm', function (input, array, config) {\n\t        var pos = input.length - 2;\n\t        array[HOUR] = toInt(input.substr(0, pos));\n\t        array[MINUTE] = toInt(input.substr(pos));\n\t    });\n\t    addParseToken('Hmmss', function (input, array, config) {\n\t        var pos1 = input.length - 4;\n\t        var pos2 = input.length - 2;\n\t        array[HOUR] = toInt(input.substr(0, pos1));\n\t        array[MINUTE] = toInt(input.substr(pos1, 2));\n\t        array[SECOND] = toInt(input.substr(pos2));\n\t    });\n\t\n\t    // LOCALES\n\t\n\t    function localeIsPM (input) {\n\t        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n\t        // Using charAt should be more compatible.\n\t        return ((input + '').toLowerCase().charAt(0) === 'p');\n\t    }\n\t\n\t    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\t    function localeMeridiem (hours, minutes, isLower) {\n\t        if (hours > 11) {\n\t            return isLower ? 'pm' : 'PM';\n\t        } else {\n\t            return isLower ? 'am' : 'AM';\n\t        }\n\t    }\n\t\n\t\n\t    // MOMENTS\n\t\n\t    // Setting the hour should keep the time, because the user explicitly\n\t    // specified which hour they want. So trying to maintain the same hour (in\n\t    // a new timezone) makes sense. Adding/subtracting hours does not follow\n\t    // this rule.\n\t    var getSetHour = makeGetSet('Hours', true);\n\t\n\t    var baseConfig = {\n\t        calendar: defaultCalendar,\n\t        longDateFormat: defaultLongDateFormat,\n\t        invalidDate: defaultInvalidDate,\n\t        ordinal: defaultOrdinal,\n\t        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n\t        relativeTime: defaultRelativeTime,\n\t\n\t        months: defaultLocaleMonths,\n\t        monthsShort: defaultLocaleMonthsShort,\n\t\n\t        week: defaultLocaleWeek,\n\t\n\t        weekdays: defaultLocaleWeekdays,\n\t        weekdaysMin: defaultLocaleWeekdaysMin,\n\t        weekdaysShort: defaultLocaleWeekdaysShort,\n\t\n\t        meridiemParse: defaultLocaleMeridiemParse\n\t    };\n\t\n\t    // internal storage for locale config files\n\t    var locales = {};\n\t    var localeFamilies = {};\n\t    var globalLocale;\n\t\n\t    function normalizeLocale(key) {\n\t        return key ? key.toLowerCase().replace('_', '-') : key;\n\t    }\n\t\n\t    // pick the locale from the array\n\t    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n\t    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\t    function chooseLocale(names) {\n\t        var i = 0, j, next, locale, split;\n\t\n\t        while (i < names.length) {\n\t            split = normalizeLocale(names[i]).split('-');\n\t            j = split.length;\n\t            next = normalizeLocale(names[i + 1]);\n\t            next = next ? next.split('-') : null;\n\t            while (j > 0) {\n\t                locale = loadLocale(split.slice(0, j).join('-'));\n\t                if (locale) {\n\t                    return locale;\n\t                }\n\t                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n\t                    //the next array item is better than a shallower substring of this one\n\t                    break;\n\t                }\n\t                j--;\n\t            }\n\t            i++;\n\t        }\n\t        return globalLocale;\n\t    }\n\t\n\t    function loadLocale(name) {\n\t        var oldLocale = null;\n\t        // TODO: Find a better way to register and load all the locales in Node\n\t        if (!locales[name] && (typeof module !== 'undefined') &&\n\t                module && module.exports) {\n\t            try {\n\t                oldLocale = globalLocale._abbr;\n\t                var aliasedRequire = require;\n\t                __webpack_require__(275)(\"./\" + name);\n\t                getSetGlobalLocale(oldLocale);\n\t            } catch (e) {}\n\t        }\n\t        return locales[name];\n\t    }\n\t\n\t    // This function will load locale and then set the global locale.  If\n\t    // no arguments are passed in, it will simply return the current global\n\t    // locale key.\n\t    function getSetGlobalLocale (key, values) {\n\t        var data;\n\t        if (key) {\n\t            if (isUndefined(values)) {\n\t                data = getLocale(key);\n\t            }\n\t            else {\n\t                data = defineLocale(key, values);\n\t            }\n\t\n\t            if (data) {\n\t                // moment.duration._locale = moment._locale = data;\n\t                globalLocale = data;\n\t            }\n\t            else {\n\t                if ((typeof console !==  'undefined') && console.warn) {\n\t                    //warn user if arguments are passed but the locale could not be set\n\t                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n\t                }\n\t            }\n\t        }\n\t\n\t        return globalLocale._abbr;\n\t    }\n\t\n\t    function defineLocale (name, config) {\n\t        if (config !== null) {\n\t            var locale, parentConfig = baseConfig;\n\t            config.abbr = name;\n\t            if (locales[name] != null) {\n\t                deprecateSimple('defineLocaleOverride',\n\t                        'use moment.updateLocale(localeName, config) to change ' +\n\t                        'an existing locale. moment.defineLocale(localeName, ' +\n\t                        'config) should only be used for creating a new locale ' +\n\t                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n\t                parentConfig = locales[name]._config;\n\t            } else if (config.parentLocale != null) {\n\t                if (locales[config.parentLocale] != null) {\n\t                    parentConfig = locales[config.parentLocale]._config;\n\t                } else {\n\t                    locale = loadLocale(config.parentLocale);\n\t                    if (locale != null) {\n\t                        parentConfig = locale._config;\n\t                    } else {\n\t                        if (!localeFamilies[config.parentLocale]) {\n\t                            localeFamilies[config.parentLocale] = [];\n\t                        }\n\t                        localeFamilies[config.parentLocale].push({\n\t                            name: name,\n\t                            config: config\n\t                        });\n\t                        return null;\n\t                    }\n\t                }\n\t            }\n\t            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\t\n\t            if (localeFamilies[name]) {\n\t                localeFamilies[name].forEach(function (x) {\n\t                    defineLocale(x.name, x.config);\n\t                });\n\t            }\n\t\n\t            // backwards compat for now: also set the locale\n\t            // make sure we set the locale AFTER all child locales have been\n\t            // created, so we won't end up with the child locale set.\n\t            getSetGlobalLocale(name);\n\t\n\t\n\t            return locales[name];\n\t        } else {\n\t            // useful for testing\n\t            delete locales[name];\n\t            return null;\n\t        }\n\t    }\n\t\n\t    function updateLocale(name, config) {\n\t        if (config != null) {\n\t            var locale, tmpLocale, parentConfig = baseConfig;\n\t            // MERGE\n\t            tmpLocale = loadLocale(name);\n\t            if (tmpLocale != null) {\n\t                parentConfig = tmpLocale._config;\n\t            }\n\t            config = mergeConfigs(parentConfig, config);\n\t            locale = new Locale(config);\n\t            locale.parentLocale = locales[name];\n\t            locales[name] = locale;\n\t\n\t            // backwards compat for now: also set the locale\n\t            getSetGlobalLocale(name);\n\t        } else {\n\t            // pass null for config to unupdate, useful for tests\n\t            if (locales[name] != null) {\n\t                if (locales[name].parentLocale != null) {\n\t                    locales[name] = locales[name].parentLocale;\n\t                } else if (locales[name] != null) {\n\t                    delete locales[name];\n\t                }\n\t            }\n\t        }\n\t        return locales[name];\n\t    }\n\t\n\t    // returns locale data\n\t    function getLocale (key) {\n\t        var locale;\n\t\n\t        if (key && key._locale && key._locale._abbr) {\n\t            key = key._locale._abbr;\n\t        }\n\t\n\t        if (!key) {\n\t            return globalLocale;\n\t        }\n\t\n\t        if (!isArray(key)) {\n\t            //short-circuit everything else\n\t            locale = loadLocale(key);\n\t            if (locale) {\n\t                return locale;\n\t            }\n\t            key = [key];\n\t        }\n\t\n\t        return chooseLocale(key);\n\t    }\n\t\n\t    function listLocales() {\n\t        return keys(locales);\n\t    }\n\t\n\t    function checkOverflow (m) {\n\t        var overflow;\n\t        var a = m._a;\n\t\n\t        if (a && getParsingFlags(m).overflow === -2) {\n\t            overflow =\n\t                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n\t                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n\t                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n\t                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n\t                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n\t                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n\t                -1;\n\t\n\t            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n\t                overflow = DATE;\n\t            }\n\t            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n\t                overflow = WEEK;\n\t            }\n\t            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n\t                overflow = WEEKDAY;\n\t            }\n\t\n\t            getParsingFlags(m).overflow = overflow;\n\t        }\n\t\n\t        return m;\n\t    }\n\t\n\t    // Pick the first defined of two or three arguments.\n\t    function defaults(a, b, c) {\n\t        if (a != null) {\n\t            return a;\n\t        }\n\t        if (b != null) {\n\t            return b;\n\t        }\n\t        return c;\n\t    }\n\t\n\t    function currentDateArray(config) {\n\t        // hooks is actually the exported moment object\n\t        var nowValue = new Date(hooks.now());\n\t        if (config._useUTC) {\n\t            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n\t        }\n\t        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n\t    }\n\t\n\t    // convert an array to a date.\n\t    // the array should mirror the parameters below\n\t    // note: all values past the year are optional and will default to the lowest possible value.\n\t    // [year, month, day , hour, minute, second, millisecond]\n\t    function configFromArray (config) {\n\t        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\t\n\t        if (config._d) {\n\t            return;\n\t        }\n\t\n\t        currentDate = currentDateArray(config);\n\t\n\t        //compute day of the year from weeks and weekdays\n\t        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n\t            dayOfYearFromWeekInfo(config);\n\t        }\n\t\n\t        //if the day of the year is set, figure out what it is\n\t        if (config._dayOfYear != null) {\n\t            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\t\n\t            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n\t                getParsingFlags(config)._overflowDayOfYear = true;\n\t            }\n\t\n\t            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n\t            config._a[MONTH] = date.getUTCMonth();\n\t            config._a[DATE] = date.getUTCDate();\n\t        }\n\t\n\t        // Default to current date.\n\t        // * if no year, month, day of month are given, default to today\n\t        // * if day of month is given, default month and year\n\t        // * if month is given, default only year\n\t        // * if year is given, don't default anything\n\t        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n\t            config._a[i] = input[i] = currentDate[i];\n\t        }\n\t\n\t        // Zero out whatever was not defaulted, including time\n\t        for (; i < 7; i++) {\n\t            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n\t        }\n\t\n\t        // Check for 24:00:00.000\n\t        if (config._a[HOUR] === 24 &&\n\t                config._a[MINUTE] === 0 &&\n\t                config._a[SECOND] === 0 &&\n\t                config._a[MILLISECOND] === 0) {\n\t            config._nextDay = true;\n\t            config._a[HOUR] = 0;\n\t        }\n\t\n\t        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n\t        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\t\n\t        // Apply timezone offset from input. The actual utcOffset can be changed\n\t        // with parseZone.\n\t        if (config._tzm != null) {\n\t            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t        }\n\t\n\t        if (config._nextDay) {\n\t            config._a[HOUR] = 24;\n\t        }\n\t\n\t        // check for mismatching day of week\n\t        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n\t            getParsingFlags(config).weekdayMismatch = true;\n\t        }\n\t    }\n\t\n\t    function dayOfYearFromWeekInfo(config) {\n\t        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\t\n\t        w = config._w;\n\t        if (w.GG != null || w.W != null || w.E != null) {\n\t            dow = 1;\n\t            doy = 4;\n\t\n\t            // TODO: We need to take the current isoWeekYear, but that depends on\n\t            // how we interpret now (local, utc, fixed offset). So create\n\t            // a now version of current config (take local/utc/offset flags, and\n\t            // create now).\n\t            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n\t            week = defaults(w.W, 1);\n\t            weekday = defaults(w.E, 1);\n\t            if (weekday < 1 || weekday > 7) {\n\t                weekdayOverflow = true;\n\t            }\n\t        } else {\n\t            dow = config._locale._week.dow;\n\t            doy = config._locale._week.doy;\n\t\n\t            var curWeek = weekOfYear(createLocal(), dow, doy);\n\t\n\t            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\t\n\t            // Default to current week.\n\t            week = defaults(w.w, curWeek.week);\n\t\n\t            if (w.d != null) {\n\t                // weekday -- low day numbers are considered next week\n\t                weekday = w.d;\n\t                if (weekday < 0 || weekday > 6) {\n\t                    weekdayOverflow = true;\n\t                }\n\t            } else if (w.e != null) {\n\t                // local weekday -- counting starts from begining of week\n\t                weekday = w.e + dow;\n\t                if (w.e < 0 || w.e > 6) {\n\t                    weekdayOverflow = true;\n\t                }\n\t            } else {\n\t                // default to begining of week\n\t                weekday = dow;\n\t            }\n\t        }\n\t        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n\t            getParsingFlags(config)._overflowWeeks = true;\n\t        } else if (weekdayOverflow != null) {\n\t            getParsingFlags(config)._overflowWeekday = true;\n\t        } else {\n\t            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n\t            config._a[YEAR] = temp.year;\n\t            config._dayOfYear = temp.dayOfYear;\n\t        }\n\t    }\n\t\n\t    // iso 8601 regex\n\t    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\t    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\t    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\t\n\t    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\t\n\t    var isoDates = [\n\t        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n\t        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n\t        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n\t        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n\t        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n\t        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n\t        ['YYYYYYMMDD', /[+-]\\d{10}/],\n\t        ['YYYYMMDD', /\\d{8}/],\n\t        // YYYYMM is NOT allowed by the standard\n\t        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n\t        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n\t        ['YYYYDDD', /\\d{7}/]\n\t    ];\n\t\n\t    // iso time formats and regexes\n\t    var isoTimes = [\n\t        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n\t        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n\t        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n\t        ['HH:mm', /\\d\\d:\\d\\d/],\n\t        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n\t        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n\t        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n\t        ['HHmm', /\\d\\d\\d\\d/],\n\t        ['HH', /\\d\\d/]\n\t    ];\n\t\n\t    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\t\n\t    // date from iso format\n\t    function configFromISO(config) {\n\t        var i, l,\n\t            string = config._i,\n\t            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n\t            allowTime, dateFormat, timeFormat, tzFormat;\n\t\n\t        if (match) {\n\t            getParsingFlags(config).iso = true;\n\t\n\t            for (i = 0, l = isoDates.length; i < l; i++) {\n\t                if (isoDates[i][1].exec(match[1])) {\n\t                    dateFormat = isoDates[i][0];\n\t                    allowTime = isoDates[i][2] !== false;\n\t                    break;\n\t                }\n\t            }\n\t            if (dateFormat == null) {\n\t                config._isValid = false;\n\t                return;\n\t            }\n\t            if (match[3]) {\n\t                for (i = 0, l = isoTimes.length; i < l; i++) {\n\t                    if (isoTimes[i][1].exec(match[3])) {\n\t                        // match[2] should be 'T' or space\n\t                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n\t                        break;\n\t                    }\n\t                }\n\t                if (timeFormat == null) {\n\t                    config._isValid = false;\n\t                    return;\n\t                }\n\t            }\n\t            if (!allowTime && timeFormat != null) {\n\t                config._isValid = false;\n\t                return;\n\t            }\n\t            if (match[4]) {\n\t                if (tzRegex.exec(match[4])) {\n\t                    tzFormat = 'Z';\n\t                } else {\n\t                    config._isValid = false;\n\t                    return;\n\t                }\n\t            }\n\t            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n\t            configFromStringAndFormat(config);\n\t        } else {\n\t            config._isValid = false;\n\t        }\n\t    }\n\t\n\t    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\t    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\t\n\t    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n\t        var result = [\n\t            untruncateYear(yearStr),\n\t            defaultLocaleMonthsShort.indexOf(monthStr),\n\t            parseInt(dayStr, 10),\n\t            parseInt(hourStr, 10),\n\t            parseInt(minuteStr, 10)\n\t        ];\n\t\n\t        if (secondStr) {\n\t            result.push(parseInt(secondStr, 10));\n\t        }\n\t\n\t        return result;\n\t    }\n\t\n\t    function untruncateYear(yearStr) {\n\t        var year = parseInt(yearStr, 10);\n\t        if (year <= 49) {\n\t            return 2000 + year;\n\t        } else if (year <= 999) {\n\t            return 1900 + year;\n\t        }\n\t        return year;\n\t    }\n\t\n\t    function preprocessRFC2822(s) {\n\t        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n\t        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n\t    }\n\t\n\t    function checkWeekday(weekdayStr, parsedInput, config) {\n\t        if (weekdayStr) {\n\t            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n\t            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n\t                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\t            if (weekdayProvided !== weekdayActual) {\n\t                getParsingFlags(config).weekdayMismatch = true;\n\t                config._isValid = false;\n\t                return false;\n\t            }\n\t        }\n\t        return true;\n\t    }\n\t\n\t    var obsOffsets = {\n\t        UT: 0,\n\t        GMT: 0,\n\t        EDT: -4 * 60,\n\t        EST: -5 * 60,\n\t        CDT: -5 * 60,\n\t        CST: -6 * 60,\n\t        MDT: -6 * 60,\n\t        MST: -7 * 60,\n\t        PDT: -7 * 60,\n\t        PST: -8 * 60\n\t    };\n\t\n\t    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n\t        if (obsOffset) {\n\t            return obsOffsets[obsOffset];\n\t        } else if (militaryOffset) {\n\t            // the only allowed military tz is Z\n\t            return 0;\n\t        } else {\n\t            var hm = parseInt(numOffset, 10);\n\t            var m = hm % 100, h = (hm - m) / 100;\n\t            return h * 60 + m;\n\t        }\n\t    }\n\t\n\t    // date and time from ref 2822 format\n\t    function configFromRFC2822(config) {\n\t        var match = rfc2822.exec(preprocessRFC2822(config._i));\n\t        if (match) {\n\t            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\t            if (!checkWeekday(match[1], parsedArray, config)) {\n\t                return;\n\t            }\n\t\n\t            config._a = parsedArray;\n\t            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\t\n\t            config._d = createUTCDate.apply(null, config._a);\n\t            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t\n\t            getParsingFlags(config).rfc2822 = true;\n\t        } else {\n\t            config._isValid = false;\n\t        }\n\t    }\n\t\n\t    // date from iso format or fallback\n\t    function configFromString(config) {\n\t        var matched = aspNetJsonRegex.exec(config._i);\n\t\n\t        if (matched !== null) {\n\t            config._d = new Date(+matched[1]);\n\t            return;\n\t        }\n\t\n\t        configFromISO(config);\n\t        if (config._isValid === false) {\n\t            delete config._isValid;\n\t        } else {\n\t            return;\n\t        }\n\t\n\t        configFromRFC2822(config);\n\t        if (config._isValid === false) {\n\t            delete config._isValid;\n\t        } else {\n\t            return;\n\t        }\n\t\n\t        // Final attempt, use Input Fallback\n\t        hooks.createFromInputFallback(config);\n\t    }\n\t\n\t    hooks.createFromInputFallback = deprecate(\n\t        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n\t        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n\t        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n\t        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n\t        function (config) {\n\t            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n\t        }\n\t    );\n\t\n\t    // constant that refers to the ISO standard\n\t    hooks.ISO_8601 = function () {};\n\t\n\t    // constant that refers to the RFC 2822 form\n\t    hooks.RFC_2822 = function () {};\n\t\n\t    // date from string and format string\n\t    function configFromStringAndFormat(config) {\n\t        // TODO: Move this to another part of the creation flow to prevent circular deps\n\t        if (config._f === hooks.ISO_8601) {\n\t            configFromISO(config);\n\t            return;\n\t        }\n\t        if (config._f === hooks.RFC_2822) {\n\t            configFromRFC2822(config);\n\t            return;\n\t        }\n\t        config._a = [];\n\t        getParsingFlags(config).empty = true;\n\t\n\t        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\t        var string = '' + config._i,\n\t            i, parsedInput, tokens, token, skipped,\n\t            stringLength = string.length,\n\t            totalParsedInputLength = 0;\n\t\n\t        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\t\n\t        for (i = 0; i < tokens.length; i++) {\n\t            token = tokens[i];\n\t            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n\t            // console.log('token', token, 'parsedInput', parsedInput,\n\t            //         'regex', getParseRegexForToken(token, config));\n\t            if (parsedInput) {\n\t                skipped = string.substr(0, string.indexOf(parsedInput));\n\t                if (skipped.length > 0) {\n\t                    getParsingFlags(config).unusedInput.push(skipped);\n\t                }\n\t                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n\t                totalParsedInputLength += parsedInput.length;\n\t            }\n\t            // don't parse if it's not a known token\n\t            if (formatTokenFunctions[token]) {\n\t                if (parsedInput) {\n\t                    getParsingFlags(config).empty = false;\n\t                }\n\t                else {\n\t                    getParsingFlags(config).unusedTokens.push(token);\n\t                }\n\t                addTimeToArrayFromToken(token, parsedInput, config);\n\t            }\n\t            else if (config._strict && !parsedInput) {\n\t                getParsingFlags(config).unusedTokens.push(token);\n\t            }\n\t        }\n\t\n\t        // add remaining unparsed input length to the string\n\t        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\t        if (string.length > 0) {\n\t            getParsingFlags(config).unusedInput.push(string);\n\t        }\n\t\n\t        // clear _12h flag if hour is <= 12\n\t        if (config._a[HOUR] <= 12 &&\n\t            getParsingFlags(config).bigHour === true &&\n\t            config._a[HOUR] > 0) {\n\t            getParsingFlags(config).bigHour = undefined;\n\t        }\n\t\n\t        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n\t        getParsingFlags(config).meridiem = config._meridiem;\n\t        // handle meridiem\n\t        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\t\n\t        configFromArray(config);\n\t        checkOverflow(config);\n\t    }\n\t\n\t\n\t    function meridiemFixWrap (locale, hour, meridiem) {\n\t        var isPm;\n\t\n\t        if (meridiem == null) {\n\t            // nothing to do\n\t            return hour;\n\t        }\n\t        if (locale.meridiemHour != null) {\n\t            return locale.meridiemHour(hour, meridiem);\n\t        } else if (locale.isPM != null) {\n\t            // Fallback\n\t            isPm = locale.isPM(meridiem);\n\t            if (isPm && hour < 12) {\n\t                hour += 12;\n\t            }\n\t            if (!isPm && hour === 12) {\n\t                hour = 0;\n\t            }\n\t            return hour;\n\t        } else {\n\t            // this is not supposed to happen\n\t            return hour;\n\t        }\n\t    }\n\t\n\t    // date from string and array of format strings\n\t    function configFromStringAndArray(config) {\n\t        var tempConfig,\n\t            bestMoment,\n\t\n\t            scoreToBeat,\n\t            i,\n\t            currentScore;\n\t\n\t        if (config._f.length === 0) {\n\t            getParsingFlags(config).invalidFormat = true;\n\t            config._d = new Date(NaN);\n\t            return;\n\t        }\n\t\n\t        for (i = 0; i < config._f.length; i++) {\n\t            currentScore = 0;\n\t            tempConfig = copyConfig({}, config);\n\t            if (config._useUTC != null) {\n\t                tempConfig._useUTC = config._useUTC;\n\t            }\n\t            tempConfig._f = config._f[i];\n\t            configFromStringAndFormat(tempConfig);\n\t\n\t            if (!isValid(tempConfig)) {\n\t                continue;\n\t            }\n\t\n\t            // if there is any input that was not parsed add a penalty for that format\n\t            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\t\n\t            //or tokens\n\t            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\t\n\t            getParsingFlags(tempConfig).score = currentScore;\n\t\n\t            if (scoreToBeat == null || currentScore < scoreToBeat) {\n\t                scoreToBeat = currentScore;\n\t                bestMoment = tempConfig;\n\t            }\n\t        }\n\t\n\t        extend(config, bestMoment || tempConfig);\n\t    }\n\t\n\t    function configFromObject(config) {\n\t        if (config._d) {\n\t            return;\n\t        }\n\t\n\t        var i = normalizeObjectUnits(config._i);\n\t        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n\t            return obj && parseInt(obj, 10);\n\t        });\n\t\n\t        configFromArray(config);\n\t    }\n\t\n\t    function createFromConfig (config) {\n\t        var res = new Moment(checkOverflow(prepareConfig(config)));\n\t        if (res._nextDay) {\n\t            // Adding is smart enough around DST\n\t            res.add(1, 'd');\n\t            res._nextDay = undefined;\n\t        }\n\t\n\t        return res;\n\t    }\n\t\n\t    function prepareConfig (config) {\n\t        var input = config._i,\n\t            format = config._f;\n\t\n\t        config._locale = config._locale || getLocale(config._l);\n\t\n\t        if (input === null || (format === undefined && input === '')) {\n\t            return createInvalid({nullInput: true});\n\t        }\n\t\n\t        if (typeof input === 'string') {\n\t            config._i = input = config._locale.preparse(input);\n\t        }\n\t\n\t        if (isMoment(input)) {\n\t            return new Moment(checkOverflow(input));\n\t        } else if (isDate(input)) {\n\t            config._d = input;\n\t        } else if (isArray(format)) {\n\t            configFromStringAndArray(config);\n\t        } else if (format) {\n\t            configFromStringAndFormat(config);\n\t        }  else {\n\t            configFromInput(config);\n\t        }\n\t\n\t        if (!isValid(config)) {\n\t            config._d = null;\n\t        }\n\t\n\t        return config;\n\t    }\n\t\n\t    function configFromInput(config) {\n\t        var input = config._i;\n\t        if (isUndefined(input)) {\n\t            config._d = new Date(hooks.now());\n\t        } else if (isDate(input)) {\n\t            config._d = new Date(input.valueOf());\n\t        } else if (typeof input === 'string') {\n\t            configFromString(config);\n\t        } else if (isArray(input)) {\n\t            config._a = map(input.slice(0), function (obj) {\n\t                return parseInt(obj, 10);\n\t            });\n\t            configFromArray(config);\n\t        } else if (isObject(input)) {\n\t            configFromObject(config);\n\t        } else if (isNumber(input)) {\n\t            // from milliseconds\n\t            config._d = new Date(input);\n\t        } else {\n\t            hooks.createFromInputFallback(config);\n\t        }\n\t    }\n\t\n\t    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n\t        var c = {};\n\t\n\t        if (locale === true || locale === false) {\n\t            strict = locale;\n\t            locale = undefined;\n\t        }\n\t\n\t        if ((isObject(input) && isObjectEmpty(input)) ||\n\t                (isArray(input) && input.length === 0)) {\n\t            input = undefined;\n\t        }\n\t        // object construction must be done this way.\n\t        // https://github.com/moment/moment/issues/1423\n\t        c._isAMomentObject = true;\n\t        c._useUTC = c._isUTC = isUTC;\n\t        c._l = locale;\n\t        c._i = input;\n\t        c._f = format;\n\t        c._strict = strict;\n\t\n\t        return createFromConfig(c);\n\t    }\n\t\n\t    function createLocal (input, format, locale, strict) {\n\t        return createLocalOrUTC(input, format, locale, strict, false);\n\t    }\n\t\n\t    var prototypeMin = deprecate(\n\t        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t        function () {\n\t            var other = createLocal.apply(null, arguments);\n\t            if (this.isValid() && other.isValid()) {\n\t                return other < this ? this : other;\n\t            } else {\n\t                return createInvalid();\n\t            }\n\t        }\n\t    );\n\t\n\t    var prototypeMax = deprecate(\n\t        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t        function () {\n\t            var other = createLocal.apply(null, arguments);\n\t            if (this.isValid() && other.isValid()) {\n\t                return other > this ? this : other;\n\t            } else {\n\t                return createInvalid();\n\t            }\n\t        }\n\t    );\n\t\n\t    // Pick a moment m from moments so that m[fn](other) is true for all\n\t    // other. This relies on the function fn to be transitive.\n\t    //\n\t    // moments should either be an array of moment objects or an array, whose\n\t    // first element is an array of moment objects.\n\t    function pickBy(fn, moments) {\n\t        var res, i;\n\t        if (moments.length === 1 && isArray(moments[0])) {\n\t            moments = moments[0];\n\t        }\n\t        if (!moments.length) {\n\t            return createLocal();\n\t        }\n\t        res = moments[0];\n\t        for (i = 1; i < moments.length; ++i) {\n\t            if (!moments[i].isValid() || moments[i][fn](res)) {\n\t                res = moments[i];\n\t            }\n\t        }\n\t        return res;\n\t    }\n\t\n\t    // TODO: Use [].sort instead?\n\t    function min () {\n\t        var args = [].slice.call(arguments, 0);\n\t\n\t        return pickBy('isBefore', args);\n\t    }\n\t\n\t    function max () {\n\t        var args = [].slice.call(arguments, 0);\n\t\n\t        return pickBy('isAfter', args);\n\t    }\n\t\n\t    var now = function () {\n\t        return Date.now ? Date.now() : +(new Date());\n\t    };\n\t\n\t    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\t\n\t    function isDurationValid(m) {\n\t        for (var key in m) {\n\t            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n\t                return false;\n\t            }\n\t        }\n\t\n\t        var unitHasDecimal = false;\n\t        for (var i = 0; i < ordering.length; ++i) {\n\t            if (m[ordering[i]]) {\n\t                if (unitHasDecimal) {\n\t                    return false; // only allow non-integers for smallest unit\n\t                }\n\t                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n\t                    unitHasDecimal = true;\n\t                }\n\t            }\n\t        }\n\t\n\t        return true;\n\t    }\n\t\n\t    function isValid$1() {\n\t        return this._isValid;\n\t    }\n\t\n\t    function createInvalid$1() {\n\t        return createDuration(NaN);\n\t    }\n\t\n\t    function Duration (duration) {\n\t        var normalizedInput = normalizeObjectUnits(duration),\n\t            years = normalizedInput.year || 0,\n\t            quarters = normalizedInput.quarter || 0,\n\t            months = normalizedInput.month || 0,\n\t            weeks = normalizedInput.week || 0,\n\t            days = normalizedInput.day || 0,\n\t            hours = normalizedInput.hour || 0,\n\t            minutes = normalizedInput.minute || 0,\n\t            seconds = normalizedInput.second || 0,\n\t            milliseconds = normalizedInput.millisecond || 0;\n\t\n\t        this._isValid = isDurationValid(normalizedInput);\n\t\n\t        // representation for dateAddRemove\n\t        this._milliseconds = +milliseconds +\n\t            seconds * 1e3 + // 1000\n\t            minutes * 6e4 + // 1000 * 60\n\t            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n\t        // Because of dateAddRemove treats 24 hours as different from a\n\t        // day when working around DST, we need to store them separately\n\t        this._days = +days +\n\t            weeks * 7;\n\t        // It is impossible to translate months into days without knowing\n\t        // which months you are are talking about, so we have to store\n\t        // it separately.\n\t        this._months = +months +\n\t            quarters * 3 +\n\t            years * 12;\n\t\n\t        this._data = {};\n\t\n\t        this._locale = getLocale();\n\t\n\t        this._bubble();\n\t    }\n\t\n\t    function isDuration (obj) {\n\t        return obj instanceof Duration;\n\t    }\n\t\n\t    function absRound (number) {\n\t        if (number < 0) {\n\t            return Math.round(-1 * number) * -1;\n\t        } else {\n\t            return Math.round(number);\n\t        }\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    function offset (token, separator) {\n\t        addFormatToken(token, 0, 0, function () {\n\t            var offset = this.utcOffset();\n\t            var sign = '+';\n\t            if (offset < 0) {\n\t                offset = -offset;\n\t                sign = '-';\n\t            }\n\t            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n\t        });\n\t    }\n\t\n\t    offset('Z', ':');\n\t    offset('ZZ', '');\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('Z',  matchShortOffset);\n\t    addRegexToken('ZZ', matchShortOffset);\n\t    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n\t        config._useUTC = true;\n\t        config._tzm = offsetFromString(matchShortOffset, input);\n\t    });\n\t\n\t    // HELPERS\n\t\n\t    // timezone chunker\n\t    // '+10:00' > ['10',  '00']\n\t    // '-1530'  > ['-15', '30']\n\t    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\t\n\t    function offsetFromString(matcher, string) {\n\t        var matches = (string || '').match(matcher);\n\t\n\t        if (matches === null) {\n\t            return null;\n\t        }\n\t\n\t        var chunk   = matches[matches.length - 1] || [];\n\t        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n\t        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\t\n\t        return minutes === 0 ?\n\t          0 :\n\t          parts[0] === '+' ? minutes : -minutes;\n\t    }\n\t\n\t    // Return a moment from input, that is local/utc/zone equivalent to model.\n\t    function cloneWithOffset(input, model) {\n\t        var res, diff;\n\t        if (model._isUTC) {\n\t            res = model.clone();\n\t            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n\t            // Use low-level api, because this fn is low-level api.\n\t            res._d.setTime(res._d.valueOf() + diff);\n\t            hooks.updateOffset(res, false);\n\t            return res;\n\t        } else {\n\t            return createLocal(input).local();\n\t        }\n\t    }\n\t\n\t    function getDateOffset (m) {\n\t        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n\t        // https://github.com/moment/moment/pull/1871\n\t        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n\t    }\n\t\n\t    // HOOKS\n\t\n\t    // This function will be called whenever a moment is mutated.\n\t    // It is intended to keep the offset in sync with the timezone.\n\t    hooks.updateOffset = function () {};\n\t\n\t    // MOMENTS\n\t\n\t    // keepLocalTime = true means only change the timezone, without\n\t    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n\t    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n\t    // +0200, so we adjust the time as needed, to be valid.\n\t    //\n\t    // Keeping the time actually adds/subtracts (one hour)\n\t    // from the actual represented time. That is why we call updateOffset\n\t    // a second time. In case it wants us to change the offset again\n\t    // _changeInProgress == true case, then we have to adjust, because\n\t    // there is no such time in the given timezone.\n\t    function getSetOffset (input, keepLocalTime, keepMinutes) {\n\t        var offset = this._offset || 0,\n\t            localAdjust;\n\t        if (!this.isValid()) {\n\t            return input != null ? this : NaN;\n\t        }\n\t        if (input != null) {\n\t            if (typeof input === 'string') {\n\t                input = offsetFromString(matchShortOffset, input);\n\t                if (input === null) {\n\t                    return this;\n\t                }\n\t            } else if (Math.abs(input) < 16 && !keepMinutes) {\n\t                input = input * 60;\n\t            }\n\t            if (!this._isUTC && keepLocalTime) {\n\t                localAdjust = getDateOffset(this);\n\t            }\n\t            this._offset = input;\n\t            this._isUTC = true;\n\t            if (localAdjust != null) {\n\t                this.add(localAdjust, 'm');\n\t            }\n\t            if (offset !== input) {\n\t                if (!keepLocalTime || this._changeInProgress) {\n\t                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n\t                } else if (!this._changeInProgress) {\n\t                    this._changeInProgress = true;\n\t                    hooks.updateOffset(this, true);\n\t                    this._changeInProgress = null;\n\t                }\n\t            }\n\t            return this;\n\t        } else {\n\t            return this._isUTC ? offset : getDateOffset(this);\n\t        }\n\t    }\n\t\n\t    function getSetZone (input, keepLocalTime) {\n\t        if (input != null) {\n\t            if (typeof input !== 'string') {\n\t                input = -input;\n\t            }\n\t\n\t            this.utcOffset(input, keepLocalTime);\n\t\n\t            return this;\n\t        } else {\n\t            return -this.utcOffset();\n\t        }\n\t    }\n\t\n\t    function setOffsetToUTC (keepLocalTime) {\n\t        return this.utcOffset(0, keepLocalTime);\n\t    }\n\t\n\t    function setOffsetToLocal (keepLocalTime) {\n\t        if (this._isUTC) {\n\t            this.utcOffset(0, keepLocalTime);\n\t            this._isUTC = false;\n\t\n\t            if (keepLocalTime) {\n\t                this.subtract(getDateOffset(this), 'm');\n\t            }\n\t        }\n\t        return this;\n\t    }\n\t\n\t    function setOffsetToParsedOffset () {\n\t        if (this._tzm != null) {\n\t            this.utcOffset(this._tzm, false, true);\n\t        } else if (typeof this._i === 'string') {\n\t            var tZone = offsetFromString(matchOffset, this._i);\n\t            if (tZone != null) {\n\t                this.utcOffset(tZone);\n\t            }\n\t            else {\n\t                this.utcOffset(0, true);\n\t            }\n\t        }\n\t        return this;\n\t    }\n\t\n\t    function hasAlignedHourOffset (input) {\n\t        if (!this.isValid()) {\n\t            return false;\n\t        }\n\t        input = input ? createLocal(input).utcOffset() : 0;\n\t\n\t        return (this.utcOffset() - input) % 60 === 0;\n\t    }\n\t\n\t    function isDaylightSavingTime () {\n\t        return (\n\t            this.utcOffset() > this.clone().month(0).utcOffset() ||\n\t            this.utcOffset() > this.clone().month(5).utcOffset()\n\t        );\n\t    }\n\t\n\t    function isDaylightSavingTimeShifted () {\n\t        if (!isUndefined(this._isDSTShifted)) {\n\t            return this._isDSTShifted;\n\t        }\n\t\n\t        var c = {};\n\t\n\t        copyConfig(c, this);\n\t        c = prepareConfig(c);\n\t\n\t        if (c._a) {\n\t            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n\t            this._isDSTShifted = this.isValid() &&\n\t                compareArrays(c._a, other.toArray()) > 0;\n\t        } else {\n\t            this._isDSTShifted = false;\n\t        }\n\t\n\t        return this._isDSTShifted;\n\t    }\n\t\n\t    function isLocal () {\n\t        return this.isValid() ? !this._isUTC : false;\n\t    }\n\t\n\t    function isUtcOffset () {\n\t        return this.isValid() ? this._isUTC : false;\n\t    }\n\t\n\t    function isUtc () {\n\t        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n\t    }\n\t\n\t    // ASP.NET json date format regex\n\t    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\t\n\t    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n\t    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n\t    // and further modified to allow for strings containing both week and day\n\t    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\t\n\t    function createDuration (input, key) {\n\t        var duration = input,\n\t            // matching against regexp is expensive, do it on demand\n\t            match = null,\n\t            sign,\n\t            ret,\n\t            diffRes;\n\t\n\t        if (isDuration(input)) {\n\t            duration = {\n\t                ms : input._milliseconds,\n\t                d  : input._days,\n\t                M  : input._months\n\t            };\n\t        } else if (isNumber(input)) {\n\t            duration = {};\n\t            if (key) {\n\t                duration[key] = input;\n\t            } else {\n\t                duration.milliseconds = input;\n\t            }\n\t        } else if (!!(match = aspNetRegex.exec(input))) {\n\t            sign = (match[1] === '-') ? -1 : 1;\n\t            duration = {\n\t                y  : 0,\n\t                d  : toInt(match[DATE])                         * sign,\n\t                h  : toInt(match[HOUR])                         * sign,\n\t                m  : toInt(match[MINUTE])                       * sign,\n\t                s  : toInt(match[SECOND])                       * sign,\n\t                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\t            };\n\t        } else if (!!(match = isoRegex.exec(input))) {\n\t            sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n\t            duration = {\n\t                y : parseIso(match[2], sign),\n\t                M : parseIso(match[3], sign),\n\t                w : parseIso(match[4], sign),\n\t                d : parseIso(match[5], sign),\n\t                h : parseIso(match[6], sign),\n\t                m : parseIso(match[7], sign),\n\t                s : parseIso(match[8], sign)\n\t            };\n\t        } else if (duration == null) {// checks for null or undefined\n\t            duration = {};\n\t        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n\t            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\t\n\t            duration = {};\n\t            duration.ms = diffRes.milliseconds;\n\t            duration.M = diffRes.months;\n\t        }\n\t\n\t        ret = new Duration(duration);\n\t\n\t        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n\t            ret._locale = input._locale;\n\t        }\n\t\n\t        return ret;\n\t    }\n\t\n\t    createDuration.fn = Duration.prototype;\n\t    createDuration.invalid = createInvalid$1;\n\t\n\t    function parseIso (inp, sign) {\n\t        // We'd normally use ~~inp for this, but unfortunately it also\n\t        // converts floats to ints.\n\t        // inp may be undefined, so careful calling replace on it.\n\t        var res = inp && parseFloat(inp.replace(',', '.'));\n\t        // apply sign while we're at it\n\t        return (isNaN(res) ? 0 : res) * sign;\n\t    }\n\t\n\t    function positiveMomentsDifference(base, other) {\n\t        var res = {milliseconds: 0, months: 0};\n\t\n\t        res.months = other.month() - base.month() +\n\t            (other.year() - base.year()) * 12;\n\t        if (base.clone().add(res.months, 'M').isAfter(other)) {\n\t            --res.months;\n\t        }\n\t\n\t        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\t\n\t        return res;\n\t    }\n\t\n\t    function momentsDifference(base, other) {\n\t        var res;\n\t        if (!(base.isValid() && other.isValid())) {\n\t            return {milliseconds: 0, months: 0};\n\t        }\n\t\n\t        other = cloneWithOffset(other, base);\n\t        if (base.isBefore(other)) {\n\t            res = positiveMomentsDifference(base, other);\n\t        } else {\n\t            res = positiveMomentsDifference(other, base);\n\t            res.milliseconds = -res.milliseconds;\n\t            res.months = -res.months;\n\t        }\n\t\n\t        return res;\n\t    }\n\t\n\t    // TODO: remove 'name' arg after deprecation is removed\n\t    function createAdder(direction, name) {\n\t        return function (val, period) {\n\t            var dur, tmp;\n\t            //invert the arguments, but complain about it\n\t            if (period !== null && !isNaN(+period)) {\n\t                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n\t                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n\t                tmp = val; val = period; period = tmp;\n\t            }\n\t\n\t            val = typeof val === 'string' ? +val : val;\n\t            dur = createDuration(val, period);\n\t            addSubtract(this, dur, direction);\n\t            return this;\n\t        };\n\t    }\n\t\n\t    function addSubtract (mom, duration, isAdding, updateOffset) {\n\t        var milliseconds = duration._milliseconds,\n\t            days = absRound(duration._days),\n\t            months = absRound(duration._months);\n\t\n\t        if (!mom.isValid()) {\n\t            // No op\n\t            return;\n\t        }\n\t\n\t        updateOffset = updateOffset == null ? true : updateOffset;\n\t\n\t        if (months) {\n\t            setMonth(mom, get(mom, 'Month') + months * isAdding);\n\t        }\n\t        if (days) {\n\t            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n\t        }\n\t        if (milliseconds) {\n\t            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n\t        }\n\t        if (updateOffset) {\n\t            hooks.updateOffset(mom, days || months);\n\t        }\n\t    }\n\t\n\t    var add      = createAdder(1, 'add');\n\t    var subtract = createAdder(-1, 'subtract');\n\t\n\t    function getCalendarFormat(myMoment, now) {\n\t        var diff = myMoment.diff(now, 'days', true);\n\t        return diff < -6 ? 'sameElse' :\n\t                diff < -1 ? 'lastWeek' :\n\t                diff < 0 ? 'lastDay' :\n\t                diff < 1 ? 'sameDay' :\n\t                diff < 2 ? 'nextDay' :\n\t                diff < 7 ? 'nextWeek' : 'sameElse';\n\t    }\n\t\n\t    function calendar$1 (time, formats) {\n\t        // We want to compare the start of today, vs this.\n\t        // Getting start-of-today depends on whether we're local/utc/offset or not.\n\t        var now = time || createLocal(),\n\t            sod = cloneWithOffset(now, this).startOf('day'),\n\t            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\t\n\t        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\t\n\t        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n\t    }\n\t\n\t    function clone () {\n\t        return new Moment(this);\n\t    }\n\t\n\t    function isAfter (input, units) {\n\t        var localInput = isMoment(input) ? input : createLocal(input);\n\t        if (!(this.isValid() && localInput.isValid())) {\n\t            return false;\n\t        }\n\t        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t        if (units === 'millisecond') {\n\t            return this.valueOf() > localInput.valueOf();\n\t        } else {\n\t            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n\t        }\n\t    }\n\t\n\t    function isBefore (input, units) {\n\t        var localInput = isMoment(input) ? input : createLocal(input);\n\t        if (!(this.isValid() && localInput.isValid())) {\n\t            return false;\n\t        }\n\t        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t        if (units === 'millisecond') {\n\t            return this.valueOf() < localInput.valueOf();\n\t        } else {\n\t            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n\t        }\n\t    }\n\t\n\t    function isBetween (from, to, units, inclusivity) {\n\t        inclusivity = inclusivity || '()';\n\t        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n\t            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n\t    }\n\t\n\t    function isSame (input, units) {\n\t        var localInput = isMoment(input) ? input : createLocal(input),\n\t            inputMs;\n\t        if (!(this.isValid() && localInput.isValid())) {\n\t            return false;\n\t        }\n\t        units = normalizeUnits(units || 'millisecond');\n\t        if (units === 'millisecond') {\n\t            return this.valueOf() === localInput.valueOf();\n\t        } else {\n\t            inputMs = localInput.valueOf();\n\t            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n\t        }\n\t    }\n\t\n\t    function isSameOrAfter (input, units) {\n\t        return this.isSame(input, units) || this.isAfter(input,units);\n\t    }\n\t\n\t    function isSameOrBefore (input, units) {\n\t        return this.isSame(input, units) || this.isBefore(input,units);\n\t    }\n\t\n\t    function diff (input, units, asFloat) {\n\t        var that,\n\t            zoneDelta,\n\t            output;\n\t\n\t        if (!this.isValid()) {\n\t            return NaN;\n\t        }\n\t\n\t        that = cloneWithOffset(input, this);\n\t\n\t        if (!that.isValid()) {\n\t            return NaN;\n\t        }\n\t\n\t        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\t\n\t        units = normalizeUnits(units);\n\t\n\t        switch (units) {\n\t            case 'year': output = monthDiff(this, that) / 12; break;\n\t            case 'month': output = monthDiff(this, that); break;\n\t            case 'quarter': output = monthDiff(this, that) / 3; break;\n\t            case 'second': output = (this - that) / 1e3; break; // 1000\n\t            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n\t            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n\t            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n\t            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n\t            default: output = this - that;\n\t        }\n\t\n\t        return asFloat ? output : absFloor(output);\n\t    }\n\t\n\t    function monthDiff (a, b) {\n\t        // difference in months\n\t        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n\t            // b is in (anchor - 1 month, anchor + 1 month)\n\t            anchor = a.clone().add(wholeMonthDiff, 'months'),\n\t            anchor2, adjust;\n\t\n\t        if (b - anchor < 0) {\n\t            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n\t            // linear across the month\n\t            adjust = (b - anchor) / (anchor - anchor2);\n\t        } else {\n\t            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n\t            // linear across the month\n\t            adjust = (b - anchor) / (anchor2 - anchor);\n\t        }\n\t\n\t        //check for negative zero, return zero if negative zero\n\t        return -(wholeMonthDiff + adjust) || 0;\n\t    }\n\t\n\t    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\t    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\t\n\t    function toString () {\n\t        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n\t    }\n\t\n\t    function toISOString(keepOffset) {\n\t        if (!this.isValid()) {\n\t            return null;\n\t        }\n\t        var utc = keepOffset !== true;\n\t        var m = utc ? this.clone().utc() : this;\n\t        if (m.year() < 0 || m.year() > 9999) {\n\t            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n\t        }\n\t        if (isFunction(Date.prototype.toISOString)) {\n\t            // native implementation is ~50x faster, use it when we can\n\t            if (utc) {\n\t                return this.toDate().toISOString();\n\t            } else {\n\t                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n\t            }\n\t        }\n\t        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n\t    }\n\t\n\t    /**\n\t     * Return a human readable representation of a moment that can\n\t     * also be evaluated to get a new moment which is the same\n\t     *\n\t     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n\t     */\n\t    function inspect () {\n\t        if (!this.isValid()) {\n\t            return 'moment.invalid(/* ' + this._i + ' */)';\n\t        }\n\t        var func = 'moment';\n\t        var zone = '';\n\t        if (!this.isLocal()) {\n\t            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n\t            zone = 'Z';\n\t        }\n\t        var prefix = '[' + func + '(\"]';\n\t        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n\t        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n\t        var suffix = zone + '[\")]';\n\t\n\t        return this.format(prefix + year + datetime + suffix);\n\t    }\n\t\n\t    function format (inputString) {\n\t        if (!inputString) {\n\t            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n\t        }\n\t        var output = formatMoment(this, inputString);\n\t        return this.localeData().postformat(output);\n\t    }\n\t\n\t    function from (time, withoutSuffix) {\n\t        if (this.isValid() &&\n\t                ((isMoment(time) && time.isValid()) ||\n\t                 createLocal(time).isValid())) {\n\t            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t        } else {\n\t            return this.localeData().invalidDate();\n\t        }\n\t    }\n\t\n\t    function fromNow (withoutSuffix) {\n\t        return this.from(createLocal(), withoutSuffix);\n\t    }\n\t\n\t    function to (time, withoutSuffix) {\n\t        if (this.isValid() &&\n\t                ((isMoment(time) && time.isValid()) ||\n\t                 createLocal(time).isValid())) {\n\t            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t        } else {\n\t            return this.localeData().invalidDate();\n\t        }\n\t    }\n\t\n\t    function toNow (withoutSuffix) {\n\t        return this.to(createLocal(), withoutSuffix);\n\t    }\n\t\n\t    // If passed a locale key, it will set the locale for this\n\t    // instance.  Otherwise, it will return the locale configuration\n\t    // variables for this instance.\n\t    function locale (key) {\n\t        var newLocaleData;\n\t\n\t        if (key === undefined) {\n\t            return this._locale._abbr;\n\t        } else {\n\t            newLocaleData = getLocale(key);\n\t            if (newLocaleData != null) {\n\t                this._locale = newLocaleData;\n\t            }\n\t            return this;\n\t        }\n\t    }\n\t\n\t    var lang = deprecate(\n\t        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n\t        function (key) {\n\t            if (key === undefined) {\n\t                return this.localeData();\n\t            } else {\n\t                return this.locale(key);\n\t            }\n\t        }\n\t    );\n\t\n\t    function localeData () {\n\t        return this._locale;\n\t    }\n\t\n\t    function startOf (units) {\n\t        units = normalizeUnits(units);\n\t        // the following switch intentionally omits break keywords\n\t        // to utilize falling through the cases.\n\t        switch (units) {\n\t            case 'year':\n\t                this.month(0);\n\t                /* falls through */\n\t            case 'quarter':\n\t            case 'month':\n\t                this.date(1);\n\t                /* falls through */\n\t            case 'week':\n\t            case 'isoWeek':\n\t            case 'day':\n\t            case 'date':\n\t                this.hours(0);\n\t                /* falls through */\n\t            case 'hour':\n\t                this.minutes(0);\n\t                /* falls through */\n\t            case 'minute':\n\t                this.seconds(0);\n\t                /* falls through */\n\t            case 'second':\n\t                this.milliseconds(0);\n\t        }\n\t\n\t        // weeks are a special case\n\t        if (units === 'week') {\n\t            this.weekday(0);\n\t        }\n\t        if (units === 'isoWeek') {\n\t            this.isoWeekday(1);\n\t        }\n\t\n\t        // quarters are also special\n\t        if (units === 'quarter') {\n\t            this.month(Math.floor(this.month() / 3) * 3);\n\t        }\n\t\n\t        return this;\n\t    }\n\t\n\t    function endOf (units) {\n\t        units = normalizeUnits(units);\n\t        if (units === undefined || units === 'millisecond') {\n\t            return this;\n\t        }\n\t\n\t        // 'date' is an alias for 'day', so it should be considered as such.\n\t        if (units === 'date') {\n\t            units = 'day';\n\t        }\n\t\n\t        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n\t    }\n\t\n\t    function valueOf () {\n\t        return this._d.valueOf() - ((this._offset || 0) * 60000);\n\t    }\n\t\n\t    function unix () {\n\t        return Math.floor(this.valueOf() / 1000);\n\t    }\n\t\n\t    function toDate () {\n\t        return new Date(this.valueOf());\n\t    }\n\t\n\t    function toArray () {\n\t        var m = this;\n\t        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n\t    }\n\t\n\t    function toObject () {\n\t        var m = this;\n\t        return {\n\t            years: m.year(),\n\t            months: m.month(),\n\t            date: m.date(),\n\t            hours: m.hours(),\n\t            minutes: m.minutes(),\n\t            seconds: m.seconds(),\n\t            milliseconds: m.milliseconds()\n\t        };\n\t    }\n\t\n\t    function toJSON () {\n\t        // new Date(NaN).toJSON() === null\n\t        return this.isValid() ? this.toISOString() : null;\n\t    }\n\t\n\t    function isValid$2 () {\n\t        return isValid(this);\n\t    }\n\t\n\t    function parsingFlags () {\n\t        return extend({}, getParsingFlags(this));\n\t    }\n\t\n\t    function invalidAt () {\n\t        return getParsingFlags(this).overflow;\n\t    }\n\t\n\t    function creationData() {\n\t        return {\n\t            input: this._i,\n\t            format: this._f,\n\t            locale: this._locale,\n\t            isUTC: this._isUTC,\n\t            strict: this._strict\n\t        };\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken(0, ['gg', 2], 0, function () {\n\t        return this.weekYear() % 100;\n\t    });\n\t\n\t    addFormatToken(0, ['GG', 2], 0, function () {\n\t        return this.isoWeekYear() % 100;\n\t    });\n\t\n\t    function addWeekYearFormatToken (token, getter) {\n\t        addFormatToken(0, [token, token.length], 0, getter);\n\t    }\n\t\n\t    addWeekYearFormatToken('gggg',     'weekYear');\n\t    addWeekYearFormatToken('ggggg',    'weekYear');\n\t    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n\t    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('weekYear', 'gg');\n\t    addUnitAlias('isoWeekYear', 'GG');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('weekYear', 1);\n\t    addUnitPriority('isoWeekYear', 1);\n\t\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('G',      matchSigned);\n\t    addRegexToken('g',      matchSigned);\n\t    addRegexToken('GG',     match1to2, match2);\n\t    addRegexToken('gg',     match1to2, match2);\n\t    addRegexToken('GGGG',   match1to4, match4);\n\t    addRegexToken('gggg',   match1to4, match4);\n\t    addRegexToken('GGGGG',  match1to6, match6);\n\t    addRegexToken('ggggg',  match1to6, match6);\n\t\n\t    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n\t        week[token.substr(0, 2)] = toInt(input);\n\t    });\n\t\n\t    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n\t        week[token] = hooks.parseTwoDigitYear(input);\n\t    });\n\t\n\t    // MOMENTS\n\t\n\t    function getSetWeekYear (input) {\n\t        return getSetWeekYearHelper.call(this,\n\t                input,\n\t                this.week(),\n\t                this.weekday(),\n\t                this.localeData()._week.dow,\n\t                this.localeData()._week.doy);\n\t    }\n\t\n\t    function getSetISOWeekYear (input) {\n\t        return getSetWeekYearHelper.call(this,\n\t                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n\t    }\n\t\n\t    function getISOWeeksInYear () {\n\t        return weeksInYear(this.year(), 1, 4);\n\t    }\n\t\n\t    function getWeeksInYear () {\n\t        var weekInfo = this.localeData()._week;\n\t        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n\t    }\n\t\n\t    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n\t        var weeksTarget;\n\t        if (input == null) {\n\t            return weekOfYear(this, dow, doy).year;\n\t        } else {\n\t            weeksTarget = weeksInYear(input, dow, doy);\n\t            if (week > weeksTarget) {\n\t                week = weeksTarget;\n\t            }\n\t            return setWeekAll.call(this, input, week, weekday, dow, doy);\n\t        }\n\t    }\n\t\n\t    function setWeekAll(weekYear, week, weekday, dow, doy) {\n\t        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n\t            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\t\n\t        this.year(date.getUTCFullYear());\n\t        this.month(date.getUTCMonth());\n\t        this.date(date.getUTCDate());\n\t        return this;\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('Q', 0, 'Qo', 'quarter');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('quarter', 'Q');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('quarter', 7);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('Q', match1);\n\t    addParseToken('Q', function (input, array) {\n\t        array[MONTH] = (toInt(input) - 1) * 3;\n\t    });\n\t\n\t    // MOMENTS\n\t\n\t    function getSetQuarter (input) {\n\t        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('date', 'D');\n\t\n\t    // PRIORITY\n\t    addUnitPriority('date', 9);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('D',  match1to2);\n\t    addRegexToken('DD', match1to2, match2);\n\t    addRegexToken('Do', function (isStrict, locale) {\n\t        // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t        return isStrict ?\n\t          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n\t          locale._dayOfMonthOrdinalParseLenient;\n\t    });\n\t\n\t    addParseToken(['D', 'DD'], DATE);\n\t    addParseToken('Do', function (input, array) {\n\t        array[DATE] = toInt(input.match(match1to2)[0]);\n\t    });\n\t\n\t    // MOMENTS\n\t\n\t    var getSetDayOfMonth = makeGetSet('Date', true);\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('dayOfYear', 'DDD');\n\t\n\t    // PRIORITY\n\t    addUnitPriority('dayOfYear', 4);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('DDD',  match1to3);\n\t    addRegexToken('DDDD', match3);\n\t    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n\t        config._dayOfYear = toInt(input);\n\t    });\n\t\n\t    // HELPERS\n\t\n\t    // MOMENTS\n\t\n\t    function getSetDayOfYear (input) {\n\t        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n\t        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n\t    }\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('m', ['mm', 2], 0, 'minute');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('minute', 'm');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('minute', 14);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('m',  match1to2);\n\t    addRegexToken('mm', match1to2, match2);\n\t    addParseToken(['m', 'mm'], MINUTE);\n\t\n\t    // MOMENTS\n\t\n\t    var getSetMinute = makeGetSet('Minutes', false);\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('s', ['ss', 2], 0, 'second');\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('second', 's');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('second', 15);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('s',  match1to2);\n\t    addRegexToken('ss', match1to2, match2);\n\t    addParseToken(['s', 'ss'], SECOND);\n\t\n\t    // MOMENTS\n\t\n\t    var getSetSecond = makeGetSet('Seconds', false);\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('S', 0, 0, function () {\n\t        return ~~(this.millisecond() / 100);\n\t    });\n\t\n\t    addFormatToken(0, ['SS', 2], 0, function () {\n\t        return ~~(this.millisecond() / 10);\n\t    });\n\t\n\t    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n\t    addFormatToken(0, ['SSSS', 4], 0, function () {\n\t        return this.millisecond() * 10;\n\t    });\n\t    addFormatToken(0, ['SSSSS', 5], 0, function () {\n\t        return this.millisecond() * 100;\n\t    });\n\t    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n\t        return this.millisecond() * 1000;\n\t    });\n\t    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n\t        return this.millisecond() * 10000;\n\t    });\n\t    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n\t        return this.millisecond() * 100000;\n\t    });\n\t    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n\t        return this.millisecond() * 1000000;\n\t    });\n\t\n\t\n\t    // ALIASES\n\t\n\t    addUnitAlias('millisecond', 'ms');\n\t\n\t    // PRIORITY\n\t\n\t    addUnitPriority('millisecond', 16);\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('S',    match1to3, match1);\n\t    addRegexToken('SS',   match1to3, match2);\n\t    addRegexToken('SSS',  match1to3, match3);\n\t\n\t    var token;\n\t    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n\t        addRegexToken(token, matchUnsigned);\n\t    }\n\t\n\t    function parseMs(input, array) {\n\t        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n\t    }\n\t\n\t    for (token = 'S'; token.length <= 9; token += 'S') {\n\t        addParseToken(token, parseMs);\n\t    }\n\t    // MOMENTS\n\t\n\t    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('z',  0, 0, 'zoneAbbr');\n\t    addFormatToken('zz', 0, 0, 'zoneName');\n\t\n\t    // MOMENTS\n\t\n\t    function getZoneAbbr () {\n\t        return this._isUTC ? 'UTC' : '';\n\t    }\n\t\n\t    function getZoneName () {\n\t        return this._isUTC ? 'Coordinated Universal Time' : '';\n\t    }\n\t\n\t    var proto = Moment.prototype;\n\t\n\t    proto.add               = add;\n\t    proto.calendar          = calendar$1;\n\t    proto.clone             = clone;\n\t    proto.diff              = diff;\n\t    proto.endOf             = endOf;\n\t    proto.format            = format;\n\t    proto.from              = from;\n\t    proto.fromNow           = fromNow;\n\t    proto.to                = to;\n\t    proto.toNow             = toNow;\n\t    proto.get               = stringGet;\n\t    proto.invalidAt         = invalidAt;\n\t    proto.isAfter           = isAfter;\n\t    proto.isBefore          = isBefore;\n\t    proto.isBetween         = isBetween;\n\t    proto.isSame            = isSame;\n\t    proto.isSameOrAfter     = isSameOrAfter;\n\t    proto.isSameOrBefore    = isSameOrBefore;\n\t    proto.isValid           = isValid$2;\n\t    proto.lang              = lang;\n\t    proto.locale            = locale;\n\t    proto.localeData        = localeData;\n\t    proto.max               = prototypeMax;\n\t    proto.min               = prototypeMin;\n\t    proto.parsingFlags      = parsingFlags;\n\t    proto.set               = stringSet;\n\t    proto.startOf           = startOf;\n\t    proto.subtract          = subtract;\n\t    proto.toArray           = toArray;\n\t    proto.toObject          = toObject;\n\t    proto.toDate            = toDate;\n\t    proto.toISOString       = toISOString;\n\t    proto.inspect           = inspect;\n\t    proto.toJSON            = toJSON;\n\t    proto.toString          = toString;\n\t    proto.unix              = unix;\n\t    proto.valueOf           = valueOf;\n\t    proto.creationData      = creationData;\n\t    proto.year       = getSetYear;\n\t    proto.isLeapYear = getIsLeapYear;\n\t    proto.weekYear    = getSetWeekYear;\n\t    proto.isoWeekYear = getSetISOWeekYear;\n\t    proto.quarter = proto.quarters = getSetQuarter;\n\t    proto.month       = getSetMonth;\n\t    proto.daysInMonth = getDaysInMonth;\n\t    proto.week           = proto.weeks        = getSetWeek;\n\t    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n\t    proto.weeksInYear    = getWeeksInYear;\n\t    proto.isoWeeksInYear = getISOWeeksInYear;\n\t    proto.date       = getSetDayOfMonth;\n\t    proto.day        = proto.days             = getSetDayOfWeek;\n\t    proto.weekday    = getSetLocaleDayOfWeek;\n\t    proto.isoWeekday = getSetISODayOfWeek;\n\t    proto.dayOfYear  = getSetDayOfYear;\n\t    proto.hour = proto.hours = getSetHour;\n\t    proto.minute = proto.minutes = getSetMinute;\n\t    proto.second = proto.seconds = getSetSecond;\n\t    proto.millisecond = proto.milliseconds = getSetMillisecond;\n\t    proto.utcOffset            = getSetOffset;\n\t    proto.utc                  = setOffsetToUTC;\n\t    proto.local                = setOffsetToLocal;\n\t    proto.parseZone            = setOffsetToParsedOffset;\n\t    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n\t    proto.isDST                = isDaylightSavingTime;\n\t    proto.isLocal              = isLocal;\n\t    proto.isUtcOffset          = isUtcOffset;\n\t    proto.isUtc                = isUtc;\n\t    proto.isUTC                = isUtc;\n\t    proto.zoneAbbr = getZoneAbbr;\n\t    proto.zoneName = getZoneName;\n\t    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n\t    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n\t    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n\t    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n\t    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\t\n\t    function createUnix (input) {\n\t        return createLocal(input * 1000);\n\t    }\n\t\n\t    function createInZone () {\n\t        return createLocal.apply(null, arguments).parseZone();\n\t    }\n\t\n\t    function preParsePostFormat (string) {\n\t        return string;\n\t    }\n\t\n\t    var proto$1 = Locale.prototype;\n\t\n\t    proto$1.calendar        = calendar;\n\t    proto$1.longDateFormat  = longDateFormat;\n\t    proto$1.invalidDate     = invalidDate;\n\t    proto$1.ordinal         = ordinal;\n\t    proto$1.preparse        = preParsePostFormat;\n\t    proto$1.postformat      = preParsePostFormat;\n\t    proto$1.relativeTime    = relativeTime;\n\t    proto$1.pastFuture      = pastFuture;\n\t    proto$1.set             = set;\n\t\n\t    proto$1.months            =        localeMonths;\n\t    proto$1.monthsShort       =        localeMonthsShort;\n\t    proto$1.monthsParse       =        localeMonthsParse;\n\t    proto$1.monthsRegex       = monthsRegex;\n\t    proto$1.monthsShortRegex  = monthsShortRegex;\n\t    proto$1.week = localeWeek;\n\t    proto$1.firstDayOfYear = localeFirstDayOfYear;\n\t    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\t\n\t    proto$1.weekdays       =        localeWeekdays;\n\t    proto$1.weekdaysMin    =        localeWeekdaysMin;\n\t    proto$1.weekdaysShort  =        localeWeekdaysShort;\n\t    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\t\n\t    proto$1.weekdaysRegex       =        weekdaysRegex;\n\t    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n\t    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\t\n\t    proto$1.isPM = localeIsPM;\n\t    proto$1.meridiem = localeMeridiem;\n\t\n\t    function get$1 (format, index, field, setter) {\n\t        var locale = getLocale();\n\t        var utc = createUTC().set(setter, index);\n\t        return locale[field](utc, format);\n\t    }\n\t\n\t    function listMonthsImpl (format, index, field) {\n\t        if (isNumber(format)) {\n\t            index = format;\n\t            format = undefined;\n\t        }\n\t\n\t        format = format || '';\n\t\n\t        if (index != null) {\n\t            return get$1(format, index, field, 'month');\n\t        }\n\t\n\t        var i;\n\t        var out = [];\n\t        for (i = 0; i < 12; i++) {\n\t            out[i] = get$1(format, i, field, 'month');\n\t        }\n\t        return out;\n\t    }\n\t\n\t    // ()\n\t    // (5)\n\t    // (fmt, 5)\n\t    // (fmt)\n\t    // (true)\n\t    // (true, 5)\n\t    // (true, fmt, 5)\n\t    // (true, fmt)\n\t    function listWeekdaysImpl (localeSorted, format, index, field) {\n\t        if (typeof localeSorted === 'boolean') {\n\t            if (isNumber(format)) {\n\t                index = format;\n\t                format = undefined;\n\t            }\n\t\n\t            format = format || '';\n\t        } else {\n\t            format = localeSorted;\n\t            index = format;\n\t            localeSorted = false;\n\t\n\t            if (isNumber(format)) {\n\t                index = format;\n\t                format = undefined;\n\t            }\n\t\n\t            format = format || '';\n\t        }\n\t\n\t        var locale = getLocale(),\n\t            shift = localeSorted ? locale._week.dow : 0;\n\t\n\t        if (index != null) {\n\t            return get$1(format, (index + shift) % 7, field, 'day');\n\t        }\n\t\n\t        var i;\n\t        var out = [];\n\t        for (i = 0; i < 7; i++) {\n\t            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n\t        }\n\t        return out;\n\t    }\n\t\n\t    function listMonths (format, index) {\n\t        return listMonthsImpl(format, index, 'months');\n\t    }\n\t\n\t    function listMonthsShort (format, index) {\n\t        return listMonthsImpl(format, index, 'monthsShort');\n\t    }\n\t\n\t    function listWeekdays (localeSorted, format, index) {\n\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n\t    }\n\t\n\t    function listWeekdaysShort (localeSorted, format, index) {\n\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n\t    }\n\t\n\t    function listWeekdaysMin (localeSorted, format, index) {\n\t        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n\t    }\n\t\n\t    getSetGlobalLocale('en', {\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        }\n\t    });\n\t\n\t    // Side effect imports\n\t\n\t    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n\t    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\t\n\t    var mathAbs = Math.abs;\n\t\n\t    function abs () {\n\t        var data           = this._data;\n\t\n\t        this._milliseconds = mathAbs(this._milliseconds);\n\t        this._days         = mathAbs(this._days);\n\t        this._months       = mathAbs(this._months);\n\t\n\t        data.milliseconds  = mathAbs(data.milliseconds);\n\t        data.seconds       = mathAbs(data.seconds);\n\t        data.minutes       = mathAbs(data.minutes);\n\t        data.hours         = mathAbs(data.hours);\n\t        data.months        = mathAbs(data.months);\n\t        data.years         = mathAbs(data.years);\n\t\n\t        return this;\n\t    }\n\t\n\t    function addSubtract$1 (duration, input, value, direction) {\n\t        var other = createDuration(input, value);\n\t\n\t        duration._milliseconds += direction * other._milliseconds;\n\t        duration._days         += direction * other._days;\n\t        duration._months       += direction * other._months;\n\t\n\t        return duration._bubble();\n\t    }\n\t\n\t    // supports only 2.0-style add(1, 's') or add(duration)\n\t    function add$1 (input, value) {\n\t        return addSubtract$1(this, input, value, 1);\n\t    }\n\t\n\t    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\t    function subtract$1 (input, value) {\n\t        return addSubtract$1(this, input, value, -1);\n\t    }\n\t\n\t    function absCeil (number) {\n\t        if (number < 0) {\n\t            return Math.floor(number);\n\t        } else {\n\t            return Math.ceil(number);\n\t        }\n\t    }\n\t\n\t    function bubble () {\n\t        var milliseconds = this._milliseconds;\n\t        var days         = this._days;\n\t        var months       = this._months;\n\t        var data         = this._data;\n\t        var seconds, minutes, hours, years, monthsFromDays;\n\t\n\t        // if we have a mix of positive and negative values, bubble down first\n\t        // check: https://github.com/moment/moment/issues/2166\n\t        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n\t                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n\t            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n\t            days = 0;\n\t            months = 0;\n\t        }\n\t\n\t        // The following code bubbles up values, see the tests for\n\t        // examples of what that means.\n\t        data.milliseconds = milliseconds % 1000;\n\t\n\t        seconds           = absFloor(milliseconds / 1000);\n\t        data.seconds      = seconds % 60;\n\t\n\t        minutes           = absFloor(seconds / 60);\n\t        data.minutes      = minutes % 60;\n\t\n\t        hours             = absFloor(minutes / 60);\n\t        data.hours        = hours % 24;\n\t\n\t        days += absFloor(hours / 24);\n\t\n\t        // convert days to months\n\t        monthsFromDays = absFloor(daysToMonths(days));\n\t        months += monthsFromDays;\n\t        days -= absCeil(monthsToDays(monthsFromDays));\n\t\n\t        // 12 months -> 1 year\n\t        years = absFloor(months / 12);\n\t        months %= 12;\n\t\n\t        data.days   = days;\n\t        data.months = months;\n\t        data.years  = years;\n\t\n\t        return this;\n\t    }\n\t\n\t    function daysToMonths (days) {\n\t        // 400 years have 146097 days (taking into account leap year rules)\n\t        // 400 years have 12 months === 4800\n\t        return days * 4800 / 146097;\n\t    }\n\t\n\t    function monthsToDays (months) {\n\t        // the reverse of daysToMonths\n\t        return months * 146097 / 4800;\n\t    }\n\t\n\t    function as (units) {\n\t        if (!this.isValid()) {\n\t            return NaN;\n\t        }\n\t        var days;\n\t        var months;\n\t        var milliseconds = this._milliseconds;\n\t\n\t        units = normalizeUnits(units);\n\t\n\t        if (units === 'month' || units === 'year') {\n\t            days   = this._days   + milliseconds / 864e5;\n\t            months = this._months + daysToMonths(days);\n\t            return units === 'month' ? months : months / 12;\n\t        } else {\n\t            // handle milliseconds separately because of floating point math errors (issue #1867)\n\t            days = this._days + Math.round(monthsToDays(this._months));\n\t            switch (units) {\n\t                case 'week'   : return days / 7     + milliseconds / 6048e5;\n\t                case 'day'    : return days         + milliseconds / 864e5;\n\t                case 'hour'   : return days * 24    + milliseconds / 36e5;\n\t                case 'minute' : return days * 1440  + milliseconds / 6e4;\n\t                case 'second' : return days * 86400 + milliseconds / 1000;\n\t                // Math.floor prevents floating point math errors here\n\t                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n\t                default: throw new Error('Unknown unit ' + units);\n\t            }\n\t        }\n\t    }\n\t\n\t    // TODO: Use this.as('ms')?\n\t    function valueOf$1 () {\n\t        if (!this.isValid()) {\n\t            return NaN;\n\t        }\n\t        return (\n\t            this._milliseconds +\n\t            this._days * 864e5 +\n\t            (this._months % 12) * 2592e6 +\n\t            toInt(this._months / 12) * 31536e6\n\t        );\n\t    }\n\t\n\t    function makeAs (alias) {\n\t        return function () {\n\t            return this.as(alias);\n\t        };\n\t    }\n\t\n\t    var asMilliseconds = makeAs('ms');\n\t    var asSeconds      = makeAs('s');\n\t    var asMinutes      = makeAs('m');\n\t    var asHours        = makeAs('h');\n\t    var asDays         = makeAs('d');\n\t    var asWeeks        = makeAs('w');\n\t    var asMonths       = makeAs('M');\n\t    var asYears        = makeAs('y');\n\t\n\t    function clone$1 () {\n\t        return createDuration(this);\n\t    }\n\t\n\t    function get$2 (units) {\n\t        units = normalizeUnits(units);\n\t        return this.isValid() ? this[units + 's']() : NaN;\n\t    }\n\t\n\t    function makeGetter(name) {\n\t        return function () {\n\t            return this.isValid() ? this._data[name] : NaN;\n\t        };\n\t    }\n\t\n\t    var milliseconds = makeGetter('milliseconds');\n\t    var seconds      = makeGetter('seconds');\n\t    var minutes      = makeGetter('minutes');\n\t    var hours        = makeGetter('hours');\n\t    var days         = makeGetter('days');\n\t    var months       = makeGetter('months');\n\t    var years        = makeGetter('years');\n\t\n\t    function weeks () {\n\t        return absFloor(this.days() / 7);\n\t    }\n\t\n\t    var round = Math.round;\n\t    var thresholds = {\n\t        ss: 44,         // a few seconds to seconds\n\t        s : 45,         // seconds to minute\n\t        m : 45,         // minutes to hour\n\t        h : 22,         // hours to day\n\t        d : 26,         // days to month\n\t        M : 11          // months to year\n\t    };\n\t\n\t    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\t    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n\t        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n\t    }\n\t\n\t    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n\t        var duration = createDuration(posNegDuration).abs();\n\t        var seconds  = round(duration.as('s'));\n\t        var minutes  = round(duration.as('m'));\n\t        var hours    = round(duration.as('h'));\n\t        var days     = round(duration.as('d'));\n\t        var months   = round(duration.as('M'));\n\t        var years    = round(duration.as('y'));\n\t\n\t        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n\t                seconds < thresholds.s   && ['ss', seconds] ||\n\t                minutes <= 1             && ['m']           ||\n\t                minutes < thresholds.m   && ['mm', minutes] ||\n\t                hours   <= 1             && ['h']           ||\n\t                hours   < thresholds.h   && ['hh', hours]   ||\n\t                days    <= 1             && ['d']           ||\n\t                days    < thresholds.d   && ['dd', days]    ||\n\t                months  <= 1             && ['M']           ||\n\t                months  < thresholds.M   && ['MM', months]  ||\n\t                years   <= 1             && ['y']           || ['yy', years];\n\t\n\t        a[2] = withoutSuffix;\n\t        a[3] = +posNegDuration > 0;\n\t        a[4] = locale;\n\t        return substituteTimeAgo.apply(null, a);\n\t    }\n\t\n\t    // This function allows you to set the rounding function for relative time strings\n\t    function getSetRelativeTimeRounding (roundingFunction) {\n\t        if (roundingFunction === undefined) {\n\t            return round;\n\t        }\n\t        if (typeof(roundingFunction) === 'function') {\n\t            round = roundingFunction;\n\t            return true;\n\t        }\n\t        return false;\n\t    }\n\t\n\t    // This function allows you to set a threshold for relative time strings\n\t    function getSetRelativeTimeThreshold (threshold, limit) {\n\t        if (thresholds[threshold] === undefined) {\n\t            return false;\n\t        }\n\t        if (limit === undefined) {\n\t            return thresholds[threshold];\n\t        }\n\t        thresholds[threshold] = limit;\n\t        if (threshold === 's') {\n\t            thresholds.ss = limit - 1;\n\t        }\n\t        return true;\n\t    }\n\t\n\t    function humanize (withSuffix) {\n\t        if (!this.isValid()) {\n\t            return this.localeData().invalidDate();\n\t        }\n\t\n\t        var locale = this.localeData();\n\t        var output = relativeTime$1(this, !withSuffix, locale);\n\t\n\t        if (withSuffix) {\n\t            output = locale.pastFuture(+this, output);\n\t        }\n\t\n\t        return locale.postformat(output);\n\t    }\n\t\n\t    var abs$1 = Math.abs;\n\t\n\t    function sign(x) {\n\t        return ((x > 0) - (x < 0)) || +x;\n\t    }\n\t\n\t    function toISOString$1() {\n\t        // for ISO strings we do not use the normal bubbling rules:\n\t        //  * milliseconds bubble up until they become hours\n\t        //  * days do not bubble at all\n\t        //  * months bubble up until they become years\n\t        // This is because there is no context-free conversion between hours and days\n\t        // (think of clock changes)\n\t        // and also not between days and months (28-31 days per month)\n\t        if (!this.isValid()) {\n\t            return this.localeData().invalidDate();\n\t        }\n\t\n\t        var seconds = abs$1(this._milliseconds) / 1000;\n\t        var days         = abs$1(this._days);\n\t        var months       = abs$1(this._months);\n\t        var minutes, hours, years;\n\t\n\t        // 3600 seconds -> 60 minutes -> 1 hour\n\t        minutes           = absFloor(seconds / 60);\n\t        hours             = absFloor(minutes / 60);\n\t        seconds %= 60;\n\t        minutes %= 60;\n\t\n\t        // 12 months -> 1 year\n\t        years  = absFloor(months / 12);\n\t        months %= 12;\n\t\n\t\n\t        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\t        var Y = years;\n\t        var M = months;\n\t        var D = days;\n\t        var h = hours;\n\t        var m = minutes;\n\t        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\t        var total = this.asSeconds();\n\t\n\t        if (!total) {\n\t            // this is the same as C#'s (Noda) and python (isodate)...\n\t            // but not other JS (goog.date)\n\t            return 'P0D';\n\t        }\n\t\n\t        var totalSign = total < 0 ? '-' : '';\n\t        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n\t        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n\t        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\t\n\t        return totalSign + 'P' +\n\t            (Y ? ymSign + Y + 'Y' : '') +\n\t            (M ? ymSign + M + 'M' : '') +\n\t            (D ? daysSign + D + 'D' : '') +\n\t            ((h || m || s) ? 'T' : '') +\n\t            (h ? hmsSign + h + 'H' : '') +\n\t            (m ? hmsSign + m + 'M' : '') +\n\t            (s ? hmsSign + s + 'S' : '');\n\t    }\n\t\n\t    var proto$2 = Duration.prototype;\n\t\n\t    proto$2.isValid        = isValid$1;\n\t    proto$2.abs            = abs;\n\t    proto$2.add            = add$1;\n\t    proto$2.subtract       = subtract$1;\n\t    proto$2.as             = as;\n\t    proto$2.asMilliseconds = asMilliseconds;\n\t    proto$2.asSeconds      = asSeconds;\n\t    proto$2.asMinutes      = asMinutes;\n\t    proto$2.asHours        = asHours;\n\t    proto$2.asDays         = asDays;\n\t    proto$2.asWeeks        = asWeeks;\n\t    proto$2.asMonths       = asMonths;\n\t    proto$2.asYears        = asYears;\n\t    proto$2.valueOf        = valueOf$1;\n\t    proto$2._bubble        = bubble;\n\t    proto$2.clone          = clone$1;\n\t    proto$2.get            = get$2;\n\t    proto$2.milliseconds   = milliseconds;\n\t    proto$2.seconds        = seconds;\n\t    proto$2.minutes        = minutes;\n\t    proto$2.hours          = hours;\n\t    proto$2.days           = days;\n\t    proto$2.weeks          = weeks;\n\t    proto$2.months         = months;\n\t    proto$2.years          = years;\n\t    proto$2.humanize       = humanize;\n\t    proto$2.toISOString    = toISOString$1;\n\t    proto$2.toString       = toISOString$1;\n\t    proto$2.toJSON         = toISOString$1;\n\t    proto$2.locale         = locale;\n\t    proto$2.localeData     = localeData;\n\t\n\t    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n\t    proto$2.lang = lang;\n\t\n\t    // Side effect imports\n\t\n\t    // FORMATTING\n\t\n\t    addFormatToken('X', 0, 0, 'unix');\n\t    addFormatToken('x', 0, 0, 'valueOf');\n\t\n\t    // PARSING\n\t\n\t    addRegexToken('x', matchSigned);\n\t    addRegexToken('X', matchTimestamp);\n\t    addParseToken('X', function (input, array, config) {\n\t        config._d = new Date(parseFloat(input, 10) * 1000);\n\t    });\n\t    addParseToken('x', function (input, array, config) {\n\t        config._d = new Date(toInt(input));\n\t    });\n\t\n\t    // Side effect imports\n\t\n\t\n\t    hooks.version = '2.22.1';\n\t\n\t    setHookCallback(createLocal);\n\t\n\t    hooks.fn                    = proto;\n\t    hooks.min                   = min;\n\t    hooks.max                   = max;\n\t    hooks.now                   = now;\n\t    hooks.utc                   = createUTC;\n\t    hooks.unix                  = createUnix;\n\t    hooks.months                = listMonths;\n\t    hooks.isDate                = isDate;\n\t    hooks.locale                = getSetGlobalLocale;\n\t    hooks.invalid               = createInvalid;\n\t    hooks.duration              = createDuration;\n\t    hooks.isMoment              = isMoment;\n\t    hooks.weekdays              = listWeekdays;\n\t    hooks.parseZone             = createInZone;\n\t    hooks.localeData            = getLocale;\n\t    hooks.isDuration            = isDuration;\n\t    hooks.monthsShort           = listMonthsShort;\n\t    hooks.weekdaysMin           = listWeekdaysMin;\n\t    hooks.defineLocale          = defineLocale;\n\t    hooks.updateLocale          = updateLocale;\n\t    hooks.locales               = listLocales;\n\t    hooks.weekdaysShort         = listWeekdaysShort;\n\t    hooks.normalizeUnits        = normalizeUnits;\n\t    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n\t    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n\t    hooks.calendarFormat        = getCalendarFormat;\n\t    hooks.prototype             = proto;\n\t\n\t    // currently HTML5 input type only supports 24-hour formats\n\t    hooks.HTML5_FMT = {\n\t        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n\t        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n\t        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n\t        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n\t        TIME: 'HH:mm',                                  // <input type=\"time\" />\n\t        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n\t        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n\t        WEEK: 'YYYY-[W]WW',                             // <input type=\"week\" />\n\t        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n\t    };\n\t\n\t    return hooks;\n\t\n\t})));\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module)))\n\n/***/ },\n/* 275 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./af\": 276,\n\t\t\"./af.js\": 276,\n\t\t\"./ar\": 277,\n\t\t\"./ar-dz\": 278,\n\t\t\"./ar-dz.js\": 278,\n\t\t\"./ar-kw\": 279,\n\t\t\"./ar-kw.js\": 279,\n\t\t\"./ar-ly\": 280,\n\t\t\"./ar-ly.js\": 280,\n\t\t\"./ar-ma\": 281,\n\t\t\"./ar-ma.js\": 281,\n\t\t\"./ar-sa\": 282,\n\t\t\"./ar-sa.js\": 282,\n\t\t\"./ar-tn\": 283,\n\t\t\"./ar-tn.js\": 283,\n\t\t\"./ar.js\": 277,\n\t\t\"./az\": 284,\n\t\t\"./az.js\": 284,\n\t\t\"./be\": 285,\n\t\t\"./be.js\": 285,\n\t\t\"./bg\": 286,\n\t\t\"./bg.js\": 286,\n\t\t\"./bm\": 287,\n\t\t\"./bm.js\": 287,\n\t\t\"./bn\": 288,\n\t\t\"./bn.js\": 288,\n\t\t\"./bo\": 289,\n\t\t\"./bo.js\": 289,\n\t\t\"./br\": 290,\n\t\t\"./br.js\": 290,\n\t\t\"./bs\": 291,\n\t\t\"./bs.js\": 291,\n\t\t\"./ca\": 292,\n\t\t\"./ca.js\": 292,\n\t\t\"./cs\": 293,\n\t\t\"./cs.js\": 293,\n\t\t\"./cv\": 294,\n\t\t\"./cv.js\": 294,\n\t\t\"./cy\": 295,\n\t\t\"./cy.js\": 295,\n\t\t\"./da\": 296,\n\t\t\"./da.js\": 296,\n\t\t\"./de\": 297,\n\t\t\"./de-at\": 298,\n\t\t\"./de-at.js\": 298,\n\t\t\"./de-ch\": 299,\n\t\t\"./de-ch.js\": 299,\n\t\t\"./de.js\": 297,\n\t\t\"./dv\": 300,\n\t\t\"./dv.js\": 300,\n\t\t\"./el\": 301,\n\t\t\"./el.js\": 301,\n\t\t\"./en-au\": 302,\n\t\t\"./en-au.js\": 302,\n\t\t\"./en-ca\": 303,\n\t\t\"./en-ca.js\": 303,\n\t\t\"./en-gb\": 304,\n\t\t\"./en-gb.js\": 304,\n\t\t\"./en-ie\": 305,\n\t\t\"./en-ie.js\": 305,\n\t\t\"./en-il\": 306,\n\t\t\"./en-il.js\": 306,\n\t\t\"./en-nz\": 307,\n\t\t\"./en-nz.js\": 307,\n\t\t\"./eo\": 308,\n\t\t\"./eo.js\": 308,\n\t\t\"./es\": 309,\n\t\t\"./es-do\": 310,\n\t\t\"./es-do.js\": 310,\n\t\t\"./es-us\": 311,\n\t\t\"./es-us.js\": 311,\n\t\t\"./es.js\": 309,\n\t\t\"./et\": 312,\n\t\t\"./et.js\": 312,\n\t\t\"./eu\": 313,\n\t\t\"./eu.js\": 313,\n\t\t\"./fa\": 314,\n\t\t\"./fa.js\": 314,\n\t\t\"./fi\": 315,\n\t\t\"./fi.js\": 315,\n\t\t\"./fo\": 316,\n\t\t\"./fo.js\": 316,\n\t\t\"./fr\": 317,\n\t\t\"./fr-ca\": 318,\n\t\t\"./fr-ca.js\": 318,\n\t\t\"./fr-ch\": 319,\n\t\t\"./fr-ch.js\": 319,\n\t\t\"./fr.js\": 317,\n\t\t\"./fy\": 320,\n\t\t\"./fy.js\": 320,\n\t\t\"./gd\": 321,\n\t\t\"./gd.js\": 321,\n\t\t\"./gl\": 322,\n\t\t\"./gl.js\": 322,\n\t\t\"./gom-latn\": 323,\n\t\t\"./gom-latn.js\": 323,\n\t\t\"./gu\": 324,\n\t\t\"./gu.js\": 324,\n\t\t\"./he\": 325,\n\t\t\"./he.js\": 325,\n\t\t\"./hi\": 326,\n\t\t\"./hi.js\": 326,\n\t\t\"./hr\": 327,\n\t\t\"./hr.js\": 327,\n\t\t\"./hu\": 328,\n\t\t\"./hu.js\": 328,\n\t\t\"./hy-am\": 329,\n\t\t\"./hy-am.js\": 329,\n\t\t\"./id\": 330,\n\t\t\"./id.js\": 330,\n\t\t\"./is\": 331,\n\t\t\"./is.js\": 331,\n\t\t\"./it\": 332,\n\t\t\"./it.js\": 332,\n\t\t\"./ja\": 333,\n\t\t\"./ja.js\": 333,\n\t\t\"./jv\": 334,\n\t\t\"./jv.js\": 334,\n\t\t\"./ka\": 335,\n\t\t\"./ka.js\": 335,\n\t\t\"./kk\": 336,\n\t\t\"./kk.js\": 336,\n\t\t\"./km\": 337,\n\t\t\"./km.js\": 337,\n\t\t\"./kn\": 338,\n\t\t\"./kn.js\": 338,\n\t\t\"./ko\": 339,\n\t\t\"./ko.js\": 339,\n\t\t\"./ky\": 340,\n\t\t\"./ky.js\": 340,\n\t\t\"./lb\": 341,\n\t\t\"./lb.js\": 341,\n\t\t\"./lo\": 342,\n\t\t\"./lo.js\": 342,\n\t\t\"./lt\": 343,\n\t\t\"./lt.js\": 343,\n\t\t\"./lv\": 344,\n\t\t\"./lv.js\": 344,\n\t\t\"./me\": 345,\n\t\t\"./me.js\": 345,\n\t\t\"./mi\": 346,\n\t\t\"./mi.js\": 346,\n\t\t\"./mk\": 347,\n\t\t\"./mk.js\": 347,\n\t\t\"./ml\": 348,\n\t\t\"./ml.js\": 348,\n\t\t\"./mn\": 349,\n\t\t\"./mn.js\": 349,\n\t\t\"./mr\": 350,\n\t\t\"./mr.js\": 350,\n\t\t\"./ms\": 351,\n\t\t\"./ms-my\": 352,\n\t\t\"./ms-my.js\": 352,\n\t\t\"./ms.js\": 351,\n\t\t\"./mt\": 353,\n\t\t\"./mt.js\": 353,\n\t\t\"./my\": 354,\n\t\t\"./my.js\": 354,\n\t\t\"./nb\": 355,\n\t\t\"./nb.js\": 355,\n\t\t\"./ne\": 356,\n\t\t\"./ne.js\": 356,\n\t\t\"./nl\": 357,\n\t\t\"./nl-be\": 358,\n\t\t\"./nl-be.js\": 358,\n\t\t\"./nl.js\": 357,\n\t\t\"./nn\": 359,\n\t\t\"./nn.js\": 359,\n\t\t\"./pa-in\": 360,\n\t\t\"./pa-in.js\": 360,\n\t\t\"./pl\": 361,\n\t\t\"./pl.js\": 361,\n\t\t\"./pt\": 362,\n\t\t\"./pt-br\": 363,\n\t\t\"./pt-br.js\": 363,\n\t\t\"./pt.js\": 362,\n\t\t\"./ro\": 364,\n\t\t\"./ro.js\": 364,\n\t\t\"./ru\": 365,\n\t\t\"./ru.js\": 365,\n\t\t\"./sd\": 366,\n\t\t\"./sd.js\": 366,\n\t\t\"./se\": 367,\n\t\t\"./se.js\": 367,\n\t\t\"./si\": 368,\n\t\t\"./si.js\": 368,\n\t\t\"./sk\": 369,\n\t\t\"./sk.js\": 369,\n\t\t\"./sl\": 370,\n\t\t\"./sl.js\": 370,\n\t\t\"./sq\": 371,\n\t\t\"./sq.js\": 371,\n\t\t\"./sr\": 372,\n\t\t\"./sr-cyrl\": 373,\n\t\t\"./sr-cyrl.js\": 373,\n\t\t\"./sr.js\": 372,\n\t\t\"./ss\": 374,\n\t\t\"./ss.js\": 374,\n\t\t\"./sv\": 375,\n\t\t\"./sv.js\": 375,\n\t\t\"./sw\": 376,\n\t\t\"./sw.js\": 376,\n\t\t\"./ta\": 377,\n\t\t\"./ta.js\": 377,\n\t\t\"./te\": 378,\n\t\t\"./te.js\": 378,\n\t\t\"./tet\": 379,\n\t\t\"./tet.js\": 379,\n\t\t\"./tg\": 380,\n\t\t\"./tg.js\": 380,\n\t\t\"./th\": 381,\n\t\t\"./th.js\": 381,\n\t\t\"./tl-ph\": 382,\n\t\t\"./tl-ph.js\": 382,\n\t\t\"./tlh\": 383,\n\t\t\"./tlh.js\": 383,\n\t\t\"./tr\": 384,\n\t\t\"./tr.js\": 384,\n\t\t\"./tzl\": 385,\n\t\t\"./tzl.js\": 385,\n\t\t\"./tzm\": 386,\n\t\t\"./tzm-latn\": 387,\n\t\t\"./tzm-latn.js\": 387,\n\t\t\"./tzm.js\": 386,\n\t\t\"./ug-cn\": 388,\n\t\t\"./ug-cn.js\": 388,\n\t\t\"./uk\": 389,\n\t\t\"./uk.js\": 389,\n\t\t\"./ur\": 390,\n\t\t\"./ur.js\": 390,\n\t\t\"./uz\": 391,\n\t\t\"./uz-latn\": 392,\n\t\t\"./uz-latn.js\": 392,\n\t\t\"./uz.js\": 391,\n\t\t\"./vi\": 393,\n\t\t\"./vi.js\": 393,\n\t\t\"./x-pseudo\": 394,\n\t\t\"./x-pseudo.js\": 394,\n\t\t\"./yo\": 395,\n\t\t\"./yo.js\": 395,\n\t\t\"./zh-cn\": 396,\n\t\t\"./zh-cn.js\": 396,\n\t\t\"./zh-hk\": 397,\n\t\t\"./zh-hk.js\": 397,\n\t\t\"./zh-tw\": 398,\n\t\t\"./zh-tw.js\": 398\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 275;\n\n\n/***/ },\n/* 276 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var af = moment.defineLocale('af', {\n\t        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n\t        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n\t        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n\t        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n\t        meridiemParse: /vm|nm/i,\n\t        isPM : function (input) {\n\t            return /^nm$/i.test(input);\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 12) {\n\t                return isLower ? 'vm' : 'VM';\n\t            } else {\n\t                return isLower ? 'nm' : 'NM';\n\t            }\n\t        },\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Vandag om] LT',\n\t            nextDay : '[Môre om] LT',\n\t            nextWeek : 'dddd [om] LT',\n\t            lastDay : '[Gister om] LT',\n\t            lastWeek : '[Laas] dddd [om] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'oor %s',\n\t            past : '%s gelede',\n\t            s : '\\'n paar sekondes',\n\t            ss : '%d sekondes',\n\t            m : '\\'n minuut',\n\t            mm : '%d minute',\n\t            h : '\\'n uur',\n\t            hh : '%d ure',\n\t            d : '\\'n dag',\n\t            dd : '%d dae',\n\t            M : '\\'n maand',\n\t            MM : '%d maande',\n\t            y : '\\'n jaar',\n\t            yy : '%d jaar'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t        ordinal : function (number) {\n\t            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n\t        },\n\t        week : {\n\t            dow : 1, // Maandag is die eerste dag van die week.\n\t            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n\t        }\n\t    });\n\t\n\t    return af;\n\t\n\t})));\n\n\n/***/ },\n/* 277 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '١',\n\t        '2': '٢',\n\t        '3': '٣',\n\t        '4': '٤',\n\t        '5': '٥',\n\t        '6': '٦',\n\t        '7': '٧',\n\t        '8': '٨',\n\t        '9': '٩',\n\t        '0': '٠'\n\t    }, numberMap = {\n\t        '١': '1',\n\t        '٢': '2',\n\t        '٣': '3',\n\t        '٤': '4',\n\t        '٥': '5',\n\t        '٦': '6',\n\t        '٧': '7',\n\t        '٨': '8',\n\t        '٩': '9',\n\t        '٠': '0'\n\t    }, pluralForm = function (n) {\n\t        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n\t    }, plurals = {\n\t        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n\t        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n\t        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n\t        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n\t        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n\t        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n\t    }, pluralize = function (u) {\n\t        return function (number, withoutSuffix, string, isFuture) {\n\t            var f = pluralForm(number),\n\t                str = plurals[u][pluralForm(number)];\n\t            if (f === 2) {\n\t                str = str[withoutSuffix ? 0 : 1];\n\t            }\n\t            return str.replace(/%d/i, number);\n\t        };\n\t    }, months = [\n\t        'يناير',\n\t        'فبراير',\n\t        'مارس',\n\t        'أبريل',\n\t        'مايو',\n\t        'يونيو',\n\t        'يوليو',\n\t        'أغسطس',\n\t        'سبتمبر',\n\t        'أكتوبر',\n\t        'نوفمبر',\n\t        'ديسمبر'\n\t    ];\n\t\n\t    var ar = moment.defineLocale('ar', {\n\t        months : months,\n\t        monthsShort : months,\n\t        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'D/\\u200FM/\\u200FYYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /ص|م/,\n\t        isPM : function (input) {\n\t            return 'م' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ص';\n\t            } else {\n\t                return 'م';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم عند الساعة] LT',\n\t            nextDay: '[غدًا عند الساعة] LT',\n\t            nextWeek: 'dddd [عند الساعة] LT',\n\t            lastDay: '[أمس عند الساعة] LT',\n\t            lastWeek: 'dddd [عند الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'بعد %s',\n\t            past : 'منذ %s',\n\t            s : pluralize('s'),\n\t            ss : pluralize('s'),\n\t            m : pluralize('m'),\n\t            mm : pluralize('m'),\n\t            h : pluralize('h'),\n\t            hh : pluralize('h'),\n\t            d : pluralize('d'),\n\t            dd : pluralize('d'),\n\t            M : pluralize('M'),\n\t            MM : pluralize('M'),\n\t            y : pluralize('y'),\n\t            yy : pluralize('y')\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n\t                return numberMap[match];\n\t            }).replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            }).replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ar;\n\t\n\t})));\n\n\n/***/ },\n/* 278 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var arDz = moment.defineLocale('ar-dz', {\n\t        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم على الساعة] LT',\n\t            nextDay: '[غدا على الساعة] LT',\n\t            nextWeek: 'dddd [على الساعة] LT',\n\t            lastDay: '[أمس على الساعة] LT',\n\t            lastWeek: 'dddd [على الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'في %s',\n\t            past : 'منذ %s',\n\t            s : 'ثوان',\n\t            ss : '%d ثانية',\n\t            m : 'دقيقة',\n\t            mm : '%d دقائق',\n\t            h : 'ساعة',\n\t            hh : '%d ساعات',\n\t            d : 'يوم',\n\t            dd : '%d أيام',\n\t            M : 'شهر',\n\t            MM : '%d أشهر',\n\t            y : 'سنة',\n\t            yy : '%d سنوات'\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arDz;\n\t\n\t})));\n\n\n/***/ },\n/* 279 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var arKw = moment.defineLocale('ar-kw', {\n\t        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم على الساعة] LT',\n\t            nextDay: '[غدا على الساعة] LT',\n\t            nextWeek: 'dddd [على الساعة] LT',\n\t            lastDay: '[أمس على الساعة] LT',\n\t            lastWeek: 'dddd [على الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'في %s',\n\t            past : 'منذ %s',\n\t            s : 'ثوان',\n\t            ss : '%d ثانية',\n\t            m : 'دقيقة',\n\t            mm : '%d دقائق',\n\t            h : 'ساعة',\n\t            hh : '%d ساعات',\n\t            d : 'يوم',\n\t            dd : '%d أيام',\n\t            M : 'شهر',\n\t            MM : '%d أشهر',\n\t            y : 'سنة',\n\t            yy : '%d سنوات'\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arKw;\n\t\n\t})));\n\n\n/***/ },\n/* 280 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '1',\n\t        '2': '2',\n\t        '3': '3',\n\t        '4': '4',\n\t        '5': '5',\n\t        '6': '6',\n\t        '7': '7',\n\t        '8': '8',\n\t        '9': '9',\n\t        '0': '0'\n\t    }, pluralForm = function (n) {\n\t        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n\t    }, plurals = {\n\t        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n\t        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n\t        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n\t        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n\t        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n\t        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n\t    }, pluralize = function (u) {\n\t        return function (number, withoutSuffix, string, isFuture) {\n\t            var f = pluralForm(number),\n\t                str = plurals[u][pluralForm(number)];\n\t            if (f === 2) {\n\t                str = str[withoutSuffix ? 0 : 1];\n\t            }\n\t            return str.replace(/%d/i, number);\n\t        };\n\t    }, months = [\n\t        'يناير',\n\t        'فبراير',\n\t        'مارس',\n\t        'أبريل',\n\t        'مايو',\n\t        'يونيو',\n\t        'يوليو',\n\t        'أغسطس',\n\t        'سبتمبر',\n\t        'أكتوبر',\n\t        'نوفمبر',\n\t        'ديسمبر'\n\t    ];\n\t\n\t    var arLy = moment.defineLocale('ar-ly', {\n\t        months : months,\n\t        monthsShort : months,\n\t        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'D/\\u200FM/\\u200FYYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /ص|م/,\n\t        isPM : function (input) {\n\t            return 'م' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ص';\n\t            } else {\n\t                return 'م';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم عند الساعة] LT',\n\t            nextDay: '[غدًا عند الساعة] LT',\n\t            nextWeek: 'dddd [عند الساعة] LT',\n\t            lastDay: '[أمس عند الساعة] LT',\n\t            lastWeek: 'dddd [عند الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'بعد %s',\n\t            past : 'منذ %s',\n\t            s : pluralize('s'),\n\t            ss : pluralize('s'),\n\t            m : pluralize('m'),\n\t            mm : pluralize('m'),\n\t            h : pluralize('h'),\n\t            hh : pluralize('h'),\n\t            d : pluralize('d'),\n\t            dd : pluralize('d'),\n\t            M : pluralize('M'),\n\t            MM : pluralize('M'),\n\t            y : pluralize('y'),\n\t            yy : pluralize('y')\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            }).replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arLy;\n\t\n\t})));\n\n\n/***/ },\n/* 281 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var arMa = moment.defineLocale('ar-ma', {\n\t        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n\t        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم على الساعة] LT',\n\t            nextDay: '[غدا على الساعة] LT',\n\t            nextWeek: 'dddd [على الساعة] LT',\n\t            lastDay: '[أمس على الساعة] LT',\n\t            lastWeek: 'dddd [على الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'في %s',\n\t            past : 'منذ %s',\n\t            s : 'ثوان',\n\t            ss : '%d ثانية',\n\t            m : 'دقيقة',\n\t            mm : '%d دقائق',\n\t            h : 'ساعة',\n\t            hh : '%d ساعات',\n\t            d : 'يوم',\n\t            dd : '%d أيام',\n\t            M : 'شهر',\n\t            MM : '%d أشهر',\n\t            y : 'سنة',\n\t            yy : '%d سنوات'\n\t        },\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arMa;\n\t\n\t})));\n\n\n/***/ },\n/* 282 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '١',\n\t        '2': '٢',\n\t        '3': '٣',\n\t        '4': '٤',\n\t        '5': '٥',\n\t        '6': '٦',\n\t        '7': '٧',\n\t        '8': '٨',\n\t        '9': '٩',\n\t        '0': '٠'\n\t    }, numberMap = {\n\t        '١': '1',\n\t        '٢': '2',\n\t        '٣': '3',\n\t        '٤': '4',\n\t        '٥': '5',\n\t        '٦': '6',\n\t        '٧': '7',\n\t        '٨': '8',\n\t        '٩': '9',\n\t        '٠': '0'\n\t    };\n\t\n\t    var arSa = moment.defineLocale('ar-sa', {\n\t        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /ص|م/,\n\t        isPM : function (input) {\n\t            return 'م' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ص';\n\t            } else {\n\t                return 'م';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay: '[اليوم على الساعة] LT',\n\t            nextDay: '[غدا على الساعة] LT',\n\t            nextWeek: 'dddd [على الساعة] LT',\n\t            lastDay: '[أمس على الساعة] LT',\n\t            lastWeek: 'dddd [على الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'في %s',\n\t            past : 'منذ %s',\n\t            s : 'ثوان',\n\t            ss : '%d ثانية',\n\t            m : 'دقيقة',\n\t            mm : '%d دقائق',\n\t            h : 'ساعة',\n\t            hh : '%d ساعات',\n\t            d : 'يوم',\n\t            dd : '%d أيام',\n\t            M : 'شهر',\n\t            MM : '%d أشهر',\n\t            y : 'سنة',\n\t            yy : '%d سنوات'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n\t                return numberMap[match];\n\t            }).replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            }).replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arSa;\n\t\n\t})));\n\n\n/***/ },\n/* 283 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var arTn = moment.defineLocale('ar-tn', {\n\t        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n\t        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n\t        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n\t        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY HH:mm',\n\t            LLLL: 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[اليوم على الساعة] LT',\n\t            nextDay: '[غدا على الساعة] LT',\n\t            nextWeek: 'dddd [على الساعة] LT',\n\t            lastDay: '[أمس على الساعة] LT',\n\t            lastWeek: 'dddd [على الساعة] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: 'في %s',\n\t            past: 'منذ %s',\n\t            s: 'ثوان',\n\t            ss : '%d ثانية',\n\t            m: 'دقيقة',\n\t            mm: '%d دقائق',\n\t            h: 'ساعة',\n\t            hh: '%d ساعات',\n\t            d: 'يوم',\n\t            dd: '%d أيام',\n\t            M: 'شهر',\n\t            MM: '%d أشهر',\n\t            y: 'سنة',\n\t            yy: '%d سنوات'\n\t        },\n\t        week: {\n\t            dow: 1, // Monday is the first day of the week.\n\t            doy: 4 // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return arTn;\n\t\n\t})));\n\n\n/***/ },\n/* 284 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var suffixes = {\n\t        1: '-inci',\n\t        5: '-inci',\n\t        8: '-inci',\n\t        70: '-inci',\n\t        80: '-inci',\n\t        2: '-nci',\n\t        7: '-nci',\n\t        20: '-nci',\n\t        50: '-nci',\n\t        3: '-üncü',\n\t        4: '-üncü',\n\t        100: '-üncü',\n\t        6: '-ncı',\n\t        9: '-uncu',\n\t        10: '-uncu',\n\t        30: '-uncu',\n\t        60: '-ıncı',\n\t        90: '-ıncı'\n\t    };\n\t\n\t    var az = moment.defineLocale('az', {\n\t        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n\t        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n\t        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n\t        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n\t        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[bugün saat] LT',\n\t            nextDay : '[sabah saat] LT',\n\t            nextWeek : '[gələn həftə] dddd [saat] LT',\n\t            lastDay : '[dünən] LT',\n\t            lastWeek : '[keçən həftə] dddd [saat] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s sonra',\n\t            past : '%s əvvəl',\n\t            s : 'birneçə saniyyə',\n\t            ss : '%d saniyə',\n\t            m : 'bir dəqiqə',\n\t            mm : '%d dəqiqə',\n\t            h : 'bir saat',\n\t            hh : '%d saat',\n\t            d : 'bir gün',\n\t            dd : '%d gün',\n\t            M : 'bir ay',\n\t            MM : '%d ay',\n\t            y : 'bir il',\n\t            yy : '%d il'\n\t        },\n\t        meridiemParse: /gecə|səhər|gündüz|axşam/,\n\t        isPM : function (input) {\n\t            return /^(gündüz|axşam)$/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'gecə';\n\t            } else if (hour < 12) {\n\t                return 'səhər';\n\t            } else if (hour < 17) {\n\t                return 'gündüz';\n\t            } else {\n\t                return 'axşam';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n\t        ordinal : function (number) {\n\t            if (number === 0) {  // special case for zero\n\t                return number + '-ıncı';\n\t            }\n\t            var a = number % 10,\n\t                b = number % 100 - a,\n\t                c = number >= 100 ? 100 : null;\n\t            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return az;\n\t\n\t})));\n\n\n/***/ },\n/* 285 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function plural(word, num) {\n\t        var forms = word.split('_');\n\t        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t    }\n\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t        var format = {\n\t            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n\t            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n\t            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n\t            'dd': 'дзень_дні_дзён',\n\t            'MM': 'месяц_месяцы_месяцаў',\n\t            'yy': 'год_гады_гадоў'\n\t        };\n\t        if (key === 'm') {\n\t            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n\t        }\n\t        else if (key === 'h') {\n\t            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n\t        }\n\t        else {\n\t            return number + ' ' + plural(format[key], +number);\n\t        }\n\t    }\n\t\n\t    var be = moment.defineLocale('be', {\n\t        months : {\n\t            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n\t            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n\t        },\n\t        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n\t        weekdays : {\n\t            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n\t            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n\t            isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n\t        },\n\t        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n\t        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY г.',\n\t            LLL : 'D MMMM YYYY г., HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Сёння ў] LT',\n\t            nextDay: '[Заўтра ў] LT',\n\t            lastDay: '[Учора ў] LT',\n\t            nextWeek: function () {\n\t                return '[У] dddd [ў] LT';\n\t            },\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                    case 5:\n\t                    case 6:\n\t                        return '[У мінулую] dddd [ў] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                        return '[У мінулы] dddd [ў] LT';\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'праз %s',\n\t            past : '%s таму',\n\t            s : 'некалькі секунд',\n\t            m : relativeTimeWithPlural,\n\t            mm : relativeTimeWithPlural,\n\t            h : relativeTimeWithPlural,\n\t            hh : relativeTimeWithPlural,\n\t            d : 'дзень',\n\t            dd : relativeTimeWithPlural,\n\t            M : 'месяц',\n\t            MM : relativeTimeWithPlural,\n\t            y : 'год',\n\t            yy : relativeTimeWithPlural\n\t        },\n\t        meridiemParse: /ночы|раніцы|дня|вечара/,\n\t        isPM : function (input) {\n\t            return /^(дня|вечара)$/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'ночы';\n\t            } else if (hour < 12) {\n\t                return 'раніцы';\n\t            } else if (hour < 17) {\n\t                return 'дня';\n\t            } else {\n\t                return 'вечара';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'M':\n\t                case 'd':\n\t                case 'DDD':\n\t                case 'w':\n\t                case 'W':\n\t                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n\t                case 'D':\n\t                    return number + '-га';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return be;\n\t\n\t})));\n\n\n/***/ },\n/* 286 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var bg = moment.defineLocale('bg', {\n\t        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n\t        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n\t        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n\t        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n\t        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'D.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Днес в] LT',\n\t            nextDay : '[Утре в] LT',\n\t            nextWeek : 'dddd [в] LT',\n\t            lastDay : '[Вчера в] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                    case 6:\n\t                        return '[В изминалата] dddd [в] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[В изминалия] dddd [в] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'след %s',\n\t            past : 'преди %s',\n\t            s : 'няколко секунди',\n\t            ss : '%d секунди',\n\t            m : 'минута',\n\t            mm : '%d минути',\n\t            h : 'час',\n\t            hh : '%d часа',\n\t            d : 'ден',\n\t            dd : '%d дни',\n\t            M : 'месец',\n\t            MM : '%d месеца',\n\t            y : 'година',\n\t            yy : '%d години'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n\t        ordinal : function (number) {\n\t            var lastDigit = number % 10,\n\t                last2Digits = number % 100;\n\t            if (number === 0) {\n\t                return number + '-ев';\n\t            } else if (last2Digits === 0) {\n\t                return number + '-ен';\n\t            } else if (last2Digits > 10 && last2Digits < 20) {\n\t                return number + '-ти';\n\t            } else if (lastDigit === 1) {\n\t                return number + '-ви';\n\t            } else if (lastDigit === 2) {\n\t                return number + '-ри';\n\t            } else if (lastDigit === 7 || lastDigit === 8) {\n\t                return number + '-ми';\n\t            } else {\n\t                return number + '-ти';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return bg;\n\t\n\t})));\n\n\n/***/ },\n/* 287 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var bm = moment.defineLocale('bm', {\n\t        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n\t        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n\t        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n\t        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n\t        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'MMMM [tile] D [san] YYYY',\n\t            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n\t            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Bi lɛrɛ] LT',\n\t            nextDay : '[Sini lɛrɛ] LT',\n\t            nextWeek : 'dddd [don lɛrɛ] LT',\n\t            lastDay : '[Kunu lɛrɛ] LT',\n\t            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s kɔnɔ',\n\t            past : 'a bɛ %s bɔ',\n\t            s : 'sanga dama dama',\n\t            ss : 'sekondi %d',\n\t            m : 'miniti kelen',\n\t            mm : 'miniti %d',\n\t            h : 'lɛrɛ kelen',\n\t            hh : 'lɛrɛ %d',\n\t            d : 'tile kelen',\n\t            dd : 'tile %d',\n\t            M : 'kalo kelen',\n\t            MM : 'kalo %d',\n\t            y : 'san kelen',\n\t            yy : 'san %d'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return bm;\n\t\n\t})));\n\n\n/***/ },\n/* 288 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '১',\n\t        '2': '২',\n\t        '3': '৩',\n\t        '4': '৪',\n\t        '5': '৫',\n\t        '6': '৬',\n\t        '7': '৭',\n\t        '8': '৮',\n\t        '9': '৯',\n\t        '0': '০'\n\t    },\n\t    numberMap = {\n\t        '১': '1',\n\t        '২': '2',\n\t        '৩': '3',\n\t        '৪': '4',\n\t        '৫': '5',\n\t        '৬': '6',\n\t        '৭': '7',\n\t        '৮': '8',\n\t        '৯': '9',\n\t        '০': '0'\n\t    };\n\t\n\t    var bn = moment.defineLocale('bn', {\n\t        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n\t        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n\t        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n\t        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n\t        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm সময়',\n\t            LTS : 'A h:mm:ss সময়',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm সময়',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n\t        },\n\t        calendar : {\n\t            sameDay : '[আজ] LT',\n\t            nextDay : '[আগামীকাল] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[গতকাল] LT',\n\t            lastWeek : '[গত] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s পরে',\n\t            past : '%s আগে',\n\t            s : 'কয়েক সেকেন্ড',\n\t            ss : '%d সেকেন্ড',\n\t            m : 'এক মিনিট',\n\t            mm : '%d মিনিট',\n\t            h : 'এক ঘন্টা',\n\t            hh : '%d ঘন্টা',\n\t            d : 'এক দিন',\n\t            dd : '%d দিন',\n\t            M : 'এক মাস',\n\t            MM : '%d মাস',\n\t            y : 'এক বছর',\n\t            yy : '%d বছর'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if ((meridiem === 'রাত' && hour >= 4) ||\n\t                    (meridiem === 'দুপুর' && hour < 5) ||\n\t                    meridiem === 'বিকাল') {\n\t                return hour + 12;\n\t            } else {\n\t                return hour;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'রাত';\n\t            } else if (hour < 10) {\n\t                return 'সকাল';\n\t            } else if (hour < 17) {\n\t                return 'দুপুর';\n\t            } else if (hour < 20) {\n\t                return 'বিকাল';\n\t            } else {\n\t                return 'রাত';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return bn;\n\t\n\t})));\n\n\n/***/ },\n/* 289 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '༡',\n\t        '2': '༢',\n\t        '3': '༣',\n\t        '4': '༤',\n\t        '5': '༥',\n\t        '6': '༦',\n\t        '7': '༧',\n\t        '8': '༨',\n\t        '9': '༩',\n\t        '0': '༠'\n\t    },\n\t    numberMap = {\n\t        '༡': '1',\n\t        '༢': '2',\n\t        '༣': '3',\n\t        '༤': '4',\n\t        '༥': '5',\n\t        '༦': '6',\n\t        '༧': '7',\n\t        '༨': '8',\n\t        '༩': '9',\n\t        '༠': '0'\n\t    };\n\t\n\t    var bo = moment.defineLocale('bo', {\n\t        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n\t        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n\t        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n\t        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n\t        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm',\n\t            LTS : 'A h:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[དི་རིང] LT',\n\t            nextDay : '[སང་ཉིན] LT',\n\t            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n\t            lastDay : '[ཁ་སང] LT',\n\t            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s ལ་',\n\t            past : '%s སྔན་ལ',\n\t            s : 'ལམ་སང',\n\t            ss : '%d སྐར་ཆ།',\n\t            m : 'སྐར་མ་གཅིག',\n\t            mm : '%d སྐར་མ',\n\t            h : 'ཆུ་ཚོད་གཅིག',\n\t            hh : '%d ཆུ་ཚོད',\n\t            d : 'ཉིན་གཅིག',\n\t            dd : '%d ཉིན་',\n\t            M : 'ཟླ་བ་གཅིག',\n\t            MM : '%d ཟླ་བ',\n\t            y : 'ལོ་གཅིག',\n\t            yy : '%d ལོ'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n\t                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n\t                    meridiem === 'དགོང་དག') {\n\t                return hour + 12;\n\t            } else {\n\t                return hour;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'མཚན་མོ';\n\t            } else if (hour < 10) {\n\t                return 'ཞོགས་ཀས';\n\t            } else if (hour < 17) {\n\t                return 'ཉིན་གུང';\n\t            } else if (hour < 20) {\n\t                return 'དགོང་དག';\n\t            } else {\n\t                return 'མཚན་མོ';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return bo;\n\t\n\t})));\n\n\n/***/ },\n/* 290 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function relativeTimeWithMutation(number, withoutSuffix, key) {\n\t        var format = {\n\t            'mm': 'munutenn',\n\t            'MM': 'miz',\n\t            'dd': 'devezh'\n\t        };\n\t        return number + ' ' + mutation(format[key], number);\n\t    }\n\t    function specialMutationForYears(number) {\n\t        switch (lastNumber(number)) {\n\t            case 1:\n\t            case 3:\n\t            case 4:\n\t            case 5:\n\t            case 9:\n\t                return number + ' bloaz';\n\t            default:\n\t                return number + ' vloaz';\n\t        }\n\t    }\n\t    function lastNumber(number) {\n\t        if (number > 9) {\n\t            return lastNumber(number % 10);\n\t        }\n\t        return number;\n\t    }\n\t    function mutation(text, number) {\n\t        if (number === 2) {\n\t            return softMutation(text);\n\t        }\n\t        return text;\n\t    }\n\t    function softMutation(text) {\n\t        var mutationTable = {\n\t            'm': 'v',\n\t            'b': 'v',\n\t            'd': 'z'\n\t        };\n\t        if (mutationTable[text.charAt(0)] === undefined) {\n\t            return text;\n\t        }\n\t        return mutationTable[text.charAt(0)] + text.substring(1);\n\t    }\n\t\n\t    var br = moment.defineLocale('br', {\n\t        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n\t        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n\t        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n\t        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n\t        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'h[e]mm A',\n\t            LTS : 'h[e]mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [a viz] MMMM YYYY',\n\t            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n\t            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Hiziv da] LT',\n\t            nextDay : '[Warc\\'hoazh da] LT',\n\t            nextWeek : 'dddd [da] LT',\n\t            lastDay : '[Dec\\'h da] LT',\n\t            lastWeek : 'dddd [paset da] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'a-benn %s',\n\t            past : '%s \\'zo',\n\t            s : 'un nebeud segondennoù',\n\t            ss : '%d eilenn',\n\t            m : 'ur vunutenn',\n\t            mm : relativeTimeWithMutation,\n\t            h : 'un eur',\n\t            hh : '%d eur',\n\t            d : 'un devezh',\n\t            dd : relativeTimeWithMutation,\n\t            M : 'ur miz',\n\t            MM : relativeTimeWithMutation,\n\t            y : 'ur bloaz',\n\t            yy : specialMutationForYears\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n\t        ordinal : function (number) {\n\t            var output = (number === 1) ? 'añ' : 'vet';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return br;\n\t\n\t})));\n\n\n/***/ },\n/* 291 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function translate(number, withoutSuffix, key) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 'ss':\n\t                if (number === 1) {\n\t                    result += 'sekunda';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'sekunde';\n\t                } else {\n\t                    result += 'sekundi';\n\t                }\n\t                return result;\n\t            case 'm':\n\t                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\t            case 'mm':\n\t                if (number === 1) {\n\t                    result += 'minuta';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'minute';\n\t                } else {\n\t                    result += 'minuta';\n\t                }\n\t                return result;\n\t            case 'h':\n\t                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\t            case 'hh':\n\t                if (number === 1) {\n\t                    result += 'sat';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'sata';\n\t                } else {\n\t                    result += 'sati';\n\t                }\n\t                return result;\n\t            case 'dd':\n\t                if (number === 1) {\n\t                    result += 'dan';\n\t                } else {\n\t                    result += 'dana';\n\t                }\n\t                return result;\n\t            case 'MM':\n\t                if (number === 1) {\n\t                    result += 'mjesec';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'mjeseca';\n\t                } else {\n\t                    result += 'mjeseci';\n\t                }\n\t                return result;\n\t            case 'yy':\n\t                if (number === 1) {\n\t                    result += 'godina';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'godine';\n\t                } else {\n\t                    result += 'godina';\n\t                }\n\t                return result;\n\t        }\n\t    }\n\t\n\t    var bs = moment.defineLocale('bs', {\n\t        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n\t        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay  : '[danas u] LT',\n\t            nextDay  : '[sutra u] LT',\n\t            nextWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[u] [nedjelju] [u] LT';\n\t                    case 3:\n\t                        return '[u] [srijedu] [u] LT';\n\t                    case 6:\n\t                        return '[u] [subotu] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[u] dddd [u] LT';\n\t                }\n\t            },\n\t            lastDay  : '[jučer u] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                        return '[prošlu] dddd [u] LT';\n\t                    case 6:\n\t                        return '[prošle] [subote] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[prošli] dddd [u] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past   : 'prije %s',\n\t            s      : 'par sekundi',\n\t            ss     : translate,\n\t            m      : translate,\n\t            mm     : translate,\n\t            h      : translate,\n\t            hh     : translate,\n\t            d      : 'dan',\n\t            dd     : translate,\n\t            M      : 'mjesec',\n\t            MM     : translate,\n\t            y      : 'godinu',\n\t            yy     : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return bs;\n\t\n\t})));\n\n\n/***/ },\n/* 292 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ca = moment.defineLocale('ca', {\n\t        months : {\n\t            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n\t            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n\t            isFormat: /D[oD]?(\\s)+MMMM/\n\t        },\n\t        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n\t        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n\t        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM [de] YYYY',\n\t            ll : 'D MMM YYYY',\n\t            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n\t            lll : 'D MMM YYYY, H:mm',\n\t            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n\t            llll : 'ddd D MMM YYYY, H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : function () {\n\t                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t            },\n\t            nextDay : function () {\n\t                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t            },\n\t            nextWeek : function () {\n\t                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t            },\n\t            lastDay : function () {\n\t                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t            },\n\t            lastWeek : function () {\n\t                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'd\\'aquí %s',\n\t            past : 'fa %s',\n\t            s : 'uns segons',\n\t            ss : '%d segons',\n\t            m : 'un minut',\n\t            mm : '%d minuts',\n\t            h : 'una hora',\n\t            hh : '%d hores',\n\t            d : 'un dia',\n\t            dd : '%d dies',\n\t            M : 'un mes',\n\t            MM : '%d mesos',\n\t            y : 'un any',\n\t            yy : '%d anys'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n\t        ordinal : function (number, period) {\n\t            var output = (number === 1) ? 'r' :\n\t                (number === 2) ? 'n' :\n\t                (number === 3) ? 'r' :\n\t                (number === 4) ? 't' : 'è';\n\t            if (period === 'w' || period === 'W') {\n\t                output = 'a';\n\t            }\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ca;\n\t\n\t})));\n\n\n/***/ },\n/* 293 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n\t        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\t    function plural(n) {\n\t        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n\t    }\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 's':  // a few seconds / in a few seconds / a few seconds ago\n\t                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n\t            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'sekundy' : 'sekund');\n\t                } else {\n\t                    return result + 'sekundami';\n\t                }\n\t                break;\n\t            case 'm':  // a minute / in a minute / a minute ago\n\t                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n\t            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'minuty' : 'minut');\n\t                } else {\n\t                    return result + 'minutami';\n\t                }\n\t                break;\n\t            case 'h':  // an hour / in an hour / an hour ago\n\t                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n\t            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'hodiny' : 'hodin');\n\t                } else {\n\t                    return result + 'hodinami';\n\t                }\n\t                break;\n\t            case 'd':  // a day / in a day / a day ago\n\t                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n\t            case 'dd': // 9 days / in 9 days / 9 days ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'dny' : 'dní');\n\t                } else {\n\t                    return result + 'dny';\n\t                }\n\t                break;\n\t            case 'M':  // a month / in a month / a month ago\n\t                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n\t            case 'MM': // 9 months / in 9 months / 9 months ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n\t                } else {\n\t                    return result + 'měsíci';\n\t                }\n\t                break;\n\t            case 'y':  // a year / in a year / a year ago\n\t                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n\t            case 'yy': // 9 years / in 9 years / 9 years ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'roky' : 'let');\n\t                } else {\n\t                    return result + 'lety';\n\t                }\n\t                break;\n\t        }\n\t    }\n\t\n\t    var cs = moment.defineLocale('cs', {\n\t        months : months,\n\t        monthsShort : monthsShort,\n\t        monthsParse : (function (months, monthsShort) {\n\t            var i, _monthsParse = [];\n\t            for (i = 0; i < 12; i++) {\n\t                // use custom parser to solve problem with July (červenec)\n\t                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n\t            }\n\t            return _monthsParse;\n\t        }(months, monthsShort)),\n\t        shortMonthsParse : (function (monthsShort) {\n\t            var i, _shortMonthsParse = [];\n\t            for (i = 0; i < 12; i++) {\n\t                _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n\t            }\n\t            return _shortMonthsParse;\n\t        }(monthsShort)),\n\t        longMonthsParse : (function (months) {\n\t            var i, _longMonthsParse = [];\n\t            for (i = 0; i < 12; i++) {\n\t                _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n\t            }\n\t            return _longMonthsParse;\n\t        }(months)),\n\t        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n\t        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n\t        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n\t        longDateFormat : {\n\t            LT: 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd D. MMMM YYYY H:mm',\n\t            l : 'D. M. YYYY'\n\t        },\n\t        calendar : {\n\t            sameDay: '[dnes v] LT',\n\t            nextDay: '[zítra v] LT',\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[v neděli v] LT';\n\t                    case 1:\n\t                    case 2:\n\t                        return '[v] dddd [v] LT';\n\t                    case 3:\n\t                        return '[ve středu v] LT';\n\t                    case 4:\n\t                        return '[ve čtvrtek v] LT';\n\t                    case 5:\n\t                        return '[v pátek v] LT';\n\t                    case 6:\n\t                        return '[v sobotu v] LT';\n\t                }\n\t            },\n\t            lastDay: '[včera v] LT',\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[minulou neděli v] LT';\n\t                    case 1:\n\t                    case 2:\n\t                        return '[minulé] dddd [v] LT';\n\t                    case 3:\n\t                        return '[minulou středu v] LT';\n\t                    case 4:\n\t                    case 5:\n\t                        return '[minulý] dddd [v] LT';\n\t                    case 6:\n\t                        return '[minulou sobotu v] LT';\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past : 'před %s',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return cs;\n\t\n\t})));\n\n\n/***/ },\n/* 294 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var cv = moment.defineLocale('cv', {\n\t        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n\t        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n\t        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n\t        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n\t        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD-MM-YYYY',\n\t            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n\t            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n\t            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Паян] LT [сехетре]',\n\t            nextDay: '[Ыран] LT [сехетре]',\n\t            lastDay: '[Ӗнер] LT [сехетре]',\n\t            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n\t            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : function (output) {\n\t                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n\t                return output + affix;\n\t            },\n\t            past : '%s каялла',\n\t            s : 'пӗр-ик ҫеккунт',\n\t            ss : '%d ҫеккунт',\n\t            m : 'пӗр минут',\n\t            mm : '%d минут',\n\t            h : 'пӗр сехет',\n\t            hh : '%d сехет',\n\t            d : 'пӗр кун',\n\t            dd : '%d кун',\n\t            M : 'пӗр уйӑх',\n\t            MM : '%d уйӑх',\n\t            y : 'пӗр ҫул',\n\t            yy : '%d ҫул'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n\t        ordinal : '%d-мӗш',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return cv;\n\t\n\t})));\n\n\n/***/ },\n/* 295 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var cy = moment.defineLocale('cy', {\n\t        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n\t        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n\t        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n\t        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n\t        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        // time formats are the same as en-gb\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY HH:mm',\n\t            LLLL: 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[Heddiw am] LT',\n\t            nextDay: '[Yfory am] LT',\n\t            nextWeek: 'dddd [am] LT',\n\t            lastDay: '[Ddoe am] LT',\n\t            lastWeek: 'dddd [diwethaf am] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: 'mewn %s',\n\t            past: '%s yn ôl',\n\t            s: 'ychydig eiliadau',\n\t            ss: '%d eiliad',\n\t            m: 'munud',\n\t            mm: '%d munud',\n\t            h: 'awr',\n\t            hh: '%d awr',\n\t            d: 'diwrnod',\n\t            dd: '%d diwrnod',\n\t            M: 'mis',\n\t            MM: '%d mis',\n\t            y: 'blwyddyn',\n\t            yy: '%d flynedd'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n\t        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n\t        ordinal: function (number) {\n\t            var b = number,\n\t                output = '',\n\t                lookup = [\n\t                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n\t                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n\t                ];\n\t            if (b > 20) {\n\t                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n\t                    output = 'fed'; // not 30ain, 70ain or 90ain\n\t                } else {\n\t                    output = 'ain';\n\t                }\n\t            } else if (b > 0) {\n\t                output = lookup[b];\n\t            }\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return cy;\n\t\n\t})));\n\n\n/***/ },\n/* 296 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var da = moment.defineLocale('da', {\n\t        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n\t        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n\t        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n\t        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY HH:mm',\n\t            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[i dag kl.] LT',\n\t            nextDay : '[i morgen kl.] LT',\n\t            nextWeek : 'på dddd [kl.] LT',\n\t            lastDay : '[i går kl.] LT',\n\t            lastWeek : '[i] dddd[s kl.] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'om %s',\n\t            past : '%s siden',\n\t            s : 'få sekunder',\n\t            ss : '%d sekunder',\n\t            m : 'et minut',\n\t            mm : '%d minutter',\n\t            h : 'en time',\n\t            hh : '%d timer',\n\t            d : 'en dag',\n\t            dd : '%d dage',\n\t            M : 'en måned',\n\t            MM : '%d måneder',\n\t            y : 'et år',\n\t            yy : '%d år'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return da;\n\t\n\t})));\n\n\n/***/ },\n/* 297 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            'm': ['eine Minute', 'einer Minute'],\n\t            'h': ['eine Stunde', 'einer Stunde'],\n\t            'd': ['ein Tag', 'einem Tag'],\n\t            'dd': [number + ' Tage', number + ' Tagen'],\n\t            'M': ['ein Monat', 'einem Monat'],\n\t            'MM': [number + ' Monate', number + ' Monaten'],\n\t            'y': ['ein Jahr', 'einem Jahr'],\n\t            'yy': [number + ' Jahre', number + ' Jahren']\n\t        };\n\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t    }\n\t\n\t    var de = moment.defineLocale('de', {\n\t        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n\t        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[heute um] LT [Uhr]',\n\t            sameElse: 'L',\n\t            nextDay: '[morgen um] LT [Uhr]',\n\t            nextWeek: 'dddd [um] LT [Uhr]',\n\t            lastDay: '[gestern um] LT [Uhr]',\n\t            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : 'vor %s',\n\t            s : 'ein paar Sekunden',\n\t            ss : '%d Sekunden',\n\t            m : processRelativeTime,\n\t            mm : '%d Minuten',\n\t            h : processRelativeTime,\n\t            hh : '%d Stunden',\n\t            d : processRelativeTime,\n\t            dd : processRelativeTime,\n\t            M : processRelativeTime,\n\t            MM : processRelativeTime,\n\t            y : processRelativeTime,\n\t            yy : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return de;\n\t\n\t})));\n\n\n/***/ },\n/* 298 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            'm': ['eine Minute', 'einer Minute'],\n\t            'h': ['eine Stunde', 'einer Stunde'],\n\t            'd': ['ein Tag', 'einem Tag'],\n\t            'dd': [number + ' Tage', number + ' Tagen'],\n\t            'M': ['ein Monat', 'einem Monat'],\n\t            'MM': [number + ' Monate', number + ' Monaten'],\n\t            'y': ['ein Jahr', 'einem Jahr'],\n\t            'yy': [number + ' Jahre', number + ' Jahren']\n\t        };\n\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t    }\n\t\n\t    var deAt = moment.defineLocale('de-at', {\n\t        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n\t        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[heute um] LT [Uhr]',\n\t            sameElse: 'L',\n\t            nextDay: '[morgen um] LT [Uhr]',\n\t            nextWeek: 'dddd [um] LT [Uhr]',\n\t            lastDay: '[gestern um] LT [Uhr]',\n\t            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : 'vor %s',\n\t            s : 'ein paar Sekunden',\n\t            ss : '%d Sekunden',\n\t            m : processRelativeTime,\n\t            mm : '%d Minuten',\n\t            h : processRelativeTime,\n\t            hh : '%d Stunden',\n\t            d : processRelativeTime,\n\t            dd : processRelativeTime,\n\t            M : processRelativeTime,\n\t            MM : processRelativeTime,\n\t            y : processRelativeTime,\n\t            yy : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return deAt;\n\t\n\t})));\n\n\n/***/ },\n/* 299 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            'm': ['eine Minute', 'einer Minute'],\n\t            'h': ['eine Stunde', 'einer Stunde'],\n\t            'd': ['ein Tag', 'einem Tag'],\n\t            'dd': [number + ' Tage', number + ' Tagen'],\n\t            'M': ['ein Monat', 'einem Monat'],\n\t            'MM': [number + ' Monate', number + ' Monaten'],\n\t            'y': ['ein Jahr', 'einem Jahr'],\n\t            'yy': [number + ' Jahre', number + ' Jahren']\n\t        };\n\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t    }\n\t\n\t    var deCh = moment.defineLocale('de-ch', {\n\t        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n\t        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[heute um] LT [Uhr]',\n\t            sameElse: 'L',\n\t            nextDay: '[morgen um] LT [Uhr]',\n\t            nextWeek: 'dddd [um] LT [Uhr]',\n\t            lastDay: '[gestern um] LT [Uhr]',\n\t            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : 'vor %s',\n\t            s : 'ein paar Sekunden',\n\t            ss : '%d Sekunden',\n\t            m : processRelativeTime,\n\t            mm : '%d Minuten',\n\t            h : processRelativeTime,\n\t            hh : '%d Stunden',\n\t            d : processRelativeTime,\n\t            dd : processRelativeTime,\n\t            M : processRelativeTime,\n\t            MM : processRelativeTime,\n\t            y : processRelativeTime,\n\t            yy : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return deCh;\n\t\n\t})));\n\n\n/***/ },\n/* 300 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = [\n\t        'ޖެނުއަރީ',\n\t        'ފެބްރުއަރީ',\n\t        'މާރިޗު',\n\t        'އޭޕްރީލު',\n\t        'މޭ',\n\t        'ޖޫން',\n\t        'ޖުލައި',\n\t        'އޯގަސްޓު',\n\t        'ސެޕްޓެމްބަރު',\n\t        'އޮކްޓޯބަރު',\n\t        'ނޮވެމްބަރު',\n\t        'ޑިސެމްބަރު'\n\t    ], weekdays = [\n\t        'އާދިއްތަ',\n\t        'ހޯމަ',\n\t        'އަންގާރަ',\n\t        'ބުދަ',\n\t        'ބުރާސްފަތި',\n\t        'ހުކުރު',\n\t        'ހޮނިހިރު'\n\t    ];\n\t\n\t    var dv = moment.defineLocale('dv', {\n\t        months : months,\n\t        monthsShort : months,\n\t        weekdays : weekdays,\n\t        weekdaysShort : weekdays,\n\t        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n\t        longDateFormat : {\n\t\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'D/M/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /މކ|މފ/,\n\t        isPM : function (input) {\n\t            return 'މފ' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'މކ';\n\t            } else {\n\t                return 'މފ';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[މިއަދު] LT',\n\t            nextDay : '[މާދަމާ] LT',\n\t            nextWeek : 'dddd LT',\n\t            lastDay : '[އިއްޔެ] LT',\n\t            lastWeek : '[ފާއިތުވި] dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'ތެރޭގައި %s',\n\t            past : 'ކުރިން %s',\n\t            s : 'ސިކުންތުކޮޅެއް',\n\t            ss : 'd% ސިކުންތު',\n\t            m : 'މިނިޓެއް',\n\t            mm : 'މިނިޓު %d',\n\t            h : 'ގަޑިއިރެއް',\n\t            hh : 'ގަޑިއިރު %d',\n\t            d : 'ދުވަހެއް',\n\t            dd : 'ދުވަސް %d',\n\t            M : 'މަހެއް',\n\t            MM : 'މަސް %d',\n\t            y : 'އަހަރެއް',\n\t            yy : 'އަހަރު %d'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 7,  // Sunday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return dv;\n\t\n\t})));\n\n\n/***/ },\n/* 301 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t    function isFunction(input) {\n\t        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t    }\n\t\n\t\n\t    var el = moment.defineLocale('el', {\n\t        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n\t        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n\t        months : function (momentToFormat, format) {\n\t            if (!momentToFormat) {\n\t                return this._monthsNominativeEl;\n\t            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n\t                return this._monthsGenitiveEl[momentToFormat.month()];\n\t            } else {\n\t                return this._monthsNominativeEl[momentToFormat.month()];\n\t            }\n\t        },\n\t        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n\t        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n\t        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n\t        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours > 11) {\n\t                return isLower ? 'μμ' : 'ΜΜ';\n\t            } else {\n\t                return isLower ? 'πμ' : 'ΠΜ';\n\t            }\n\t        },\n\t        isPM : function (input) {\n\t            return ((input + '').toLowerCase()[0] === 'μ');\n\t        },\n\t        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendarEl : {\n\t            sameDay : '[Σήμερα {}] LT',\n\t            nextDay : '[Αύριο {}] LT',\n\t            nextWeek : 'dddd [{}] LT',\n\t            lastDay : '[Χθες {}] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 6:\n\t                        return '[το προηγούμενο] dddd [{}] LT';\n\t                    default:\n\t                        return '[την προηγούμενη] dddd [{}] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        calendar : function (key, mom) {\n\t            var output = this._calendarEl[key],\n\t                hours = mom && mom.hours();\n\t            if (isFunction(output)) {\n\t                output = output.apply(mom);\n\t            }\n\t            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n\t        },\n\t        relativeTime : {\n\t            future : 'σε %s',\n\t            past : '%s πριν',\n\t            s : 'λίγα δευτερόλεπτα',\n\t            ss : '%d δευτερόλεπτα',\n\t            m : 'ένα λεπτό',\n\t            mm : '%d λεπτά',\n\t            h : 'μία ώρα',\n\t            hh : '%d ώρες',\n\t            d : 'μία μέρα',\n\t            dd : '%d μέρες',\n\t            M : 'ένας μήνας',\n\t            MM : '%d μήνες',\n\t            y : 'ένας χρόνος',\n\t            yy : '%d χρόνια'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n\t        ordinal: '%dη',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return el;\n\t\n\t})));\n\n\n/***/ },\n/* 302 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enAu = moment.defineLocale('en-au', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            ss : '%d seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return enAu;\n\t\n\t})));\n\n\n/***/ },\n/* 303 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enCa = moment.defineLocale('en-ca', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'MMMM D, YYYY',\n\t            LLL : 'MMMM D, YYYY h:mm A',\n\t            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            ss : '%d seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        }\n\t    });\n\t\n\t    return enCa;\n\t\n\t})));\n\n\n/***/ },\n/* 304 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enGb = moment.defineLocale('en-gb', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            ss : '%d seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return enGb;\n\t\n\t})));\n\n\n/***/ },\n/* 305 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enIe = moment.defineLocale('en-ie', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD-MM-YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            ss : '%d seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return enIe;\n\t\n\t})));\n\n\n/***/ },\n/* 306 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enIl = moment.defineLocale('en-il', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        }\n\t    });\n\t\n\t    return enIl;\n\t\n\t})));\n\n\n/***/ },\n/* 307 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var enNz = moment.defineLocale('en-nz', {\n\t        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n\t        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n\t        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n\t        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Today at] LT',\n\t            nextDay : '[Tomorrow at] LT',\n\t            nextWeek : 'dddd [at] LT',\n\t            lastDay : '[Yesterday at] LT',\n\t            lastWeek : '[Last] dddd [at] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'in %s',\n\t            past : '%s ago',\n\t            s : 'a few seconds',\n\t            ss : '%d seconds',\n\t            m : 'a minute',\n\t            mm : '%d minutes',\n\t            h : 'an hour',\n\t            hh : '%d hours',\n\t            d : 'a day',\n\t            dd : '%d days',\n\t            M : 'a month',\n\t            MM : '%d months',\n\t            y : 'a year',\n\t            yy : '%d years'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return enNz;\n\t\n\t})));\n\n\n/***/ },\n/* 308 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var eo = moment.defineLocale('eo', {\n\t        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n\t        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n\t        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n\t        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'D[-a de] MMMM, YYYY',\n\t            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n\t            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n\t        },\n\t        meridiemParse: /[ap]\\.t\\.m/i,\n\t        isPM: function (input) {\n\t            return input.charAt(0).toLowerCase() === 'p';\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours > 11) {\n\t                return isLower ? 'p.t.m.' : 'P.T.M.';\n\t            } else {\n\t                return isLower ? 'a.t.m.' : 'A.T.M.';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Hodiaŭ je] LT',\n\t            nextDay : '[Morgaŭ je] LT',\n\t            nextWeek : 'dddd [je] LT',\n\t            lastDay : '[Hieraŭ je] LT',\n\t            lastWeek : '[pasinta] dddd [je] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'post %s',\n\t            past : 'antaŭ %s',\n\t            s : 'sekundoj',\n\t            ss : '%d sekundoj',\n\t            m : 'minuto',\n\t            mm : '%d minutoj',\n\t            h : 'horo',\n\t            hh : '%d horoj',\n\t            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n\t            dd : '%d tagoj',\n\t            M : 'monato',\n\t            MM : '%d monatoj',\n\t            y : 'jaro',\n\t            yy : '%d jaroj'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n\t        ordinal : '%da',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return eo;\n\t\n\t})));\n\n\n/***/ },\n/* 309 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n\t        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\t\n\t    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n\t    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\t\n\t    var es = moment.defineLocale('es', {\n\t        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortDot;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShort[m.month()];\n\t            } else {\n\t                return monthsShortDot[m.month()];\n\t            }\n\t        },\n\t        monthsRegex : monthsRegex,\n\t        monthsShortRegex : monthsRegex,\n\t        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n\t        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n\t        monthsParse : monthsParse,\n\t        longMonthsParse : monthsParse,\n\t        shortMonthsParse : monthsParse,\n\t        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [de] MMMM [de] YYYY',\n\t            LLL : 'D [de] MMMM [de] YYYY H:mm',\n\t            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : function () {\n\t                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextDay : function () {\n\t                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextWeek : function () {\n\t                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastDay : function () {\n\t                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastWeek : function () {\n\t                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'en %s',\n\t            past : 'hace %s',\n\t            s : 'unos segundos',\n\t            ss : '%d segundos',\n\t            m : 'un minuto',\n\t            mm : '%d minutos',\n\t            h : 'una hora',\n\t            hh : '%d horas',\n\t            d : 'un día',\n\t            dd : '%d días',\n\t            M : 'un mes',\n\t            MM : '%d meses',\n\t            y : 'un año',\n\t            yy : '%d años'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal : '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return es;\n\t\n\t})));\n\n\n/***/ },\n/* 310 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n\t        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\t\n\t    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n\t    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\t\n\t    var esDo = moment.defineLocale('es-do', {\n\t        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortDot;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShort[m.month()];\n\t            } else {\n\t                return monthsShortDot[m.month()];\n\t            }\n\t        },\n\t        monthsRegex: monthsRegex,\n\t        monthsShortRegex: monthsRegex,\n\t        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n\t        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n\t        monthsParse: monthsParse,\n\t        longMonthsParse: monthsParse,\n\t        shortMonthsParse: monthsParse,\n\t        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [de] MMMM [de] YYYY',\n\t            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n\t            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : function () {\n\t                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextDay : function () {\n\t                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextWeek : function () {\n\t                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastDay : function () {\n\t                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastWeek : function () {\n\t                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'en %s',\n\t            past : 'hace %s',\n\t            s : 'unos segundos',\n\t            ss : '%d segundos',\n\t            m : 'un minuto',\n\t            mm : '%d minutos',\n\t            h : 'una hora',\n\t            hh : '%d horas',\n\t            d : 'un día',\n\t            dd : '%d días',\n\t            M : 'un mes',\n\t            MM : '%d meses',\n\t            y : 'un año',\n\t            yy : '%d años'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal : '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return esDo;\n\t\n\t})));\n\n\n/***/ },\n/* 311 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n\t        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\t\n\t    var esUs = moment.defineLocale('es-us', {\n\t        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortDot;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShort[m.month()];\n\t            } else {\n\t                return monthsShortDot[m.month()];\n\t            }\n\t        },\n\t        monthsParseExact : true,\n\t        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n\t        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n\t        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'MM/DD/YYYY',\n\t            LL : 'MMMM [de] D [de] YYYY',\n\t            LLL : 'MMMM [de] D [de] YYYY h:mm A',\n\t            LLLL : 'dddd, MMMM [de] D [de] YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : function () {\n\t                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextDay : function () {\n\t                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            nextWeek : function () {\n\t                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastDay : function () {\n\t                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            lastWeek : function () {\n\t                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'en %s',\n\t            past : 'hace %s',\n\t            s : 'unos segundos',\n\t            ss : '%d segundos',\n\t            m : 'un minuto',\n\t            mm : '%d minutos',\n\t            h : 'una hora',\n\t            hh : '%d horas',\n\t            d : 'un día',\n\t            dd : '%d días',\n\t            M : 'un mes',\n\t            MM : '%d meses',\n\t            y : 'un año',\n\t            yy : '%d años'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal : '%dº',\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return esUs;\n\t\n\t})));\n\n\n/***/ },\n/* 312 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n\t            'ss': [number + 'sekundi', number + 'sekundit'],\n\t            'm' : ['ühe minuti', 'üks minut'],\n\t            'mm': [number + ' minuti', number + ' minutit'],\n\t            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n\t            'hh': [number + ' tunni', number + ' tundi'],\n\t            'd' : ['ühe päeva', 'üks päev'],\n\t            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n\t            'MM': [number + ' kuu', number + ' kuud'],\n\t            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n\t            'yy': [number + ' aasta', number + ' aastat']\n\t        };\n\t        if (withoutSuffix) {\n\t            return format[key][2] ? format[key][2] : format[key][1];\n\t        }\n\t        return isFuture ? format[key][0] : format[key][1];\n\t    }\n\t\n\t    var et = moment.defineLocale('et', {\n\t        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n\t        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n\t        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n\t        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n\t        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n\t        longDateFormat : {\n\t            LT   : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L    : 'DD.MM.YYYY',\n\t            LL   : 'D. MMMM YYYY',\n\t            LLL  : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay  : '[Täna,] LT',\n\t            nextDay  : '[Homme,] LT',\n\t            nextWeek : '[Järgmine] dddd LT',\n\t            lastDay  : '[Eile,] LT',\n\t            lastWeek : '[Eelmine] dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s pärast',\n\t            past   : '%s tagasi',\n\t            s      : processRelativeTime,\n\t            ss     : processRelativeTime,\n\t            m      : processRelativeTime,\n\t            mm     : processRelativeTime,\n\t            h      : processRelativeTime,\n\t            hh     : processRelativeTime,\n\t            d      : processRelativeTime,\n\t            dd     : '%d päeva',\n\t            M      : processRelativeTime,\n\t            MM     : processRelativeTime,\n\t            y      : processRelativeTime,\n\t            yy     : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return et;\n\t\n\t})));\n\n\n/***/ },\n/* 313 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var eu = moment.defineLocale('eu', {\n\t        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n\t        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n\t        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n\t        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'YYYY[ko] MMMM[ren] D[a]',\n\t            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n\t            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n\t            l : 'YYYY-M-D',\n\t            ll : 'YYYY[ko] MMM D[a]',\n\t            lll : 'YYYY[ko] MMM D[a] HH:mm',\n\t            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[gaur] LT[etan]',\n\t            nextDay : '[bihar] LT[etan]',\n\t            nextWeek : 'dddd LT[etan]',\n\t            lastDay : '[atzo] LT[etan]',\n\t            lastWeek : '[aurreko] dddd LT[etan]',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s barru',\n\t            past : 'duela %s',\n\t            s : 'segundo batzuk',\n\t            ss : '%d segundo',\n\t            m : 'minutu bat',\n\t            mm : '%d minutu',\n\t            h : 'ordu bat',\n\t            hh : '%d ordu',\n\t            d : 'egun bat',\n\t            dd : '%d egun',\n\t            M : 'hilabete bat',\n\t            MM : '%d hilabete',\n\t            y : 'urte bat',\n\t            yy : '%d urte'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return eu;\n\t\n\t})));\n\n\n/***/ },\n/* 314 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '۱',\n\t        '2': '۲',\n\t        '3': '۳',\n\t        '4': '۴',\n\t        '5': '۵',\n\t        '6': '۶',\n\t        '7': '۷',\n\t        '8': '۸',\n\t        '9': '۹',\n\t        '0': '۰'\n\t    }, numberMap = {\n\t        '۱': '1',\n\t        '۲': '2',\n\t        '۳': '3',\n\t        '۴': '4',\n\t        '۵': '5',\n\t        '۶': '6',\n\t        '۷': '7',\n\t        '۸': '8',\n\t        '۹': '9',\n\t        '۰': '0'\n\t    };\n\t\n\t    var fa = moment.defineLocale('fa', {\n\t        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n\t        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n\t        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n\t        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n\t        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n\t        isPM: function (input) {\n\t            return /بعد از ظهر/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'قبل از ظهر';\n\t            } else {\n\t                return 'بعد از ظهر';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[امروز ساعت] LT',\n\t            nextDay : '[فردا ساعت] LT',\n\t            nextWeek : 'dddd [ساعت] LT',\n\t            lastDay : '[دیروز ساعت] LT',\n\t            lastWeek : 'dddd [پیش] [ساعت] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'در %s',\n\t            past : '%s پیش',\n\t            s : 'چند ثانیه',\n\t            ss : 'ثانیه d%',\n\t            m : 'یک دقیقه',\n\t            mm : '%d دقیقه',\n\t            h : 'یک ساعت',\n\t            hh : '%d ساعت',\n\t            d : 'یک روز',\n\t            dd : '%d روز',\n\t            M : 'یک ماه',\n\t            MM : '%d ماه',\n\t            y : 'یک سال',\n\t            yy : '%d سال'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[۰-۹]/g, function (match) {\n\t                return numberMap[match];\n\t            }).replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            }).replace(/,/g, '،');\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n\t        ordinal : '%dم',\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12 // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return fa;\n\t\n\t})));\n\n\n/***/ },\n/* 315 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n\t        numbersFuture = [\n\t            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n\t            numbersPast[7], numbersPast[8], numbersPast[9]\n\t        ];\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var result = '';\n\t        switch (key) {\n\t            case 's':\n\t                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n\t            case 'ss':\n\t                return isFuture ? 'sekunnin' : 'sekuntia';\n\t            case 'm':\n\t                return isFuture ? 'minuutin' : 'minuutti';\n\t            case 'mm':\n\t                result = isFuture ? 'minuutin' : 'minuuttia';\n\t                break;\n\t            case 'h':\n\t                return isFuture ? 'tunnin' : 'tunti';\n\t            case 'hh':\n\t                result = isFuture ? 'tunnin' : 'tuntia';\n\t                break;\n\t            case 'd':\n\t                return isFuture ? 'päivän' : 'päivä';\n\t            case 'dd':\n\t                result = isFuture ? 'päivän' : 'päivää';\n\t                break;\n\t            case 'M':\n\t                return isFuture ? 'kuukauden' : 'kuukausi';\n\t            case 'MM':\n\t                result = isFuture ? 'kuukauden' : 'kuukautta';\n\t                break;\n\t            case 'y':\n\t                return isFuture ? 'vuoden' : 'vuosi';\n\t            case 'yy':\n\t                result = isFuture ? 'vuoden' : 'vuotta';\n\t                break;\n\t        }\n\t        result = verbalNumber(number, isFuture) + ' ' + result;\n\t        return result;\n\t    }\n\t    function verbalNumber(number, isFuture) {\n\t        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n\t    }\n\t\n\t    var fi = moment.defineLocale('fi', {\n\t        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n\t        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n\t        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n\t        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n\t        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'Do MMMM[ta] YYYY',\n\t            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n\t            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n\t            l : 'D.M.YYYY',\n\t            ll : 'Do MMM YYYY',\n\t            lll : 'Do MMM YYYY, [klo] HH.mm',\n\t            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[tänään] [klo] LT',\n\t            nextDay : '[huomenna] [klo] LT',\n\t            nextWeek : 'dddd [klo] LT',\n\t            lastDay : '[eilen] [klo] LT',\n\t            lastWeek : '[viime] dddd[na] [klo] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s päästä',\n\t            past : '%s sitten',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return fi;\n\t\n\t})));\n\n\n/***/ },\n/* 316 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var fo = moment.defineLocale('fo', {\n\t        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n\t        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n\t        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n\t        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Í dag kl.] LT',\n\t            nextDay : '[Í morgin kl.] LT',\n\t            nextWeek : 'dddd [kl.] LT',\n\t            lastDay : '[Í gjár kl.] LT',\n\t            lastWeek : '[síðstu] dddd [kl] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'um %s',\n\t            past : '%s síðani',\n\t            s : 'fá sekund',\n\t            ss : '%d sekundir',\n\t            m : 'ein minutt',\n\t            mm : '%d minuttir',\n\t            h : 'ein tími',\n\t            hh : '%d tímar',\n\t            d : 'ein dagur',\n\t            dd : '%d dagar',\n\t            M : 'ein mánaði',\n\t            MM : '%d mánaðir',\n\t            y : 'eitt ár',\n\t            yy : '%d ár'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return fo;\n\t\n\t})));\n\n\n/***/ },\n/* 317 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var fr = moment.defineLocale('fr', {\n\t        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Aujourd’hui à] LT',\n\t            nextDay : '[Demain à] LT',\n\t            nextWeek : 'dddd [à] LT',\n\t            lastDay : '[Hier à] LT',\n\t            lastWeek : 'dddd [dernier à] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dans %s',\n\t            past : 'il y a %s',\n\t            s : 'quelques secondes',\n\t            ss : '%d secondes',\n\t            m : 'une minute',\n\t            mm : '%d minutes',\n\t            h : 'une heure',\n\t            hh : '%d heures',\n\t            d : 'un jour',\n\t            dd : '%d jours',\n\t            M : 'un mois',\n\t            MM : '%d mois',\n\t            y : 'un an',\n\t            yy : '%d ans'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                // TODO: Return 'e' when day of month > 1. Move this case inside\n\t                // block for masculine words below.\n\t                // See https://github.com/moment/moment/issues/3375\n\t                case 'D':\n\t                    return number + (number === 1 ? 'er' : '');\n\t\n\t                // Words with masculine grammatical gender: mois, trimestre, jour\n\t                default:\n\t                case 'M':\n\t                case 'Q':\n\t                case 'DDD':\n\t                case 'd':\n\t                    return number + (number === 1 ? 'er' : 'e');\n\t\n\t                // Words with feminine grammatical gender: semaine\n\t                case 'w':\n\t                case 'W':\n\t                    return number + (number === 1 ? 're' : 'e');\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return fr;\n\t\n\t})));\n\n\n/***/ },\n/* 318 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var frCa = moment.defineLocale('fr-ca', {\n\t        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Aujourd’hui à] LT',\n\t            nextDay : '[Demain à] LT',\n\t            nextWeek : 'dddd [à] LT',\n\t            lastDay : '[Hier à] LT',\n\t            lastWeek : 'dddd [dernier à] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dans %s',\n\t            past : 'il y a %s',\n\t            s : 'quelques secondes',\n\t            ss : '%d secondes',\n\t            m : 'une minute',\n\t            mm : '%d minutes',\n\t            h : 'une heure',\n\t            hh : '%d heures',\n\t            d : 'un jour',\n\t            dd : '%d jours',\n\t            M : 'un mois',\n\t            MM : '%d mois',\n\t            y : 'un an',\n\t            yy : '%d ans'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                // Words with masculine grammatical gender: mois, trimestre, jour\n\t                default:\n\t                case 'M':\n\t                case 'Q':\n\t                case 'D':\n\t                case 'DDD':\n\t                case 'd':\n\t                    return number + (number === 1 ? 'er' : 'e');\n\t\n\t                // Words with feminine grammatical gender: semaine\n\t                case 'w':\n\t                case 'W':\n\t                    return number + (number === 1 ? 're' : 'e');\n\t            }\n\t        }\n\t    });\n\t\n\t    return frCa;\n\t\n\t})));\n\n\n/***/ },\n/* 319 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var frCh = moment.defineLocale('fr-ch', {\n\t        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n\t        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n\t        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n\t        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Aujourd’hui à] LT',\n\t            nextDay : '[Demain à] LT',\n\t            nextWeek : 'dddd [à] LT',\n\t            lastDay : '[Hier à] LT',\n\t            lastWeek : 'dddd [dernier à] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dans %s',\n\t            past : 'il y a %s',\n\t            s : 'quelques secondes',\n\t            ss : '%d secondes',\n\t            m : 'une minute',\n\t            mm : '%d minutes',\n\t            h : 'une heure',\n\t            hh : '%d heures',\n\t            d : 'un jour',\n\t            dd : '%d jours',\n\t            M : 'un mois',\n\t            MM : '%d mois',\n\t            y : 'un an',\n\t            yy : '%d ans'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                // Words with masculine grammatical gender: mois, trimestre, jour\n\t                default:\n\t                case 'M':\n\t                case 'Q':\n\t                case 'D':\n\t                case 'DDD':\n\t                case 'd':\n\t                    return number + (number === 1 ? 'er' : 'e');\n\t\n\t                // Words with feminine grammatical gender: semaine\n\t                case 'w':\n\t                case 'W':\n\t                    return number + (number === 1 ? 're' : 'e');\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return frCh;\n\t\n\t})));\n\n\n/***/ },\n/* 320 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n\t        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\t\n\t    var fy = moment.defineLocale('fy', {\n\t        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortWithDots;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShortWithoutDots[m.month()];\n\t            } else {\n\t                return monthsShortWithDots[m.month()];\n\t            }\n\t        },\n\t        monthsParseExact : true,\n\t        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n\t        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n\t        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD-MM-YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[hjoed om] LT',\n\t            nextDay: '[moarn om] LT',\n\t            nextWeek: 'dddd [om] LT',\n\t            lastDay: '[juster om] LT',\n\t            lastWeek: '[ôfrûne] dddd [om] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'oer %s',\n\t            past : '%s lyn',\n\t            s : 'in pear sekonden',\n\t            ss : '%d sekonden',\n\t            m : 'ien minút',\n\t            mm : '%d minuten',\n\t            h : 'ien oere',\n\t            hh : '%d oeren',\n\t            d : 'ien dei',\n\t            dd : '%d dagen',\n\t            M : 'ien moanne',\n\t            MM : '%d moannen',\n\t            y : 'ien jier',\n\t            yy : '%d jierren'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t        ordinal : function (number) {\n\t            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return fy;\n\t\n\t})));\n\n\n/***/ },\n/* 321 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = [\n\t        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n\t    ];\n\t\n\t    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\t\n\t    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\t\n\t    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\t\n\t    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\t\n\t    var gd = moment.defineLocale('gd', {\n\t        months : months,\n\t        monthsShort : monthsShort,\n\t        monthsParseExact : true,\n\t        weekdays : weekdays,\n\t        weekdaysShort : weekdaysShort,\n\t        weekdaysMin : weekdaysMin,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[An-diugh aig] LT',\n\t            nextDay : '[A-màireach aig] LT',\n\t            nextWeek : 'dddd [aig] LT',\n\t            lastDay : '[An-dè aig] LT',\n\t            lastWeek : 'dddd [seo chaidh] [aig] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'ann an %s',\n\t            past : 'bho chionn %s',\n\t            s : 'beagan diogan',\n\t            ss : '%d diogan',\n\t            m : 'mionaid',\n\t            mm : '%d mionaidean',\n\t            h : 'uair',\n\t            hh : '%d uairean',\n\t            d : 'latha',\n\t            dd : '%d latha',\n\t            M : 'mìos',\n\t            MM : '%d mìosan',\n\t            y : 'bliadhna',\n\t            yy : '%d bliadhna'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n\t        ordinal : function (number) {\n\t            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return gd;\n\t\n\t})));\n\n\n/***/ },\n/* 322 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var gl = moment.defineLocale('gl', {\n\t        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n\t        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n\t        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n\t        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [de] MMMM [de] YYYY',\n\t            LLL : 'D [de] MMMM [de] YYYY H:mm',\n\t            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : function () {\n\t                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n\t            },\n\t            nextDay : function () {\n\t                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n\t            },\n\t            nextWeek : function () {\n\t                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n\t            },\n\t            lastDay : function () {\n\t                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n\t            },\n\t            lastWeek : function () {\n\t                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : function (str) {\n\t                if (str.indexOf('un') === 0) {\n\t                    return 'n' + str;\n\t                }\n\t                return 'en ' + str;\n\t            },\n\t            past : 'hai %s',\n\t            s : 'uns segundos',\n\t            ss : '%d segundos',\n\t            m : 'un minuto',\n\t            mm : '%d minutos',\n\t            h : 'unha hora',\n\t            hh : '%d horas',\n\t            d : 'un día',\n\t            dd : '%d días',\n\t            M : 'un mes',\n\t            MM : '%d meses',\n\t            y : 'un ano',\n\t            yy : '%d anos'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal : '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return gl;\n\t\n\t})));\n\n\n/***/ },\n/* 323 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            's': ['thodde secondanim', 'thodde second'],\n\t            'ss': [number + ' secondanim', number + ' second'],\n\t            'm': ['eka mintan', 'ek minute'],\n\t            'mm': [number + ' mintanim', number + ' mintam'],\n\t            'h': ['eka horan', 'ek hor'],\n\t            'hh': [number + ' horanim', number + ' horam'],\n\t            'd': ['eka disan', 'ek dis'],\n\t            'dd': [number + ' disanim', number + ' dis'],\n\t            'M': ['eka mhoinean', 'ek mhoino'],\n\t            'MM': [number + ' mhoineanim', number + ' mhoine'],\n\t            'y': ['eka vorsan', 'ek voros'],\n\t            'yy': [number + ' vorsanim', number + ' vorsam']\n\t        };\n\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t    }\n\t\n\t    var gomLatn = moment.defineLocale('gom-latn', {\n\t        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n\t        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n\t        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n\t        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'A h:mm [vazta]',\n\t            LTS : 'A h:mm:ss [vazta]',\n\t            L : 'DD-MM-YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY A h:mm [vazta]',\n\t            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n\t            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Aiz] LT',\n\t            nextDay: '[Faleam] LT',\n\t            nextWeek: '[Ieta to] dddd[,] LT',\n\t            lastDay: '[Kal] LT',\n\t            lastWeek: '[Fatlo] dddd[,] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s',\n\t            past : '%s adim',\n\t            s : processRelativeTime,\n\t            ss : processRelativeTime,\n\t            m : processRelativeTime,\n\t            mm : processRelativeTime,\n\t            h : processRelativeTime,\n\t            hh : processRelativeTime,\n\t            d : processRelativeTime,\n\t            dd : processRelativeTime,\n\t            M : processRelativeTime,\n\t            MM : processRelativeTime,\n\t            y : processRelativeTime,\n\t            yy : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                // the ordinal 'er' only applies to day of the month\n\t                case 'D':\n\t                    return number + 'er';\n\t                default:\n\t                case 'M':\n\t                case 'Q':\n\t                case 'DDD':\n\t                case 'd':\n\t                case 'w':\n\t                case 'W':\n\t                    return number;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        },\n\t        meridiemParse: /rati|sokalli|donparam|sanje/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'rati') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'sokalli') {\n\t                return hour;\n\t            } else if (meridiem === 'donparam') {\n\t                return hour > 12 ? hour : hour + 12;\n\t            } else if (meridiem === 'sanje') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'rati';\n\t            } else if (hour < 12) {\n\t                return 'sokalli';\n\t            } else if (hour < 16) {\n\t                return 'donparam';\n\t            } else if (hour < 20) {\n\t                return 'sanje';\n\t            } else {\n\t                return 'rati';\n\t            }\n\t        }\n\t    });\n\t\n\t    return gomLatn;\n\t\n\t})));\n\n\n/***/ },\n/* 324 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t            '1': '૧',\n\t            '2': '૨',\n\t            '3': '૩',\n\t            '4': '૪',\n\t            '5': '૫',\n\t            '6': '૬',\n\t            '7': '૭',\n\t            '8': '૮',\n\t            '9': '૯',\n\t            '0': '૦'\n\t        },\n\t        numberMap = {\n\t            '૧': '1',\n\t            '૨': '2',\n\t            '૩': '3',\n\t            '૪': '4',\n\t            '૫': '5',\n\t            '૬': '6',\n\t            '૭': '7',\n\t            '૮': '8',\n\t            '૯': '9',\n\t            '૦': '0'\n\t        };\n\t\n\t    var gu = moment.defineLocale('gu', {\n\t        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n\t        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n\t        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n\t        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n\t        longDateFormat: {\n\t            LT: 'A h:mm વાગ્યે',\n\t            LTS: 'A h:mm:ss વાગ્યે',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n\t            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n\t        },\n\t        calendar: {\n\t            sameDay: '[આજ] LT',\n\t            nextDay: '[કાલે] LT',\n\t            nextWeek: 'dddd, LT',\n\t            lastDay: '[ગઇકાલે] LT',\n\t            lastWeek: '[પાછલા] dddd, LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: '%s મા',\n\t            past: '%s પેહલા',\n\t            s: 'અમુક પળો',\n\t            ss: '%d સેકંડ',\n\t            m: 'એક મિનિટ',\n\t            mm: '%d મિનિટ',\n\t            h: 'એક કલાક',\n\t            hh: '%d કલાક',\n\t            d: 'એક દિવસ',\n\t            dd: '%d દિવસ',\n\t            M: 'એક મહિનો',\n\t            MM: '%d મહિનો',\n\t            y: 'એક વર્ષ',\n\t            yy: '%d વર્ષ'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n\t        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n\t        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'રાત') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'સવાર') {\n\t                return hour;\n\t            } else if (meridiem === 'બપોર') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'સાંજ') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem: function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'રાત';\n\t            } else if (hour < 10) {\n\t                return 'સવાર';\n\t            } else if (hour < 17) {\n\t                return 'બપોર';\n\t            } else if (hour < 20) {\n\t                return 'સાંજ';\n\t            } else {\n\t                return 'રાત';\n\t            }\n\t        },\n\t        week: {\n\t            dow: 0, // Sunday is the first day of the week.\n\t            doy: 6 // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return gu;\n\t\n\t})));\n\n\n/***/ },\n/* 325 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var he = moment.defineLocale('he', {\n\t        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n\t        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n\t        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n\t        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n\t        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [ב]MMMM YYYY',\n\t            LLL : 'D [ב]MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n\t            l : 'D/M/YYYY',\n\t            ll : 'D MMM YYYY',\n\t            lll : 'D MMM YYYY HH:mm',\n\t            llll : 'ddd, D MMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[היום ב־]LT',\n\t            nextDay : '[מחר ב־]LT',\n\t            nextWeek : 'dddd [בשעה] LT',\n\t            lastDay : '[אתמול ב־]LT',\n\t            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'בעוד %s',\n\t            past : 'לפני %s',\n\t            s : 'מספר שניות',\n\t            ss : '%d שניות',\n\t            m : 'דקה',\n\t            mm : '%d דקות',\n\t            h : 'שעה',\n\t            hh : function (number) {\n\t                if (number === 2) {\n\t                    return 'שעתיים';\n\t                }\n\t                return number + ' שעות';\n\t            },\n\t            d : 'יום',\n\t            dd : function (number) {\n\t                if (number === 2) {\n\t                    return 'יומיים';\n\t                }\n\t                return number + ' ימים';\n\t            },\n\t            M : 'חודש',\n\t            MM : function (number) {\n\t                if (number === 2) {\n\t                    return 'חודשיים';\n\t                }\n\t                return number + ' חודשים';\n\t            },\n\t            y : 'שנה',\n\t            yy : function (number) {\n\t                if (number === 2) {\n\t                    return 'שנתיים';\n\t                } else if (number % 10 === 0 && number !== 10) {\n\t                    return number + ' שנה';\n\t                }\n\t                return number + ' שנים';\n\t            }\n\t        },\n\t        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n\t        isPM : function (input) {\n\t            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 5) {\n\t                return 'לפנות בוקר';\n\t            } else if (hour < 10) {\n\t                return 'בבוקר';\n\t            } else if (hour < 12) {\n\t                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n\t            } else if (hour < 18) {\n\t                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n\t            } else {\n\t                return 'בערב';\n\t            }\n\t        }\n\t    });\n\t\n\t    return he;\n\t\n\t})));\n\n\n/***/ },\n/* 326 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '१',\n\t        '2': '२',\n\t        '3': '३',\n\t        '4': '४',\n\t        '5': '५',\n\t        '6': '६',\n\t        '7': '७',\n\t        '8': '८',\n\t        '9': '९',\n\t        '0': '०'\n\t    },\n\t    numberMap = {\n\t        '१': '1',\n\t        '२': '2',\n\t        '३': '3',\n\t        '४': '4',\n\t        '५': '5',\n\t        '६': '6',\n\t        '७': '7',\n\t        '८': '8',\n\t        '९': '9',\n\t        '०': '0'\n\t    };\n\t\n\t    var hi = moment.defineLocale('hi', {\n\t        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n\t        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n\t        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n\t        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm बजे',\n\t            LTS : 'A h:mm:ss बजे',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm बजे',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n\t        },\n\t        calendar : {\n\t            sameDay : '[आज] LT',\n\t            nextDay : '[कल] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[कल] LT',\n\t            lastWeek : '[पिछले] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s में',\n\t            past : '%s पहले',\n\t            s : 'कुछ ही क्षण',\n\t            ss : '%d सेकंड',\n\t            m : 'एक मिनट',\n\t            mm : '%d मिनट',\n\t            h : 'एक घंटा',\n\t            hh : '%d घंटे',\n\t            d : 'एक दिन',\n\t            dd : '%d दिन',\n\t            M : 'एक महीने',\n\t            MM : '%d महीने',\n\t            y : 'एक वर्ष',\n\t            yy : '%d वर्ष'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n\t        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n\t        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'रात') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'सुबह') {\n\t                return hour;\n\t            } else if (meridiem === 'दोपहर') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'शाम') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'रात';\n\t            } else if (hour < 10) {\n\t                return 'सुबह';\n\t            } else if (hour < 17) {\n\t                return 'दोपहर';\n\t            } else if (hour < 20) {\n\t                return 'शाम';\n\t            } else {\n\t                return 'रात';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return hi;\n\t\n\t})));\n\n\n/***/ },\n/* 327 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function translate(number, withoutSuffix, key) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 'ss':\n\t                if (number === 1) {\n\t                    result += 'sekunda';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'sekunde';\n\t                } else {\n\t                    result += 'sekundi';\n\t                }\n\t                return result;\n\t            case 'm':\n\t                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\t            case 'mm':\n\t                if (number === 1) {\n\t                    result += 'minuta';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'minute';\n\t                } else {\n\t                    result += 'minuta';\n\t                }\n\t                return result;\n\t            case 'h':\n\t                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\t            case 'hh':\n\t                if (number === 1) {\n\t                    result += 'sat';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'sata';\n\t                } else {\n\t                    result += 'sati';\n\t                }\n\t                return result;\n\t            case 'dd':\n\t                if (number === 1) {\n\t                    result += 'dan';\n\t                } else {\n\t                    result += 'dana';\n\t                }\n\t                return result;\n\t            case 'MM':\n\t                if (number === 1) {\n\t                    result += 'mjesec';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'mjeseca';\n\t                } else {\n\t                    result += 'mjeseci';\n\t                }\n\t                return result;\n\t            case 'yy':\n\t                if (number === 1) {\n\t                    result += 'godina';\n\t                } else if (number === 2 || number === 3 || number === 4) {\n\t                    result += 'godine';\n\t                } else {\n\t                    result += 'godina';\n\t                }\n\t                return result;\n\t        }\n\t    }\n\t\n\t    var hr = moment.defineLocale('hr', {\n\t        months : {\n\t            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n\t            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n\t        },\n\t        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay  : '[danas u] LT',\n\t            nextDay  : '[sutra u] LT',\n\t            nextWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[u] [nedjelju] [u] LT';\n\t                    case 3:\n\t                        return '[u] [srijedu] [u] LT';\n\t                    case 6:\n\t                        return '[u] [subotu] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[u] dddd [u] LT';\n\t                }\n\t            },\n\t            lastDay  : '[jučer u] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                        return '[prošlu] dddd [u] LT';\n\t                    case 6:\n\t                        return '[prošle] [subote] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[prošli] dddd [u] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past   : 'prije %s',\n\t            s      : 'par sekundi',\n\t            ss     : translate,\n\t            m      : translate,\n\t            mm     : translate,\n\t            h      : translate,\n\t            hh     : translate,\n\t            d      : 'dan',\n\t            dd     : translate,\n\t            M      : 'mjesec',\n\t            MM     : translate,\n\t            y      : 'godinu',\n\t            yy     : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return hr;\n\t\n\t})));\n\n\n/***/ },\n/* 328 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var num = number;\n\t        switch (key) {\n\t            case 's':\n\t                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n\t            case 'ss':\n\t                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n\t            case 'm':\n\t                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\t            case 'mm':\n\t                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\t            case 'h':\n\t                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\t            case 'hh':\n\t                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\t            case 'd':\n\t                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\t            case 'dd':\n\t                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\t            case 'M':\n\t                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\t            case 'MM':\n\t                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\t            case 'y':\n\t                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n\t            case 'yy':\n\t                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n\t        }\n\t        return '';\n\t    }\n\t    function week(isFuture) {\n\t        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n\t    }\n\t\n\t    var hu = moment.defineLocale('hu', {\n\t        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n\t        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n\t        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n\t        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n\t        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'YYYY.MM.DD.',\n\t            LL : 'YYYY. MMMM D.',\n\t            LLL : 'YYYY. MMMM D. H:mm',\n\t            LLLL : 'YYYY. MMMM D., dddd H:mm'\n\t        },\n\t        meridiemParse: /de|du/i,\n\t        isPM: function (input) {\n\t            return input.charAt(1).toLowerCase() === 'u';\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 12) {\n\t                return isLower === true ? 'de' : 'DE';\n\t            } else {\n\t                return isLower === true ? 'du' : 'DU';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[ma] LT[-kor]',\n\t            nextDay : '[holnap] LT[-kor]',\n\t            nextWeek : function () {\n\t                return week.call(this, true);\n\t            },\n\t            lastDay : '[tegnap] LT[-kor]',\n\t            lastWeek : function () {\n\t                return week.call(this, false);\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s múlva',\n\t            past : '%s',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return hu;\n\t\n\t})));\n\n\n/***/ },\n/* 329 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var hyAm = moment.defineLocale('hy-am', {\n\t        months : {\n\t            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n\t            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n\t        },\n\t        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n\t        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n\t        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n\t        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY թ.',\n\t            LLL : 'D MMMM YYYY թ., HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[այսօր] LT',\n\t            nextDay: '[վաղը] LT',\n\t            lastDay: '[երեկ] LT',\n\t            nextWeek: function () {\n\t                return 'dddd [օրը ժամը] LT';\n\t            },\n\t            lastWeek: function () {\n\t                return '[անցած] dddd [օրը ժամը] LT';\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s հետո',\n\t            past : '%s առաջ',\n\t            s : 'մի քանի վայրկյան',\n\t            ss : '%d վայրկյան',\n\t            m : 'րոպե',\n\t            mm : '%d րոպե',\n\t            h : 'ժամ',\n\t            hh : '%d ժամ',\n\t            d : 'օր',\n\t            dd : '%d օր',\n\t            M : 'ամիս',\n\t            MM : '%d ամիս',\n\t            y : 'տարի',\n\t            yy : '%d տարի'\n\t        },\n\t        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n\t        isPM: function (input) {\n\t            return /^(ցերեկվա|երեկոյան)$/.test(input);\n\t        },\n\t        meridiem : function (hour) {\n\t            if (hour < 4) {\n\t                return 'գիշերվա';\n\t            } else if (hour < 12) {\n\t                return 'առավոտվա';\n\t            } else if (hour < 17) {\n\t                return 'ցերեկվա';\n\t            } else {\n\t                return 'երեկոյան';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'DDD':\n\t                case 'w':\n\t                case 'W':\n\t                case 'DDDo':\n\t                    if (number === 1) {\n\t                        return number + '-ին';\n\t                    }\n\t                    return number + '-րդ';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return hyAm;\n\t\n\t})));\n\n\n/***/ },\n/* 330 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var id = moment.defineLocale('id', {\n\t        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n\t        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n\t        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n\t        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t        },\n\t        meridiemParse: /pagi|siang|sore|malam/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'pagi') {\n\t                return hour;\n\t            } else if (meridiem === 'siang') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'sore' || meridiem === 'malam') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 11) {\n\t                return 'pagi';\n\t            } else if (hours < 15) {\n\t                return 'siang';\n\t            } else if (hours < 19) {\n\t                return 'sore';\n\t            } else {\n\t                return 'malam';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Hari ini pukul] LT',\n\t            nextDay : '[Besok pukul] LT',\n\t            nextWeek : 'dddd [pukul] LT',\n\t            lastDay : '[Kemarin pukul] LT',\n\t            lastWeek : 'dddd [lalu pukul] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dalam %s',\n\t            past : '%s yang lalu',\n\t            s : 'beberapa detik',\n\t            ss : '%d detik',\n\t            m : 'semenit',\n\t            mm : '%d menit',\n\t            h : 'sejam',\n\t            hh : '%d jam',\n\t            d : 'sehari',\n\t            dd : '%d hari',\n\t            M : 'sebulan',\n\t            MM : '%d bulan',\n\t            y : 'setahun',\n\t            yy : '%d tahun'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return id;\n\t\n\t})));\n\n\n/***/ },\n/* 331 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function plural(n) {\n\t        if (n % 100 === 11) {\n\t            return true;\n\t        } else if (n % 10 === 1) {\n\t            return false;\n\t        }\n\t        return true;\n\t    }\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 's':\n\t                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n\t            case 'ss':\n\t                if (plural(number)) {\n\t                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n\t                }\n\t                return result + 'sekúnda';\n\t            case 'm':\n\t                return withoutSuffix ? 'mínúta' : 'mínútu';\n\t            case 'mm':\n\t                if (plural(number)) {\n\t                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n\t                } else if (withoutSuffix) {\n\t                    return result + 'mínúta';\n\t                }\n\t                return result + 'mínútu';\n\t            case 'hh':\n\t                if (plural(number)) {\n\t                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n\t                }\n\t                return result + 'klukkustund';\n\t            case 'd':\n\t                if (withoutSuffix) {\n\t                    return 'dagur';\n\t                }\n\t                return isFuture ? 'dag' : 'degi';\n\t            case 'dd':\n\t                if (plural(number)) {\n\t                    if (withoutSuffix) {\n\t                        return result + 'dagar';\n\t                    }\n\t                    return result + (isFuture ? 'daga' : 'dögum');\n\t                } else if (withoutSuffix) {\n\t                    return result + 'dagur';\n\t                }\n\t                return result + (isFuture ? 'dag' : 'degi');\n\t            case 'M':\n\t                if (withoutSuffix) {\n\t                    return 'mánuður';\n\t                }\n\t                return isFuture ? 'mánuð' : 'mánuði';\n\t            case 'MM':\n\t                if (plural(number)) {\n\t                    if (withoutSuffix) {\n\t                        return result + 'mánuðir';\n\t                    }\n\t                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n\t                } else if (withoutSuffix) {\n\t                    return result + 'mánuður';\n\t                }\n\t                return result + (isFuture ? 'mánuð' : 'mánuði');\n\t            case 'y':\n\t                return withoutSuffix || isFuture ? 'ár' : 'ári';\n\t            case 'yy':\n\t                if (plural(number)) {\n\t                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n\t                }\n\t                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n\t        }\n\t    }\n\t\n\t    var is = moment.defineLocale('is', {\n\t        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n\t        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n\t        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n\t        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY [kl.] H:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[í dag kl.] LT',\n\t            nextDay : '[á morgun kl.] LT',\n\t            nextWeek : 'dddd [kl.] LT',\n\t            lastDay : '[í gær kl.] LT',\n\t            lastWeek : '[síðasta] dddd [kl.] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'eftir %s',\n\t            past : 'fyrir %s síðan',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : 'klukkustund',\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return is;\n\t\n\t})));\n\n\n/***/ },\n/* 332 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var it = moment.defineLocale('it', {\n\t        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n\t        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n\t        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n\t        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n\t        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Oggi alle] LT',\n\t            nextDay: '[Domani alle] LT',\n\t            nextWeek: 'dddd [alle] LT',\n\t            lastDay: '[Ieri alle] LT',\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[la scorsa] dddd [alle] LT';\n\t                    default:\n\t                        return '[lo scorso] dddd [alle] LT';\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : function (s) {\n\t                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n\t            },\n\t            past : '%s fa',\n\t            s : 'alcuni secondi',\n\t            ss : '%d secondi',\n\t            m : 'un minuto',\n\t            mm : '%d minuti',\n\t            h : 'un\\'ora',\n\t            hh : '%d ore',\n\t            d : 'un giorno',\n\t            dd : '%d giorni',\n\t            M : 'un mese',\n\t            MM : '%d mesi',\n\t            y : 'un anno',\n\t            yy : '%d anni'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal: '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return it;\n\t\n\t})));\n\n\n/***/ },\n/* 333 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ja = moment.defineLocale('ja', {\n\t        months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n\t        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n\t        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY/MM/DD',\n\t            LL : 'YYYY年M月D日',\n\t            LLL : 'YYYY年M月D日 HH:mm',\n\t            LLLL : 'YYYY年M月D日 dddd HH:mm',\n\t            l : 'YYYY/MM/DD',\n\t            ll : 'YYYY年M月D日',\n\t            lll : 'YYYY年M月D日 HH:mm',\n\t            llll : 'YYYY年M月D日(ddd) HH:mm'\n\t        },\n\t        meridiemParse: /午前|午後/i,\n\t        isPM : function (input) {\n\t            return input === '午後';\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return '午前';\n\t            } else {\n\t                return '午後';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[今日] LT',\n\t            nextDay : '[明日] LT',\n\t            nextWeek : function (now) {\n\t                if (now.week() < this.week()) {\n\t                    return '[来週]dddd LT';\n\t                } else {\n\t                    return 'dddd LT';\n\t                }\n\t            },\n\t            lastDay : '[昨日] LT',\n\t            lastWeek : function (now) {\n\t                if (this.week() < now.week()) {\n\t                    return '[先週]dddd LT';\n\t                } else {\n\t                    return 'dddd LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'DDD':\n\t                    return number + '日';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        relativeTime : {\n\t            future : '%s後',\n\t            past : '%s前',\n\t            s : '数秒',\n\t            ss : '%d秒',\n\t            m : '1分',\n\t            mm : '%d分',\n\t            h : '1時間',\n\t            hh : '%d時間',\n\t            d : '1日',\n\t            dd : '%d日',\n\t            M : '1ヶ月',\n\t            MM : '%dヶ月',\n\t            y : '1年',\n\t            yy : '%d年'\n\t        }\n\t    });\n\t\n\t    return ja;\n\t\n\t})));\n\n\n/***/ },\n/* 334 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var jv = moment.defineLocale('jv', {\n\t        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n\t        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n\t        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n\t        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t        },\n\t        meridiemParse: /enjing|siyang|sonten|ndalu/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'enjing') {\n\t                return hour;\n\t            } else if (meridiem === 'siyang') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 11) {\n\t                return 'enjing';\n\t            } else if (hours < 15) {\n\t                return 'siyang';\n\t            } else if (hours < 19) {\n\t                return 'sonten';\n\t            } else {\n\t                return 'ndalu';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Dinten puniko pukul] LT',\n\t            nextDay : '[Mbenjang pukul] LT',\n\t            nextWeek : 'dddd [pukul] LT',\n\t            lastDay : '[Kala wingi pukul] LT',\n\t            lastWeek : 'dddd [kepengker pukul] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'wonten ing %s',\n\t            past : '%s ingkang kepengker',\n\t            s : 'sawetawis detik',\n\t            ss : '%d detik',\n\t            m : 'setunggal menit',\n\t            mm : '%d menit',\n\t            h : 'setunggal jam',\n\t            hh : '%d jam',\n\t            d : 'sedinten',\n\t            dd : '%d dinten',\n\t            M : 'sewulan',\n\t            MM : '%d wulan',\n\t            y : 'setaun',\n\t            yy : '%d taun'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return jv;\n\t\n\t})));\n\n\n/***/ },\n/* 335 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ka = moment.defineLocale('ka', {\n\t        months : {\n\t            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n\t            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n\t        },\n\t        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n\t        weekdays : {\n\t            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n\t            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n\t            isFormat: /(წინა|შემდეგ)/\n\t        },\n\t        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n\t        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[დღეს] LT[-ზე]',\n\t            nextDay : '[ხვალ] LT[-ზე]',\n\t            lastDay : '[გუშინ] LT[-ზე]',\n\t            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n\t            lastWeek : '[წინა] dddd LT-ზე',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : function (s) {\n\t                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n\t                    s.replace(/ი$/, 'ში') :\n\t                    s + 'ში';\n\t            },\n\t            past : function (s) {\n\t                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n\t                    return s.replace(/(ი|ე)$/, 'ის წინ');\n\t                }\n\t                if ((/წელი/).test(s)) {\n\t                    return s.replace(/წელი$/, 'წლის წინ');\n\t                }\n\t            },\n\t            s : 'რამდენიმე წამი',\n\t            ss : '%d წამი',\n\t            m : 'წუთი',\n\t            mm : '%d წუთი',\n\t            h : 'საათი',\n\t            hh : '%d საათი',\n\t            d : 'დღე',\n\t            dd : '%d დღე',\n\t            M : 'თვე',\n\t            MM : '%d თვე',\n\t            y : 'წელი',\n\t            yy : '%d წელი'\n\t        },\n\t        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n\t        ordinal : function (number) {\n\t            if (number === 0) {\n\t                return number;\n\t            }\n\t            if (number === 1) {\n\t                return number + '-ლი';\n\t            }\n\t            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n\t                return 'მე-' + number;\n\t            }\n\t            return number + '-ე';\n\t        },\n\t        week : {\n\t            dow : 1,\n\t            doy : 7\n\t        }\n\t    });\n\t\n\t    return ka;\n\t\n\t})));\n\n\n/***/ },\n/* 336 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var suffixes = {\n\t        0: '-ші',\n\t        1: '-ші',\n\t        2: '-ші',\n\t        3: '-ші',\n\t        4: '-ші',\n\t        5: '-ші',\n\t        6: '-шы',\n\t        7: '-ші',\n\t        8: '-ші',\n\t        9: '-шы',\n\t        10: '-шы',\n\t        20: '-шы',\n\t        30: '-шы',\n\t        40: '-шы',\n\t        50: '-ші',\n\t        60: '-шы',\n\t        70: '-ші',\n\t        80: '-ші',\n\t        90: '-шы',\n\t        100: '-ші'\n\t    };\n\t\n\t    var kk = moment.defineLocale('kk', {\n\t        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n\t        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n\t        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n\t        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n\t        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Бүгін сағат] LT',\n\t            nextDay : '[Ертең сағат] LT',\n\t            nextWeek : 'dddd [сағат] LT',\n\t            lastDay : '[Кеше сағат] LT',\n\t            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s ішінде',\n\t            past : '%s бұрын',\n\t            s : 'бірнеше секунд',\n\t            ss : '%d секунд',\n\t            m : 'бір минут',\n\t            mm : '%d минут',\n\t            h : 'бір сағат',\n\t            hh : '%d сағат',\n\t            d : 'бір күн',\n\t            dd : '%d күн',\n\t            M : 'бір ай',\n\t            MM : '%d ай',\n\t            y : 'бір жыл',\n\t            yy : '%d жыл'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n\t        ordinal : function (number) {\n\t            var a = number % 10,\n\t                b = number >= 100 ? 100 : null;\n\t            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return kk;\n\t\n\t})));\n\n\n/***/ },\n/* 337 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '១',\n\t        '2': '២',\n\t        '3': '៣',\n\t        '4': '៤',\n\t        '5': '៥',\n\t        '6': '៦',\n\t        '7': '៧',\n\t        '8': '៨',\n\t        '9': '៩',\n\t        '0': '០'\n\t    }, numberMap = {\n\t        '១': '1',\n\t        '២': '2',\n\t        '៣': '3',\n\t        '៤': '4',\n\t        '៥': '5',\n\t        '៦': '6',\n\t        '៧': '7',\n\t        '៨': '8',\n\t        '៩': '9',\n\t        '០': '0'\n\t    };\n\t\n\t    var km = moment.defineLocale('km', {\n\t        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n\t            '_'\n\t        ),\n\t        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n\t            '_'\n\t        ),\n\t        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n\t        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n\t        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n\t        weekdaysParseExact: true,\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY HH:mm',\n\t            LLLL: 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /ព្រឹក|ល្ងាច/,\n\t        isPM: function (input) {\n\t            return input === 'ល្ងាច';\n\t        },\n\t        meridiem: function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ព្រឹក';\n\t            } else {\n\t                return 'ល្ងាច';\n\t            }\n\t        },\n\t        calendar: {\n\t            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n\t            nextDay: '[ស្អែក ម៉ោង] LT',\n\t            nextWeek: 'dddd [ម៉ោង] LT',\n\t            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n\t            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: '%sទៀត',\n\t            past: '%sមុន',\n\t            s: 'ប៉ុន្មានវិនាទី',\n\t            ss: '%d វិនាទី',\n\t            m: 'មួយនាទី',\n\t            mm: '%d នាទី',\n\t            h: 'មួយម៉ោង',\n\t            hh: '%d ម៉ោង',\n\t            d: 'មួយថ្ងៃ',\n\t            dd: '%d ថ្ងៃ',\n\t            M: 'មួយខែ',\n\t            MM: '%d ខែ',\n\t            y: 'មួយឆ្នាំ',\n\t            yy: '%d ឆ្នាំ'\n\t        },\n\t        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n\t        ordinal : 'ទី%d',\n\t        preparse: function (string) {\n\t            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        week: {\n\t            dow: 1, // Monday is the first day of the week.\n\t            doy: 4 // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return km;\n\t\n\t})));\n\n\n/***/ },\n/* 338 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '೧',\n\t        '2': '೨',\n\t        '3': '೩',\n\t        '4': '೪',\n\t        '5': '೫',\n\t        '6': '೬',\n\t        '7': '೭',\n\t        '8': '೮',\n\t        '9': '೯',\n\t        '0': '೦'\n\t    },\n\t    numberMap = {\n\t        '೧': '1',\n\t        '೨': '2',\n\t        '೩': '3',\n\t        '೪': '4',\n\t        '೫': '5',\n\t        '೬': '6',\n\t        '೭': '7',\n\t        '೮': '8',\n\t        '೯': '9',\n\t        '೦': '0'\n\t    };\n\t\n\t    var kn = moment.defineLocale('kn', {\n\t        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n\t        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n\t        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n\t        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm',\n\t            LTS : 'A h:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[ಇಂದು] LT',\n\t            nextDay : '[ನಾಳೆ] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[ನಿನ್ನೆ] LT',\n\t            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s ನಂತರ',\n\t            past : '%s ಹಿಂದೆ',\n\t            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n\t            ss : '%d ಸೆಕೆಂಡುಗಳು',\n\t            m : 'ಒಂದು ನಿಮಿಷ',\n\t            mm : '%d ನಿಮಿಷ',\n\t            h : 'ಒಂದು ಗಂಟೆ',\n\t            hh : '%d ಗಂಟೆ',\n\t            d : 'ಒಂದು ದಿನ',\n\t            dd : '%d ದಿನ',\n\t            M : 'ಒಂದು ತಿಂಗಳು',\n\t            MM : '%d ತಿಂಗಳು',\n\t            y : 'ಒಂದು ವರ್ಷ',\n\t            yy : '%d ವರ್ಷ'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'ರಾತ್ರಿ') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n\t                return hour;\n\t            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'ಸಂಜೆ') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'ರಾತ್ರಿ';\n\t            } else if (hour < 10) {\n\t                return 'ಬೆಳಿಗ್ಗೆ';\n\t            } else if (hour < 17) {\n\t                return 'ಮಧ್ಯಾಹ್ನ';\n\t            } else if (hour < 20) {\n\t                return 'ಸಂಜೆ';\n\t            } else {\n\t                return 'ರಾತ್ರಿ';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n\t        ordinal : function (number) {\n\t            return number + 'ನೇ';\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return kn;\n\t\n\t})));\n\n\n/***/ },\n/* 339 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ko = moment.defineLocale('ko', {\n\t        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n\t        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n\t        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n\t        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n\t        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm',\n\t            LTS : 'A h:mm:ss',\n\t            L : 'YYYY.MM.DD.',\n\t            LL : 'YYYY년 MMMM D일',\n\t            LLL : 'YYYY년 MMMM D일 A h:mm',\n\t            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n\t            l : 'YYYY.MM.DD.',\n\t            ll : 'YYYY년 MMMM D일',\n\t            lll : 'YYYY년 MMMM D일 A h:mm',\n\t            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '오늘 LT',\n\t            nextDay : '내일 LT',\n\t            nextWeek : 'dddd LT',\n\t            lastDay : '어제 LT',\n\t            lastWeek : '지난주 dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s 후',\n\t            past : '%s 전',\n\t            s : '몇 초',\n\t            ss : '%d초',\n\t            m : '1분',\n\t            mm : '%d분',\n\t            h : '한 시간',\n\t            hh : '%d시간',\n\t            d : '하루',\n\t            dd : '%d일',\n\t            M : '한 달',\n\t            MM : '%d달',\n\t            y : '일 년',\n\t            yy : '%d년'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'DDD':\n\t                    return number + '일';\n\t                case 'M':\n\t                    return number + '월';\n\t                case 'w':\n\t                case 'W':\n\t                    return number + '주';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        meridiemParse : /오전|오후/,\n\t        isPM : function (token) {\n\t            return token === '오후';\n\t        },\n\t        meridiem : function (hour, minute, isUpper) {\n\t            return hour < 12 ? '오전' : '오후';\n\t        }\n\t    });\n\t\n\t    return ko;\n\t\n\t})));\n\n\n/***/ },\n/* 340 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var suffixes = {\n\t        0: '-чү',\n\t        1: '-чи',\n\t        2: '-чи',\n\t        3: '-чү',\n\t        4: '-чү',\n\t        5: '-чи',\n\t        6: '-чы',\n\t        7: '-чи',\n\t        8: '-чи',\n\t        9: '-чу',\n\t        10: '-чу',\n\t        20: '-чы',\n\t        30: '-чу',\n\t        40: '-чы',\n\t        50: '-чү',\n\t        60: '-чы',\n\t        70: '-чи',\n\t        80: '-чи',\n\t        90: '-чу',\n\t        100: '-чү'\n\t    };\n\t\n\t    var ky = moment.defineLocale('ky', {\n\t        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n\t        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n\t        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n\t        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n\t        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Бүгүн саат] LT',\n\t            nextDay : '[Эртең саат] LT',\n\t            nextWeek : 'dddd [саат] LT',\n\t            lastDay : '[Кече саат] LT',\n\t            lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s ичинде',\n\t            past : '%s мурун',\n\t            s : 'бирнече секунд',\n\t            ss : '%d секунд',\n\t            m : 'бир мүнөт',\n\t            mm : '%d мүнөт',\n\t            h : 'бир саат',\n\t            hh : '%d саат',\n\t            d : 'бир күн',\n\t            dd : '%d күн',\n\t            M : 'бир ай',\n\t            MM : '%d ай',\n\t            y : 'бир жыл',\n\t            yy : '%d жыл'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n\t        ordinal : function (number) {\n\t            var a = number % 10,\n\t                b = number >= 100 ? 100 : null;\n\t            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ky;\n\t\n\t})));\n\n\n/***/ },\n/* 341 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            'm': ['eng Minutt', 'enger Minutt'],\n\t            'h': ['eng Stonn', 'enger Stonn'],\n\t            'd': ['een Dag', 'engem Dag'],\n\t            'M': ['ee Mount', 'engem Mount'],\n\t            'y': ['ee Joer', 'engem Joer']\n\t        };\n\t        return withoutSuffix ? format[key][0] : format[key][1];\n\t    }\n\t    function processFutureTime(string) {\n\t        var number = string.substr(0, string.indexOf(' '));\n\t        if (eifelerRegelAppliesToNumber(number)) {\n\t            return 'a ' + string;\n\t        }\n\t        return 'an ' + string;\n\t    }\n\t    function processPastTime(string) {\n\t        var number = string.substr(0, string.indexOf(' '));\n\t        if (eifelerRegelAppliesToNumber(number)) {\n\t            return 'viru ' + string;\n\t        }\n\t        return 'virun ' + string;\n\t    }\n\t    /**\n\t     * Returns true if the word before the given number loses the '-n' ending.\n\t     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n\t     *\n\t     * @param number {integer}\n\t     * @returns {boolean}\n\t     */\n\t    function eifelerRegelAppliesToNumber(number) {\n\t        number = parseInt(number, 10);\n\t        if (isNaN(number)) {\n\t            return false;\n\t        }\n\t        if (number < 0) {\n\t            // Negative Number --> always true\n\t            return true;\n\t        } else if (number < 10) {\n\t            // Only 1 digit\n\t            if (4 <= number && number <= 7) {\n\t                return true;\n\t            }\n\t            return false;\n\t        } else if (number < 100) {\n\t            // 2 digits\n\t            var lastDigit = number % 10, firstDigit = number / 10;\n\t            if (lastDigit === 0) {\n\t                return eifelerRegelAppliesToNumber(firstDigit);\n\t            }\n\t            return eifelerRegelAppliesToNumber(lastDigit);\n\t        } else if (number < 10000) {\n\t            // 3 or 4 digits --> recursively check first digit\n\t            while (number >= 10) {\n\t                number = number / 10;\n\t            }\n\t            return eifelerRegelAppliesToNumber(number);\n\t        } else {\n\t            // Anything larger than 4 digits: recursively check first n-3 digits\n\t            number = number / 1000;\n\t            return eifelerRegelAppliesToNumber(number);\n\t        }\n\t    }\n\t\n\t    var lb = moment.defineLocale('lb', {\n\t        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n\t        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n\t        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n\t        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat: {\n\t            LT: 'H:mm [Auer]',\n\t            LTS: 'H:mm:ss [Auer]',\n\t            L: 'DD.MM.YYYY',\n\t            LL: 'D. MMMM YYYY',\n\t            LLL: 'D. MMMM YYYY H:mm [Auer]',\n\t            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n\t        },\n\t        calendar: {\n\t            sameDay: '[Haut um] LT',\n\t            sameElse: 'L',\n\t            nextDay: '[Muer um] LT',\n\t            nextWeek: 'dddd [um] LT',\n\t            lastDay: '[Gëschter um] LT',\n\t            lastWeek: function () {\n\t                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n\t                switch (this.day()) {\n\t                    case 2:\n\t                    case 4:\n\t                        return '[Leschten] dddd [um] LT';\n\t                    default:\n\t                        return '[Leschte] dddd [um] LT';\n\t                }\n\t            }\n\t        },\n\t        relativeTime : {\n\t            future : processFutureTime,\n\t            past : processPastTime,\n\t            s : 'e puer Sekonnen',\n\t            ss : '%d Sekonnen',\n\t            m : processRelativeTime,\n\t            mm : '%d Minutten',\n\t            h : processRelativeTime,\n\t            hh : '%d Stonnen',\n\t            d : processRelativeTime,\n\t            dd : '%d Deeg',\n\t            M : processRelativeTime,\n\t            MM : '%d Méint',\n\t            y : processRelativeTime,\n\t            yy : '%d Joer'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal: '%d.',\n\t        week: {\n\t            dow: 1, // Monday is the first day of the week.\n\t            doy: 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return lb;\n\t\n\t})));\n\n\n/***/ },\n/* 342 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var lo = moment.defineLocale('lo', {\n\t        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n\t        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n\t        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n\t        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n\t        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n\t        isPM: function (input) {\n\t            return input === 'ຕອນແລງ';\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ຕອນເຊົ້າ';\n\t            } else {\n\t                return 'ຕອນແລງ';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[ມື້ນີ້ເວລາ] LT',\n\t            nextDay : '[ມື້ອື່ນເວລາ] LT',\n\t            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n\t            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n\t            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'ອີກ %s',\n\t            past : '%sຜ່ານມາ',\n\t            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n\t            ss : '%d ວິນາທີ' ,\n\t            m : '1 ນາທີ',\n\t            mm : '%d ນາທີ',\n\t            h : '1 ຊົ່ວໂມງ',\n\t            hh : '%d ຊົ່ວໂມງ',\n\t            d : '1 ມື້',\n\t            dd : '%d ມື້',\n\t            M : '1 ເດືອນ',\n\t            MM : '%d ເດືອນ',\n\t            y : '1 ປີ',\n\t            yy : '%d ປີ'\n\t        },\n\t        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n\t        ordinal : function (number) {\n\t            return 'ທີ່' + number;\n\t        }\n\t    });\n\t\n\t    return lo;\n\t\n\t})));\n\n\n/***/ },\n/* 343 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var units = {\n\t        'ss' : 'sekundė_sekundžių_sekundes',\n\t        'm' : 'minutė_minutės_minutę',\n\t        'mm': 'minutės_minučių_minutes',\n\t        'h' : 'valanda_valandos_valandą',\n\t        'hh': 'valandos_valandų_valandas',\n\t        'd' : 'diena_dienos_dieną',\n\t        'dd': 'dienos_dienų_dienas',\n\t        'M' : 'mėnuo_mėnesio_mėnesį',\n\t        'MM': 'mėnesiai_mėnesių_mėnesius',\n\t        'y' : 'metai_metų_metus',\n\t        'yy': 'metai_metų_metus'\n\t    };\n\t    function translateSeconds(number, withoutSuffix, key, isFuture) {\n\t        if (withoutSuffix) {\n\t            return 'kelios sekundės';\n\t        } else {\n\t            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n\t        }\n\t    }\n\t    function translateSingular(number, withoutSuffix, key, isFuture) {\n\t        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n\t    }\n\t    function special(number) {\n\t        return number % 10 === 0 || (number > 10 && number < 20);\n\t    }\n\t    function forms(key) {\n\t        return units[key].split('_');\n\t    }\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var result = number + ' ';\n\t        if (number === 1) {\n\t            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n\t        } else if (withoutSuffix) {\n\t            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n\t        } else {\n\t            if (isFuture) {\n\t                return result + forms(key)[1];\n\t            } else {\n\t                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n\t            }\n\t        }\n\t    }\n\t    var lt = moment.defineLocale('lt', {\n\t        months : {\n\t            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n\t            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n\t            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n\t        },\n\t        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n\t        weekdays : {\n\t            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n\t            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n\t            isFormat: /dddd HH:mm/\n\t        },\n\t        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n\t        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'YYYY [m.] MMMM D [d.]',\n\t            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n\t            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n\t            l : 'YYYY-MM-DD',\n\t            ll : 'YYYY [m.] MMMM D [d.]',\n\t            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n\t            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Šiandien] LT',\n\t            nextDay : '[Rytoj] LT',\n\t            nextWeek : 'dddd LT',\n\t            lastDay : '[Vakar] LT',\n\t            lastWeek : '[Praėjusį] dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'po %s',\n\t            past : 'prieš %s',\n\t            s : translateSeconds,\n\t            ss : translate,\n\t            m : translateSingular,\n\t            mm : translate,\n\t            h : translateSingular,\n\t            hh : translate,\n\t            d : translateSingular,\n\t            dd : translate,\n\t            M : translateSingular,\n\t            MM : translate,\n\t            y : translateSingular,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n\t        ordinal : function (number) {\n\t            return number + '-oji';\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return lt;\n\t\n\t})));\n\n\n/***/ },\n/* 344 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var units = {\n\t        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n\t        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n\t        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n\t        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n\t        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n\t        'd': 'dienas_dienām_diena_dienas'.split('_'),\n\t        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n\t        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n\t        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n\t        'y': 'gada_gadiem_gads_gadi'.split('_'),\n\t        'yy': 'gada_gadiem_gads_gadi'.split('_')\n\t    };\n\t    /**\n\t     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n\t     */\n\t    function format(forms, number, withoutSuffix) {\n\t        if (withoutSuffix) {\n\t            // E.g. \"21 minūte\", \"3 minūtes\".\n\t            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n\t        } else {\n\t            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n\t            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n\t            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n\t        }\n\t    }\n\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t        return number + ' ' + format(units[key], number, withoutSuffix);\n\t    }\n\t    function relativeTimeWithSingular(number, withoutSuffix, key) {\n\t        return format(units[key], number, withoutSuffix);\n\t    }\n\t    function relativeSeconds(number, withoutSuffix) {\n\t        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n\t    }\n\t\n\t    var lv = moment.defineLocale('lv', {\n\t        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n\t        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n\t        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n\t        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY.',\n\t            LL : 'YYYY. [gada] D. MMMM',\n\t            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n\t            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Šodien pulksten] LT',\n\t            nextDay : '[Rīt pulksten] LT',\n\t            nextWeek : 'dddd [pulksten] LT',\n\t            lastDay : '[Vakar pulksten] LT',\n\t            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'pēc %s',\n\t            past : 'pirms %s',\n\t            s : relativeSeconds,\n\t            ss : relativeTimeWithPlural,\n\t            m : relativeTimeWithSingular,\n\t            mm : relativeTimeWithPlural,\n\t            h : relativeTimeWithSingular,\n\t            hh : relativeTimeWithPlural,\n\t            d : relativeTimeWithSingular,\n\t            dd : relativeTimeWithPlural,\n\t            M : relativeTimeWithSingular,\n\t            MM : relativeTimeWithPlural,\n\t            y : relativeTimeWithSingular,\n\t            yy : relativeTimeWithPlural\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return lv;\n\t\n\t})));\n\n\n/***/ },\n/* 345 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var translator = {\n\t        words: { //Different grammatical cases\n\t            ss: ['sekund', 'sekunda', 'sekundi'],\n\t            m: ['jedan minut', 'jednog minuta'],\n\t            mm: ['minut', 'minuta', 'minuta'],\n\t            h: ['jedan sat', 'jednog sata'],\n\t            hh: ['sat', 'sata', 'sati'],\n\t            dd: ['dan', 'dana', 'dana'],\n\t            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n\t            yy: ['godina', 'godine', 'godina']\n\t        },\n\t        correctGrammaticalCase: function (number, wordKey) {\n\t            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t        },\n\t        translate: function (number, withoutSuffix, key) {\n\t            var wordKey = translator.words[key];\n\t            if (key.length === 1) {\n\t                return withoutSuffix ? wordKey[0] : wordKey[1];\n\t            } else {\n\t                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t            }\n\t        }\n\t    };\n\t\n\t    var me = moment.defineLocale('me', {\n\t        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n\t        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n\t        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n\t        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat: {\n\t            LT: 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L: 'DD.MM.YYYY',\n\t            LL: 'D. MMMM YYYY',\n\t            LLL: 'D. MMMM YYYY H:mm',\n\t            LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[danas u] LT',\n\t            nextDay: '[sjutra u] LT',\n\t\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[u] [nedjelju] [u] LT';\n\t                    case 3:\n\t                        return '[u] [srijedu] [u] LT';\n\t                    case 6:\n\t                        return '[u] [subotu] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[u] dddd [u] LT';\n\t                }\n\t            },\n\t            lastDay  : '[juče u] LT',\n\t            lastWeek : function () {\n\t                var lastWeekDays = [\n\t                    '[prošle] [nedjelje] [u] LT',\n\t                    '[prošlog] [ponedjeljka] [u] LT',\n\t                    '[prošlog] [utorka] [u] LT',\n\t                    '[prošle] [srijede] [u] LT',\n\t                    '[prošlog] [četvrtka] [u] LT',\n\t                    '[prošlog] [petka] [u] LT',\n\t                    '[prošle] [subote] [u] LT'\n\t                ];\n\t                return lastWeekDays[this.day()];\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past   : 'prije %s',\n\t            s      : 'nekoliko sekundi',\n\t            ss     : translator.translate,\n\t            m      : translator.translate,\n\t            mm     : translator.translate,\n\t            h      : translator.translate,\n\t            hh     : translator.translate,\n\t            d      : 'dan',\n\t            dd     : translator.translate,\n\t            M      : 'mjesec',\n\t            MM     : translator.translate,\n\t            y      : 'godinu',\n\t            yy     : translator.translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return me;\n\t\n\t})));\n\n\n/***/ },\n/* 346 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var mi = moment.defineLocale('mi', {\n\t        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n\t        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n\t        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n\t        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n\t        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n\t        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n\t        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY [i] HH:mm',\n\t            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[i teie mahana, i] LT',\n\t            nextDay: '[apopo i] LT',\n\t            nextWeek: 'dddd [i] LT',\n\t            lastDay: '[inanahi i] LT',\n\t            lastWeek: 'dddd [whakamutunga i] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: 'i roto i %s',\n\t            past: '%s i mua',\n\t            s: 'te hēkona ruarua',\n\t            ss: '%d hēkona',\n\t            m: 'he meneti',\n\t            mm: '%d meneti',\n\t            h: 'te haora',\n\t            hh: '%d haora',\n\t            d: 'he ra',\n\t            dd: '%d ra',\n\t            M: 'he marama',\n\t            MM: '%d marama',\n\t            y: 'he tau',\n\t            yy: '%d tau'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t        ordinal: '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return mi;\n\t\n\t})));\n\n\n/***/ },\n/* 347 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var mk = moment.defineLocale('mk', {\n\t        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n\t        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n\t        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n\t        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n\t        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'D.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Денес во] LT',\n\t            nextDay : '[Утре во] LT',\n\t            nextWeek : '[Во] dddd [во] LT',\n\t            lastDay : '[Вчера во] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                    case 6:\n\t                        return '[Изминатата] dddd [во] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[Изминатиот] dddd [во] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'после %s',\n\t            past : 'пред %s',\n\t            s : 'неколку секунди',\n\t            ss : '%d секунди',\n\t            m : 'минута',\n\t            mm : '%d минути',\n\t            h : 'час',\n\t            hh : '%d часа',\n\t            d : 'ден',\n\t            dd : '%d дена',\n\t            M : 'месец',\n\t            MM : '%d месеци',\n\t            y : 'година',\n\t            yy : '%d години'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n\t        ordinal : function (number) {\n\t            var lastDigit = number % 10,\n\t                last2Digits = number % 100;\n\t            if (number === 0) {\n\t                return number + '-ев';\n\t            } else if (last2Digits === 0) {\n\t                return number + '-ен';\n\t            } else if (last2Digits > 10 && last2Digits < 20) {\n\t                return number + '-ти';\n\t            } else if (lastDigit === 1) {\n\t                return number + '-ви';\n\t            } else if (lastDigit === 2) {\n\t                return number + '-ри';\n\t            } else if (lastDigit === 7 || lastDigit === 8) {\n\t                return number + '-ми';\n\t            } else {\n\t                return number + '-ти';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return mk;\n\t\n\t})));\n\n\n/***/ },\n/* 348 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ml = moment.defineLocale('ml', {\n\t        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n\t        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n\t        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n\t        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm -നു',\n\t            LTS : 'A h:mm:ss -നു',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm -നു',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n\t        },\n\t        calendar : {\n\t            sameDay : '[ഇന്ന്] LT',\n\t            nextDay : '[നാളെ] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[ഇന്നലെ] LT',\n\t            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s കഴിഞ്ഞ്',\n\t            past : '%s മുൻപ്',\n\t            s : 'അൽപ നിമിഷങ്ങൾ',\n\t            ss : '%d സെക്കൻഡ്',\n\t            m : 'ഒരു മിനിറ്റ്',\n\t            mm : '%d മിനിറ്റ്',\n\t            h : 'ഒരു മണിക്കൂർ',\n\t            hh : '%d മണിക്കൂർ',\n\t            d : 'ഒരു ദിവസം',\n\t            dd : '%d ദിവസം',\n\t            M : 'ഒരു മാസം',\n\t            MM : '%d മാസം',\n\t            y : 'ഒരു വർഷം',\n\t            yy : '%d വർഷം'\n\t        },\n\t        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n\t                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n\t                    meridiem === 'വൈകുന്നേരം') {\n\t                return hour + 12;\n\t            } else {\n\t                return hour;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'രാത്രി';\n\t            } else if (hour < 12) {\n\t                return 'രാവിലെ';\n\t            } else if (hour < 17) {\n\t                return 'ഉച്ച കഴിഞ്ഞ്';\n\t            } else if (hour < 20) {\n\t                return 'വൈകുന്നേരം';\n\t            } else {\n\t                return 'രാത്രി';\n\t            }\n\t        }\n\t    });\n\t\n\t    return ml;\n\t\n\t})));\n\n\n/***/ },\n/* 349 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        switch (key) {\n\t            case 's':\n\t                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n\t            case 'ss':\n\t                return number + (withoutSuffix ? ' секунд' : ' секундын');\n\t            case 'm':\n\t            case 'mm':\n\t                return number + (withoutSuffix ? ' минут' : ' минутын');\n\t            case 'h':\n\t            case 'hh':\n\t                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n\t            case 'd':\n\t            case 'dd':\n\t                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n\t            case 'M':\n\t            case 'MM':\n\t                return number + (withoutSuffix ? ' сар' : ' сарын');\n\t            case 'y':\n\t            case 'yy':\n\t                return number + (withoutSuffix ? ' жил' : ' жилийн');\n\t            default:\n\t                return number;\n\t        }\n\t    }\n\t\n\t    var mn = moment.defineLocale('mn', {\n\t        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n\t        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n\t        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n\t        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'YYYY оны MMMMын D',\n\t            LLL : 'YYYY оны MMMMын D HH:mm',\n\t            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n\t        },\n\t        meridiemParse: /ҮӨ|ҮХ/i,\n\t        isPM : function (input) {\n\t            return input === 'ҮХ';\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ҮӨ';\n\t            } else {\n\t                return 'ҮХ';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Өнөөдөр] LT',\n\t            nextDay : '[Маргааш] LT',\n\t            nextWeek : '[Ирэх] dddd LT',\n\t            lastDay : '[Өчигдөр] LT',\n\t            lastWeek : '[Өнгөрсөн] dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s дараа',\n\t            past : '%s өмнө',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'DDD':\n\t                    return number + ' өдөр';\n\t                default:\n\t                    return number;\n\t            }\n\t        }\n\t    });\n\t\n\t    return mn;\n\t\n\t})));\n\n\n/***/ },\n/* 350 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '१',\n\t        '2': '२',\n\t        '3': '३',\n\t        '4': '४',\n\t        '5': '५',\n\t        '6': '६',\n\t        '7': '७',\n\t        '8': '८',\n\t        '9': '९',\n\t        '0': '०'\n\t    },\n\t    numberMap = {\n\t        '१': '1',\n\t        '२': '2',\n\t        '३': '3',\n\t        '४': '4',\n\t        '५': '5',\n\t        '६': '6',\n\t        '७': '7',\n\t        '८': '8',\n\t        '९': '9',\n\t        '०': '0'\n\t    };\n\t\n\t    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n\t    {\n\t        var output = '';\n\t        if (withoutSuffix) {\n\t            switch (string) {\n\t                case 's': output = 'काही सेकंद'; break;\n\t                case 'ss': output = '%d सेकंद'; break;\n\t                case 'm': output = 'एक मिनिट'; break;\n\t                case 'mm': output = '%d मिनिटे'; break;\n\t                case 'h': output = 'एक तास'; break;\n\t                case 'hh': output = '%d तास'; break;\n\t                case 'd': output = 'एक दिवस'; break;\n\t                case 'dd': output = '%d दिवस'; break;\n\t                case 'M': output = 'एक महिना'; break;\n\t                case 'MM': output = '%d महिने'; break;\n\t                case 'y': output = 'एक वर्ष'; break;\n\t                case 'yy': output = '%d वर्षे'; break;\n\t            }\n\t        }\n\t        else {\n\t            switch (string) {\n\t                case 's': output = 'काही सेकंदां'; break;\n\t                case 'ss': output = '%d सेकंदां'; break;\n\t                case 'm': output = 'एका मिनिटा'; break;\n\t                case 'mm': output = '%d मिनिटां'; break;\n\t                case 'h': output = 'एका तासा'; break;\n\t                case 'hh': output = '%d तासां'; break;\n\t                case 'd': output = 'एका दिवसा'; break;\n\t                case 'dd': output = '%d दिवसां'; break;\n\t                case 'M': output = 'एका महिन्या'; break;\n\t                case 'MM': output = '%d महिन्यां'; break;\n\t                case 'y': output = 'एका वर्षा'; break;\n\t                case 'yy': output = '%d वर्षां'; break;\n\t            }\n\t        }\n\t        return output.replace(/%d/i, number);\n\t    }\n\t\n\t    var mr = moment.defineLocale('mr', {\n\t        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n\t        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n\t        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n\t        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm वाजता',\n\t            LTS : 'A h:mm:ss वाजता',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm वाजता',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n\t        },\n\t        calendar : {\n\t            sameDay : '[आज] LT',\n\t            nextDay : '[उद्या] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[काल] LT',\n\t            lastWeek: '[मागील] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future: '%sमध्ये',\n\t            past: '%sपूर्वी',\n\t            s: relativeTimeMr,\n\t            ss: relativeTimeMr,\n\t            m: relativeTimeMr,\n\t            mm: relativeTimeMr,\n\t            h: relativeTimeMr,\n\t            hh: relativeTimeMr,\n\t            d: relativeTimeMr,\n\t            dd: relativeTimeMr,\n\t            M: relativeTimeMr,\n\t            MM: relativeTimeMr,\n\t            y: relativeTimeMr,\n\t            yy: relativeTimeMr\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'रात्री') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'सकाळी') {\n\t                return hour;\n\t            } else if (meridiem === 'दुपारी') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'सायंकाळी') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem: function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'रात्री';\n\t            } else if (hour < 10) {\n\t                return 'सकाळी';\n\t            } else if (hour < 17) {\n\t                return 'दुपारी';\n\t            } else if (hour < 20) {\n\t                return 'सायंकाळी';\n\t            } else {\n\t                return 'रात्री';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return mr;\n\t\n\t})));\n\n\n/***/ },\n/* 351 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ms = moment.defineLocale('ms', {\n\t        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n\t        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n\t        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n\t        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t        },\n\t        meridiemParse: /pagi|tengahari|petang|malam/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'pagi') {\n\t                return hour;\n\t            } else if (meridiem === 'tengahari') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'petang' || meridiem === 'malam') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 11) {\n\t                return 'pagi';\n\t            } else if (hours < 15) {\n\t                return 'tengahari';\n\t            } else if (hours < 19) {\n\t                return 'petang';\n\t            } else {\n\t                return 'malam';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Hari ini pukul] LT',\n\t            nextDay : '[Esok pukul] LT',\n\t            nextWeek : 'dddd [pukul] LT',\n\t            lastDay : '[Kelmarin pukul] LT',\n\t            lastWeek : 'dddd [lepas pukul] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dalam %s',\n\t            past : '%s yang lepas',\n\t            s : 'beberapa saat',\n\t            ss : '%d saat',\n\t            m : 'seminit',\n\t            mm : '%d minit',\n\t            h : 'sejam',\n\t            hh : '%d jam',\n\t            d : 'sehari',\n\t            dd : '%d hari',\n\t            M : 'sebulan',\n\t            MM : '%d bulan',\n\t            y : 'setahun',\n\t            yy : '%d tahun'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ms;\n\t\n\t})));\n\n\n/***/ },\n/* 352 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var msMy = moment.defineLocale('ms-my', {\n\t        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n\t        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n\t        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n\t        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY [pukul] HH.mm',\n\t            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n\t        },\n\t        meridiemParse: /pagi|tengahari|petang|malam/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'pagi') {\n\t                return hour;\n\t            } else if (meridiem === 'tengahari') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'petang' || meridiem === 'malam') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 11) {\n\t                return 'pagi';\n\t            } else if (hours < 15) {\n\t                return 'tengahari';\n\t            } else if (hours < 19) {\n\t                return 'petang';\n\t            } else {\n\t                return 'malam';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[Hari ini pukul] LT',\n\t            nextDay : '[Esok pukul] LT',\n\t            nextWeek : 'dddd [pukul] LT',\n\t            lastDay : '[Kelmarin pukul] LT',\n\t            lastWeek : 'dddd [lepas pukul] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dalam %s',\n\t            past : '%s yang lepas',\n\t            s : 'beberapa saat',\n\t            ss : '%d saat',\n\t            m : 'seminit',\n\t            mm : '%d minit',\n\t            h : 'sejam',\n\t            hh : '%d jam',\n\t            d : 'sehari',\n\t            dd : '%d hari',\n\t            M : 'sebulan',\n\t            MM : '%d bulan',\n\t            y : 'setahun',\n\t            yy : '%d tahun'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return msMy;\n\t\n\t})));\n\n\n/***/ },\n/* 353 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var mt = moment.defineLocale('mt', {\n\t        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n\t        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n\t        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n\t        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n\t        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Illum fil-]LT',\n\t            nextDay : '[Għada fil-]LT',\n\t            nextWeek : 'dddd [fil-]LT',\n\t            lastDay : '[Il-bieraħ fil-]LT',\n\t            lastWeek : 'dddd [li għadda] [fil-]LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'f’ %s',\n\t            past : '%s ilu',\n\t            s : 'ftit sekondi',\n\t            ss : '%d sekondi',\n\t            m : 'minuta',\n\t            mm : '%d minuti',\n\t            h : 'siegħa',\n\t            hh : '%d siegħat',\n\t            d : 'ġurnata',\n\t            dd : '%d ġranet',\n\t            M : 'xahar',\n\t            MM : '%d xhur',\n\t            y : 'sena',\n\t            yy : '%d sni'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n\t        ordinal: '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return mt;\n\t\n\t})));\n\n\n/***/ },\n/* 354 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '၁',\n\t        '2': '၂',\n\t        '3': '၃',\n\t        '4': '၄',\n\t        '5': '၅',\n\t        '6': '၆',\n\t        '7': '၇',\n\t        '8': '၈',\n\t        '9': '၉',\n\t        '0': '၀'\n\t    }, numberMap = {\n\t        '၁': '1',\n\t        '၂': '2',\n\t        '၃': '3',\n\t        '၄': '4',\n\t        '၅': '5',\n\t        '၆': '6',\n\t        '၇': '7',\n\t        '၈': '8',\n\t        '၉': '9',\n\t        '၀': '0'\n\t    };\n\t\n\t    var my = moment.defineLocale('my', {\n\t        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n\t        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n\t        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n\t        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\t        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\t\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L: 'DD/MM/YYYY',\n\t            LL: 'D MMMM YYYY',\n\t            LLL: 'D MMMM YYYY HH:mm',\n\t            LLLL: 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[ယနေ.] LT [မှာ]',\n\t            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n\t            nextWeek: 'dddd LT [မှာ]',\n\t            lastDay: '[မနေ.က] LT [မှာ]',\n\t            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: 'လာမည့် %s မှာ',\n\t            past: 'လွန်ခဲ့သော %s က',\n\t            s: 'စက္ကန်.အနည်းငယ်',\n\t            ss : '%d စက္ကန့်',\n\t            m: 'တစ်မိနစ်',\n\t            mm: '%d မိနစ်',\n\t            h: 'တစ်နာရီ',\n\t            hh: '%d နာရီ',\n\t            d: 'တစ်ရက်',\n\t            dd: '%d ရက်',\n\t            M: 'တစ်လ',\n\t            MM: '%d လ',\n\t            y: 'တစ်နှစ်',\n\t            yy: '%d နှစ်'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        week: {\n\t            dow: 1, // Monday is the first day of the week.\n\t            doy: 4 // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return my;\n\t\n\t})));\n\n\n/***/ },\n/* 355 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var nb = moment.defineLocale('nb', {\n\t        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n\t        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n\t        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n\t            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[i dag kl.] LT',\n\t            nextDay: '[i morgen kl.] LT',\n\t            nextWeek: 'dddd [kl.] LT',\n\t            lastDay: '[i går kl.] LT',\n\t            lastWeek: '[forrige] dddd [kl.] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'om %s',\n\t            past : '%s siden',\n\t            s : 'noen sekunder',\n\t            ss : '%d sekunder',\n\t            m : 'ett minutt',\n\t            mm : '%d minutter',\n\t            h : 'en time',\n\t            hh : '%d timer',\n\t            d : 'en dag',\n\t            dd : '%d dager',\n\t            M : 'en måned',\n\t            MM : '%d måneder',\n\t            y : 'ett år',\n\t            yy : '%d år'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return nb;\n\t\n\t})));\n\n\n/***/ },\n/* 356 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '१',\n\t        '2': '२',\n\t        '3': '३',\n\t        '4': '४',\n\t        '5': '५',\n\t        '6': '६',\n\t        '7': '७',\n\t        '8': '८',\n\t        '9': '९',\n\t        '0': '०'\n\t    },\n\t    numberMap = {\n\t        '१': '1',\n\t        '२': '2',\n\t        '३': '3',\n\t        '४': '4',\n\t        '५': '5',\n\t        '६': '6',\n\t        '७': '7',\n\t        '८': '8',\n\t        '९': '9',\n\t        '०': '0'\n\t    };\n\t\n\t    var ne = moment.defineLocale('ne', {\n\t        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n\t        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n\t        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n\t        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'Aको h:mm बजे',\n\t            LTS : 'Aको h:mm:ss बजे',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n\t            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'राति') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'बिहान') {\n\t                return hour;\n\t            } else if (meridiem === 'दिउँसो') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'साँझ') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 3) {\n\t                return 'राति';\n\t            } else if (hour < 12) {\n\t                return 'बिहान';\n\t            } else if (hour < 16) {\n\t                return 'दिउँसो';\n\t            } else if (hour < 20) {\n\t                return 'साँझ';\n\t            } else {\n\t                return 'राति';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[आज] LT',\n\t            nextDay : '[भोलि] LT',\n\t            nextWeek : '[आउँदो] dddd[,] LT',\n\t            lastDay : '[हिजो] LT',\n\t            lastWeek : '[गएको] dddd[,] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%sमा',\n\t            past : '%s अगाडि',\n\t            s : 'केही क्षण',\n\t            ss : '%d सेकेण्ड',\n\t            m : 'एक मिनेट',\n\t            mm : '%d मिनेट',\n\t            h : 'एक घण्टा',\n\t            hh : '%d घण्टा',\n\t            d : 'एक दिन',\n\t            dd : '%d दिन',\n\t            M : 'एक महिना',\n\t            MM : '%d महिना',\n\t            y : 'एक बर्ष',\n\t            yy : '%d बर्ष'\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ne;\n\t\n\t})));\n\n\n/***/ },\n/* 357 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n\t        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\t\n\t    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n\t    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\t\n\t    var nl = moment.defineLocale('nl', {\n\t        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortWithDots;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShortWithoutDots[m.month()];\n\t            } else {\n\t                return monthsShortWithDots[m.month()];\n\t            }\n\t        },\n\t\n\t        monthsRegex: monthsRegex,\n\t        monthsShortRegex: monthsRegex,\n\t        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n\t        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\t\n\t        monthsParse : monthsParse,\n\t        longMonthsParse : monthsParse,\n\t        shortMonthsParse : monthsParse,\n\t\n\t        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n\t        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n\t        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD-MM-YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[vandaag om] LT',\n\t            nextDay: '[morgen om] LT',\n\t            nextWeek: 'dddd [om] LT',\n\t            lastDay: '[gisteren om] LT',\n\t            lastWeek: '[afgelopen] dddd [om] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'over %s',\n\t            past : '%s geleden',\n\t            s : 'een paar seconden',\n\t            ss : '%d seconden',\n\t            m : 'één minuut',\n\t            mm : '%d minuten',\n\t            h : 'één uur',\n\t            hh : '%d uur',\n\t            d : 'één dag',\n\t            dd : '%d dagen',\n\t            M : 'één maand',\n\t            MM : '%d maanden',\n\t            y : 'één jaar',\n\t            yy : '%d jaar'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t        ordinal : function (number) {\n\t            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return nl;\n\t\n\t})));\n\n\n/***/ },\n/* 358 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n\t        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\t\n\t    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n\t    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\t\n\t    var nlBe = moment.defineLocale('nl-be', {\n\t        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n\t        monthsShort : function (m, format) {\n\t            if (!m) {\n\t                return monthsShortWithDots;\n\t            } else if (/-MMM-/.test(format)) {\n\t                return monthsShortWithoutDots[m.month()];\n\t            } else {\n\t                return monthsShortWithDots[m.month()];\n\t            }\n\t        },\n\t\n\t        monthsRegex: monthsRegex,\n\t        monthsShortRegex: monthsRegex,\n\t        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n\t        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\t\n\t        monthsParse : monthsParse,\n\t        longMonthsParse : monthsParse,\n\t        shortMonthsParse : monthsParse,\n\t\n\t        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n\t        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n\t        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[vandaag om] LT',\n\t            nextDay: '[morgen om] LT',\n\t            nextWeek: 'dddd [om] LT',\n\t            lastDay: '[gisteren om] LT',\n\t            lastWeek: '[afgelopen] dddd [om] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'over %s',\n\t            past : '%s geleden',\n\t            s : 'een paar seconden',\n\t            ss : '%d seconden',\n\t            m : 'één minuut',\n\t            mm : '%d minuten',\n\t            h : 'één uur',\n\t            hh : '%d uur',\n\t            d : 'één dag',\n\t            dd : '%d dagen',\n\t            M : 'één maand',\n\t            MM : '%d maanden',\n\t            y : 'één jaar',\n\t            yy : '%d jaar'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n\t        ordinal : function (number) {\n\t            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return nlBe;\n\t\n\t})));\n\n\n/***/ },\n/* 359 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var nn = moment.defineLocale('nn', {\n\t        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n\t        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n\t        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n\t        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY [kl.] H:mm',\n\t            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[I dag klokka] LT',\n\t            nextDay: '[I morgon klokka] LT',\n\t            nextWeek: 'dddd [klokka] LT',\n\t            lastDay: '[I går klokka] LT',\n\t            lastWeek: '[Føregåande] dddd [klokka] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'om %s',\n\t            past : '%s sidan',\n\t            s : 'nokre sekund',\n\t            ss : '%d sekund',\n\t            m : 'eit minutt',\n\t            mm : '%d minutt',\n\t            h : 'ein time',\n\t            hh : '%d timar',\n\t            d : 'ein dag',\n\t            dd : '%d dagar',\n\t            M : 'ein månad',\n\t            MM : '%d månader',\n\t            y : 'eit år',\n\t            yy : '%d år'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return nn;\n\t\n\t})));\n\n\n/***/ },\n/* 360 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '੧',\n\t        '2': '੨',\n\t        '3': '੩',\n\t        '4': '੪',\n\t        '5': '੫',\n\t        '6': '੬',\n\t        '7': '੭',\n\t        '8': '੮',\n\t        '9': '੯',\n\t        '0': '੦'\n\t    },\n\t    numberMap = {\n\t        '੧': '1',\n\t        '੨': '2',\n\t        '੩': '3',\n\t        '੪': '4',\n\t        '੫': '5',\n\t        '੬': '6',\n\t        '੭': '7',\n\t        '੮': '8',\n\t        '੯': '9',\n\t        '੦': '0'\n\t    };\n\t\n\t    var paIn = moment.defineLocale('pa-in', {\n\t        // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n\t        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n\t        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n\t        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n\t        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n\t        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm ਵਜੇ',\n\t            LTS : 'A h:mm:ss ਵਜੇ',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n\t        },\n\t        calendar : {\n\t            sameDay : '[ਅਜ] LT',\n\t            nextDay : '[ਕਲ] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[ਕਲ] LT',\n\t            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s ਵਿੱਚ',\n\t            past : '%s ਪਿਛਲੇ',\n\t            s : 'ਕੁਝ ਸਕਿੰਟ',\n\t            ss : '%d ਸਕਿੰਟ',\n\t            m : 'ਇਕ ਮਿੰਟ',\n\t            mm : '%d ਮਿੰਟ',\n\t            h : 'ਇੱਕ ਘੰਟਾ',\n\t            hh : '%d ਘੰਟੇ',\n\t            d : 'ਇੱਕ ਦਿਨ',\n\t            dd : '%d ਦਿਨ',\n\t            M : 'ਇੱਕ ਮਹੀਨਾ',\n\t            MM : '%d ਮਹੀਨੇ',\n\t            y : 'ਇੱਕ ਸਾਲ',\n\t            yy : '%d ਸਾਲ'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n\t        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n\t        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'ਰਾਤ') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'ਸਵੇਰ') {\n\t                return hour;\n\t            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'ਸ਼ਾਮ') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'ਰਾਤ';\n\t            } else if (hour < 10) {\n\t                return 'ਸਵੇਰ';\n\t            } else if (hour < 17) {\n\t                return 'ਦੁਪਹਿਰ';\n\t            } else if (hour < 20) {\n\t                return 'ਸ਼ਾਮ';\n\t            } else {\n\t                return 'ਰਾਤ';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return paIn;\n\t\n\t})));\n\n\n/***/ },\n/* 361 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n\t        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n\t    function plural(n) {\n\t        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n\t    }\n\t    function translate(number, withoutSuffix, key) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 'ss':\n\t                return result + (plural(number) ? 'sekundy' : 'sekund');\n\t            case 'm':\n\t                return withoutSuffix ? 'minuta' : 'minutę';\n\t            case 'mm':\n\t                return result + (plural(number) ? 'minuty' : 'minut');\n\t            case 'h':\n\t                return withoutSuffix  ? 'godzina'  : 'godzinę';\n\t            case 'hh':\n\t                return result + (plural(number) ? 'godziny' : 'godzin');\n\t            case 'MM':\n\t                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n\t            case 'yy':\n\t                return result + (plural(number) ? 'lata' : 'lat');\n\t        }\n\t    }\n\t\n\t    var pl = moment.defineLocale('pl', {\n\t        months : function (momentToFormat, format) {\n\t            if (!momentToFormat) {\n\t                return monthsNominative;\n\t            } else if (format === '') {\n\t                // Hack: if format empty we know this is used to generate\n\t                // RegExp by moment. Give then back both valid forms of months\n\t                // in RegExp ready format.\n\t                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n\t            } else if (/D MMMM/.test(format)) {\n\t                return monthsSubjective[momentToFormat.month()];\n\t            } else {\n\t                return monthsNominative[momentToFormat.month()];\n\t            }\n\t        },\n\t        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n\t        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n\t        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n\t        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Dziś o] LT',\n\t            nextDay: '[Jutro o] LT',\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[W niedzielę o] LT';\n\t\n\t                    case 2:\n\t                        return '[We wtorek o] LT';\n\t\n\t                    case 3:\n\t                        return '[W środę o] LT';\n\t\n\t                    case 6:\n\t                        return '[W sobotę o] LT';\n\t\n\t                    default:\n\t                        return '[W] dddd [o] LT';\n\t                }\n\t            },\n\t            lastDay: '[Wczoraj o] LT',\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[W zeszłą niedzielę o] LT';\n\t                    case 3:\n\t                        return '[W zeszłą środę o] LT';\n\t                    case 6:\n\t                        return '[W zeszłą sobotę o] LT';\n\t                    default:\n\t                        return '[W zeszły] dddd [o] LT';\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past : '%s temu',\n\t            s : 'kilka sekund',\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : '1 dzień',\n\t            dd : '%d dni',\n\t            M : 'miesiąc',\n\t            MM : translate,\n\t            y : 'rok',\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return pl;\n\t\n\t})));\n\n\n/***/ },\n/* 362 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var pt = moment.defineLocale('pt', {\n\t        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n\t        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n\t        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n\t        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n\t        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [de] MMMM [de] YYYY',\n\t            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n\t            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Hoje às] LT',\n\t            nextDay: '[Amanhã às] LT',\n\t            nextWeek: 'dddd [às] LT',\n\t            lastDay: '[Ontem às] LT',\n\t            lastWeek: function () {\n\t                return (this.day() === 0 || this.day() === 6) ?\n\t                    '[Último] dddd [às] LT' : // Saturday + Sunday\n\t                    '[Última] dddd [às] LT'; // Monday - Friday\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'em %s',\n\t            past : 'há %s',\n\t            s : 'segundos',\n\t            ss : '%d segundos',\n\t            m : 'um minuto',\n\t            mm : '%d minutos',\n\t            h : 'uma hora',\n\t            hh : '%d horas',\n\t            d : 'um dia',\n\t            dd : '%d dias',\n\t            M : 'um mês',\n\t            MM : '%d meses',\n\t            y : 'um ano',\n\t            yy : '%d anos'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t        ordinal : '%dº',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return pt;\n\t\n\t})));\n\n\n/***/ },\n/* 363 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ptBr = moment.defineLocale('pt-br', {\n\t        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n\t        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n\t        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n\t        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n\t        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D [de] MMMM [de] YYYY',\n\t            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n\t            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Hoje às] LT',\n\t            nextDay: '[Amanhã às] LT',\n\t            nextWeek: 'dddd [às] LT',\n\t            lastDay: '[Ontem às] LT',\n\t            lastWeek: function () {\n\t                return (this.day() === 0 || this.day() === 6) ?\n\t                    '[Último] dddd [às] LT' : // Saturday + Sunday\n\t                    '[Última] dddd [às] LT'; // Monday - Friday\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'em %s',\n\t            past : 'há %s',\n\t            s : 'poucos segundos',\n\t            ss : '%d segundos',\n\t            m : 'um minuto',\n\t            mm : '%d minutos',\n\t            h : 'uma hora',\n\t            hh : '%d horas',\n\t            d : 'um dia',\n\t            dd : '%d dias',\n\t            M : 'um mês',\n\t            MM : '%d meses',\n\t            y : 'um ano',\n\t            yy : '%d anos'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n\t        ordinal : '%dº'\n\t    });\n\t\n\t    return ptBr;\n\t\n\t})));\n\n\n/***/ },\n/* 364 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t        var format = {\n\t                'ss': 'secunde',\n\t                'mm': 'minute',\n\t                'hh': 'ore',\n\t                'dd': 'zile',\n\t                'MM': 'luni',\n\t                'yy': 'ani'\n\t            },\n\t            separator = ' ';\n\t        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n\t            separator = ' de ';\n\t        }\n\t        return number + separator + format[key];\n\t    }\n\t\n\t    var ro = moment.defineLocale('ro', {\n\t        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n\t        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n\t        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n\t        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[azi la] LT',\n\t            nextDay: '[mâine la] LT',\n\t            nextWeek: 'dddd [la] LT',\n\t            lastDay: '[ieri la] LT',\n\t            lastWeek: '[fosta] dddd [la] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'peste %s',\n\t            past : '%s în urmă',\n\t            s : 'câteva secunde',\n\t            ss : relativeTimeWithPlural,\n\t            m : 'un minut',\n\t            mm : relativeTimeWithPlural,\n\t            h : 'o oră',\n\t            hh : relativeTimeWithPlural,\n\t            d : 'o zi',\n\t            dd : relativeTimeWithPlural,\n\t            M : 'o lună',\n\t            MM : relativeTimeWithPlural,\n\t            y : 'un an',\n\t            yy : relativeTimeWithPlural\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ro;\n\t\n\t})));\n\n\n/***/ },\n/* 365 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function plural(word, num) {\n\t        var forms = word.split('_');\n\t        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t    }\n\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t        var format = {\n\t            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n\t            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n\t            'hh': 'час_часа_часов',\n\t            'dd': 'день_дня_дней',\n\t            'MM': 'месяц_месяца_месяцев',\n\t            'yy': 'год_года_лет'\n\t        };\n\t        if (key === 'm') {\n\t            return withoutSuffix ? 'минута' : 'минуту';\n\t        }\n\t        else {\n\t            return number + ' ' + plural(format[key], +number);\n\t        }\n\t    }\n\t    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\t\n\t    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n\t    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n\t    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n\t    var ru = moment.defineLocale('ru', {\n\t        months : {\n\t            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n\t            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n\t        },\n\t        monthsShort : {\n\t            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n\t            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n\t            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n\t        },\n\t        weekdays : {\n\t            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n\t            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n\t            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n\t        },\n\t        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n\t        monthsParse : monthsParse,\n\t        longMonthsParse : monthsParse,\n\t        shortMonthsParse : monthsParse,\n\t\n\t        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n\t        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\t\n\t        // копия предыдущего\n\t        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\t\n\t        // полные названия с падежами\n\t        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\t\n\t        // Выражение, которое соотвествует только сокращённым формам\n\t        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY г.',\n\t            LLL : 'D MMMM YYYY г., H:mm',\n\t            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Сегодня, в] LT',\n\t            nextDay: '[Завтра, в] LT',\n\t            lastDay: '[Вчера, в] LT',\n\t            nextWeek: function (now) {\n\t                if (now.week() !== this.week()) {\n\t                    switch (this.day()) {\n\t                        case 0:\n\t                            return '[В следующее] dddd, [в] LT';\n\t                        case 1:\n\t                        case 2:\n\t                        case 4:\n\t                            return '[В следующий] dddd, [в] LT';\n\t                        case 3:\n\t                        case 5:\n\t                        case 6:\n\t                            return '[В следующую] dddd, [в] LT';\n\t                    }\n\t                } else {\n\t                    if (this.day() === 2) {\n\t                        return '[Во] dddd, [в] LT';\n\t                    } else {\n\t                        return '[В] dddd, [в] LT';\n\t                    }\n\t                }\n\t            },\n\t            lastWeek: function (now) {\n\t                if (now.week() !== this.week()) {\n\t                    switch (this.day()) {\n\t                        case 0:\n\t                            return '[В прошлое] dddd, [в] LT';\n\t                        case 1:\n\t                        case 2:\n\t                        case 4:\n\t                            return '[В прошлый] dddd, [в] LT';\n\t                        case 3:\n\t                        case 5:\n\t                        case 6:\n\t                            return '[В прошлую] dddd, [в] LT';\n\t                    }\n\t                } else {\n\t                    if (this.day() === 2) {\n\t                        return '[Во] dddd, [в] LT';\n\t                    } else {\n\t                        return '[В] dddd, [в] LT';\n\t                    }\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'через %s',\n\t            past : '%s назад',\n\t            s : 'несколько секунд',\n\t            ss : relativeTimeWithPlural,\n\t            m : relativeTimeWithPlural,\n\t            mm : relativeTimeWithPlural,\n\t            h : 'час',\n\t            hh : relativeTimeWithPlural,\n\t            d : 'день',\n\t            dd : relativeTimeWithPlural,\n\t            M : 'месяц',\n\t            MM : relativeTimeWithPlural,\n\t            y : 'год',\n\t            yy : relativeTimeWithPlural\n\t        },\n\t        meridiemParse: /ночи|утра|дня|вечера/i,\n\t        isPM : function (input) {\n\t            return /^(дня|вечера)$/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'ночи';\n\t            } else if (hour < 12) {\n\t                return 'утра';\n\t            } else if (hour < 17) {\n\t                return 'дня';\n\t            } else {\n\t                return 'вечера';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'M':\n\t                case 'd':\n\t                case 'DDD':\n\t                    return number + '-й';\n\t                case 'D':\n\t                    return number + '-го';\n\t                case 'w':\n\t                case 'W':\n\t                    return number + '-я';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ru;\n\t\n\t})));\n\n\n/***/ },\n/* 366 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = [\n\t        'جنوري',\n\t        'فيبروري',\n\t        'مارچ',\n\t        'اپريل',\n\t        'مئي',\n\t        'جون',\n\t        'جولاءِ',\n\t        'آگسٽ',\n\t        'سيپٽمبر',\n\t        'آڪٽوبر',\n\t        'نومبر',\n\t        'ڊسمبر'\n\t    ];\n\t    var days = [\n\t        'آچر',\n\t        'سومر',\n\t        'اڱارو',\n\t        'اربع',\n\t        'خميس',\n\t        'جمع',\n\t        'ڇنڇر'\n\t    ];\n\t\n\t    var sd = moment.defineLocale('sd', {\n\t        months : months,\n\t        monthsShort : months,\n\t        weekdays : days,\n\t        weekdaysShort : days,\n\t        weekdaysMin : days,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd، D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /صبح|شام/,\n\t        isPM : function (input) {\n\t            return 'شام' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'صبح';\n\t            }\n\t            return 'شام';\n\t        },\n\t        calendar : {\n\t            sameDay : '[اڄ] LT',\n\t            nextDay : '[سڀاڻي] LT',\n\t            nextWeek : 'dddd [اڳين هفتي تي] LT',\n\t            lastDay : '[ڪالهه] LT',\n\t            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s پوء',\n\t            past : '%s اڳ',\n\t            s : 'چند سيڪنڊ',\n\t            ss : '%d سيڪنڊ',\n\t            m : 'هڪ منٽ',\n\t            mm : '%d منٽ',\n\t            h : 'هڪ ڪلاڪ',\n\t            hh : '%d ڪلاڪ',\n\t            d : 'هڪ ڏينهن',\n\t            dd : '%d ڏينهن',\n\t            M : 'هڪ مهينو',\n\t            MM : '%d مهينا',\n\t            y : 'هڪ سال',\n\t            yy : '%d سال'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sd;\n\t\n\t})));\n\n\n/***/ },\n/* 367 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var se = moment.defineLocale('se', {\n\t        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n\t        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n\t        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n\t        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n\t        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'MMMM D. [b.] YYYY',\n\t            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n\t            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[otne ti] LT',\n\t            nextDay: '[ihttin ti] LT',\n\t            nextWeek: 'dddd [ti] LT',\n\t            lastDay: '[ikte ti] LT',\n\t            lastWeek: '[ovddit] dddd [ti] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s geažes',\n\t            past : 'maŋit %s',\n\t            s : 'moadde sekunddat',\n\t            ss: '%d sekunddat',\n\t            m : 'okta minuhta',\n\t            mm : '%d minuhtat',\n\t            h : 'okta diimmu',\n\t            hh : '%d diimmut',\n\t            d : 'okta beaivi',\n\t            dd : '%d beaivvit',\n\t            M : 'okta mánnu',\n\t            MM : '%d mánut',\n\t            y : 'okta jahki',\n\t            yy : '%d jagit'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return se;\n\t\n\t})));\n\n\n/***/ },\n/* 368 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    /*jshint -W100*/\n\t    var si = moment.defineLocale('si', {\n\t        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n\t        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n\t        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n\t        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n\t        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'a h:mm',\n\t            LTS : 'a h:mm:ss',\n\t            L : 'YYYY/MM/DD',\n\t            LL : 'YYYY MMMM D',\n\t            LLL : 'YYYY MMMM D, a h:mm',\n\t            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n\t        },\n\t        calendar : {\n\t            sameDay : '[අද] LT[ට]',\n\t            nextDay : '[හෙට] LT[ට]',\n\t            nextWeek : 'dddd LT[ට]',\n\t            lastDay : '[ඊයේ] LT[ට]',\n\t            lastWeek : '[පසුගිය] dddd LT[ට]',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%sකින්',\n\t            past : '%sකට පෙර',\n\t            s : 'තත්පර කිහිපය',\n\t            ss : 'තත්පර %d',\n\t            m : 'මිනිත්තුව',\n\t            mm : 'මිනිත්තු %d',\n\t            h : 'පැය',\n\t            hh : 'පැය %d',\n\t            d : 'දිනය',\n\t            dd : 'දින %d',\n\t            M : 'මාසය',\n\t            MM : 'මාස %d',\n\t            y : 'වසර',\n\t            yy : 'වසර %d'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n\t        ordinal : function (number) {\n\t            return number + ' වැනි';\n\t        },\n\t        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n\t        isPM : function (input) {\n\t            return input === 'ප.ව.' || input === 'පස් වරු';\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours > 11) {\n\t                return isLower ? 'ප.ව.' : 'පස් වරු';\n\t            } else {\n\t                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n\t            }\n\t        }\n\t    });\n\t\n\t    return si;\n\t\n\t})));\n\n\n/***/ },\n/* 369 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n\t        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n\t    function plural(n) {\n\t        return (n > 1) && (n < 5);\n\t    }\n\t    function translate(number, withoutSuffix, key, isFuture) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 's':  // a few seconds / in a few seconds / a few seconds ago\n\t                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n\t            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n\t                } else {\n\t                    return result + 'sekundami';\n\t                }\n\t                break;\n\t            case 'm':  // a minute / in a minute / a minute ago\n\t                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n\t            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'minúty' : 'minút');\n\t                } else {\n\t                    return result + 'minútami';\n\t                }\n\t                break;\n\t            case 'h':  // an hour / in an hour / an hour ago\n\t                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n\t            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'hodiny' : 'hodín');\n\t                } else {\n\t                    return result + 'hodinami';\n\t                }\n\t                break;\n\t            case 'd':  // a day / in a day / a day ago\n\t                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n\t            case 'dd': // 9 days / in 9 days / 9 days ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'dni' : 'dní');\n\t                } else {\n\t                    return result + 'dňami';\n\t                }\n\t                break;\n\t            case 'M':  // a month / in a month / a month ago\n\t                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n\t            case 'MM': // 9 months / in 9 months / 9 months ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n\t                } else {\n\t                    return result + 'mesiacmi';\n\t                }\n\t                break;\n\t            case 'y':  // a year / in a year / a year ago\n\t                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n\t            case 'yy': // 9 years / in 9 years / 9 years ago\n\t                if (withoutSuffix || isFuture) {\n\t                    return result + (plural(number) ? 'roky' : 'rokov');\n\t                } else {\n\t                    return result + 'rokmi';\n\t                }\n\t                break;\n\t        }\n\t    }\n\t\n\t    var sk = moment.defineLocale('sk', {\n\t        months : months,\n\t        monthsShort : monthsShort,\n\t        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n\t        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n\t        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n\t        longDateFormat : {\n\t            LT: 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd D. MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[dnes o] LT',\n\t            nextDay: '[zajtra o] LT',\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[v nedeľu o] LT';\n\t                    case 1:\n\t                    case 2:\n\t                        return '[v] dddd [o] LT';\n\t                    case 3:\n\t                        return '[v stredu o] LT';\n\t                    case 4:\n\t                        return '[vo štvrtok o] LT';\n\t                    case 5:\n\t                        return '[v piatok o] LT';\n\t                    case 6:\n\t                        return '[v sobotu o] LT';\n\t                }\n\t            },\n\t            lastDay: '[včera o] LT',\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[minulú nedeľu o] LT';\n\t                    case 1:\n\t                    case 2:\n\t                        return '[minulý] dddd [o] LT';\n\t                    case 3:\n\t                        return '[minulú stredu o] LT';\n\t                    case 4:\n\t                    case 5:\n\t                        return '[minulý] dddd [o] LT';\n\t                    case 6:\n\t                        return '[minulú sobotu o] LT';\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past : 'pred %s',\n\t            s : translate,\n\t            ss : translate,\n\t            m : translate,\n\t            mm : translate,\n\t            h : translate,\n\t            hh : translate,\n\t            d : translate,\n\t            dd : translate,\n\t            M : translate,\n\t            MM : translate,\n\t            y : translate,\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sk;\n\t\n\t})));\n\n\n/***/ },\n/* 370 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var result = number + ' ';\n\t        switch (key) {\n\t            case 's':\n\t                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n\t            case 'ss':\n\t                if (number === 1) {\n\t                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n\t                } else if (number < 5) {\n\t                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'sekund' : 'sekund';\n\t                }\n\t                return result;\n\t            case 'm':\n\t                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n\t            case 'mm':\n\t                if (number === 1) {\n\t                    result += withoutSuffix ? 'minuta' : 'minuto';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n\t                } else if (number < 5) {\n\t                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n\t                }\n\t                return result;\n\t            case 'h':\n\t                return withoutSuffix ? 'ena ura' : 'eno uro';\n\t            case 'hh':\n\t                if (number === 1) {\n\t                    result += withoutSuffix ? 'ura' : 'uro';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n\t                } else if (number < 5) {\n\t                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n\t                }\n\t                return result;\n\t            case 'd':\n\t                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n\t            case 'dd':\n\t                if (number === 1) {\n\t                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n\t                }\n\t                return result;\n\t            case 'M':\n\t                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n\t            case 'MM':\n\t                if (number === 1) {\n\t                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n\t                } else if (number < 5) {\n\t                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n\t                }\n\t                return result;\n\t            case 'y':\n\t                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n\t            case 'yy':\n\t                if (number === 1) {\n\t                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n\t                } else if (number === 2) {\n\t                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n\t                } else if (number < 5) {\n\t                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n\t                } else {\n\t                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n\t                }\n\t                return result;\n\t        }\n\t    }\n\t\n\t    var sl = moment.defineLocale('sl', {\n\t        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n\t        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n\t        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n\t        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM YYYY',\n\t            LLL : 'D. MMMM YYYY H:mm',\n\t            LLLL : 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar : {\n\t            sameDay  : '[danes ob] LT',\n\t            nextDay  : '[jutri ob] LT',\n\t\n\t            nextWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[v] [nedeljo] [ob] LT';\n\t                    case 3:\n\t                        return '[v] [sredo] [ob] LT';\n\t                    case 6:\n\t                        return '[v] [soboto] [ob] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[v] dddd [ob] LT';\n\t                }\n\t            },\n\t            lastDay  : '[včeraj ob] LT',\n\t            lastWeek : function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[prejšnjo] [nedeljo] [ob] LT';\n\t                    case 3:\n\t                        return '[prejšnjo] [sredo] [ob] LT';\n\t                    case 6:\n\t                        return '[prejšnjo] [soboto] [ob] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[prejšnji] dddd [ob] LT';\n\t                }\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'čez %s',\n\t            past   : 'pred %s',\n\t            s      : processRelativeTime,\n\t            ss     : processRelativeTime,\n\t            m      : processRelativeTime,\n\t            mm     : processRelativeTime,\n\t            h      : processRelativeTime,\n\t            hh     : processRelativeTime,\n\t            d      : processRelativeTime,\n\t            dd     : processRelativeTime,\n\t            M      : processRelativeTime,\n\t            MM     : processRelativeTime,\n\t            y      : processRelativeTime,\n\t            yy     : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sl;\n\t\n\t})));\n\n\n/***/ },\n/* 371 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var sq = moment.defineLocale('sq', {\n\t        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n\t        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n\t        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n\t        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n\t        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n\t        weekdaysParseExact : true,\n\t        meridiemParse: /PD|MD/,\n\t        isPM: function (input) {\n\t            return input.charAt(0) === 'M';\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            return hours < 12 ? 'PD' : 'MD';\n\t        },\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Sot në] LT',\n\t            nextDay : '[Nesër në] LT',\n\t            nextWeek : 'dddd [në] LT',\n\t            lastDay : '[Dje në] LT',\n\t            lastWeek : 'dddd [e kaluar në] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'në %s',\n\t            past : '%s më parë',\n\t            s : 'disa sekonda',\n\t            ss : '%d sekonda',\n\t            m : 'një minutë',\n\t            mm : '%d minuta',\n\t            h : 'një orë',\n\t            hh : '%d orë',\n\t            d : 'një ditë',\n\t            dd : '%d ditë',\n\t            M : 'një muaj',\n\t            MM : '%d muaj',\n\t            y : 'një vit',\n\t            yy : '%d vite'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sq;\n\t\n\t})));\n\n\n/***/ },\n/* 372 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var translator = {\n\t        words: { //Different grammatical cases\n\t            ss: ['sekunda', 'sekunde', 'sekundi'],\n\t            m: ['jedan minut', 'jedne minute'],\n\t            mm: ['minut', 'minute', 'minuta'],\n\t            h: ['jedan sat', 'jednog sata'],\n\t            hh: ['sat', 'sata', 'sati'],\n\t            dd: ['dan', 'dana', 'dana'],\n\t            MM: ['mesec', 'meseca', 'meseci'],\n\t            yy: ['godina', 'godine', 'godina']\n\t        },\n\t        correctGrammaticalCase: function (number, wordKey) {\n\t            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t        },\n\t        translate: function (number, withoutSuffix, key) {\n\t            var wordKey = translator.words[key];\n\t            if (key.length === 1) {\n\t                return withoutSuffix ? wordKey[0] : wordKey[1];\n\t            } else {\n\t                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t            }\n\t        }\n\t    };\n\t\n\t    var sr = moment.defineLocale('sr', {\n\t        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n\t        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n\t        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n\t        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat: {\n\t            LT: 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L: 'DD.MM.YYYY',\n\t            LL: 'D. MMMM YYYY',\n\t            LLL: 'D. MMMM YYYY H:mm',\n\t            LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[danas u] LT',\n\t            nextDay: '[sutra u] LT',\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[u] [nedelju] [u] LT';\n\t                    case 3:\n\t                        return '[u] [sredu] [u] LT';\n\t                    case 6:\n\t                        return '[u] [subotu] [u] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[u] dddd [u] LT';\n\t                }\n\t            },\n\t            lastDay  : '[juče u] LT',\n\t            lastWeek : function () {\n\t                var lastWeekDays = [\n\t                    '[prošle] [nedelje] [u] LT',\n\t                    '[prošlog] [ponedeljka] [u] LT',\n\t                    '[prošlog] [utorka] [u] LT',\n\t                    '[prošle] [srede] [u] LT',\n\t                    '[prošlog] [četvrtka] [u] LT',\n\t                    '[prošlog] [petka] [u] LT',\n\t                    '[prošle] [subote] [u] LT'\n\t                ];\n\t                return lastWeekDays[this.day()];\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'za %s',\n\t            past   : 'pre %s',\n\t            s      : 'nekoliko sekundi',\n\t            ss     : translator.translate,\n\t            m      : translator.translate,\n\t            mm     : translator.translate,\n\t            h      : translator.translate,\n\t            hh     : translator.translate,\n\t            d      : 'dan',\n\t            dd     : translator.translate,\n\t            M      : 'mesec',\n\t            MM     : translator.translate,\n\t            y      : 'godinu',\n\t            yy     : translator.translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sr;\n\t\n\t})));\n\n\n/***/ },\n/* 373 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var translator = {\n\t        words: { //Different grammatical cases\n\t            ss: ['секунда', 'секунде', 'секунди'],\n\t            m: ['један минут', 'једне минуте'],\n\t            mm: ['минут', 'минуте', 'минута'],\n\t            h: ['један сат', 'једног сата'],\n\t            hh: ['сат', 'сата', 'сати'],\n\t            dd: ['дан', 'дана', 'дана'],\n\t            MM: ['месец', 'месеца', 'месеци'],\n\t            yy: ['година', 'године', 'година']\n\t        },\n\t        correctGrammaticalCase: function (number, wordKey) {\n\t            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n\t        },\n\t        translate: function (number, withoutSuffix, key) {\n\t            var wordKey = translator.words[key];\n\t            if (key.length === 1) {\n\t                return withoutSuffix ? wordKey[0] : wordKey[1];\n\t            } else {\n\t                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n\t            }\n\t        }\n\t    };\n\t\n\t    var srCyrl = moment.defineLocale('sr-cyrl', {\n\t        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n\t        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n\t        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n\t        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat: {\n\t            LT: 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L: 'DD.MM.YYYY',\n\t            LL: 'D. MMMM YYYY',\n\t            LLL: 'D. MMMM YYYY H:mm',\n\t            LLLL: 'dddd, D. MMMM YYYY H:mm'\n\t        },\n\t        calendar: {\n\t            sameDay: '[данас у] LT',\n\t            nextDay: '[сутра у] LT',\n\t            nextWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                        return '[у] [недељу] [у] LT';\n\t                    case 3:\n\t                        return '[у] [среду] [у] LT';\n\t                    case 6:\n\t                        return '[у] [суботу] [у] LT';\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                    case 5:\n\t                        return '[у] dddd [у] LT';\n\t                }\n\t            },\n\t            lastDay  : '[јуче у] LT',\n\t            lastWeek : function () {\n\t                var lastWeekDays = [\n\t                    '[прошле] [недеље] [у] LT',\n\t                    '[прошлог] [понедељка] [у] LT',\n\t                    '[прошлог] [уторка] [у] LT',\n\t                    '[прошле] [среде] [у] LT',\n\t                    '[прошлог] [четвртка] [у] LT',\n\t                    '[прошлог] [петка] [у] LT',\n\t                    '[прошле] [суботе] [у] LT'\n\t                ];\n\t                return lastWeekDays[this.day()];\n\t            },\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'за %s',\n\t            past   : 'пре %s',\n\t            s      : 'неколико секунди',\n\t            ss     : translator.translate,\n\t            m      : translator.translate,\n\t            mm     : translator.translate,\n\t            h      : translator.translate,\n\t            hh     : translator.translate,\n\t            d      : 'дан',\n\t            dd     : translator.translate,\n\t            M      : 'месец',\n\t            MM     : translator.translate,\n\t            y      : 'годину',\n\t            yy     : translator.translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return srCyrl;\n\t\n\t})));\n\n\n/***/ },\n/* 374 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ss = moment.defineLocale('ss', {\n\t        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n\t        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n\t        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n\t        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n\t        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Namuhla nga] LT',\n\t            nextDay : '[Kusasa nga] LT',\n\t            nextWeek : 'dddd [nga] LT',\n\t            lastDay : '[Itolo nga] LT',\n\t            lastWeek : 'dddd [leliphelile] [nga] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'nga %s',\n\t            past : 'wenteka nga %s',\n\t            s : 'emizuzwana lomcane',\n\t            ss : '%d mzuzwana',\n\t            m : 'umzuzu',\n\t            mm : '%d emizuzu',\n\t            h : 'lihora',\n\t            hh : '%d emahora',\n\t            d : 'lilanga',\n\t            dd : '%d emalanga',\n\t            M : 'inyanga',\n\t            MM : '%d tinyanga',\n\t            y : 'umnyaka',\n\t            yy : '%d iminyaka'\n\t        },\n\t        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 11) {\n\t                return 'ekuseni';\n\t            } else if (hours < 15) {\n\t                return 'emini';\n\t            } else if (hours < 19) {\n\t                return 'entsambama';\n\t            } else {\n\t                return 'ebusuku';\n\t            }\n\t        },\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'ekuseni') {\n\t                return hour;\n\t            } else if (meridiem === 'emini') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n\t                if (hour === 0) {\n\t                    return 0;\n\t                }\n\t                return hour + 12;\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t        ordinal : '%d',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ss;\n\t\n\t})));\n\n\n/***/ },\n/* 375 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var sv = moment.defineLocale('sv', {\n\t        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n\t        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n\t        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n\t        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n\t        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY-MM-DD',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY [kl.] HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n\t            lll : 'D MMM YYYY HH:mm',\n\t            llll : 'ddd D MMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Idag] LT',\n\t            nextDay: '[Imorgon] LT',\n\t            lastDay: '[Igår] LT',\n\t            nextWeek: '[På] dddd LT',\n\t            lastWeek: '[I] dddd[s] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'om %s',\n\t            past : 'för %s sedan',\n\t            s : 'några sekunder',\n\t            ss : '%d sekunder',\n\t            m : 'en minut',\n\t            mm : '%d minuter',\n\t            h : 'en timme',\n\t            hh : '%d timmar',\n\t            d : 'en dag',\n\t            dd : '%d dagar',\n\t            M : 'en månad',\n\t            MM : '%d månader',\n\t            y : 'ett år',\n\t            yy : '%d år'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'e' :\n\t                (b === 1) ? 'a' :\n\t                (b === 2) ? 'a' :\n\t                (b === 3) ? 'e' : 'e';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sv;\n\t\n\t})));\n\n\n/***/ },\n/* 376 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var sw = moment.defineLocale('sw', {\n\t        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n\t        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n\t        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n\t        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n\t        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[leo saa] LT',\n\t            nextDay : '[kesho saa] LT',\n\t            nextWeek : '[wiki ijayo] dddd [saat] LT',\n\t            lastDay : '[jana] LT',\n\t            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s baadaye',\n\t            past : 'tokea %s',\n\t            s : 'hivi punde',\n\t            ss : 'sekunde %d',\n\t            m : 'dakika moja',\n\t            mm : 'dakika %d',\n\t            h : 'saa limoja',\n\t            hh : 'masaa %d',\n\t            d : 'siku moja',\n\t            dd : 'masiku %d',\n\t            M : 'mwezi mmoja',\n\t            MM : 'miezi %d',\n\t            y : 'mwaka mmoja',\n\t            yy : 'miaka %d'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return sw;\n\t\n\t})));\n\n\n/***/ },\n/* 377 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var symbolMap = {\n\t        '1': '௧',\n\t        '2': '௨',\n\t        '3': '௩',\n\t        '4': '௪',\n\t        '5': '௫',\n\t        '6': '௬',\n\t        '7': '௭',\n\t        '8': '௮',\n\t        '9': '௯',\n\t        '0': '௦'\n\t    }, numberMap = {\n\t        '௧': '1',\n\t        '௨': '2',\n\t        '௩': '3',\n\t        '௪': '4',\n\t        '௫': '5',\n\t        '௬': '6',\n\t        '௭': '7',\n\t        '௮': '8',\n\t        '௯': '9',\n\t        '௦': '0'\n\t    };\n\t\n\t    var ta = moment.defineLocale('ta', {\n\t        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n\t        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n\t        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n\t        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n\t        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[இன்று] LT',\n\t            nextDay : '[நாளை] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[நேற்று] LT',\n\t            lastWeek : '[கடந்த வாரம்] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s இல்',\n\t            past : '%s முன்',\n\t            s : 'ஒரு சில விநாடிகள்',\n\t            ss : '%d விநாடிகள்',\n\t            m : 'ஒரு நிமிடம்',\n\t            mm : '%d நிமிடங்கள்',\n\t            h : 'ஒரு மணி நேரம்',\n\t            hh : '%d மணி நேரம்',\n\t            d : 'ஒரு நாள்',\n\t            dd : '%d நாட்கள்',\n\t            M : 'ஒரு மாதம்',\n\t            MM : '%d மாதங்கள்',\n\t            y : 'ஒரு வருடம்',\n\t            yy : '%d ஆண்டுகள்'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n\t        ordinal : function (number) {\n\t            return number + 'வது';\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n\t                return numberMap[match];\n\t            });\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/\\d/g, function (match) {\n\t                return symbolMap[match];\n\t            });\n\t        },\n\t        // refer http://ta.wikipedia.org/s/1er1\n\t        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 2) {\n\t                return ' யாமம்';\n\t            } else if (hour < 6) {\n\t                return ' வைகறை';  // வைகறை\n\t            } else if (hour < 10) {\n\t                return ' காலை'; // காலை\n\t            } else if (hour < 14) {\n\t                return ' நண்பகல்'; // நண்பகல்\n\t            } else if (hour < 18) {\n\t                return ' எற்பாடு'; // எற்பாடு\n\t            } else if (hour < 22) {\n\t                return ' மாலை'; // மாலை\n\t            } else {\n\t                return ' யாமம்';\n\t            }\n\t        },\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'யாமம்') {\n\t                return hour < 2 ? hour : hour + 12;\n\t            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n\t                return hour;\n\t            } else if (meridiem === 'நண்பகல்') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ta;\n\t\n\t})));\n\n\n/***/ },\n/* 378 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var te = moment.defineLocale('te', {\n\t        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n\t        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n\t        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n\t        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'A h:mm',\n\t            LTS : 'A h:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY, A h:mm',\n\t            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[నేడు] LT',\n\t            nextDay : '[రేపు] LT',\n\t            nextWeek : 'dddd, LT',\n\t            lastDay : '[నిన్న] LT',\n\t            lastWeek : '[గత] dddd, LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s లో',\n\t            past : '%s క్రితం',\n\t            s : 'కొన్ని క్షణాలు',\n\t            ss : '%d సెకన్లు',\n\t            m : 'ఒక నిమిషం',\n\t            mm : '%d నిమిషాలు',\n\t            h : 'ఒక గంట',\n\t            hh : '%d గంటలు',\n\t            d : 'ఒక రోజు',\n\t            dd : '%d రోజులు',\n\t            M : 'ఒక నెల',\n\t            MM : '%d నెలలు',\n\t            y : 'ఒక సంవత్సరం',\n\t            yy : '%d సంవత్సరాలు'\n\t        },\n\t        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n\t        ordinal : '%dవ',\n\t        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'రాత్రి') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'ఉదయం') {\n\t                return hour;\n\t            } else if (meridiem === 'మధ్యాహ్నం') {\n\t                return hour >= 10 ? hour : hour + 12;\n\t            } else if (meridiem === 'సాయంత్రం') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'రాత్రి';\n\t            } else if (hour < 10) {\n\t                return 'ఉదయం';\n\t            } else if (hour < 17) {\n\t                return 'మధ్యాహ్నం';\n\t            } else if (hour < 20) {\n\t                return 'సాయంత్రం';\n\t            } else {\n\t                return 'రాత్రి';\n\t            }\n\t        },\n\t        week : {\n\t            dow : 0, // Sunday is the first day of the week.\n\t            doy : 6  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return te;\n\t\n\t})));\n\n\n/***/ },\n/* 379 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var tet = moment.defineLocale('tet', {\n\t        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n\t        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n\t        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n\t        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n\t        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Ohin iha] LT',\n\t            nextDay: '[Aban iha] LT',\n\t            nextWeek: 'dddd [iha] LT',\n\t            lastDay: '[Horiseik iha] LT',\n\t            lastWeek: 'dddd [semana kotuk] [iha] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'iha %s',\n\t            past : '%s liuba',\n\t            s : 'minutu balun',\n\t            ss : 'minutu %d',\n\t            m : 'minutu ida',\n\t            mm : 'minutu %d',\n\t            h : 'oras ida',\n\t            hh : 'oras %d',\n\t            d : 'loron ida',\n\t            dd : 'loron %d',\n\t            M : 'fulan ida',\n\t            MM : 'fulan %d',\n\t            y : 'tinan ida',\n\t            yy : 'tinan %d'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tet;\n\t\n\t})));\n\n\n/***/ },\n/* 380 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var suffixes = {\n\t        0: '-ум',\n\t        1: '-ум',\n\t        2: '-юм',\n\t        3: '-юм',\n\t        4: '-ум',\n\t        5: '-ум',\n\t        6: '-ум',\n\t        7: '-ум',\n\t        8: '-ум',\n\t        9: '-ум',\n\t        10: '-ум',\n\t        12: '-ум',\n\t        13: '-ум',\n\t        20: '-ум',\n\t        30: '-юм',\n\t        40: '-ум',\n\t        50: '-ум',\n\t        60: '-ум',\n\t        70: '-ум',\n\t        80: '-ум',\n\t        90: '-ум',\n\t        100: '-ум'\n\t    };\n\t\n\t    var tg = moment.defineLocale('tg', {\n\t        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n\t        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n\t        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n\t        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n\t        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Имрӯз соати] LT',\n\t            nextDay : '[Пагоҳ соати] LT',\n\t            lastDay : '[Дирӯз соати] LT',\n\t            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n\t            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'баъди %s',\n\t            past : '%s пеш',\n\t            s : 'якчанд сония',\n\t            m : 'як дақиқа',\n\t            mm : '%d дақиқа',\n\t            h : 'як соат',\n\t            hh : '%d соат',\n\t            d : 'як рӯз',\n\t            dd : '%d рӯз',\n\t            M : 'як моҳ',\n\t            MM : '%d моҳ',\n\t            y : 'як сол',\n\t            yy : '%d сол'\n\t        },\n\t        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === 'шаб') {\n\t                return hour < 4 ? hour : hour + 12;\n\t            } else if (meridiem === 'субҳ') {\n\t                return hour;\n\t            } else if (meridiem === 'рӯз') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === 'бегоҳ') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem: function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'шаб';\n\t            } else if (hour < 11) {\n\t                return 'субҳ';\n\t            } else if (hour < 16) {\n\t                return 'рӯз';\n\t            } else if (hour < 19) {\n\t                return 'бегоҳ';\n\t            } else {\n\t                return 'шаб';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n\t        ordinal: function (number) {\n\t            var a = number % 10,\n\t                b = number >= 100 ? 100 : null;\n\t            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tg;\n\t\n\t})));\n\n\n/***/ },\n/* 381 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var th = moment.defineLocale('th', {\n\t        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n\t        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n\t        monthsParseExact: true,\n\t        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n\t        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n\t        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'H:mm',\n\t            LTS : 'H:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY เวลา H:mm',\n\t            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n\t        },\n\t        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n\t        isPM: function (input) {\n\t            return input === 'หลังเที่ยง';\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'ก่อนเที่ยง';\n\t            } else {\n\t                return 'หลังเที่ยง';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[วันนี้ เวลา] LT',\n\t            nextDay : '[พรุ่งนี้ เวลา] LT',\n\t            nextWeek : 'dddd[หน้า เวลา] LT',\n\t            lastDay : '[เมื่อวานนี้ เวลา] LT',\n\t            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'อีก %s',\n\t            past : '%sที่แล้ว',\n\t            s : 'ไม่กี่วินาที',\n\t            ss : '%d วินาที',\n\t            m : '1 นาที',\n\t            mm : '%d นาที',\n\t            h : '1 ชั่วโมง',\n\t            hh : '%d ชั่วโมง',\n\t            d : '1 วัน',\n\t            dd : '%d วัน',\n\t            M : '1 เดือน',\n\t            MM : '%d เดือน',\n\t            y : '1 ปี',\n\t            yy : '%d ปี'\n\t        }\n\t    });\n\t\n\t    return th;\n\t\n\t})));\n\n\n/***/ },\n/* 382 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var tlPh = moment.defineLocale('tl-ph', {\n\t        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n\t        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n\t        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n\t        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n\t        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'MM/D/YYYY',\n\t            LL : 'MMMM D, YYYY',\n\t            LLL : 'MMMM D, YYYY HH:mm',\n\t            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: 'LT [ngayong araw]',\n\t            nextDay: '[Bukas ng] LT',\n\t            nextWeek: 'LT [sa susunod na] dddd',\n\t            lastDay: 'LT [kahapon]',\n\t            lastWeek: 'LT [noong nakaraang] dddd',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'sa loob ng %s',\n\t            past : '%s ang nakalipas',\n\t            s : 'ilang segundo',\n\t            ss : '%d segundo',\n\t            m : 'isang minuto',\n\t            mm : '%d minuto',\n\t            h : 'isang oras',\n\t            hh : '%d oras',\n\t            d : 'isang araw',\n\t            dd : '%d araw',\n\t            M : 'isang buwan',\n\t            MM : '%d buwan',\n\t            y : 'isang taon',\n\t            yy : '%d taon'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t        ordinal : function (number) {\n\t            return number;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tlPh;\n\t\n\t})));\n\n\n/***/ },\n/* 383 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\t\n\t    function translateFuture(output) {\n\t        var time = output;\n\t        time = (output.indexOf('jaj') !== -1) ?\n\t        time.slice(0, -3) + 'leS' :\n\t        (output.indexOf('jar') !== -1) ?\n\t        time.slice(0, -3) + 'waQ' :\n\t        (output.indexOf('DIS') !== -1) ?\n\t        time.slice(0, -3) + 'nem' :\n\t        time + ' pIq';\n\t        return time;\n\t    }\n\t\n\t    function translatePast(output) {\n\t        var time = output;\n\t        time = (output.indexOf('jaj') !== -1) ?\n\t        time.slice(0, -3) + 'Hu’' :\n\t        (output.indexOf('jar') !== -1) ?\n\t        time.slice(0, -3) + 'wen' :\n\t        (output.indexOf('DIS') !== -1) ?\n\t        time.slice(0, -3) + 'ben' :\n\t        time + ' ret';\n\t        return time;\n\t    }\n\t\n\t    function translate(number, withoutSuffix, string, isFuture) {\n\t        var numberNoun = numberAsNoun(number);\n\t        switch (string) {\n\t            case 'ss':\n\t                return numberNoun + ' lup';\n\t            case 'mm':\n\t                return numberNoun + ' tup';\n\t            case 'hh':\n\t                return numberNoun + ' rep';\n\t            case 'dd':\n\t                return numberNoun + ' jaj';\n\t            case 'MM':\n\t                return numberNoun + ' jar';\n\t            case 'yy':\n\t                return numberNoun + ' DIS';\n\t        }\n\t    }\n\t\n\t    function numberAsNoun(number) {\n\t        var hundred = Math.floor((number % 1000) / 100),\n\t        ten = Math.floor((number % 100) / 10),\n\t        one = number % 10,\n\t        word = '';\n\t        if (hundred > 0) {\n\t            word += numbersNouns[hundred] + 'vatlh';\n\t        }\n\t        if (ten > 0) {\n\t            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n\t        }\n\t        if (one > 0) {\n\t            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n\t        }\n\t        return (word === '') ? 'pagh' : word;\n\t    }\n\t\n\t    var tlh = moment.defineLocale('tlh', {\n\t        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n\t        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[DaHjaj] LT',\n\t            nextDay: '[wa’leS] LT',\n\t            nextWeek: 'LLL',\n\t            lastDay: '[wa’Hu’] LT',\n\t            lastWeek: 'LLL',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : translateFuture,\n\t            past : translatePast,\n\t            s : 'puS lup',\n\t            ss : translate,\n\t            m : 'wa’ tup',\n\t            mm : translate,\n\t            h : 'wa’ rep',\n\t            hh : translate,\n\t            d : 'wa’ jaj',\n\t            dd : translate,\n\t            M : 'wa’ jar',\n\t            MM : translate,\n\t            y : 'wa’ DIS',\n\t            yy : translate\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tlh;\n\t\n\t})));\n\n\n/***/ },\n/* 384 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t    var suffixes = {\n\t        1: '\\'inci',\n\t        5: '\\'inci',\n\t        8: '\\'inci',\n\t        70: '\\'inci',\n\t        80: '\\'inci',\n\t        2: '\\'nci',\n\t        7: '\\'nci',\n\t        20: '\\'nci',\n\t        50: '\\'nci',\n\t        3: '\\'üncü',\n\t        4: '\\'üncü',\n\t        100: '\\'üncü',\n\t        6: '\\'ncı',\n\t        9: '\\'uncu',\n\t        10: '\\'uncu',\n\t        30: '\\'uncu',\n\t        60: '\\'ıncı',\n\t        90: '\\'ıncı'\n\t    };\n\t\n\t    var tr = moment.defineLocale('tr', {\n\t        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n\t        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n\t        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n\t        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n\t        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[bugün saat] LT',\n\t            nextDay : '[yarın saat] LT',\n\t            nextWeek : '[gelecek] dddd [saat] LT',\n\t            lastDay : '[dün] LT',\n\t            lastWeek : '[geçen] dddd [saat] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s sonra',\n\t            past : '%s önce',\n\t            s : 'birkaç saniye',\n\t            ss : '%d saniye',\n\t            m : 'bir dakika',\n\t            mm : '%d dakika',\n\t            h : 'bir saat',\n\t            hh : '%d saat',\n\t            d : 'bir gün',\n\t            dd : '%d gün',\n\t            M : 'bir ay',\n\t            MM : '%d ay',\n\t            y : 'bir yıl',\n\t            yy : '%d yıl'\n\t        },\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'Do':\n\t                case 'DD':\n\t                    return number;\n\t                default:\n\t                    if (number === 0) {  // special case for zero\n\t                        return number + '\\'ıncı';\n\t                    }\n\t                    var a = number % 10,\n\t                        b = number % 100 - a,\n\t                        c = number >= 100 ? 100 : null;\n\t                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tr;\n\t\n\t})));\n\n\n/***/ },\n/* 385 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n\t    // This is currently too difficult (maybe even impossible) to add.\n\t    var tzl = moment.defineLocale('tzl', {\n\t        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n\t        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n\t        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n\t        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n\t        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH.mm',\n\t            LTS : 'HH.mm.ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D. MMMM [dallas] YYYY',\n\t            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n\t            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n\t        },\n\t        meridiemParse: /d\\'o|d\\'a/i,\n\t        isPM : function (input) {\n\t            return 'd\\'o' === input.toLowerCase();\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours > 11) {\n\t                return isLower ? 'd\\'o' : 'D\\'O';\n\t            } else {\n\t                return isLower ? 'd\\'a' : 'D\\'A';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[oxhi à] LT',\n\t            nextDay : '[demà à] LT',\n\t            nextWeek : 'dddd [à] LT',\n\t            lastDay : '[ieiri à] LT',\n\t            lastWeek : '[sür el] dddd [lasteu à] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'osprei %s',\n\t            past : 'ja%s',\n\t            s : processRelativeTime,\n\t            ss : processRelativeTime,\n\t            m : processRelativeTime,\n\t            mm : processRelativeTime,\n\t            h : processRelativeTime,\n\t            hh : processRelativeTime,\n\t            d : processRelativeTime,\n\t            dd : processRelativeTime,\n\t            M : processRelativeTime,\n\t            MM : processRelativeTime,\n\t            y : processRelativeTime,\n\t            yy : processRelativeTime\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n\t        ordinal : '%d.',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n\t        var format = {\n\t            's': ['viensas secunds', '\\'iensas secunds'],\n\t            'ss': [number + ' secunds', '' + number + ' secunds'],\n\t            'm': ['\\'n míut', '\\'iens míut'],\n\t            'mm': [number + ' míuts', '' + number + ' míuts'],\n\t            'h': ['\\'n þora', '\\'iensa þora'],\n\t            'hh': [number + ' þoras', '' + number + ' þoras'],\n\t            'd': ['\\'n ziua', '\\'iensa ziua'],\n\t            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n\t            'M': ['\\'n mes', '\\'iens mes'],\n\t            'MM': [number + ' mesen', '' + number + ' mesen'],\n\t            'y': ['\\'n ar', '\\'iens ar'],\n\t            'yy': [number + ' ars', '' + number + ' ars']\n\t        };\n\t        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n\t    }\n\t\n\t    return tzl;\n\t\n\t})));\n\n\n/***/ },\n/* 386 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var tzm = moment.defineLocale('tzm', {\n\t        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n\t        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n\t        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n\t            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n\t            nextWeek: 'dddd [ⴴ] LT',\n\t            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n\t            lastWeek: 'dddd [ⴴ] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n\t            past : 'ⵢⴰⵏ %s',\n\t            s : 'ⵉⵎⵉⴽ',\n\t            ss : '%d ⵉⵎⵉⴽ',\n\t            m : 'ⵎⵉⵏⵓⴺ',\n\t            mm : '%d ⵎⵉⵏⵓⴺ',\n\t            h : 'ⵙⴰⵄⴰ',\n\t            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n\t            d : 'ⴰⵙⵙ',\n\t            dd : '%d oⵙⵙⴰⵏ',\n\t            M : 'ⴰⵢoⵓⵔ',\n\t            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n\t            y : 'ⴰⵙⴳⴰⵙ',\n\t            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n\t        },\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tzm;\n\t\n\t})));\n\n\n/***/ },\n/* 387 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var tzmLatn = moment.defineLocale('tzm-latn', {\n\t        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n\t        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n\t        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[asdkh g] LT',\n\t            nextDay: '[aska g] LT',\n\t            nextWeek: 'dddd [g] LT',\n\t            lastDay: '[assant g] LT',\n\t            lastWeek: 'dddd [g] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'dadkh s yan %s',\n\t            past : 'yan %s',\n\t            s : 'imik',\n\t            ss : '%d imik',\n\t            m : 'minuḍ',\n\t            mm : '%d minuḍ',\n\t            h : 'saɛa',\n\t            hh : '%d tassaɛin',\n\t            d : 'ass',\n\t            dd : '%d ossan',\n\t            M : 'ayowr',\n\t            MM : '%d iyyirn',\n\t            y : 'asgas',\n\t            yy : '%d isgasn'\n\t        },\n\t        week : {\n\t            dow : 6, // Saturday is the first day of the week.\n\t            doy : 12  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return tzmLatn;\n\t\n\t})));\n\n\n/***/ },\n/* 388 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js language configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var ugCn = moment.defineLocale('ug-cn', {\n\t        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n\t            '_'\n\t        ),\n\t        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n\t            '_'\n\t        ),\n\t        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n\t            '_'\n\t        ),\n\t        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n\t        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n\t        longDateFormat: {\n\t            LT: 'HH:mm',\n\t            LTS: 'HH:mm:ss',\n\t            L: 'YYYY-MM-DD',\n\t            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n\t            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n\t            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n\t        },\n\t        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (\n\t                meridiem === 'يېرىم كېچە' ||\n\t                meridiem === 'سەھەر' ||\n\t                meridiem === 'چۈشتىن بۇرۇن'\n\t            ) {\n\t                return hour;\n\t            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n\t                return hour + 12;\n\t            } else {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            }\n\t        },\n\t        meridiem: function (hour, minute, isLower) {\n\t            var hm = hour * 100 + minute;\n\t            if (hm < 600) {\n\t                return 'يېرىم كېچە';\n\t            } else if (hm < 900) {\n\t                return 'سەھەر';\n\t            } else if (hm < 1130) {\n\t                return 'چۈشتىن بۇرۇن';\n\t            } else if (hm < 1230) {\n\t                return 'چۈش';\n\t            } else if (hm < 1800) {\n\t                return 'چۈشتىن كېيىن';\n\t            } else {\n\t                return 'كەچ';\n\t            }\n\t        },\n\t        calendar: {\n\t            sameDay: '[بۈگۈن سائەت] LT',\n\t            nextDay: '[ئەتە سائەت] LT',\n\t            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n\t            lastDay: '[تۆنۈگۈن] LT',\n\t            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime: {\n\t            future: '%s كېيىن',\n\t            past: '%s بۇرۇن',\n\t            s: 'نەچچە سېكونت',\n\t            ss: '%d سېكونت',\n\t            m: 'بىر مىنۇت',\n\t            mm: '%d مىنۇت',\n\t            h: 'بىر سائەت',\n\t            hh: '%d سائەت',\n\t            d: 'بىر كۈن',\n\t            dd: '%d كۈن',\n\t            M: 'بىر ئاي',\n\t            MM: '%d ئاي',\n\t            y: 'بىر يىل',\n\t            yy: '%d يىل'\n\t        },\n\t\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'DDD':\n\t                    return number + '-كۈنى';\n\t                case 'w':\n\t                case 'W':\n\t                    return number + '-ھەپتە';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/,/g, '،');\n\t        },\n\t        week: {\n\t            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n\t            dow: 1, // Monday is the first day of the week.\n\t            doy: 7 // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ugCn;\n\t\n\t})));\n\n\n/***/ },\n/* 389 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    function plural(word, num) {\n\t        var forms = word.split('_');\n\t        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n\t    }\n\t    function relativeTimeWithPlural(number, withoutSuffix, key) {\n\t        var format = {\n\t            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n\t            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n\t            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n\t            'dd': 'день_дні_днів',\n\t            'MM': 'місяць_місяці_місяців',\n\t            'yy': 'рік_роки_років'\n\t        };\n\t        if (key === 'm') {\n\t            return withoutSuffix ? 'хвилина' : 'хвилину';\n\t        }\n\t        else if (key === 'h') {\n\t            return withoutSuffix ? 'година' : 'годину';\n\t        }\n\t        else {\n\t            return number + ' ' + plural(format[key], +number);\n\t        }\n\t    }\n\t    function weekdaysCaseReplace(m, format) {\n\t        var weekdays = {\n\t            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n\t            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n\t            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n\t        };\n\t\n\t        if (!m) {\n\t            return weekdays['nominative'];\n\t        }\n\t\n\t        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n\t            'accusative' :\n\t            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n\t                'genitive' :\n\t                'nominative');\n\t        return weekdays[nounCase][m.day()];\n\t    }\n\t    function processHoursFunction(str) {\n\t        return function () {\n\t            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n\t        };\n\t    }\n\t\n\t    var uk = moment.defineLocale('uk', {\n\t        months : {\n\t            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n\t            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n\t        },\n\t        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n\t        weekdays : weekdaysCaseReplace,\n\t        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD.MM.YYYY',\n\t            LL : 'D MMMM YYYY р.',\n\t            LLL : 'D MMMM YYYY р., HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: processHoursFunction('[Сьогодні '),\n\t            nextDay: processHoursFunction('[Завтра '),\n\t            lastDay: processHoursFunction('[Вчора '),\n\t            nextWeek: processHoursFunction('[У] dddd ['),\n\t            lastWeek: function () {\n\t                switch (this.day()) {\n\t                    case 0:\n\t                    case 3:\n\t                    case 5:\n\t                    case 6:\n\t                        return processHoursFunction('[Минулої] dddd [').call(this);\n\t                    case 1:\n\t                    case 2:\n\t                    case 4:\n\t                        return processHoursFunction('[Минулого] dddd [').call(this);\n\t                }\n\t            },\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'за %s',\n\t            past : '%s тому',\n\t            s : 'декілька секунд',\n\t            ss : relativeTimeWithPlural,\n\t            m : relativeTimeWithPlural,\n\t            mm : relativeTimeWithPlural,\n\t            h : 'годину',\n\t            hh : relativeTimeWithPlural,\n\t            d : 'день',\n\t            dd : relativeTimeWithPlural,\n\t            M : 'місяць',\n\t            MM : relativeTimeWithPlural,\n\t            y : 'рік',\n\t            yy : relativeTimeWithPlural\n\t        },\n\t        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n\t        meridiemParse: /ночі|ранку|дня|вечора/,\n\t        isPM: function (input) {\n\t            return /^(дня|вечора)$/.test(input);\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 4) {\n\t                return 'ночі';\n\t            } else if (hour < 12) {\n\t                return 'ранку';\n\t            } else if (hour < 17) {\n\t                return 'дня';\n\t            } else {\n\t                return 'вечора';\n\t            }\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n\t        ordinal: function (number, period) {\n\t            switch (period) {\n\t                case 'M':\n\t                case 'd':\n\t                case 'DDD':\n\t                case 'w':\n\t                case 'W':\n\t                    return number + '-й';\n\t                case 'D':\n\t                    return number + '-го';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return uk;\n\t\n\t})));\n\n\n/***/ },\n/* 390 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var months = [\n\t        'جنوری',\n\t        'فروری',\n\t        'مارچ',\n\t        'اپریل',\n\t        'مئی',\n\t        'جون',\n\t        'جولائی',\n\t        'اگست',\n\t        'ستمبر',\n\t        'اکتوبر',\n\t        'نومبر',\n\t        'دسمبر'\n\t    ];\n\t    var days = [\n\t        'اتوار',\n\t        'پیر',\n\t        'منگل',\n\t        'بدھ',\n\t        'جمعرات',\n\t        'جمعہ',\n\t        'ہفتہ'\n\t    ];\n\t\n\t    var ur = moment.defineLocale('ur', {\n\t        months : months,\n\t        monthsShort : months,\n\t        weekdays : days,\n\t        weekdaysShort : days,\n\t        weekdaysMin : days,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd، D MMMM YYYY HH:mm'\n\t        },\n\t        meridiemParse: /صبح|شام/,\n\t        isPM : function (input) {\n\t            return 'شام' === input;\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            if (hour < 12) {\n\t                return 'صبح';\n\t            }\n\t            return 'شام';\n\t        },\n\t        calendar : {\n\t            sameDay : '[آج بوقت] LT',\n\t            nextDay : '[کل بوقت] LT',\n\t            nextWeek : 'dddd [بوقت] LT',\n\t            lastDay : '[گذشتہ روز بوقت] LT',\n\t            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s بعد',\n\t            past : '%s قبل',\n\t            s : 'چند سیکنڈ',\n\t            ss : '%d سیکنڈ',\n\t            m : 'ایک منٹ',\n\t            mm : '%d منٹ',\n\t            h : 'ایک گھنٹہ',\n\t            hh : '%d گھنٹے',\n\t            d : 'ایک دن',\n\t            dd : '%d دن',\n\t            M : 'ایک ماہ',\n\t            MM : '%d ماہ',\n\t            y : 'ایک سال',\n\t            yy : '%d سال'\n\t        },\n\t        preparse: function (string) {\n\t            return string.replace(/،/g, ',');\n\t        },\n\t        postformat: function (string) {\n\t            return string.replace(/,/g, '،');\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return ur;\n\t\n\t})));\n\n\n/***/ },\n/* 391 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var uz = moment.defineLocale('uz', {\n\t        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n\t        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n\t        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n\t        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n\t        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'D MMMM YYYY, dddd HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Бугун соат] LT [да]',\n\t            nextDay : '[Эртага] LT [да]',\n\t            nextWeek : 'dddd [куни соат] LT [да]',\n\t            lastDay : '[Кеча соат] LT [да]',\n\t            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'Якин %s ичида',\n\t            past : 'Бир неча %s олдин',\n\t            s : 'фурсат',\n\t            ss : '%d фурсат',\n\t            m : 'бир дакика',\n\t            mm : '%d дакика',\n\t            h : 'бир соат',\n\t            hh : '%d соат',\n\t            d : 'бир кун',\n\t            dd : '%d кун',\n\t            M : 'бир ой',\n\t            MM : '%d ой',\n\t            y : 'бир йил',\n\t            yy : '%d йил'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return uz;\n\t\n\t})));\n\n\n/***/ },\n/* 392 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var uzLatn = moment.defineLocale('uz-latn', {\n\t        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n\t        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n\t        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n\t        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n\t        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'D MMMM YYYY, dddd HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Bugun soat] LT [da]',\n\t            nextDay : '[Ertaga] LT [da]',\n\t            nextWeek : 'dddd [kuni soat] LT [da]',\n\t            lastDay : '[Kecha soat] LT [da]',\n\t            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'Yaqin %s ichida',\n\t            past : 'Bir necha %s oldin',\n\t            s : 'soniya',\n\t            ss : '%d soniya',\n\t            m : 'bir daqiqa',\n\t            mm : '%d daqiqa',\n\t            h : 'bir soat',\n\t            hh : '%d soat',\n\t            d : 'bir kun',\n\t            dd : '%d kun',\n\t            M : 'bir oy',\n\t            MM : '%d oy',\n\t            y : 'bir yil',\n\t            yy : '%d yil'\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 7  // The week that contains Jan 1st is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return uzLatn;\n\t\n\t})));\n\n\n/***/ },\n/* 393 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var vi = moment.defineLocale('vi', {\n\t        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n\t        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n\t        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n\t        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n\t        weekdaysParseExact : true,\n\t        meridiemParse: /sa|ch/i,\n\t        isPM : function (input) {\n\t            return /^ch$/i.test(input);\n\t        },\n\t        meridiem : function (hours, minutes, isLower) {\n\t            if (hours < 12) {\n\t                return isLower ? 'sa' : 'SA';\n\t            } else {\n\t                return isLower ? 'ch' : 'CH';\n\t            }\n\t        },\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM [năm] YYYY',\n\t            LLL : 'D MMMM [năm] YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n\t            l : 'DD/M/YYYY',\n\t            ll : 'D MMM YYYY',\n\t            lll : 'D MMM YYYY HH:mm',\n\t            llll : 'ddd, D MMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay: '[Hôm nay lúc] LT',\n\t            nextDay: '[Ngày mai lúc] LT',\n\t            nextWeek: 'dddd [tuần tới lúc] LT',\n\t            lastDay: '[Hôm qua lúc] LT',\n\t            lastWeek: 'dddd [tuần rồi lúc] LT',\n\t            sameElse: 'L'\n\t        },\n\t        relativeTime : {\n\t            future : '%s tới',\n\t            past : '%s trước',\n\t            s : 'vài giây',\n\t            ss : '%d giây' ,\n\t            m : 'một phút',\n\t            mm : '%d phút',\n\t            h : 'một giờ',\n\t            hh : '%d giờ',\n\t            d : 'một ngày',\n\t            dd : '%d ngày',\n\t            M : 'một tháng',\n\t            MM : '%d tháng',\n\t            y : 'một năm',\n\t            yy : '%d năm'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}/,\n\t        ordinal : function (number) {\n\t            return number;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return vi;\n\t\n\t})));\n\n\n/***/ },\n/* 394 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var xPseudo = moment.defineLocale('x-pseudo', {\n\t        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n\t        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n\t        monthsParseExact : true,\n\t        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n\t        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n\t        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n\t        weekdaysParseExact : true,\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY HH:mm',\n\t            LLLL : 'dddd, D MMMM YYYY HH:mm'\n\t        },\n\t        calendar : {\n\t            sameDay : '[T~ódá~ý át] LT',\n\t            nextDay : '[T~ómó~rró~w át] LT',\n\t            nextWeek : 'dddd [át] LT',\n\t            lastDay : '[Ý~ést~érdá~ý át] LT',\n\t            lastWeek : '[L~ást] dddd [át] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'í~ñ %s',\n\t            past : '%s á~gó',\n\t            s : 'á ~féw ~sécó~ñds',\n\t            ss : '%d s~écóñ~ds',\n\t            m : 'á ~míñ~úté',\n\t            mm : '%d m~íñú~tés',\n\t            h : 'á~ñ hó~úr',\n\t            hh : '%d h~óúrs',\n\t            d : 'á ~dáý',\n\t            dd : '%d d~áýs',\n\t            M : 'á ~móñ~th',\n\t            MM : '%d m~óñt~hs',\n\t            y : 'á ~ýéár',\n\t            yy : '%d ý~éárs'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t        ordinal : function (number) {\n\t            var b = number % 10,\n\t                output = (~~(number % 100 / 10) === 1) ? 'th' :\n\t                (b === 1) ? 'st' :\n\t                (b === 2) ? 'nd' :\n\t                (b === 3) ? 'rd' : 'th';\n\t            return number + output;\n\t        },\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return xPseudo;\n\t\n\t})));\n\n\n/***/ },\n/* 395 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var yo = moment.defineLocale('yo', {\n\t        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n\t        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n\t        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n\t        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n\t        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'h:mm A',\n\t            LTS : 'h:mm:ss A',\n\t            L : 'DD/MM/YYYY',\n\t            LL : 'D MMMM YYYY',\n\t            LLL : 'D MMMM YYYY h:mm A',\n\t            LLLL : 'dddd, D MMMM YYYY h:mm A'\n\t        },\n\t        calendar : {\n\t            sameDay : '[Ònì ni] LT',\n\t            nextDay : '[Ọ̀la ni] LT',\n\t            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n\t            lastDay : '[Àna ni] LT',\n\t            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n\t            sameElse : 'L'\n\t        },\n\t        relativeTime : {\n\t            future : 'ní %s',\n\t            past : '%s kọjá',\n\t            s : 'ìsẹjú aayá die',\n\t            ss :'aayá %d',\n\t            m : 'ìsẹjú kan',\n\t            mm : 'ìsẹjú %d',\n\t            h : 'wákati kan',\n\t            hh : 'wákati %d',\n\t            d : 'ọjọ́ kan',\n\t            dd : 'ọjọ́ %d',\n\t            M : 'osù kan',\n\t            MM : 'osù %d',\n\t            y : 'ọdún kan',\n\t            yy : 'ọdún %d'\n\t        },\n\t        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n\t        ordinal : 'ọjọ́ %d',\n\t        week : {\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4 // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return yo;\n\t\n\t})));\n\n\n/***/ },\n/* 396 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var zhCn = moment.defineLocale('zh-cn', {\n\t        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n\t        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY/MM/DD',\n\t            LL : 'YYYY年M月D日',\n\t            LLL : 'YYYY年M月D日Ah点mm分',\n\t            LLLL : 'YYYY年M月D日ddddAh点mm分',\n\t            l : 'YYYY/M/D',\n\t            ll : 'YYYY年M月D日',\n\t            lll : 'YYYY年M月D日 HH:mm',\n\t            llll : 'YYYY年M月D日dddd HH:mm'\n\t        },\n\t        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t        meridiemHour: function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === '凌晨' || meridiem === '早上' ||\n\t                    meridiem === '上午') {\n\t                return hour;\n\t            } else if (meridiem === '下午' || meridiem === '晚上') {\n\t                return hour + 12;\n\t            } else {\n\t                // '中午'\n\t                return hour >= 11 ? hour : hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            var hm = hour * 100 + minute;\n\t            if (hm < 600) {\n\t                return '凌晨';\n\t            } else if (hm < 900) {\n\t                return '早上';\n\t            } else if (hm < 1130) {\n\t                return '上午';\n\t            } else if (hm < 1230) {\n\t                return '中午';\n\t            } else if (hm < 1800) {\n\t                return '下午';\n\t            } else {\n\t                return '晚上';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[今天]LT',\n\t            nextDay : '[明天]LT',\n\t            nextWeek : '[下]ddddLT',\n\t            lastDay : '[昨天]LT',\n\t            lastWeek : '[上]ddddLT',\n\t            sameElse : 'L'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd':\n\t                case 'D':\n\t                case 'DDD':\n\t                    return number + '日';\n\t                case 'M':\n\t                    return number + '月';\n\t                case 'w':\n\t                case 'W':\n\t                    return number + '周';\n\t                default:\n\t                    return number;\n\t            }\n\t        },\n\t        relativeTime : {\n\t            future : '%s内',\n\t            past : '%s前',\n\t            s : '几秒',\n\t            ss : '%d 秒',\n\t            m : '1 分钟',\n\t            mm : '%d 分钟',\n\t            h : '1 小时',\n\t            hh : '%d 小时',\n\t            d : '1 天',\n\t            dd : '%d 天',\n\t            M : '1 个月',\n\t            MM : '%d 个月',\n\t            y : '1 年',\n\t            yy : '%d 年'\n\t        },\n\t        week : {\n\t            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n\t            dow : 1, // Monday is the first day of the week.\n\t            doy : 4  // The week that contains Jan 4th is the first week of the year.\n\t        }\n\t    });\n\t\n\t    return zhCn;\n\t\n\t})));\n\n\n/***/ },\n/* 397 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var zhHk = moment.defineLocale('zh-hk', {\n\t        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n\t        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY/MM/DD',\n\t            LL : 'YYYY年M月D日',\n\t            LLL : 'YYYY年M月D日 HH:mm',\n\t            LLLL : 'YYYY年M月D日dddd HH:mm',\n\t            l : 'YYYY/M/D',\n\t            ll : 'YYYY年M月D日',\n\t            lll : 'YYYY年M月D日 HH:mm',\n\t            llll : 'YYYY年M月D日dddd HH:mm'\n\t        },\n\t        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n\t                return hour;\n\t            } else if (meridiem === '中午') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === '下午' || meridiem === '晚上') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            var hm = hour * 100 + minute;\n\t            if (hm < 600) {\n\t                return '凌晨';\n\t            } else if (hm < 900) {\n\t                return '早上';\n\t            } else if (hm < 1130) {\n\t                return '上午';\n\t            } else if (hm < 1230) {\n\t                return '中午';\n\t            } else if (hm < 1800) {\n\t                return '下午';\n\t            } else {\n\t                return '晚上';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[今天]LT',\n\t            nextDay : '[明天]LT',\n\t            nextWeek : '[下]ddddLT',\n\t            lastDay : '[昨天]LT',\n\t            lastWeek : '[上]ddddLT',\n\t            sameElse : 'L'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd' :\n\t                case 'D' :\n\t                case 'DDD' :\n\t                    return number + '日';\n\t                case 'M' :\n\t                    return number + '月';\n\t                case 'w' :\n\t                case 'W' :\n\t                    return number + '週';\n\t                default :\n\t                    return number;\n\t            }\n\t        },\n\t        relativeTime : {\n\t            future : '%s內',\n\t            past : '%s前',\n\t            s : '幾秒',\n\t            ss : '%d 秒',\n\t            m : '1 分鐘',\n\t            mm : '%d 分鐘',\n\t            h : '1 小時',\n\t            hh : '%d 小時',\n\t            d : '1 天',\n\t            dd : '%d 天',\n\t            M : '1 個月',\n\t            MM : '%d 個月',\n\t            y : '1 年',\n\t            yy : '%d 年'\n\t        }\n\t    });\n\t\n\t    return zhHk;\n\t\n\t})));\n\n\n/***/ },\n/* 398 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t//! moment.js locale configuration\n\t\n\t;(function (global, factory) {\n\t    true ? factory(__webpack_require__(274)) :\n\t   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n\t   factory(global.moment)\n\t}(this, (function (moment) { 'use strict';\n\t\n\t\n\t    var zhTw = moment.defineLocale('zh-tw', {\n\t        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n\t        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n\t        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n\t        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n\t        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n\t        longDateFormat : {\n\t            LT : 'HH:mm',\n\t            LTS : 'HH:mm:ss',\n\t            L : 'YYYY/MM/DD',\n\t            LL : 'YYYY年M月D日',\n\t            LLL : 'YYYY年M月D日 HH:mm',\n\t            LLLL : 'YYYY年M月D日dddd HH:mm',\n\t            l : 'YYYY/M/D',\n\t            ll : 'YYYY年M月D日',\n\t            lll : 'YYYY年M月D日 HH:mm',\n\t            llll : 'YYYY年M月D日dddd HH:mm'\n\t        },\n\t        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n\t        meridiemHour : function (hour, meridiem) {\n\t            if (hour === 12) {\n\t                hour = 0;\n\t            }\n\t            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n\t                return hour;\n\t            } else if (meridiem === '中午') {\n\t                return hour >= 11 ? hour : hour + 12;\n\t            } else if (meridiem === '下午' || meridiem === '晚上') {\n\t                return hour + 12;\n\t            }\n\t        },\n\t        meridiem : function (hour, minute, isLower) {\n\t            var hm = hour * 100 + minute;\n\t            if (hm < 600) {\n\t                return '凌晨';\n\t            } else if (hm < 900) {\n\t                return '早上';\n\t            } else if (hm < 1130) {\n\t                return '上午';\n\t            } else if (hm < 1230) {\n\t                return '中午';\n\t            } else if (hm < 1800) {\n\t                return '下午';\n\t            } else {\n\t                return '晚上';\n\t            }\n\t        },\n\t        calendar : {\n\t            sameDay : '[今天] LT',\n\t            nextDay : '[明天] LT',\n\t            nextWeek : '[下]dddd LT',\n\t            lastDay : '[昨天] LT',\n\t            lastWeek : '[上]dddd LT',\n\t            sameElse : 'L'\n\t        },\n\t        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n\t        ordinal : function (number, period) {\n\t            switch (period) {\n\t                case 'd' :\n\t                case 'D' :\n\t                case 'DDD' :\n\t                    return number + '日';\n\t                case 'M' :\n\t                    return number + '月';\n\t                case 'w' :\n\t                case 'W' :\n\t                    return number + '週';\n\t                default :\n\t                    return number;\n\t            }\n\t        },\n\t        relativeTime : {\n\t            future : '%s內',\n\t            past : '%s前',\n\t            s : '幾秒',\n\t            ss : '%d 秒',\n\t            m : '1 分鐘',\n\t            mm : '%d 分鐘',\n\t            h : '1 小時',\n\t            hh : '%d 小時',\n\t            d : '1 天',\n\t            dd : '%d 天',\n\t            M : '1 個月',\n\t            MM : '%d 個月',\n\t            y : '1 年',\n\t            yy : '%d 年'\n\t        }\n\t    });\n\t\n\t    return zhTw;\n\t\n\t})));\n\n\n/***/ },\n/* 399 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dropdown_1 = __webpack_require__(269);\n\tvar FacetUtils_1 = __webpack_require__(95);\n\tvar DocumentInput_1 = __webpack_require__(400);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar SimpleFieldInput = (function (_super) {\n\t    __extends(SimpleFieldInput, _super);\n\t    function SimpleFieldInput(inputName, fieldName, endpoint) {\n\t        var _this = _super.call(this, inputName) || this;\n\t        _this.inputName = inputName;\n\t        _this.fieldName = fieldName;\n\t        _this.endpoint = endpoint;\n\t        return _this;\n\t    }\n\t    SimpleFieldInput.prototype.reset = function () {\n\t        this.dropDown.reset();\n\t    };\n\t    SimpleFieldInput.prototype.build = function () {\n\t        var _this = this;\n\t        var fieldInput = Dom_1.$$(_super.prototype.build.call(this));\n\t        this.buildFieldSelect().then(function () {\n\t            fieldInput.append(_this.dropDown.getElement());\n\t        });\n\t        this.element = fieldInput.el;\n\t        return this.element;\n\t    };\n\t    SimpleFieldInput.prototype.getValue = function () {\n\t        var value = this.dropDown ? this.dropDown.getValue() : '';\n\t        var queryBuilder = new QueryBuilder_1.QueryBuilder();\n\t        if (value) {\n\t            queryBuilder.advancedExpression.addFieldExpression(this.fieldName, '==', [value]);\n\t            return queryBuilder.build().aq;\n\t        }\n\t        else {\n\t            return '';\n\t        }\n\t    };\n\t    SimpleFieldInput.prototype.buildFieldSelect = function () {\n\t        var _this = this;\n\t        return this.endpoint.listFieldValues({\n\t            field: this.fieldName,\n\t            maximumNumberOfValues: 50\n\t        }).then(function (values) {\n\t            var options = [''];\n\t            _.each(values, function (value) {\n\t                options.push(value.value);\n\t            });\n\t            _this.dropDown = new Dropdown_1.Dropdown(_this.onChange.bind(_this), options, function (str) {\n\t                return FacetUtils_1.FacetUtils.tryToGetTranslatedCaption(_this.fieldName, str);\n\t            });\n\t        });\n\t    };\n\t    return SimpleFieldInput;\n\t}(DocumentInput_1.DocumentInput));\n\texports.SimpleFieldInput = SimpleFieldInput;\n\n\n/***/ },\n/* 400 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AdvancedSearchEvents_1 = __webpack_require__(42);\n\tvar DocumentInput = (function () {\n\t    function DocumentInput(inputName) {\n\t        this.inputName = inputName;\n\t    }\n\t    DocumentInput.prototype.reset = function () {\n\t    };\n\t    DocumentInput.prototype.build = function () {\n\t        var documentInput = Dom_1.$$('div', { className: 'coveo-advanced-search-document-input-section' });\n\t        var label = Dom_1.$$('span', { className: 'coveo-advanced-search-label' });\n\t        label.text(this.inputName);\n\t        documentInput.append(label.el);\n\t        this.element = documentInput.el;\n\t        return this.element;\n\t    };\n\t    DocumentInput.prototype.getValue = function () {\n\t        return '';\n\t    };\n\t    DocumentInput.prototype.updateQuery = function (queryBuilder) {\n\t        var value = this.getValue();\n\t        if (value) {\n\t            queryBuilder.advancedExpression.add(this.getValue());\n\t        }\n\t    };\n\t    DocumentInput.prototype.onChange = function () {\n\t        if (this.element) {\n\t            Dom_1.$$(this.element).trigger(AdvancedSearchEvents_1.AdvancedSearchEvents.executeAdvancedSearch);\n\t        }\n\t    };\n\t    return DocumentInput;\n\t}());\n\texports.DocumentInput = DocumentInput;\n\n\n/***/ },\n/* 401 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dropdown_1 = __webpack_require__(269);\n\tvar TextInput_1 = __webpack_require__(261);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DocumentInput_1 = __webpack_require__(400);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar AdvancedFieldInput = (function (_super) {\n\t    __extends(AdvancedFieldInput, _super);\n\t    function AdvancedFieldInput(inputName, fieldName) {\n\t        var _this = _super.call(this, inputName) || this;\n\t        _this.inputName = inputName;\n\t        _this.fieldName = fieldName;\n\t        return _this;\n\t    }\n\t    AdvancedFieldInput.prototype.reset = function () {\n\t        this.mode.reset();\n\t        this.input.reset();\n\t    };\n\t    AdvancedFieldInput.prototype.build = function () {\n\t        var fieldInput = Dom_1.$$(_super.prototype.build.call(this));\n\t        this.mode = new Dropdown_1.Dropdown(this.onChange.bind(this), ['Contains', 'DoesNotContain', 'Matches']);\n\t        fieldInput.append(this.mode.getElement());\n\t        this.input = new TextInput_1.TextInput(this.onChange.bind(this), '');\n\t        fieldInput.append(this.input.getElement());\n\t        this.element = fieldInput.el;\n\t        return this.element;\n\t    };\n\t    AdvancedFieldInput.prototype.getValue = function () {\n\t        var inputValue = this.input.getValue();\n\t        var builder = new QueryBuilder_1.QueryBuilder();\n\t        if (inputValue) {\n\t            switch (this.mode.getValue()) {\n\t                case 'Contains':\n\t                    builder.advancedExpression.addFieldExpression(this.fieldName, '=', [inputValue]);\n\t                    return builder.build().aq;\n\t                case 'DoesNotContain':\n\t                    builder.advancedExpression.addFieldExpression(this.fieldName, '<>', [inputValue]);\n\t                    return builder.build().aq;\n\t                default:\n\t                    builder.advancedExpression.addFieldExpression(this.fieldName, '==', [inputValue]);\n\t                    return builder.build().aq;\n\t            }\n\t        }\n\t        return '';\n\t    };\n\t    return AdvancedFieldInput;\n\t}(DocumentInput_1.DocumentInput));\n\texports.AdvancedFieldInput = AdvancedFieldInput;\n\n\n/***/ },\n/* 402 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Dropdown_1 = __webpack_require__(269);\n\tvar NumericSpinner_1 = __webpack_require__(270);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar DocumentInput_1 = __webpack_require__(400);\n\tvar QueryBuilder_1 = __webpack_require__(79);\n\tvar SizeInput = (function (_super) {\n\t    __extends(SizeInput, _super);\n\t    function SizeInput() {\n\t        return _super.call(this, 'Size') || this;\n\t    }\n\t    SizeInput.prototype.reset = function () {\n\t        this.modeSelect.reset();\n\t        this.sizeInput.reset();\n\t    };\n\t    SizeInput.prototype.build = function () {\n\t        var sizeInput = Dom_1.$$(_super.prototype.build.call(this));\n\t        var sizeInputSection = Dom_1.$$('div', { className: 'coveo-size-input-mode-section' });\n\t        this.modeSelect = new Dropdown_1.Dropdown(this.onChange.bind(this), SizeInput.modes);\n\t        this.modeSelect.setId('coveo-size-input-mode');\n\t        sizeInputSection.append(this.modeSelect.getElement());\n\t        this.sizeInput = new NumericSpinner_1.NumericSpinner(this.onChange.bind(this));\n\t        sizeInputSection.append(this.sizeInput.getElement());\n\t        this.sizeSelect = new Dropdown_1.Dropdown(this.onChange.bind(this), SizeInput.sizes);\n\t        this.sizeSelect.setId('coveo-size-input-select');\n\t        sizeInputSection.append(this.sizeSelect.getElement());\n\t        sizeInput.append(sizeInputSection.el);\n\t        this.element = sizeInput.el;\n\t        return this.element;\n\t    };\n\t    SizeInput.prototype.getValue = function () {\n\t        var size = this.getSizeInBytes();\n\t        var queryBuilder = new QueryBuilder_1.QueryBuilder();\n\t        if (size) {\n\t            switch (this.modeSelect.getValue()) {\n\t                case 'AtLeast':\n\t                    queryBuilder.advancedExpression.addFieldExpression('@size', '>=', [this.getSizeInBytes().toString()]);\n\t                    return queryBuilder.build().aq;\n\t                default:\n\t                    queryBuilder.advancedExpression.addFieldExpression('@size', '<=', [this.getSizeInBytes().toString()]);\n\t                    return queryBuilder.build().aq;\n\t            }\n\t        }\n\t        return '';\n\t    };\n\t    SizeInput.prototype.getSizeInBytes = function () {\n\t        var size = this.sizeInput.getFloatValue();\n\t        switch (this.sizeSelect.getValue()) {\n\t            case 'KB':\n\t                return size * 1024;\n\t            case 'MB':\n\t                return size * Math.pow(1024, 2);\n\t            default:\n\t                return size;\n\t        }\n\t    };\n\t    return SizeInput;\n\t}(DocumentInput_1.DocumentInput));\n\tSizeInput.modes = ['AtLeast', 'AtMost'];\n\tSizeInput.sizes = ['KB', 'MB', 'Bytes'];\n\texports.SizeInput = SizeInput;\n\n\n/***/ },\n/* 403 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\tvar Subscription_1 = __webpack_require__(404);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar QueryUtils_1 = __webpack_require__(23);\n\tvar _ = __webpack_require__(16);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\t/**\n\t * The FollowItem component renders a widget that the end user can click to follow a particular item (document). A user\n\t * following an item receives email notifications when the item changes.\n\t *\n\t * **Note:**\n\t * > A {@link SearchAlerts} component must be present in the page for this component to work. It is also necessary to\n\t * > meet certain requirements to be able to use this component (see\n\t * > [Deploying Search Alerts on a Coveo JS Search Page](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=248)).\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar FollowItem = (function (_super) {\n\t    __extends(FollowItem, _super);\n\t    /**\n\t     * Creates a new FollowItem component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the FollowItem component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time)\n\t     * @param result The result to associate the component with.\n\t     */\n\t    function FollowItem(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, FollowItem.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, FollowItem, options);\n\t        Assert_1.Assert.exists(_this.result);\n\t        _this.container = Dom_1.$$(_this.element);\n\t        _this.text = Dom_1.$$('span');\n\t        _this.container.append(_this.text.el);\n\t        _this.container.on('click', function () { return _this.toggleFollow(); });\n\t        _this.container.setAttribute('tabindex', '0');\n\t        _this.bind.on(_this.container, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, function () { return _this.toggleFollow(); }));\n\t        _this.bind.onRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsDeleted, function (args) { return _this.handleSubscriptionDeleted(args); });\n\t        _this.bind.onRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsCreated, function (args) { return _this.handleSubscriptionCreated(args); });\n\t        _this.container.addClass('coveo-follow-item-loading');\n\t        _this.updateIsFollowed();\n\t        return _this;\n\t    }\n\t    FollowItem.prototype.setFollowed = function (subscription) {\n\t        this.container.removeClass('coveo-follow-item-loading');\n\t        this.subscription = subscription;\n\t        this.container.addClass('coveo-follow-item-followed');\n\t        this.text.text(Strings_1.l('SearchAlerts_unFollowing'));\n\t    };\n\t    FollowItem.prototype.setNotFollowed = function () {\n\t        this.container.removeClass('coveo-follow-item-loading');\n\t        this.subscription = FollowItem.buildFollowRequest(this.getId(), this.result.title, this.options);\n\t        this.container.removeClass('coveo-follow-item-followed');\n\t        this.text.text(Strings_1.l('SearchAlerts_follow'));\n\t    };\n\t    /**\n\t     * Follows the item if not already following it. Stops following the item otherwise.\n\t     *\n\t     * Also logs the appropriate event in the usage analytics (either `searchAlertsFollowDocument` or\n\t     * `searchAlertsUnfollowDocument`).\n\t     */\n\t    FollowItem.prototype.toggleFollow = function () {\n\t        var _this = this;\n\t        if (!this.container.hasClass('coveo-follow-item-loading')) {\n\t            this.container.removeClass('coveo-follow-item-followed');\n\t            this.container.addClass('coveo-follow-item-loading');\n\t            if (this.subscription.id) {\n\t                this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsUnfollowDocument);\n\t                this.queryController.getEndpoint()\n\t                    .deleteSubscription(this.subscription)\n\t                    .then(function () {\n\t                    var eventArgs = {\n\t                        subscription: _this.subscription,\n\t                        dom: _this.element\n\t                    };\n\t                    Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsDeleted, eventArgs);\n\t                })\n\t                    .catch(function () {\n\t                    _this.container.removeClass('coveo-follow-item-loading');\n\t                    var eventArgs = {\n\t                        dom: _this.element\n\t                    };\n\t                    Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsFail, eventArgs);\n\t                });\n\t            }\n\t            else {\n\t                this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsFollowDocument);\n\t                this.queryController.getEndpoint().follow(this.subscription)\n\t                    .then(function (subscription) {\n\t                    var eventArgs = {\n\t                        subscription: subscription,\n\t                        dom: _this.element\n\t                    };\n\t                    Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsCreated, eventArgs);\n\t                })\n\t                    .catch(function () {\n\t                    _this.container.removeClass('coveo-follow-item-loading');\n\t                    var eventArgs = {\n\t                        dom: _this.element\n\t                    };\n\t                    Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsFail, eventArgs);\n\t                });\n\t            }\n\t        }\n\t    };\n\t    FollowItem.prototype.getText = function () {\n\t        return this.text.text();\n\t    };\n\t    FollowItem.prototype.updateIsFollowed = function () {\n\t        var _this = this;\n\t        this.queryController.getEndpoint()\n\t            .listSubscriptions()\n\t            .then(function (subscriptions) {\n\t            if (_.isArray(subscriptions)) {\n\t                var subscription = _.find(subscriptions, function (subscription) {\n\t                    var typeConfig = subscription.typeConfig;\n\t                    return typeConfig && typeConfig.id != null && typeConfig.id == _this.getId();\n\t                });\n\t                if (subscription != null) {\n\t                    _this.setFollowed(subscription);\n\t                }\n\t                else {\n\t                    _this.setNotFollowed();\n\t                }\n\t            }\n\t            else {\n\t                _this.remove();\n\t            }\n\t        })\n\t            .catch(function () {\n\t            _this.remove();\n\t        });\n\t    };\n\t    FollowItem.prototype.handleSubscriptionDeleted = function (args) {\n\t        if (args.subscription && args.subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followDocument) {\n\t            var typeConfig = args.subscription.typeConfig;\n\t            if (typeConfig.id == this.getId()) {\n\t                this.setNotFollowed();\n\t            }\n\t        }\n\t    };\n\t    FollowItem.prototype.handleSubscriptionCreated = function (args) {\n\t        if (args.subscription && args.subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followDocument) {\n\t            var typeConfig = args.subscription.typeConfig;\n\t            if (typeConfig.id == this.getId()) {\n\t                this.setFollowed(args.subscription);\n\t            }\n\t        }\n\t    };\n\t    FollowItem.prototype.remove = function () {\n\t        this.element.parentElement && this.element.parentElement.removeChild(this.element);\n\t    };\n\t    FollowItem.prototype.getId = function () {\n\t        return Utils_1.Utils.getFieldValue(this.result, 'sysurihash') || Utils_1.Utils.getFieldValue(this.result, 'urihash');\n\t    };\n\t    FollowItem.buildFollowRequest = function (id, title, options) {\n\t        var typeCofig = {\n\t            id: id,\n\t            title: title\n\t        };\n\t        if (options.modifiedDateField) {\n\t            typeCofig.modifiedDateField = options.modifiedDateField;\n\t        }\n\t        if (options.watchedFields) {\n\t            typeCofig.watchedFields = options.watchedFields;\n\t        }\n\t        return {\n\t            type: Subscription_1.SUBSCRIPTION_TYPE.followDocument,\n\t            typeConfig: typeCofig,\n\t            name: title\n\t        };\n\t    };\n\t    FollowItem.prototype.logAnalyticsEvent = function (type) {\n\t        this.usageAnalytics.logCustomEvent(type, {\n\t            author: QueryUtils_1.QueryUtils.getAuthor(this.result),\n\t            documentLanguage: QueryUtils_1.QueryUtils.getLanguage(this.result),\n\t            documentSource: QueryUtils_1.QueryUtils.getSource(this.result),\n\t            documentTitle: this.result.title,\n\t            contentIDValue: QueryUtils_1.QueryUtils.getPermanentId(this.result).fieldValue,\n\t            contentIDKey: QueryUtils_1.QueryUtils.getPermanentId(this.result).fieldUsed\n\t        }, this.element);\n\t    };\n\t    return FollowItem;\n\t}(Component_1.Component));\n\tFollowItem.ID = 'FollowItem';\n\tFollowItem.fields = [\n\t    'urihash'\n\t];\n\t/**\n\t * The options for the follow item component\n\t * @componentOptions\n\t */\n\tFollowItem.options = {\n\t    /**\n\t     * Specifies the {@link ISubscriptionItemRequest.watchedFields} to use when sending the\n\t     * {@link ISubscriptionItemRequest}.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    watchedFields: ComponentOptions_1.ComponentOptions.buildFieldsOption(),\n\t    /**\n\t     * Specifies the {@link ISubscriptionItemRequest.modifiedDateField} to use when sending the\n\t     * {@link ISubscriptionItemRequest}.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    modifiedDateField: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t};\n\texports.FollowItem = FollowItem;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FollowItem);\n\n\n/***/ },\n/* 404 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.SUBSCRIPTION_TYPE = {\n\t    followQuery: 'followQuery',\n\t    followDocument: 'followDocument',\n\t};\n\n\n/***/ },\n/* 405 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar SearchAlertsMessage_1 = __webpack_require__(406);\n\tvar SettingsEvents_1 = __webpack_require__(54);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Querybox_1 = __webpack_require__(187);\n\tvar Omnibox_1 = __webpack_require__(191);\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\tvar Subscription_1 = __webpack_require__(404);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\tvar AnalyticsActionListMeta_1 = __webpack_require__(127);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The Search Alerts component renders items in the {@link Settings} menu that allow the end user to follow queries\n\t * and to manage search alerts. A user following a query receives email notifications when the query results change.\n\t *\n\t * **Note:**\n\t * > It is necessary to meet certain requirements to be able to use this component (see\n\t * > [Deploying Search Alerts on a Coveo JS Search Page](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=248)).\n\t *\n\t * See also the {@link FollowItem} component.\n\t */\n\tvar SearchAlerts = (function (_super) {\n\t    __extends(SearchAlerts, _super);\n\t    /**\n\t     * Creates a new SearchAlerts component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the SearchAlerts component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function SearchAlerts(element, options, bindings) {\n\t        var _this = _super.call(this, element, SearchAlerts.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, SearchAlerts, options);\n\t        if (_this.options.enableMessage) {\n\t            _this.message = new SearchAlertsMessage_1.SearchAlertsMessage(element, { closeDelay: _this.options.messageCloseDelay }, _this.getBindings());\n\t        }\n\t        if (!_this.queryController.getEndpoint().options.isGuestUser) {\n\t            _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t                if (_this.options.enableManagePanel) {\n\t                    args.menuData.push({\n\t                        text: Strings_1.l('SearchAlerts_Panel'),\n\t                        className: 'coveo-subscriptions-panel',\n\t                        onOpen: function () { return _this.openPanel(); },\n\t                        onClose: function () { return _this.close(); }\n\t                    });\n\t                }\n\t            });\n\t        }\n\t        var once = false;\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function () {\n\t            if (!once) {\n\t                once = true;\n\t                _this.queryController.getEndpoint().listSubscriptions()\n\t                    .then(function () {\n\t                    _this.bind.onRootElement(SettingsEvents_1.SettingsEvents.settingsPopulateMenu, function (args) {\n\t                        if (_this.options.enableFollowQuery) {\n\t                            args.menuData.push({\n\t                                text: Strings_1.l('SearchAlerts_followQuery'),\n\t                                className: 'coveo-follow-query',\n\t                                tooltip: Strings_1.l('FollowQueryDescription'),\n\t                                onOpen: function () { return _this.followQuery(); },\n\t                                onClose: function () {\n\t                                }\n\t                            });\n\t                        }\n\t                    });\n\t                })\n\t                    .catch(function (e) {\n\t                    // Trap 503 error, as the listSubscription call is called on every page initialization\n\t                    // to check for current subscriptions. By default, the search alert service is not enabled for most organization\n\t                    // Don't want to pollute the console with un-needed noise and confusion\n\t                    if (e.status != 503) {\n\t                        throw e;\n\t                    }\n\t                });\n\t            }\n\t        });\n\t        return _this;\n\t    }\n\t    /**\n\t     * Follows the last query. The user will start receiving email notifications when the query results change.\n\t     *\n\t     * Also logs the `searchAlertsFollowQuery` event in the usage analytics with the name of the request as meta data.\n\t     */\n\t    SearchAlerts.prototype.followQuery = function () {\n\t        var _this = this;\n\t        var queryBuilder = this.queryController.createQueryBuilder({});\n\t        var request = this.buildFollowQueryRequest(queryBuilder.build(), this.options);\n\t        this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsFollowQuery, {\n\t            subscription: request.name\n\t        }, this.element);\n\t        this.queryController.getEndpoint().follow(request)\n\t            .then(function (subscription) {\n\t            if (subscription) {\n\t                var eventArgs = {\n\t                    subscription: subscription,\n\t                    dom: _this.findQueryBoxDom()\n\t                };\n\t                Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsCreated, eventArgs);\n\t            }\n\t            else {\n\t                _this.triggerSearchAlertsFail();\n\t            }\n\t        })\n\t            .catch(function () {\n\t            _this.triggerSearchAlertsFail();\n\t        });\n\t    };\n\t    /**\n\t     * Opens the **Manage Alerts** panel. This panel allows the end user to stop following queries or items. It also\n\t     * allows the end user to specify email notification frequency for each followed query or item.\n\t     */\n\t    SearchAlerts.prototype.openPanel = function () {\n\t        var _this = this;\n\t        var title = Dom_1.$$('div');\n\t        var close = Dom_1.$$('div', {\n\t            className: 'coveo-subscriptions-panel-close'\n\t        }, Dom_1.$$('span', {\n\t            className: 'coveo-icon'\n\t        }));\n\t        var titleInfo = Dom_1.$$('div', {\n\t            className: 'coveo-subscriptions-panel-title'\n\t        }, Strings_1.l('SearchAlerts_Panel'));\n\t        title.append(close.el);\n\t        title.append(titleInfo.el);\n\t        var container = Dom_1.$$('div');\n\t        container.el.innerHTML = \"\\n      <table class='coveo-subscriptions-panel-content' cellspacing='0'>\\n        <thead>\\n          <tr>\\n            <th class='coveo-subscriptions-panel-content-type'>\" + Strings_1.l('SearchAlerts_Type') + \"</th>\\n            <th>\" + Strings_1.l('SearchAlerts_Content') + \"</th>\\n            <th>\" + Strings_1.l('SearchAlerts_Frequency') + \"</th>\\n            <th class='coveo-subscriptions-panel-content-actions'>\" + Strings_1.l('SearchAlerts_Actions') + \"</th>\\n          </tr>\\n        </thead>\\n        <tbody class='coveo-subscriptions-panel-spacer'>\\n          <tr>\\n            <td colsspan='3'></td>\\n          </tr>\\n        </tbody>\\n        <tbody class='coveo-subscriptions-panel-subscriptions'>\\n          <tr class='coveo-subscriptions-panel-no-subscriptions'>\\n            <td colsspan='3'>\" + Strings_1.l('SearchAlerts_PanelNoSearchAlerts') + \"</td>\\n          </tr>\\n        </tbody>\\n      </table>\";\n\t        return this.queryController.getEndpoint().listSubscriptions().then(function (subscriptions) {\n\t            _.each(subscriptions, function (subscription) {\n\t                _this.addSearchAlert(subscription, container);\n\t            });\n\t        })\n\t            .catch(function () {\n\t            container.el.innerHTML = '<div class=\\'coveo-subscriptions-panel-fail\\'>' + Strings_1.l('SearchAlerts_Fail') + '</div>';\n\t        })\n\t            .finally(function () {\n\t            _this.modal = ExternalModulesShim_1.ModalBox.open(container.el, {\n\t                titleClose: false,\n\t                overlayClose: true,\n\t                title: title.el.outerHTML,\n\t                className: 'coveo-subscriptions-panel'\n\t            });\n\t            Dom_1.$$(Dom_1.$$(_this.modal.modalBox).find('.coveo-subscriptions-panel-close')).on('click', function () {\n\t                _this.close();\n\t            });\n\t        });\n\t    };\n\t    SearchAlerts.prototype.handleSearchAlertsFail = function () {\n\t        this.close();\n\t        if (this.modal != null) {\n\t            this.modal.content.innerHTML = '<div class=\\'coveo-subscriptions-panel-fail\\'>' + Strings_1.l('SearchAlerts_Fail') + '</div>';\n\t        }\n\t    };\n\t    SearchAlerts.prototype.close = function () {\n\t        if (this.modal) {\n\t            this.modal.close();\n\t            this.modal = null;\n\t        }\n\t    };\n\t    SearchAlerts.prototype.addSearchAlert = function (subscription, container) {\n\t        var _this = this;\n\t        var frequencies = [\n\t            { value: 'monthly', label: Strings_1.l('Monthly') },\n\t            { value: 'daily', label: Strings_1.l('Daily') },\n\t            { value: 'monday', label: Strings_1.l('Monday') },\n\t            { value: 'tuesday', label: Strings_1.l('Tuesday') },\n\t            { value: 'wednesday', label: Strings_1.l('Wednesday') },\n\t            { value: 'thursday', label: Strings_1.l('Thursday') },\n\t            { value: 'friday', label: Strings_1.l('Friday') },\n\t            { value: 'saturday', label: Strings_1.l('Saturday') },\n\t            { value: 'sunday', label: Strings_1.l('Sunday') }\n\t        ];\n\t        var context;\n\t        if (subscription.name) {\n\t            context = _.escape(subscription.name);\n\t        }\n\t        else if (subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followQuery) {\n\t            var typeConfig = subscription.typeConfig;\n\t            context = _.escape(typeConfig.query.q) || Strings_1.l('EmptyQuery');\n\t        }\n\t        else {\n\t            var typeConfig = subscription.typeConfig;\n\t            context = _.escape(typeConfig.title || typeConfig.id);\n\t        }\n\t        var element = Dom_1.$$('tr');\n\t        element.addClass('coveo-subscriptions-panel-subscription');\n\t        element.el.innerHTML = \"\\n      <td class='coveo-subscriptions-panel-content-type'>\" + Strings_1.l('SearchAlerts_Type_' + subscription.type) + \"</td>\\n      <td>\\n        <div class='coveo-subscriptions-panel-context' title='\" + context + \"'>\\n          \" + context + \"\\n        </div>\\n      </td>\\n      <td>\\n        <div class='coveo-subscriptions-panel-frequency'>\\n          <select>\\n            \" + _.map(frequencies, function (frequency) { return \"<option value='\" + frequency.value + \"'>\" + frequency.label + \"</option>\"; }) + \"\\n          </select>\\n        </div>\\n      </td>\\n      <td class='coveo-subscriptions-panel-content-actions'>\\n        <div class='coveo-subscriptions-panel-action coveo-subscriptions-panel-action-unfollow'>\" + Strings_1.l('SearchAlerts_unFollowing') + \"</div>\\n        <div class='coveo-subscriptions-panel-action coveo-subscriptions-panel-action-follow'>\" + Strings_1.l('SearchAlerts_follow') + \"</div>\\n      </td>\";\n\t        var noSearchAlerts = container.find('.coveo-subscriptions-panel-no-subscriptions');\n\t        element.insertBefore(noSearchAlerts);\n\t        var frequencyInput = element.find('.coveo-subscriptions-panel-frequency select');\n\t        frequencyInput.value = subscription.frequency;\n\t        Dom_1.$$(frequencyInput).on('change', function (event) {\n\t            subscription.frequency = frequencyInput.value;\n\t            _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsUpdateSubscription, {\n\t                subscription: subscription.name,\n\t                frequency: subscription.frequency\n\t            }, _this.element);\n\t            _this.updateAndSyncSearchAlert(subscription);\n\t        });\n\t        Dom_1.$$(element.find('.coveo-subscriptions-panel-action-unfollow')).on('click', function () {\n\t            element.addClass('coveo-subscription-unfollowed');\n\t            _this.queryController.getEndpoint()\n\t                .deleteSubscription(subscription)\n\t                .then(function () {\n\t                if (subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followDocument) {\n\t                    _this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsUnfollowDocument, subscription);\n\t                }\n\t                else if (subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followQuery) {\n\t                    _this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsUnfollowQuery, subscription);\n\t                }\n\t                delete subscription.id;\n\t                var eventArgs = { subscription: subscription };\n\t                Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsDeleted, eventArgs);\n\t            })\n\t                .catch(function () {\n\t                _this.handleSearchAlertsFail();\n\t            });\n\t        });\n\t        Dom_1.$$(element.find('.coveo-subscriptions-panel-action-follow')).on('click', function () {\n\t            element.removeClass('coveo-subscription-unfollowed');\n\t            _this.queryController.getEndpoint()\n\t                .follow(subscription)\n\t                .then(function (updatedSearchAlert) {\n\t                if (subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followDocument) {\n\t                    _this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsFollowDocument, subscription);\n\t                }\n\t                else if (subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followQuery) {\n\t                    _this.logAnalyticsEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.searchAlertsFollowQuery, subscription);\n\t                }\n\t                subscription.id = updatedSearchAlert.id;\n\t                var eventArgs = { subscription: subscription };\n\t                Dom_1.$$(_this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsCreated, eventArgs);\n\t            })\n\t                .catch(function () {\n\t                _this.handleSearchAlertsFail();\n\t            });\n\t        });\n\t    };\n\t    SearchAlerts.prototype.updateAndSyncSearchAlert = function (subscription) {\n\t        var _this = this;\n\t        this.queryController.getEndpoint()\n\t            .updateSubscription(subscription)\n\t            .then(function (updated) { return _.extend(subscription, updated); })\n\t            .catch(function () {\n\t            _this.handleSearchAlertsFail();\n\t        });\n\t    };\n\t    SearchAlerts.prototype.triggerSearchAlertsFail = function () {\n\t        var eventArgs = {\n\t            dom: this.findQueryBoxDom()\n\t        };\n\t        Dom_1.$$(this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsFail, eventArgs);\n\t    };\n\t    SearchAlerts.prototype.findQueryBoxDom = function () {\n\t        var dom;\n\t        var components = this.searchInterface.getComponents(Querybox_1.Querybox.ID);\n\t        if (components && components.length > 0) {\n\t            dom = _.first(components).element;\n\t        }\n\t        else {\n\t            var components_1 = this.searchInterface.getComponents(Omnibox_1.Omnibox.ID);\n\t            if (components_1 && components_1.length > 0) {\n\t                dom = _.first(components_1).element;\n\t            }\n\t        }\n\t        return dom;\n\t    };\n\t    SearchAlerts.prototype.buildFollowQueryRequest = function (query, options) {\n\t        var typeConfig = {\n\t            query: query\n\t        };\n\t        if (options.modifiedDateField) {\n\t            typeConfig.modifiedDateField = options.modifiedDateField;\n\t        }\n\t        return {\n\t            type: Subscription_1.SUBSCRIPTION_TYPE.followQuery,\n\t            typeConfig: typeConfig,\n\t            name: this.message.getFollowQueryMessage(query.q)\n\t        };\n\t    };\n\t    SearchAlerts.prototype.logAnalyticsEvent = function (cause, subscription) {\n\t        this.usageAnalytics.logCustomEvent(cause, {\n\t            subscription: subscription.name\n\t        }, this.element);\n\t    };\n\t    SearchAlerts.create = function (element, options, root) {\n\t        Assert_1.Assert.exists(element);\n\t        return new SearchAlerts(element, options, root);\n\t    };\n\t    return SearchAlerts;\n\t}(Component_1.Component));\n\tSearchAlerts.ID = 'SearchAlerts';\n\t/**\n\t * The options for the search alerts\n\t * @componentOptions\n\t */\n\tSearchAlerts.options = {\n\t    /**\n\t     * Specifies whether to add the **Manage Alerts** item in the {@link Settings} menu to allow the end user to manage\n\t     * search alerts.\n\t     *\n\t     * Clicking the **Manage Alerts** item calls the {@link SearchAlerts.openPanel} method.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableManagePanel: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies whether to add the **Follow Query** item in the {@link Settings} menu to allow the end user to follow\n\t     * the last query.\n\t     *\n\t     * Clicking the **Follow Query** item calls the {@link SearchAlerts.followQuery} method.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableFollowQuery: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * Specifies which field to use to represent the modification date when sending the\n\t     * {@link ISubscriptionQueryRequest}.\n\t     *\n\t     * Default value is `undefined`.\n\t     */\n\t    modifiedDateField: ComponentOptions_1.ComponentOptions.buildFieldOption(),\n\t    /**\n\t     * Specifies whether to display info and error messages when performing search alerts actions.\n\t     *\n\t     * If this options is `true`, the SearchAlerts constructor will automatically instantiate a\n\t     * {@link SearchAlertsMessage} component and set it to the {@link SearchAlerts.message} attribute.\n\t     *\n\t     * See also {@link SearchAlerts.options.messageCloseDelay}.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    enableMessage: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link SearchAlerts.options.enableMessage} is `true`, specifies how long to display the search alert messages\n\t     * (in milliseconds).\n\t     *\n\t     * Default value is `3000`. Minimum value is `0`.\n\t     */\n\t    messageCloseDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 3000, min: 0, depend: 'enableMessage' }),\n\t};\n\texports.SearchAlerts = SearchAlerts;\n\tInitialization_1.Initialization.registerAutoCreateComponent(SearchAlerts);\n\n\n/***/ },\n/* 406 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar SearchAlertEvents_1 = __webpack_require__(53);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\tvar Subscription_1 = __webpack_require__(404);\n\tvar PopupUtils_1 = __webpack_require__(73);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The SearchAlertsMessage component allows the {@link SearchAlerts} component to display messages.\n\t *\n\t * You should not include this component in your page. Instead, use a {@link SearchAlerts} component, and access the\n\t * {@link SearchAlerts.message} attribute.\n\t */\n\tvar SearchAlertsMessage = (function (_super) {\n\t    __extends(SearchAlertsMessage, _super);\n\t    /**\n\t     * Creates a new SearchAlertsMessage component\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the SearchAlertsMessage component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function SearchAlertsMessage(element, options, bindings) {\n\t        var _this = _super.call(this, element, SearchAlertsMessage.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.bind.onRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsCreated, function (args) { return _this.handleSubscriptionCreated(args); });\n\t        _this.bind.oneRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsFail, function (args) { return _this.handleSearchAlertsFail(args); });\n\t        _this.bind.oneRootElement(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsDeleted, function () { return _this.close(); });\n\t        _this.bind.oneRootElement(QueryEvents_1.QueryEvents.newQuery, function () { return _this.close(); });\n\t        return _this;\n\t    }\n\t    SearchAlertsMessage.prototype.getCssClass = function () {\n\t        return 'coveo-subscriptions-messages';\n\t    };\n\t    SearchAlertsMessage.prototype.getFollowQueryMessage = function (query, htmlFormatted) {\n\t        var _this = this;\n\t        if (htmlFormatted === void 0) { htmlFormatted = false; }\n\t        var populateMessageArguments = {\n\t            text: []\n\t        };\n\t        var getAdditionalTextFormatted = function () {\n\t            return _.map(populateMessageArguments.text, function (text) {\n\t                text = _this.formatMessageArgumentsText(text);\n\t                return \"\" + (htmlFormatted ? '<li>' : '(') + text + (htmlFormatted ? '</li>' : ')');\n\t            }).join(' ');\n\t        };\n\t        Dom_1.$$(this.root).trigger(SearchAlertEvents_1.SearchAlertsEvents.searchAlertsPopulateMessage, populateMessageArguments);\n\t        var additionalMessage = \"\" + (htmlFormatted ? '<ul>' : '') + getAdditionalTextFormatted() + (htmlFormatted ? '</ul>' : '');\n\t        var automaticallyBuiltMessage;\n\t        if (query && populateMessageArguments.text.length != 0) {\n\t            automaticallyBuiltMessage = _.escape(query) + \" \" + additionalMessage;\n\t        }\n\t        if (query && populateMessageArguments.text.length == 0) {\n\t            automaticallyBuiltMessage = \"\" + _.escape(query);\n\t        }\n\t        if (!query && populateMessageArguments.text.length != 0) {\n\t            automaticallyBuiltMessage = \"\" + additionalMessage;\n\t        }\n\t        if (!query && populateMessageArguments.text.length == 0) {\n\t            automaticallyBuiltMessage = htmlFormatted ? Strings_1.l('EmptyQuery') : _.unescape(Strings_1.l('EmptyQuery'));\n\t        }\n\t        return automaticallyBuiltMessage;\n\t    };\n\t    /**\n\t     * Displays a message near the passed dom attribute.\n\t     * @param dom Specifies where to display the message.\n\t     * @param message The message.\n\t     * @param error Specifies whether the message is an error message.\n\t     */\n\t    SearchAlertsMessage.prototype.showMessage = function (dom, message, error) {\n\t        var _this = this;\n\t        this.message = Dom_1.$$('div');\n\t        this.message.el.innerHTML = \"\\n      <div class='coveo-subscriptions-messages-message'>\\n        <div class='coveo-subscriptions-messages-info-close'></div>\\n        <div class='coveo-subscriptions-messages-content'>\" + message + \"</div>\\n      </div>\";\n\t        this.message.toggleClass('coveo-subscriptions-messages-error', error);\n\t        var closeButton = this.message.find('.coveo-subscriptions-messages-info-close');\n\t        Dom_1.$$(closeButton).on('click', function () { return _this.close(); });\n\t        PopupUtils_1.PopupUtils.positionPopup(this.message.el, dom.el, this.root, {\n\t            horizontal: PopupUtils_1.HorizontalAlignment.INNERLEFT,\n\t            vertical: PopupUtils_1.VerticalAlignment.BOTTOM,\n\t            verticalOffset: 12,\n\t            horizontalClip: true\n\t        }, this.root);\n\t        this.startCloseDelay();\n\t        this.message.on('mouseleave', function () {\n\t            _this.startCloseDelay();\n\t        });\n\t        this.message.on('mouseenter', function () {\n\t            _this.stopCloseDelay();\n\t        });\n\t    };\n\t    SearchAlertsMessage.prototype.formatMessageArgumentsText = function (text) {\n\t        if (_.isString(text)) {\n\t            text = _.escape(text);\n\t        }\n\t        else if (text.lineThrough) {\n\t            text = '<span style=\"text-decoration:line-through\">' + _.escape(text.value) + '</span>';\n\t        }\n\t        else {\n\t            text = _.escape(text.value);\n\t        }\n\t        return text;\n\t    };\n\t    SearchAlertsMessage.prototype.handleSubscriptionCreated = function (args) {\n\t        this.close();\n\t        if (args.dom != null) {\n\t            if (args.subscription.type == Subscription_1.SUBSCRIPTION_TYPE.followQuery) {\n\t                var typeConfig = args.subscription.typeConfig;\n\t                this.showMessage(Dom_1.$$(args.dom), Strings_1.l('SubscriptionsMessageFollowQuery', this.getFollowQueryMessage(typeConfig.query.q, true)), false);\n\t            }\n\t            else {\n\t                var typeConfig = args.subscription.typeConfig;\n\t                this.showMessage(Dom_1.$$(args.dom), Strings_1.l('SubscriptionsMessageFollow', _.escape(typeConfig.title)), false);\n\t            }\n\t        }\n\t    };\n\t    SearchAlertsMessage.prototype.handleSearchAlertsFail = function (args) {\n\t        this.close();\n\t        if (args.dom != null) {\n\t            this.showMessage(Dom_1.$$(args.dom), Strings_1.l('SearchAlerts_Fail'), true);\n\t        }\n\t    };\n\t    SearchAlertsMessage.prototype.startCloseDelay = function () {\n\t        var _this = this;\n\t        clearTimeout(this.closeTimeout);\n\t        this.closeTimeout = setTimeout(function () {\n\t            _this.close();\n\t        }, this.options.closeDelay);\n\t    };\n\t    SearchAlertsMessage.prototype.stopCloseDelay = function () {\n\t        clearTimeout(this.closeTimeout);\n\t    };\n\t    SearchAlertsMessage.prototype.close = function () {\n\t        if (this.message != null) {\n\t            clearTimeout(this.closeTimeout);\n\t            this.message.remove();\n\t            this.message = null;\n\t        }\n\t    };\n\t    return SearchAlertsMessage;\n\t}(Component_1.Component));\n\tSearchAlertsMessage.ID = 'SubscriptionsMessages';\n\t/**\n\t * The options for the SearchAlertsMessage component\n\t * @componentOptions\n\t */\n\tSearchAlertsMessage.options = {\n\t    /**\n\t     * Specifies how long to display the search alerts messages (in milliseconds).\n\t     *\n\t     * Default value is `3000`. Minimum value is `0`.\n\t     */\n\t    closeDelay: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 3000, min: 0 }),\n\t};\n\texports.SearchAlertsMessage = SearchAlertsMessage;\n\n\n/***/ },\n/* 407 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\t/**\n\t * The Text component embeds itself in a result template to output a simple text value.\n\t *\n\t * The only purpose of this component is to make it possible to easily add different text values to result templates\n\t * when using the Coveo JavaScript Search Interface Editor (see\n\t * [JavaScript Search Interface Editor](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=230)).\n\t *\n\t * If you are not designing a search interface using the Coveo JavaScript Search Interface Editor, using this component\n\t * is unnecessary.\n\t *\n\t * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n\t */\n\tvar Text = (function (_super) {\n\t    __extends(Text, _super);\n\t    /**\n\t     * Creates a new Text component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Text component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Text(element, options, bindings) {\n\t        var _this = _super.call(this, element, Text.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Text, options);\n\t        Dom_1.$$(_this.element).text(_this.options.value);\n\t        _this.element.style.fontSize = _this.options.size;\n\t        _this.element.style.fontStyle = _this.options.style;\n\t        _this.element.style.color = _this.options.color;\n\t        _this.element.style.fontWeight = _this.options.weight;\n\t        _this.element.style.textAlign = _this.options.textAlign;\n\t        _this.element.style.marginTop = _this.options.marginTop;\n\t        _this.element.style.marginBottom = _this.options.marginBottom;\n\t        _this.element.style.marginRight = _this.options.marginRight;\n\t        _this.element.style.marginLeft = _this.options.marginLeft;\n\t        _this.element.style.paddingTop = _this.options.paddingTop;\n\t        _this.element.style.paddingBottom = _this.options.paddingBottom;\n\t        _this.element.style.paddingLeft = _this.options.paddingLeft;\n\t        _this.element.style.paddingRight = _this.options.paddingRight;\n\t        return _this;\n\t    }\n\t    return Text;\n\t}(Component_1.Component));\n\tText.ID = 'Text';\n\t/**\n\t * @componentOptions\n\t */\n\tText.options = {\n\t    /**\n\t     * Specifies the localized string value that the component should render.\n\t     */\n\t    value: ComponentOptions_1.ComponentOptions.buildLocalizedStringOption(),\n\t    /**\n\t     * Specifies the size of the text (set as the `font-size` CSS property).\n\t     */\n\t    size: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the style of the text (set as the `font-style` CSS property).\n\t     */\n\t    style: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the color of the text (set as the `color` CSS property).\n\t     */\n\t    color: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the weight of the text (set as the `font-weight` CSS property).\n\t     */\n\t    weight: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the alignment of the text (set as the `text-align` CSS property).\n\t     */\n\t    textAlign: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the top margin of the text (set as the `margin-top` CSS property).\n\t     */\n\t    marginTop: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the bottom margin of the text (set as the `margin-bottom` CSS property).\n\t     */\n\t    marginBottom: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the left margin of the text (set as the `margin-left` CSS property).\n\t     */\n\t    marginLeft: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the right margin of the text (set as the `margin-right` CSS property).\n\t     */\n\t    marginRight: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the top padding of the text (set as the `padding-top` CSS property).\n\t     */\n\t    paddingTop: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the bottom padding of the text (set as the `padding-bottom` CSS property).\n\t     */\n\t    paddingBottom: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the left padding of the text (set as the `padding-left` CSS property).\n\t     */\n\t    paddingLeft: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the right padding of the text (set as the `padding-right` CSS property).\n\t     */\n\t    paddingRight: ComponentOptions_1.ComponentOptions.buildStringOption()\n\t};\n\texports.Text = Text;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Text);\n\n\n/***/ },\n/* 408 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Folding_1 = __webpack_require__(211);\n\tvar Initialization_1 = __webpack_require__(108);\n\t/**\n\t * This component inherits from the {@link Folding} component.\n\t * Folding conversations and threads requires different processing.\n\t * When you need to fold children under a parent item, use this component.<br/>\n\t * <b>This component works well with Chatter and Lithium.</b>\n\t */\n\tvar FoldingForThread = (function (_super) {\n\t    __extends(FoldingForThread, _super);\n\t    /**\n\t     * Create a new FoldingForThread component\n\t     * @param element\n\t     * @param options\n\t     * @param bindings\n\t     */\n\t    function FoldingForThread(element, options, bindings) {\n\t        var _this = _super.call(this, element, options, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options.getMoreResults = function (results) {\n\t            return Folding_1.Folding.foldWithParent(results)[0].attachments;\n\t        };\n\t        _this.options.getResult = function (result) {\n\t            var defaultResult = Folding_1.Folding.defaultGetResult(result);\n\t            defaultResult.childResults = defaultResult.attachments;\n\t            defaultResult.attachments = [];\n\t            return defaultResult;\n\t        };\n\t        return _this;\n\t    }\n\t    return FoldingForThread;\n\t}(Folding_1.Folding));\n\tFoldingForThread.ID = 'FoldingForThread';\n\texports.FoldingForThread = FoldingForThread;\n\tInitialization_1.Initialization.registerAutoCreateComponent(FoldingForThread);\n\n\n/***/ },\n/* 409 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Component_1 = __webpack_require__(109);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar ChatterUtils_1 = __webpack_require__(410);\n\tvar ChatterLikedBy = (function (_super) {\n\t    __extends(ChatterLikedBy, _super);\n\t    function ChatterLikedBy(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ChatterLikedBy.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ChatterLikedBy, options);\n\t        if (!Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(result, 'sflikedby')) && !Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(result, 'sflikedbyid'))) {\n\t            var likeNames = Utils_1.Utils.getFieldValue(result, 'sflikedby').split(';');\n\t            var likeIds = Utils_1.Utils.getFieldValue(result, 'sflikedbyid').split(';');\n\t            var rootElement = Dom_1.$$('div', {\n\t                className: 'coveo-chatter-result-box-row'\n\t            });\n\t            Dom_1.$$(element).append(rootElement.el);\n\t            var thumbIcon = Dom_1.$$('div', {\n\t                className: 'coveo-sprites-common-thumbup_inactive coveo-chatter-result-box-icon'\n\t            });\n\t            rootElement.append(thumbIcon.el);\n\t            var fullListElement = Dom_1.$$('div', {\n\t                className: 'coveo-chatter-result-likes'\n\t            });\n\t            rootElement.append(fullListElement.el);\n\t            _this.renderLikesList(fullListElement.el, result, likeNames, likeIds, _this.options.nbLikesToRender);\n\t        }\n\t        return _this;\n\t    }\n\t    ChatterLikedBy.prototype.renderLikesList = function (element, result, likeNames, likeIds, nbLikesToRender) {\n\t        var _this = this;\n\t        var tempElement = Dom_1.$$('div');\n\t        for (var i = 0; i < likeIds.length - 1 && (nbLikesToRender == 0 || i < nbLikesToRender); i++) {\n\t            tempElement.append(this.renderLikeLink(result, likeNames[i], likeIds[i]));\n\t            if ((nbLikesToRender == 0 || i < nbLikesToRender - 1) && i < likeIds.length - 2) {\n\t                tempElement.append(Dom_1.$$('span', {}, ', ').el);\n\t            }\n\t            else if (i < likeIds.length - 1) {\n\t                tempElement.append(Dom_1.$$('span', {}, \" \" + Strings_1.l('And').toLowerCase() + \" \").el);\n\t            }\n\t        }\n\t        if (nbLikesToRender == 0 || likeIds.length <= nbLikesToRender) {\n\t            tempElement.append(this.renderLikeLink(result, likeNames[likeIds.length - 1], likeIds[likeIds.length - 1]));\n\t        }\n\t        else {\n\t            var othersCount = likeIds.length - nbLikesToRender;\n\t            var clickableLink = Dom_1.$$('a');\n\t            clickableLink.text(\" \" + Strings_1.l('Others', othersCount.toString(), othersCount));\n\t            clickableLink.on('click', function (e) {\n\t                e.preventDefault();\n\t                Dom_1.$$(element).empty();\n\t                _this.renderLikesList(element, result, likeNames, likeIds, 0);\n\t            });\n\t            tempElement.append(clickableLink.el);\n\t        }\n\t        if (likeIds.length > 0) {\n\t            var name_1 = Dom_1.$$('span');\n\t            name_1.el.innerHTML = Strings_1.l('LikesThis', tempElement.el.innerHTML, likeIds.length);\n\t            Dom_1.$$(element).append(name_1.el);\n\t        }\n\t    };\n\t    ChatterLikedBy.prototype.renderLikeLink = function (result, likeName, likeId) {\n\t        var link = Dom_1.$$('a', {\n\t            href: ChatterUtils_1.ChatterUtils.buildURI(result.clickUri, Utils_1.Utils.getFieldValue(result, 'sffeeditemid'), likeId)\n\t        });\n\t        link.text(likeName);\n\t        return link.el;\n\t    };\n\t    return ChatterLikedBy;\n\t}(Component_1.Component));\n\tChatterLikedBy.ID = 'ChatterLikedBy';\n\tChatterLikedBy.options = {\n\t    nbLikesToRender: ComponentOptions_1.ComponentOptions.buildNumberOption({ defaultValue: 2, min: 0 }),\n\t    openInPrimaryTab: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    openInSubTab: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true })\n\t};\n\tChatterLikedBy.fields = [\n\t    'sflikedby',\n\t    'sflikedbyid',\n\t    'clickableuri',\n\t    'sffeeditemid'\n\t];\n\texports.ChatterLikedBy = ChatterLikedBy;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ChatterLikedBy);\n\n\n/***/ },\n/* 410 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ChatterUtils = (function () {\n\t    function ChatterUtils() {\n\t    }\n\t    ChatterUtils.buildURI = function (objectURI, objectId, newObjectId) {\n\t        return objectURI.replace(objectId, newObjectId);\n\t    };\n\t    ChatterUtils.bindClickEventToElement = function (element, openInPrimaryTab, openInSubTab) {\n\t        return element;\n\t    };\n\t    return ChatterUtils;\n\t}());\n\texports.ChatterUtils = ChatterUtils;\n\n\n/***/ },\n/* 411 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar ChatterUtils_1 = __webpack_require__(410);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ChatterPostAttachment = (function (_super) {\n\t    __extends(ChatterPostAttachment, _super);\n\t    function ChatterPostAttachment(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ChatterPostAttachment.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        if (!Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(result, 'sfcontentversionid'))) {\n\t            var rootElement = Dom_1.$$('div', {\n\t                className: 'coveo-chatter-result-box-row'\n\t            });\n\t            Dom_1.$$(element).append(rootElement.el);\n\t            var icon = Dom_1.$$('div', {\n\t                className: 'coveo-sprites-common-system coveo-chatter-result-box-icon'\n\t            });\n\t            rootElement.append(icon.el);\n\t            var linkElement = Dom_1.$$('a', {\n\t                href: ChatterUtils_1.ChatterUtils.buildURI(result.clickUri, Utils_1.Utils.getFieldValue(result, 'sffeeditemid'), Utils_1.Utils.getFieldValue(result, 'sfcontentversionid'))\n\t            });\n\t            rootElement.append(linkElement.el);\n\t            if (!Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(result, 'sfcontentfilename'))) {\n\t                linkElement.text(Utils_1.Utils.getFieldValue(result, 'sfcontentfilename'));\n\t            }\n\t            else {\n\t                linkElement.text(Strings_1.l('ShowAttachment'));\n\t            }\n\t        }\n\t        return _this;\n\t    }\n\t    return ChatterPostAttachment;\n\t}(Component_1.Component));\n\tChatterPostAttachment.ID = 'ChatterPostAttachment';\n\tChatterPostAttachment.fields = [\n\t    'sfcontentversionid',\n\t    'sffeeditemid',\n\t    'sfcontentfilename'\n\t];\n\texports.ChatterPostAttachment = ChatterPostAttachment;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ChatterPostAttachment);\n\n\n/***/ },\n/* 412 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar ChatterUtils_1 = __webpack_require__(410);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Strings_1 = __webpack_require__(37);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ChatterPostedBy = (function (_super) {\n\t    __extends(ChatterPostedBy, _super);\n\t    function ChatterPostedBy(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ChatterPostedBy.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, ChatterPostedBy, options);\n\t        if (Utils_1.Utils.getFieldValue(_this.result, 'sfcreatedby') != null) {\n\t            var from = Dom_1.$$('span');\n\t            from.text((_this.options.useFromInstead ? Strings_1.l('From') : Strings_1.l('PostedBy')) + \" \");\n\t            Dom_1.$$(element).append(from.el);\n\t            Dom_1.$$(element).append(_this.renderLink(Utils_1.Utils.getFieldValue(_this.result, 'sfcreatedby'), Utils_1.Utils.getFieldValue(_this.result, 'sfcreatedbyid')));\n\t            if (_this.options.enablePostedOn && !Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(_this.result, 'sfparentname')) && !Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(_this.result, 'sfparentid'))) {\n\t                // Post on user's wall\n\t                if (!Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(_this.result, 'sfuserid')) && Utils_1.Utils.getFieldValue(_this.result, 'sfuserid') != Utils_1.Utils.getFieldValue(_this.result, 'sfinsertedbyid')) {\n\t                    var onFeed = Dom_1.$$('span');\n\t                    var content = \" \" + Strings_1.l('OnFeed', _this.renderLink(Utils_1.Utils.getFieldValue(_this.result, 'sfparentname'), Utils_1.Utils.getFieldValue(_this.result, 'sfparentid')).outerHTML);\n\t                    onFeed.el.innerHTML = content;\n\t                    Dom_1.$$(element).append(onFeed.el);\n\t                }\n\t                else if (Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(_this.result, 'sfuserid'))) {\n\t                    var onUser = Dom_1.$$('span');\n\t                    onUser.text(\" \" + Strings_1.l('On').toLowerCase() + \" \");\n\t                    Dom_1.$$(element).append(onUser.el);\n\t                    Dom_1.$$(element).append(_this.renderLink(Utils_1.Utils.getFieldValue(_this.result, 'sfparentname'), Utils_1.Utils.getFieldValue(_this.result, 'sfparentid')));\n\t                }\n\t            }\n\t        }\n\t        return _this;\n\t    }\n\t    ChatterPostedBy.prototype.renderLink = function (text, id) {\n\t        var link = Dom_1.$$('a', {\n\t            href: ChatterUtils_1.ChatterUtils.buildURI(this.result.clickUri, Utils_1.Utils.getFieldValue(this.result, 'sffeeditemid'), id)\n\t        });\n\t        link.text(text);\n\t        return ChatterUtils_1.ChatterUtils.bindClickEventToElement(link.el, this.options.openInPrimaryTab, this.options.openInSubTab);\n\t    };\n\t    return ChatterPostedBy;\n\t}(Component_1.Component));\n\tChatterPostedBy.ID = 'ChatterPostedBy';\n\tChatterPostedBy.options = {\n\t    enablePostedOn: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    useFromInstead: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    openInPrimaryTab: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\t    openInSubTab: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t};\n\tChatterPostedBy.fields = [\n\t    'sfcreatedby',\n\t    'sfcreatedbyid',\n\t    'sffeeditemid',\n\t    'sfuserid',\n\t    'sfinsertedbyid',\n\t    'sfparentid',\n\t    'sfparentname'\n\t];\n\texports.ChatterPostedBy = ChatterPostedBy;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ChatterPostedBy);\n\n\n/***/ },\n/* 413 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ChatterTopic = (function (_super) {\n\t    __extends(ChatterTopic, _super);\n\t    function ChatterTopic(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, ChatterTopic.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.bindings = bindings;\n\t        _this.result = result;\n\t        if (!Utils_1.Utils.isNullOrUndefined(Utils_1.Utils.getFieldValue(_this.result, 'coveochatterfeedtopics'))) {\n\t            var rootElement = Dom_1.$$('div', {\n\t                className: 'coveo-chatter-result-box-row'\n\t            });\n\t            var topics = Utils_1.Utils.getFieldValue(result, 'coveochatterfeedtopics').split(';');\n\t            var icon = Dom_1.$$('div', {\n\t                className: 'coveo-sprites-common-tagging_tag coveo-chatter-result-box-icon'\n\t            });\n\t            rootElement.append(icon.el);\n\t            for (var i = 0; i < topics.length; i++) {\n\t                var topic = Dom_1.$$('span');\n\t                topic.text(topics[i]);\n\t                rootElement.append(topic.el);\n\t                if (i < topics.length - 1) {\n\t                    var separator = Dom_1.$$('span');\n\t                    separator.text(', ');\n\t                    rootElement.append(separator.el);\n\t                }\n\t            }\n\t            Dom_1.$$(element).append(rootElement.el);\n\t        }\n\t        return _this;\n\t    }\n\t    return ChatterTopic;\n\t}(Component_1.Component));\n\tChatterTopic.ID = 'ChatterTopic';\n\tChatterTopic.fields = [\n\t    'coveochatterfeedtopics'\n\t];\n\texports.ChatterTopic = ChatterTopic;\n\tInitialization_1.Initialization.registerAutoCreateComponent(ChatterTopic);\n\n\n/***/ },\n/* 414 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar QueryEvents_1 = __webpack_require__(50);\n\t/**\n\t * The Logo component adds a clickable Coveo logo in the search interface.\n\t */\n\tvar Logo = (function (_super) {\n\t    __extends(Logo, _super);\n\t    /**\n\t     * Creates a new Logo component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the Logo component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function Logo(element, options, bindings) {\n\t        var _this = _super.call(this, element, Logo.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Logo, options);\n\t        var link = Dom_1.$$('a', {\n\t            className: 'coveo-powered-by coveo-footer-logo',\n\t            href: 'http://www.coveo.com/'\n\t        });\n\t        _this.element.appendChild(link.el);\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.noResults, function () { return _this.hide(); });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, function (data) {\n\t            if (data.results.results.length > 0) {\n\t                _this.show();\n\t            }\n\t            else {\n\t                _this.hide();\n\t            }\n\t        });\n\t        _this.bind.onRootElement(QueryEvents_1.QueryEvents.queryError, function () { return _this.hide(); });\n\t        return _this;\n\t    }\n\t    Logo.prototype.hide = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-hidden');\n\t    };\n\t    Logo.prototype.show = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-hidden');\n\t    };\n\t    return Logo;\n\t}(Component_1.Component));\n\tLogo.ID = 'Logo';\n\tLogo.options = {};\n\texports.Logo = Logo;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Logo);\n\n\n/***/ },\n/* 415 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar _ = __webpack_require__(16);\n\tvar Utils_1 = __webpack_require__(15);\n\tvar YouTubeThumbnail_1 = __webpack_require__(227);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar ExternalModulesShim_1 = __webpack_require__(25);\n\t/**\n\t * The Backdrop component renders an image URL (either passed as a direct URL or contained in a result field) as a\n\t * background image. It is useful for displaying information in front of a dynamic background image.\n\t *\n\t * The Backdrop component will automatically initialize components embedded within itself:\n\t *\n\t * ```html\n\t *   <div class=\"CoveoBackdrop\" data-image-field=\"ytthumbnailurl\">\n\t *     <div class=\"CoveoFieldValue\" data-field=\"somefield\"></div>\n\t *   </div>\n\t * ```\n\t */\n\tvar Backdrop = (function (_super) {\n\t    __extends(Backdrop, _super);\n\t    /**\n\t     * Creates a new Backdrop component.\n\t     * @param element The HTMLElement on which the component will be instantiated.\n\t     * @param options The options for the Backdrop component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, it will be automatically\n\t     * resolved (with a slower execution time).\n\t     * @param result The {@link IQueryResult}.\n\t     */\n\t    function Backdrop(element, options, bindings, result, _window, ModalBox) {\n\t        if (ModalBox === void 0) { ModalBox = ExternalModulesShim_1.ModalBox; }\n\t        var _this = _super.call(this, element, Backdrop.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this._window = _window;\n\t        _this.ModalBox = ModalBox;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Backdrop, options);\n\t        _this._window = _this._window || window;\n\t        var background = '';\n\t        if (_this.options.overlayColor) {\n\t            background += \"linear-gradient(\" + _this.options.overlayColor + \", \"\n\t                + (_this.options.overlayGradient ? 'rgba(0,0,0,0)' : _this.options.overlayColor) + '), ';\n\t        }\n\t        var imageSource = _this.options.imageUrl || Utils_1.Utils.getFieldValue(result, _this.options.imageField);\n\t        background += \"url('\" + imageSource + \"') center center\";\n\t        _this.element.style.background = background;\n\t        _this.element.style.backgroundSize = 'cover';\n\t        // Initialize components inside\n\t        var initOptions = _this.searchInterface.options.originalOptionsObject;\n\t        var resultComponentBindings = _.extend({}, _this.getBindings(), {\n\t            resultElement: element\n\t        });\n\t        var initParameters = {\n\t            options: _.extend({}, { initOptions: { ResultLink: options } }, initOptions),\n\t            bindings: resultComponentBindings,\n\t            result: result\n\t        };\n\t        Initialization_1.Initialization.automaticallyCreateComponentsInside(_this.element, initParameters);\n\t        _this.configureSpecialBackdropActions();\n\t        return _this;\n\t    }\n\t    Backdrop.prototype.configureSpecialBackdropActions = function () {\n\t        // If the current backdrop is used for a youtube thumbnail, we automatically configure a component for this\n\t        if (Utils_1.Utils.getFieldValue(this.result, 'ytthumbnailurl')) {\n\t            // We create the element \"in memory\", but do not append it to the DOM.\n\t            // We don't want to see a duplicate of the preview for youtube : the backdrop already renders a preview.\n\t            var thumbnailYouTube_1 = new YouTubeThumbnail_1.YouTubeThumbnail(Dom_1.$$('div').el, {\n\t                embed: true\n\t            }, this.getBindings(), this.result, this.ModalBox);\n\t            Dom_1.$$(this.element).on('click', function (e) {\n\t                // Since the backdrop often contain a result link, we must make sure the click did no originate from one.\n\t                // Otherwise, we might end up opening 2 results at the same time\n\t                if (!Dom_1.$$(e.target).hasClass('CoveoResultLink')) {\n\t                    thumbnailYouTube_1.openResultLink();\n\t                }\n\t            });\n\t        }\n\t    };\n\t    return Backdrop;\n\t}(Component_1.Component));\n\tBackdrop.ID = 'Backdrop';\n\t/**\n\t * @componentOptions\n\t */\n\tBackdrop.options = {\n\t    /**\n\t     * Specifies a direct URL from which the background image will be sourced.\n\t     *\n\t     * Has priority over {@link Backdrop.options.imageField}.\n\t     */\n\t    imageUrl: ComponentOptions_1.ComponentOptions.buildStringOption(),\n\t    /**\n\t     * Specifies the field from which the background image will be pulled.\n\t     *\n\t     * If {@link Backdrop.options.imageUrl} is specified, it will override this option.\n\t     */\n\t    imageField: ComponentOptions_1.ComponentOptions.buildFieldOption(),\n\t    /**\n\t     * Specifies the color that will be overlaid on top of the background image.\n\t     * This option needs to be declared as a CSS color. Be sure to use RGBA with an alpha value lower than 1 in order to\n\t     * be able to see the image behind the overlay color.\n\t     *\n\t     * Example value : \"`rgba(101, 123, 76, 0.5)`\"\n\t     */\n\t    overlayColor: ComponentOptions_1.ComponentOptions.buildColorOption(),\n\t    /**\n\t     * Specifies whether the overlay color should be instead be rendered as a top-to-bottom gradient from\n\t     * {@link Backdrop.options.overlayColor} to transparent.\n\t     *\n\t     * Default value is `false`.\n\t     */\n\t    overlayGradient: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'overlayColor' }),\n\t};\n\texports.Backdrop = Backdrop;\n\tInitialization_1.Initialization.registerAutoCreateComponent(Backdrop);\n\n\n/***/ },\n/* 416 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar CardOverlayEvents_1 = __webpack_require__(417);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\t/**\n\t * The CardOverlay component displays a button that the user can click to toggle the visibility of an overlay on top of\n\t * an {@link IQueryResult}. While this component typically populates a {@link CardActionBar} component, it is actually\n\t * possible to place a CardOverlay component anywhere in any result.\n\t *\n\t * The primary purpose of the CardOverlay component is to display additional information about a result in a format that\n\t * fits well within a card result layout (see [Result Layouts](https://developers.coveo.com/x/yQUvAg)).\n\t *\n\t * When initialized, this component creates a `<div class=\"coveo-card-overlay\">` element as the last child of its parent\n\t * IQueryResult, and displays a button which toggles the visibility of the overlay.\n\t */\n\tvar CardOverlay = (function (_super) {\n\t    __extends(CardOverlay, _super);\n\t    /**\n\t     * Creates a new CardOverlay component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the CardOverlay component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     */\n\t    function CardOverlay(element, options, bindings) {\n\t        var _this = _super.call(this, element, CardOverlay.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, CardOverlay, options);\n\t        _this.parentCard = Dom_1.$$(_this.element).closest('.CoveoResult');\n\t        Assert_1.Assert.exists(_this.parentCard);\n\t        Dom_1.$$(_this.parentCard).addClass('coveo-with-card-overlay');\n\t        _this.createOverlay();\n\t        _this.createButton(_this.element);\n\t        _this.closeOverlay();\n\t        return _this;\n\t    }\n\t    /**\n\t     * Toggles the CardOverlay visibility.\n\t     *\n\t     * @param swtch Specifying a value for this parameter forces the component visibility to take the corresponding value\n\t     * (`true` for visible; `false` for hidden).\n\t     */\n\t    CardOverlay.prototype.toggleOverlay = function (swtch) {\n\t        if (swtch !== undefined) {\n\t            swtch ? this.openOverlay() : this.closeOverlay();\n\t        }\n\t        else {\n\t            if (Dom_1.$$(this.overlay).hasClass('coveo-opened')) {\n\t                this.closeOverlay();\n\t            }\n\t            else {\n\t                this.openOverlay();\n\t            }\n\t        }\n\t    };\n\t    /**\n\t     * Opens the CardOverlay.\n\t     *\n\t     * Also triggers the {@link CardOverlayEvents.openCardOverlay} event.\n\t     */\n\t    CardOverlay.prototype.openOverlay = function () {\n\t        Dom_1.$$(this.overlay).removeClass('coveo-hidden-for-tab-nav');\n\t        Dom_1.$$(this.overlay).addClass('coveo-opened');\n\t        Dom_1.$$(this.parentCard).addClass('coveo-card-overlay-opened');\n\t        this.bind.trigger(this.element, CardOverlayEvents_1.CardOverlayEvents.openCardOverlay);\n\t    };\n\t    /**\n\t     * Closes the CardOverlay.\n\t     *\n\t     * Also triggers the {@link CardOverlayEvents.closeCardOverlay} event.\n\t     */\n\t    CardOverlay.prototype.closeOverlay = function () {\n\t        Dom_1.$$(this.overlay).addClass('coveo-hidden-for-tab-nav');\n\t        Dom_1.$$(this.overlay).removeClass('coveo-opened');\n\t        Dom_1.$$(this.parentCard).removeClass('coveo-card-overlay-opened');\n\t        this.bind.trigger(this.element, CardOverlayEvents_1.CardOverlayEvents.closeCardOverlay);\n\t    };\n\t    CardOverlay.prototype.createOverlay = function () {\n\t        var _this = this;\n\t        this.overlay = Dom_1.$$('div', { className: 'coveo-card-overlay' }).el;\n\t        // Create header\n\t        var overlayHeader = Dom_1.$$('div', { className: 'coveo-card-overlay-header' }).el;\n\t        this.createButton(overlayHeader);\n\t        this.overlay.appendChild(overlayHeader);\n\t        // Create body\n\t        var overlayBody = Dom_1.$$('div', { className: 'coveo-card-overlay-body' }).el;\n\t        // Transfer all of element's children to the overlay\n\t        while (this.element.childNodes.length > 0) {\n\t            overlayBody.appendChild(this.element.firstChild);\n\t        }\n\t        this.overlay.appendChild(overlayBody);\n\t        // Create footer\n\t        var overlayFooter = Dom_1.$$('div', { className: 'coveo-card-overlay-footer', tabindex: '0' }, Dom_1.$$('span', { className: 'coveo-icon coveo-sprites-arrow-down' }));\n\t        overlayFooter.on('click', function () { return _this.toggleOverlay(false); });\n\t        this.bind.on(overlayFooter.el, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, function () { return _this.toggleOverlay(false); }));\n\t        this.overlay.appendChild(overlayFooter.el);\n\t        this.parentCard.appendChild(this.overlay);\n\t    };\n\t    CardOverlay.prototype.createButton = function (element) {\n\t        var _this = this;\n\t        if (this.options.icon) {\n\t            element.appendChild(Dom_1.$$('span', { className: 'coveo-icon ' + this.options.icon }).el);\n\t        }\n\t        element.appendChild(Dom_1.$$('span', { className: 'coveo-label' }, this.options.title).el);\n\t        element.setAttribute('tabindex', '0');\n\t        Dom_1.$$(element).on('click', function () { return _this.toggleOverlay(); });\n\t        this.bind.on(element, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, function () { return _this.toggleOverlay(); }));\n\t    };\n\t    return CardOverlay;\n\t}(Component_1.Component));\n\tCardOverlay.ID = 'CardOverlay';\n\t/**\n\t * @componentOptions\n\t */\n\tCardOverlay.options = {\n\t    /**\n\t     * Specifies the string to use for the overlay title and for the button text.\n\t     *\n\t     * Setting a value for this option is required for this component to work.\n\t     */\n\t    title: ComponentOptions_1.ComponentOptions.buildStringOption({ required: true }),\n\t    /**\n\t     * Specifies the icon to use for the overlay icon and for the button icon.\n\t     */\n\t    icon: ComponentOptions_1.ComponentOptions.buildIconOption()\n\t};\n\texports.CardOverlay = CardOverlay;\n\tInitialization_1.Initialization.registerAutoCreateComponent(CardOverlay);\n\n\n/***/ },\n/* 417 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t/**\n\t * The CardOverlayEvents class contains string definitions for all events related to the {@link CardOverlay} component.\n\t */\n\tvar CardOverlayEvents = (function () {\n\t    function CardOverlayEvents() {\n\t    }\n\t    return CardOverlayEvents;\n\t}());\n\t/**\n\t * Opening a {@link CardOverlay} component triggers this event (see {@link CardOverlay.openOverlay}).\n\t *\n\t * @type {string}\n\t */\n\tCardOverlayEvents.openCardOverlay = 'openCardOverlay';\n\t/**\n\t * Closing a {@link CardOverlay} component triggers this event (see {@link CardOverlay.closeOverlay}).\n\t *\n\t * @type {string}\n\t */\n\tCardOverlayEvents.closeCardOverlay = 'closeCardOverlay';\n\texports.CardOverlayEvents = CardOverlayEvents;\n\n\n/***/ },\n/* 418 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || (function () {\n\t    var extendStatics = Object.setPrototypeOf ||\n\t        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t    return function (d, b) {\n\t        extendStatics(d, b);\n\t        function __() { this.constructor = d; }\n\t        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t    };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar Component_1 = __webpack_require__(109);\n\tvar ComponentOptions_1 = __webpack_require__(111);\n\tvar Initialization_1 = __webpack_require__(108);\n\tvar Assert_1 = __webpack_require__(14);\n\tvar Dom_1 = __webpack_require__(61);\n\tvar KeyboardUtils_1 = __webpack_require__(70);\n\tvar _ = __webpack_require__(16);\n\t/**\n\t * The CardActionBar component displays an action bar at the bottom of a card result (see\n\t * [Result Layouts](https://developers.coveo.com/x/yQUvAg)). It is a simple container for buttons or complementary\n\t * information.\n\t *\n\t * You should place this component at the bottom of a card result (i.e., as the last child of the surrounding\n\t * `coveo-result-frame`.\n\t *\n\t * ### Example\n\t * ```html\n\t * <div class=\"coveo-result-frame\">\n\t *   [ ... content ... ]\n\t *   <div class=\"CoveoCardActionBar\">\n\t *     <some-button></some-button>\n\t *     <some-additional-info></some-additional-info>\n\t *   </div>\n\t * </div>\n\t * ```\n\t *\n\t * A CardActionBar component is a two-state widget: it can either be shown or hidden. It is hidden by default.\n\t */\n\tvar CardActionBar = (function (_super) {\n\t    __extends(CardActionBar, _super);\n\t    /**\n\t     * Creates a new CardActionBar component.\n\t     * @param element The HTMLElement on which to instantiate the component.\n\t     * @param options The options for the CardActionBar component.\n\t     * @param bindings The bindings that the component requires to function normally. If not set, these will be\n\t     * automatically resolved (with a slower execution time).\n\t     * @param result The parent result.\n\t     */\n\t    function CardActionBar(element, options, bindings, result) {\n\t        var _this = _super.call(this, element, CardActionBar.ID, bindings) || this;\n\t        _this.element = element;\n\t        _this.options = options;\n\t        _this.result = result;\n\t        _this.removedTabIndexElements = [];\n\t        _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, CardActionBar, options);\n\t        _this.parentResult = Dom_1.$$(_this.element).closest('CoveoResult');\n\t        Assert_1.Assert.check(_this.parentResult !== undefined, 'ActionBar needs to be a child of a Result');\n\t        if (_this.options.hidden) {\n\t            Dom_1.$$(_this.parentResult).addClass('coveo-clickable');\n\t            _this.appendArrow();\n\t            _this.bindEvents();\n\t            _.forEach(Dom_1.$$(_this.element).findAll('*'), function (elem) {\n\t                if (elem.hasAttribute('tabindex') && elem.getAttribute('tabindex') == '0') {\n\t                    _this.removedTabIndexElements.push(elem);\n\t                    elem.removeAttribute('tabindex');\n\t                }\n\t            });\n\t        }\n\t        else {\n\t            _this.element.style.transition = 'none';\n\t            _this.element.style.transform = 'none';\n\t        }\n\t        return _this;\n\t    }\n\t    /**\n\t     * Shows the CardActionBar.\n\t     */\n\t    CardActionBar.prototype.show = function () {\n\t        Dom_1.$$(this.element).addClass('coveo-opened');\n\t        _.forEach(this.removedTabIndexElements, function (e) {\n\t            e.setAttribute('tabindex', '0');\n\t        });\n\t    };\n\t    /**\n\t     * Hides the CardActionBar.\n\t     */\n\t    CardActionBar.prototype.hide = function () {\n\t        Dom_1.$$(this.element).removeClass('coveo-opened');\n\t        _.forEach(this.removedTabIndexElements, function (e) {\n\t            e.removeAttribute('tabindex');\n\t        });\n\t    };\n\t    CardActionBar.prototype.bindEvents = function () {\n\t        var _this = this;\n\t        Dom_1.$$(this.parentResult).on('click', function () { return _this.show(); });\n\t        Dom_1.$$(this.parentResult).on('mouseleave', function () { return _this.hide(); });\n\t        if (this.options.openOnMouseOver) {\n\t            Dom_1.$$(this.arrowContainer).on('mouseenter', function () { return _this.show(); });\n\t        }\n\t    };\n\t    CardActionBar.prototype.appendArrow = function () {\n\t        var _this = this;\n\t        this.arrowContainer = Dom_1.$$('div', { className: 'coveo-card-action-bar-arrow-container', tabindex: 0 }).el;\n\t        this.bind.on(this.arrowContainer, 'keyup', KeyboardUtils_1.KeyboardUtils.keypressAction(KeyboardUtils_1.KEYBOARD.ENTER, function () { return _this.show(); }));\n\t        this.arrowContainer.appendChild(Dom_1.$$('span', { className: 'coveo-icon coveo-sprites-arrow-up' }).el);\n\t        this.parentResult.appendChild(this.arrowContainer);\n\t    };\n\t    return CardActionBar;\n\t}(Component_1.Component));\n\tCardActionBar.ID = 'CardActionBar';\n\t/**\n\t * @componentOptions\n\t */\n\tCardActionBar.options = {\n\t    /**\n\t     * Specifies whether to hide the CardActionBar by default, unless the user clicks its parent {@link IQueryResult}.\n\t     *\n\t     * Default value is `true`. This means that the component is hidden and a visual indicator is appended to its parent\n\t     * IQueryResult.\n\t     */\n\t    hidden: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\t    /**\n\t     * If {@link CardActionBar.options.hidden} is `true`, specifies whether to open the CardActionBar when the cursor\n\t     * hovers over it.\n\t     *\n\t     * Default value is `true`.\n\t     */\n\t    openOnMouseOver: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: true, depend: 'hidden' })\n\t};\n\texports.CardActionBar = CardActionBar;\n\tInitialization_1.Initialization.registerAutoCreateComponent(CardActionBar);\n\n\n/***/ },\n/* 419 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar CoreHelpers_1 = __webpack_require__(178);\n\tvar _ = __webpack_require__(16);\n\t// Webpack output a library target with a temporary name.\n\t// This is to allow end user to put CoveoJsSearch.Dependencie.js before or after the main CoveoJsSearch.js, without breaking\n\t// This code swap the current module to the \"real\" Coveo variable.\n\tfunction swapVar(scope) {\n\t    if (window['Coveo'] == undefined) {\n\t        window['Coveo'] = scope;\n\t    }\n\t    else {\n\t        _.each(_.keys(scope), function (k) {\n\t            window['Coveo'][k] = scope[k];\n\t        });\n\t    }\n\t    CoreHelpers_1.CoreHelpers.exportAllHelpersGlobally(window['Coveo']);\n\t    if (window['__extends'] == undefined) {\n\t        var __extends = function (d, b) {\n\t            for (var p in b) {\n\t                if (b.hasOwnProperty(p)) {\n\t                    d[p] = b[p];\n\t                }\n\t            }\n\t            function __() {\n\t                this.constructor = d;\n\t            }\n\t            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t        };\n\t        window['__extends'] = __extends;\n\t    }\n\t}\n\texports.swapVar = swapVar;\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** CoveoJsSearch.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap cfa70eb6e857dd903e70\n **/","// We need a custom trigger function for our Promise polyfill\n// because the default one can cause issues in other frameworks that relies on\n// their own Promise polyfill like the Salesforce Aura framework.\ndeclare var require: any;\nconst promise = window['Promise'];\nif (!(promise instanceof Function)) {\n  require('es6-promise').polyfill();\n}\n\nexport * from './BaseModules';\nexport * from './MiscModules';\nexport * from './RestModules';\nexport * from './EventsModules';\nexport * from './UtilsModules';\nexport * from './ControllersModules';\nexport * from './ModelsModules';\nexport * from './UIBaseModules';\nexport * from './TemplatesModules';\n\n// UI\nexport { CoreHelpers } from './ui/Templates/CoreHelpers';\nexport { SearchInterface, StandaloneSearchInterface } from './ui/SearchInterface/SearchInterface';\nexport { Aggregate } from './ui/Aggregate/Aggregate';\nexport { Analytics } from './ui/Analytics/Analytics';\nexport { PendingSearchEvent } from './ui/Analytics/PendingSearchEvent';\nexport { PendingSearchAsYouTypeSearchEvent } from './ui/Analytics/PendingSearchAsYouTypeSearchEvent';\nexport { analyticsActionCauseList } from './ui/Analytics/AnalyticsActionListMeta';\nexport { NoopAnalyticsClient } from './ui/Analytics/NoopAnalyticsClient';\nexport { LiveAnalyticsClient } from './ui/Analytics/LiveAnalyticsClient';\nexport { RecommendationAnalyticsClient } from './ui/Analytics/RecommendationAnalyticsClient';\nexport { MultiAnalyticsClient } from './ui/Analytics/MultiAnalyticsClient';\nexport { Querybox } from './ui/Querybox/Querybox';\nexport { SearchButton } from './ui/SearchButton/SearchButton';\nexport { Searchbox } from './ui/Searchbox/Searchbox';\nexport { Breadcrumb } from './ui/Breadcrumb/Breadcrumb';\nexport { Facet } from './ui/Facet/Facet';\nexport { FacetHeader } from './ui/Facet/FacetHeader';\nexport { FacetSearchValuesList } from './ui/Facet/FacetSearchValuesList';\nexport { FacetSettings } from './ui/Facet/FacetSettings';\nexport { FacetSort } from './ui/Facet/FacetSort';\nexport { FacetUtils } from './ui/Facet/FacetUtils';\nexport { FacetValueElement } from './ui/Facet/FacetValueElement';\nexport { FacetValue, FacetValues } from './ui/Facet/FacetValues';\nexport { ValueElementRenderer } from './ui/Facet/ValueElementRenderer';\nexport { FacetSearch } from './ui/Facet/FacetSearch';\nexport { FacetSearchParameters } from './ui/Facet/FacetSearchParameters';\nexport { Slider } from './ui/Misc/Slider';\nexport { FacetSlider } from './ui/FacetSlider/FacetSlider';\nexport { FacetRange } from './ui/FacetRange/FacetRange';\nexport { Pager } from './ui/Pager/Pager';\nexport { ResultsPerPage } from './ui/ResultsPerPage/ResultsPerPage';\nexport { ResultList } from './ui/ResultList/ResultList';\nexport { ResultLayout } from './ui/ResultLayout/ResultLayout';\nexport { DefaultRecommendationTemplate } from './ui/Templates/DefaultRecommendationTemplate';\nexport { Excerpt } from './ui/Excerpt/Excerpt';\nexport { ResultLink } from './ui/ResultLink/ResultLink';\nexport { Icon } from './ui/Icon/Icon';\nexport { Thumbnail } from './ui/Thumbnail/Thumbnail';\nexport { PrintableUri } from './ui/PrintableUri/PrintableUri';\nexport { Quickview } from './ui/Quickview/Quickview';\nexport { DidYouMean } from './ui/DidYouMean/DidYouMean';\nexport { ErrorReport } from './ui/ErrorReport/ErrorReport';\nexport { ExportToExcel } from './ui/ExportToExcel/ExportToExcel';\nexport { Folding } from './ui/Folding/Folding';\nexport { HiddenQuery } from './ui/HiddenQuery/HiddenQuery';\nexport { HierarchicalFacet } from './ui/HierarchicalFacet/HierarchicalFacet';\nexport { Matrix } from './ui/Matrix/Matrix';\nexport { QuickviewDocument } from './ui/Quickview/QuickviewDocument';\nexport { YouTubeThumbnail } from './ui/YouTube/YouTubeThumbnail';\nexport { ResultAttachments } from './ui/ResultAttachments/ResultAttachments';\nexport { ResultFolding } from './ui/ResultFolding/ResultFolding';\nexport { FieldTable } from './ui/FieldTable/FieldTable';\nexport { FieldValue } from './ui/FieldTable/FieldValue';\nexport { Badge } from './ui/FieldTable/Badge';\nexport { ResultRating } from './ui/ResultRating/ResultRating';\nexport { PreferencesPanel } from './ui/PreferencesPanel/PreferencesPanel';\nexport { ResultsFiltersPreferences } from './ui/ResultsFiltersPreferences/ResultsFiltersPreferences';\nexport { Tab } from './ui/Tab/Tab';\nexport { Omnibox } from './ui/Omnibox/Omnibox';\nexport { QueryDuration } from './ui/QueryDuration/QueryDuration';\nexport { QuerySummary } from './ui/QuerySummary/QuerySummary';\nexport { Debug } from './ui/Debug/Debug';\nexport { Settings } from './ui/Settings/Settings';\nexport { ShareQuery } from './ui/ShareQuery/ShareQuery';\nexport { Sort } from './ui/Sort/Sort';\nexport { SortCriteria } from './ui/Sort/SortCriteria';\nexport { Triggers } from './ui/Triggers/Triggers';\nexport { Recommendation } from './ui/Recommendation/Recommendation';\nexport { RecommendationQuery } from './ui/Recommendation/RecommendationQuery';\nexport { TemplateLoader } from './ui/TemplateLoader/TemplateLoader';\nexport { Template } from './ui/Templates/Template';\nexport { SuggestionForOmnibox } from './ui/Misc/SuggestionForOmnibox';\nexport { AnalyticsSuggestions } from './ui/AnalyticsSuggestions/AnalyticsSuggestions';\nexport { FieldSuggestions } from './ui/FieldSuggestions/FieldSuggestions';\nexport { AuthenticationProvider } from './ui/AuthenticationProvider/AuthenticationProvider';\nexport { ResultTagging } from './ui/ResultTagging/ResultTagging';\nexport { ResultsPreferences } from './ui/ResultsPreferences/ResultsPreferences';\nexport { PipelineContext, context } from './ui/PipelineContext/PipelineContext';\nexport { OmniboxResultList } from './ui/OmniboxResultList/OmniboxResultList';\nexport { CurrentTab } from './ui/CurrentTab/CurrentTab';\nexport { QueryboxQueryParameters } from './ui/Querybox/QueryboxQueryParameters';\nexport { ImageResultList } from './ui/ImageResultList/ImageResultList';\nexport { jQueryInstance as $ } from './ui/Base/CoveoJQuery';\nexport { underscoreInstance as _ } from './ui/Base/CoveoUnderscore';\nexport { AdvancedSearch } from './ui/AdvancedSearch/AdvancedSearch';\nexport { NumericSpinner } from './ui/AdvancedSearch/Form/NumericSpinner';\nexport { DatePicker } from './ui/AdvancedSearch/Form/DatePicker';\nexport { Dropdown } from './ui/AdvancedSearch/Form/Dropdown';\nexport { TextInput } from './ui/AdvancedSearch/Form/TextInput';\nexport { RadioButton } from './ui/AdvancedSearch/Form/RadioButton';\nexport { FollowItem } from './ui/SearchAlerts/FollowItem';\nexport { SearchAlerts } from './ui/SearchAlerts/SearchAlerts';\nexport { SearchAlertsMessage } from './ui/SearchAlerts/SearchAlertsMessage';\nexport { Text } from './ui/Text/Text';\nexport { FoldingForThread } from './ui/Folding/FoldingForThread';\nexport { ChatterLikedBy } from './ui/ChatterLikedBy/ChatterLikedBy';\nexport { ChatterPostAttachment } from './ui/ChatterPostAttachment/ChatterPostAttachment';\nexport { ChatterPostedBy } from './ui/ChatterPostedBy/ChatterPostedBy';\nexport { ChatterTopic } from './ui/ChatterTopic/ChatterTopic';\nexport { ChatterUtils } from './utils/ChatterUtils';\nexport { Logo } from './ui/Logo/Logo';\nexport { Backdrop } from './ui/Backdrop/Backdrop';\nexport { CardOverlay } from './ui/CardOverlay/CardOverlay';\nexport { CardActionBar } from './ui/CardActionBar/CardActionBar';\nexport { HashUtils } from './utils/HashUtils';\nexport { DeviceUtils } from './utils/DeviceUtils';\nexport { ColorUtils } from './utils/ColorUtils';\nexport { Cookie } from './utils/CookieUtils';\nexport { CurrencyUtils } from './utils/CurrencyUtils';\nexport { DateUtils } from './utils/DateUtils';\n\nimport { swapVar } from './SwapVar';\nswapVar(this);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Index.ts\n **/","null\n\n\n/** WEBPACK FOOTER **\n ** ./~/string-replace-loader?{\"search\":\"/# sourceMappingURL=es6-promise.map\",\"replace\":\"\"}!./~/es6-promise/dist/es6-promise.js\n **/","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 3\n ** module chunks = 0 1\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 4\n ** module chunks = 0 1\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 6\n ** module chunks = 0 1\n **/","import { shim } from './misc/PromisesShim';\nshim();\nimport { customEventPolyfill } from './misc/CustomEventPolyfill';\ncustomEventPolyfill();\n\n// MISC\nexport { version } from './misc/Version';\nexport { SearchEndpoint } from './rest/SearchEndpoint';\nexport * from './ExternalModulesShim';\n\n// Default language needs to be set after external module, since this is where l10n will be imported\nimport { defaultLanguage } from './strings/DefaultLanguage';\ndefaultLanguage();\nexport { setLanguageAfterPageLoaded } from './strings/DefaultLanguage';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/BaseModules.ts\n **/","/* istanbul ignore next */\nexport function shim() {\n  const doShim = promiseInstance => {\n    if (typeof promiseInstance.prototype['finally'] != 'function') {\n      promiseInstance.prototype['finally'] = function finallyPolyfill(callback) {\n        let constructor = this.constructor;\n        return this.then(\n          function (value) {\n            return constructor.resolve(callback()).then(function () {\n              return value;\n            });\n          },\n          function (reason) {\n            return constructor.resolve(callback()).then(function () {\n              throw reason;\n            });\n          }\n        );\n      };\n    }\n\n    let rethrowError = self => {\n      self.then(null, function (err) {\n        setTimeout(function () {\n          throw err;\n        }, 0);\n      });\n    };\n\n    if (typeof promiseInstance.prototype['done'] !== 'function') {\n      promiseInstance.prototype['done'] = function (onFulfilled, onRejected) {\n        let self = arguments.length ? this.then.apply(this, arguments) : this;\n        rethrowError(self);\n        return this;\n      };\n    }\n\n    if (typeof promiseInstance.prototype['fail'] !== 'function') {\n      promiseInstance.prototype['fail'] = function (onFulfilled, onRejected) {\n        let self = arguments.length ? this.catch.apply(this, arguments) : this;\n        rethrowError(self);\n        return this;\n      };\n    }\n  };\n\n  const globalPromise = window['Promise'];\n  const localPromise = Promise;\n  if (globalPromise) {\n    doShim(globalPromise);\n  }\n  if (localPromise) {\n    doShim(localPromise);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/PromisesShim.ts\n **/","\n// CustomEvent polyfill from MDN\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill\nexport function customEventPolyfill() {\n  // window.CustomEvent is missing from the definitions\n  if (typeof (<any>window).CustomEvent === 'function') {\n    return;\n  }\n\n  let CustomEvent = (event, params) => {\n    params = params || { bubbles: false, cancelable: false, detail: undefined };\n    let customEvent = document.createEvent('CustomEvent');\n    customEvent.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return customEvent;\n  };\n\n  // window.Event is specific to IE\n  CustomEvent.prototype = (<any>window).Event.prototype;\n\n  (<any>window).CustomEvent = CustomEvent;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/CustomEventPolyfill.ts\n **/","export var version = {\n  'lib': '1.2537.57',\n  'product': '1.2537.57',\n  'supportedApiVersion': 2\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Version.ts\n **/","import { ISearchEndpointOptions, ISearchEndpoint, IViewAsHtmlOptions } from './SearchEndpointInterface';\nimport { EndpointCaller, IEndpointCallParameters, ISuccessResponse, IErrorResponse, IRequestInfo } from '../rest/EndpointCaller';\nimport { IEndpointCallOptions } from '../rest/SearchEndpointInterface';\nimport { IStringMap } from './GenericParam';\nimport { Logger } from '../misc/Logger';\nimport { Assert } from '../misc/Assert';\nimport { IQuery } from '../rest/Query';\nimport { IQueryResults } from '../rest/QueryResults';\nimport { IQueryResult } from '../rest/QueryResult';\nimport { version } from '../misc/Version';\nimport { IListFieldValuesRequest } from '../rest/ListFieldValuesRequest';\nimport { IIndexFieldValue } from '../rest/FieldValue';\nimport { IFieldDescription } from '../rest/FieldDescription';\nimport { IListFieldsResult } from '../rest/ListFieldsResult';\nimport { IExtension } from '../rest/Extension';\nimport { IRatingRequest } from '../rest/RatingRequest';\nimport { ITaggingRequest } from '../rest/TaggingRequest';\nimport { IRevealQuerySuggestRequest, IRevealQuerySuggestResponse } from '../rest/RevealQuerySuggest';\nimport { ISentryLog } from './SentryLog';\nimport { ISubscriptionRequest, ISubscription } from '../rest/Subscription';\nimport { AjaxError } from '../rest/AjaxError';\nimport { MissingAuthenticationError } from '../rest/MissingAuthenticationError';\nimport { QueryUtils } from '../utils/QueryUtils';\nimport { QueryError } from '../rest/QueryError';\nimport { Utils } from '../utils/Utils';\nimport { shim } from '../misc/PromisesShim';\nimport _ = require('underscore');\nshim();\n\nexport class DefaultSearchEndpointOptions implements ISearchEndpointOptions {\n  restUri: string;\n  version: string = 'v2';\n  queryStringArguments: IStringMap<string> = {};\n  anonymous: boolean = false;\n  accessToken: string;\n  renewAccessToken: () => Promise<string>;\n  username: string;\n  password: string;\n  searchAlertsUri: string;\n  isGuestUser: boolean = false;\n}\n\n/**\n * A search endpoint allows to execute various actions against the Coveo Search API and index.<br/>\n * For example, you can search, list field values, get the quickview content for a document, etc.<br/>\n * Any actions that you execute using this class will not trigger a full query cycle for the Coveo components.<br/>\n * This is because this class will not trigger any query events directly.<br/>\n * If you wish to execute a query that all components will react to (and trigger the corresponding query events), use the {@link QueryController}\n */\nexport class SearchEndpoint implements ISearchEndpoint {\n\n  /**\n   * A map of all the initialized endpoint.<br/>\n   * eg : Coveo.SearchEndpoint.endpoints['default'] will return the default endpoint that was created at initialization\n   * @type {{}}\n   */\n  static endpoints: { [endpoint: string]: SearchEndpoint; } = {};\n\n  /**\n   * Configure an endpoint that will point to a Coveo Cloud index, which contains a set of public sources with no security on them.<br/>\n   * Used for demo purposes and ease of setup.\n   * @param otherOptions A set of additional options to use when configuring this endpoint\n   */\n  static configureSampleEndpoint(otherOptions?: ISearchEndpointOptions) {\n    if (SearchEndpoint.isUseLocalArgumentPresent()) {\n      // This is a handy flag to quickly test a local search API and alerts\n      SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n        restUri: 'http://localhost:8100/rest/search',\n        searchAlertsUri: 'http://localhost:8088/rest/search/alerts/'\n      }, otherOptions));\n    } else {\n      // This OAuth token points to the organization used for samples.\n      // It contains a set of harmless content sources.\n      SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n        restUri: 'https://cloudplatform.coveo.com/rest/search',\n        accessToken: '52d806a2-0f64-4390-a3f2-e0f41a4a73ec'\n      }, otherOptions));\n    }\n  }\n\n  /**\n   * Configure an endpoint that will point to a Coveo Cloud index V2, which contains a set of public sources with no security on them.<br/>\n   * Used for demo purposes and ease of setup.\n   * @param otherOptions A set of additional options to use when configuring this endpoint\n   */\n  static configureSampleEndpointV2(optionsOPtions?: ISearchEndpointOptions) {\n    SearchEndpoint.endpoints['default'] = new SearchEndpoint(_.extend({\n      restUri: 'https://platform.cloud.coveo.com/rest/search',\n      accessToken: 'xx564559b1-0045-48e1-953c-3addd1ee4457',\n      queryStringArguments: {\n        organizationID: 'searchuisamples',\n        viewAllContent: 1\n      }\n    }));\n  }\n\n  /**\n   * Configure an endpoint to a Coveo Cloud index.\n   * @param organization The organization id of your Coveo cloud index\n   * @param token The token to use to execute query. If null, you will most probably need to login when querying.\n   * @param uri The uri of your cloud Search API. By default, will point to the production environment\n   * @param otherOptions A set of additional options to use when configuring this endpoint\n   */\n  static configureCloudEndpoint(organization?: string, token?: string, uri: string = 'https://cloudplatform.coveo.com/rest/search', otherOptions?: ISearchEndpointOptions) {\n    let options: ISearchEndpointOptions = {\n      restUri: uri,\n      accessToken: token,\n      queryStringArguments: { organizationId: organization }\n    };\n\n    let merged = SearchEndpoint.mergeConfigOptions(options, otherOptions);\n\n    SearchEndpoint.endpoints['default'] = new SearchEndpoint(SearchEndpoint.removeUndefinedConfigOption(merged));\n  }\n\n  /**\n   * Configure an endpoint to a Coveo Cloud index, in the V2 platform.\n   * @param organization The organization id of your Coveo cloud index\n   * @param token The token to use to execute query. If null, you will most probably need to login when querying.\n   * @param uri The uri of your cloud Search API. By default, will point to the production environment\n   * @param otherOptions A set of additional options to use when configuring this endpoint\n   */\n  static configureCloudV2Endpoint(organization?: string, token?: string, uri: string = 'https://platform.cloud.coveo.com/rest/search', otherOptions?: ISearchEndpointOptions) {\n    return SearchEndpoint.configureCloudEndpoint(organization, token, uri, otherOptions);\n  }\n\n  /**\n   * Configure an endpoint to a Coveo on premise index.\n   * @param uri The uri of your Coveo Search API endpoint. eg : http://myserver:8080/rest/search\n   * @param token The token to use to execute query. If null, you will most probably need to login when querying (unless the search api is configured using advanced auth options, like windows auth or claims)\n   * @param otherOptions A set of additional options to use when configuring this endpoint\n   */\n  static configureOnPremiseEndpoint(uri: string, token?: string, otherOptions?: ISearchEndpointOptions) {\n    let merged = SearchEndpoint.mergeConfigOptions({\n      restUri: uri,\n      accessToken: token\n    }, otherOptions);\n\n    SearchEndpoint.endpoints['default'] = new SearchEndpoint(SearchEndpoint.removeUndefinedConfigOption(merged));\n  }\n\n  static removeUndefinedConfigOption(config: ISearchEndpointOptions) {\n    _.each(_.keys(config), (key) => {\n      if (config[key] == undefined) {\n        delete config[key];\n      }\n    });\n    return config;\n  }\n\n  static mergeConfigOptions(first: ISearchEndpointOptions, second: ISearchEndpointOptions): ISearchEndpointOptions {\n    first = SearchEndpoint.removeUndefinedConfigOption(first);\n    second = SearchEndpoint.removeUndefinedConfigOption(second);\n    return _.extend({}, first, second);\n  }\n\n  public logger: Logger;\n  public isRedirecting: boolean;\n  protected caller: EndpointCaller;\n  private onUnload: (...args: any[]) => void;\n\n  /**\n   * Create a new SearchEndpoint.<br/>\n   * Will use a set of sane default options, and merge them with the options parameter.<br/>\n   * Will create an {@link EndpointCaller} and use it to communicate with the endpoint internally\n   * @param options\n   */\n  constructor(public options?: ISearchEndpointOptions) {\n    Assert.exists(options);\n    Assert.exists(options.restUri);\n\n    // For backward compatibility, we set anonymous to true when an access token\n    // is specified on a page loaded through the filesystem. This causes withCredentials\n    // to NOT be set, allowing those pages to work with non Windows/Basic/Cookie\n    // authentication. If anonymous is explicitly set to false, we'll use withCredentials.\n    let defaultOptions = new DefaultSearchEndpointOptions();\n    defaultOptions.anonymous = window.location.href.indexOf('file://') == 0 && Utils.isNonEmptyString(options.accessToken);\n    this.options = <ISearchEndpointOptions>_.extend({}, defaultOptions, options);\n\n    // Forward any debug=1 query argument to the REST API to ease debugging\n    if (SearchEndpoint.isDebugArgumentPresent()) {\n      this.options.queryStringArguments['debug'] = 1;\n    }\n    this.onUnload = () => {\n      this.handleUnload();\n    };\n    window.addEventListener('beforeunload', this.onUnload);\n    this.logger = new Logger(this);\n    this.createEndpointCaller();\n  }\n\n  public reset() {\n    this.createEndpointCaller();\n  }\n\n  /**\n   * Set a function which will allow external code to modify all endpoint call parameters before they are sent by the browser.\n   *\n   * Used in very specific scenario where the network infrastructure require special request headers to be added or removed, for example.\n   * @param requestModifier\n   */\n  public setRequestModifier(requestModifier: (params: IRequestInfo<any>) => IRequestInfo<any>) {\n    this.caller.options.requestModifier = requestModifier;\n  }\n\n  /**\n   * Return the base uri of the endpoint to perform search\n   * @returns {string}\n   */\n  public getBaseUri(): string {\n    return this.buildBaseUri('');\n  }\n\n  /**\n   * Return the base uri of the endpoint for search alert\n   * @returns {string}\n   */\n  public getBaseAlertsUri(): string {\n    return this.buildSearchAlertsUri('');\n  }\n\n  /**\n   * Get the uri that can be used to authenticate against the given provider\n   * @param provider The provider name\n   * @param returnUri The uri at which to return after the authentication is completed\n   * @param message The message for authentication\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {string}\n   */\n  @path('/login/')\n  @accessTokenInUrl()\n  public getAuthenticationProviderUri(provider: string, returnUri?: string, message?: string, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): string {\n    let queryString = this.buildBaseQueryString(callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    callParams.url += provider + '?';\n\n    if (Utils.isNonEmptyString(returnUri)) {\n      callParams.url += 'redirectUri=' + encodeURIComponent(returnUri) + '&';\n    } else if (Utils.isNonEmptyString(message)) {\n      callParams.url += 'message=' + encodeURIComponent(message) + '&';\n    }\n    callParams.url += callParams.queryString.join('&');\n    return callParams.url;\n  }\n\n  /**\n   * is the search endpoint using jsonp internally to communicate with Search API\n   * @returns {boolean}\n   */\n  public isJsonp(): boolean {\n    return this.caller.useJsonp;\n  }\n\n  /**\n   * Perform a search on the index and returns a Promise of {@link IQueryResults}.<br/>\n   * Will modify the query results slightly, by adding additional information on each results (an id, the state object, etc.)\n   * @param query The query to execute. Typically, the query object is built using a {@link QueryBuilder}\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<IQueryResults>}\n   */\n  @path('/')\n  @method('POST')\n  @responseType('text')\n  public search(query: IQuery, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IQueryResults> {\n    Assert.exists(query);\n\n    callParams.requestData = query;\n\n    this.logger.info('Performing REST query', query);\n\n    return this.performOneCall(callParams, callOptions).then((results?: IQueryResults) => {\n      this.logger.info('REST query successful', results, query);\n\n      // Version check\n      // If the SearchAPI doesn't give us any apiVersion info, we assume version 1 (before apiVersion was implemented)\n      if (results.apiVersion == null) {\n        results.apiVersion = 1;\n      }\n      if (results.apiVersion < version.supportedApiVersion) {\n        this.logger.error('Please update your REST Search API');\n      }\n\n      // If the server specified no search ID generated one using the client-side\n      // GUID generator. We prefer server generated guids to allow tracking a query\n      // all the way from the analytics to the logs.\n      if (Utils.isNullOrEmptyString(results.searchUid)) {\n        results.searchUid = QueryUtils.createGuid();\n      }\n      QueryUtils.setIndexAndUidOnQueryResults(query, results, results.searchUid, results.pipeline, results.splitTestRun);\n      QueryUtils.setTermsToHighlightOnQueryResults(query, results);\n      return results;\n    });\n  }\n  /**\n   * Get a link/uri to download a set of results, for a given query, to an xlsx format.<br/>\n   * Note : This does not download automatically the documents, merely provide an url at which to download them.\n   * @param query The query for which to get the xlsx documents\n   * @param numberOfResults The number of results that should be downloaded\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {string}\n   */\n  @path('/')\n  @accessTokenInUrl()\n  public getExportToExcelLink(query: IQuery, numberOfResults: number, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): string {\n    let queryString = this.buildBaseQueryString(callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    queryString = this.buildCompleteQueryString(null, query);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    if (numberOfResults != null) {\n      callParams.queryString.push('numberOfResults=' + numberOfResults);\n    }\n\n    callParams.queryString.push('format=xlsx');\n\n    return callParams.url + '?' + callParams.queryString.join('&');\n  }\n\n  /**\n   * Get the raw datastream for a given document. This is typically used to get a thumbnail for a document.<br/>\n   * Return an array buffer : <br/>\n   * eg : let rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));<br/>\n   * img.setAttribute('src', 'data:image/png;base64,' + btoa(rawBinary));\n   * @param documentUniqueId Typically the {@link IQueryResult.uniqueId} on each result\n   * @param dataStreamType Normally : '$Thumbnail'\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<TResult>|Promise<U>}\n   */\n  @path('/datastream')\n  @accessTokenInUrl()\n  @method('GET')\n  @responseType('arraybuffer')\n  public getRawDataStream(documentUniqueId: string, dataStreamType: string, callOptions?: IViewAsHtmlOptions, callParams?: IEndpointCallParameters): Promise<ArrayBuffer> {\n    Assert.exists(documentUniqueId);\n\n    let queryString = this.buildViewAsHtmlQueryString(documentUniqueId, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    this.logger.info('Performing REST query for datastream ' + dataStreamType + ' on document uniqueID' + documentUniqueId);\n\n    callParams.queryString.push('dataStream=' + dataStreamType);\n    return this.performOneCall(callParams).then((results) => {\n      this.logger.info('REST query successful', results, documentUniqueId);\n      return results;\n    });\n  }\n\n  /**\n   * Return an url that will allow to see the datastream for a given document. This is typically used to get a thumbnail for a document.<br/>\n   * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n   * @param dataStreamType Normally : '$Thumbnail'\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {string}\n   */\n  @path('/datastream')\n  @accessTokenInUrl()\n  public getViewAsDatastreamUri(documentUniqueID: string, dataStreamType: string, callOptions?: IViewAsHtmlOptions, callParams?: IEndpointCallParameters): string {\n    callOptions = _.extend({}, callOptions);\n\n    let queryString = this.buildBaseQueryString(callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    queryString = this.buildCompleteQueryString(callOptions.query, callOptions.queryObject);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n\n    return callParams.url + '?' + callParams.queryString.join('&') + '&dataStream=' + encodeURIComponent(dataStreamType);\n  }\n\n  /**\n   * Return a single document, using it's uniqueId\n   * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<IQueryResult>}\n   */\n  @path('/document')\n  @method('GET')\n  @responseType('text')\n  public getDocument(documentUniqueID: string, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IQueryResult> {\n    let queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    return this.performOneCall<IQueryResult>(callParams);\n  }\n\n  /**\n   * Return the content for a single document, as text.<br/>\n   * Think : quickview\n   * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<string>}\n   */\n  @path('/text')\n  @method('GET')\n  @responseType('text')\n  public getDocumentText(documentUniqueID: string, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<string> {\n    let queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    return this.performOneCall<{ content: string, duration: number }>(callParams)\n      .then((data) => {\n        return data.content;\n      });\n  }\n\n  /**\n   * Return the content for a single document, as an HTMLDocument.<br/>\n   * Think : quickview\n   * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<HTMLDocument>}\n   */\n  @path('/html')\n  @method('POST')\n  @responseType('document')\n  public getDocumentHtml(documentUniqueID: string, callOptions?: IViewAsHtmlOptions, callParams?: IEndpointCallParameters): Promise<HTMLDocument> {\n    callOptions = _.extend({}, callOptions);\n\n    let queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    callParams.requestData = callOptions.queryObject || { q: callOptions.query };\n\n    return this.performOneCall<HTMLDocument>(callParams);\n  }\n\n  /**\n   * Return an url that will allow to see a single document content, as HTML.<br/>\n   * Think : quickview\n   * @param documentUniqueID Typically the {@link IQueryResult.uniqueId} on each result\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {string}\n   */\n  @path('/html')\n  @accessTokenInUrl()\n  public getViewAsHtmlUri(documentUniqueID: string, callOptions?: IViewAsHtmlOptions, callParams?: IEndpointCallParameters): string {\n    let queryString = this.buildBaseQueryString(callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n\n    queryString = this.buildViewAsHtmlQueryString(documentUniqueID, callOptions);\n    callParams.queryString = callParams.queryString.concat(queryString);\n    callParams.queryString = _.uniq(callParams.queryString);\n    return callParams.url + '?' + callParams.queryString.join('&');\n  }\n\n  @path('/values')\n  @method('POST')\n  @responseType('text')\n  public batchFieldValues(request: IListFieldValuesRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IIndexFieldValue[]> {\n    Assert.exists(request);\n\n    return this.performOneCall<any>(callParams)\n      .then((data) => {\n        this.logger.info('REST list field values successful', data.values, request);\n        return data.values;\n      });\n  }\n\n  /**\n   * List the possible values for a given request\n   * @param request The request for which to list the possible field values\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<TResult>|Promise<U>}\n   */\n  @path('/values')\n  @method('POST')\n  @responseType('text')\n  public listFieldValues(request: IListFieldValuesRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IIndexFieldValue[]> {\n    Assert.exists(request);\n\n    callParams.requestData = request;\n\n    this.logger.info('Listing field values', request);\n\n    return this.performOneCall<any>(callParams)\n      .then((data) => {\n        this.logger.info('REST list field values successful', data.values, request);\n        return data.values;\n      });\n  }\n\n  /**\n   * List all fields for the index, and return an array of their description\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<TResult>|Promise<U>}\n   */\n  @path('/fields')\n  @method('GET')\n  @responseType('text')\n  public listFields(callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IFieldDescription[]> {\n    this.logger.info('Listing fields');\n\n    return this.performOneCall<IListFieldsResult>(callParams).then((data) => {\n      return data.fields;\n    });\n  }\n\n  /**\n   * List all available query extensions for the search endpoint\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<IExtension[]>}\n   */\n  @path('/extensions')\n  @method('GET')\n  @responseType('text')\n  public extensions(callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IExtension[]> {\n    this.logger.info('Listing extensions');\n\n    return this.performOneCall<IExtension[]>(callParams);\n  }\n\n  /**\n   * Allow to rate a single document in the index (granted that collaborative rating is enabled on your index)\n   * @param ratingRequest Document id and rating\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<boolean>|Promise<T>}\n   */\n  @path('/rating')\n  @method('POST')\n  @responseType('text')\n  public rateDocument(ratingRequest: IRatingRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<boolean> {\n    this.logger.info('Rating a document', ratingRequest);\n\n    callParams.requestData = ratingRequest;\n\n    return this.performOneCall<any>(callParams).then(() => {\n      return true;\n    });\n  }\n\n  /**\n   * Allow to tag a single document\n   * @param taggingRequest Document id and tag action to perform\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<boolean>|Promise<T>}\n   */\n  @path('/tag')\n  @method('POST')\n  @responseType('text')\n  public tagDocument(taggingRequest: ITaggingRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<boolean> {\n    this.logger.info('Tagging a document', taggingRequest);\n\n    callParams.requestData = taggingRequest;\n\n    return this.performOneCall<any>(callParams).then(() => {\n      return true;\n    });\n  }\n\n  /**\n   * Returns a list of Coveo Machine Learning query suggestions, based on the given request\n   * @param request query and number of suggestions to return\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<IRevealQuerySuggestResponse>}\n   */\n  @path('/querySuggest')\n  @method('GET')\n  @responseType('text')\n  public getRevealQuerySuggest(request: IRevealQuerySuggestRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<IRevealQuerySuggestResponse> {\n    this.logger.info('Get Reveal Query Suggest', request);\n\n    callParams.requestData = request;\n\n    return this.performOneCall<IRevealQuerySuggestResponse>(callParams);\n  }\n\n  /**\n   * Allow to follow a document or a query on the search alerts service\n   * @param request\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<ISubscription>}\n   */\n  @alertsPath('/subscriptions')\n  @accessTokenInUrl('accessToken')\n  @method('POST')\n  @requestDataType('application/json')\n  @responseType('text')\n  public follow(request: ISubscriptionRequest, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<ISubscription> {\n    callParams.requestData = request;\n\n    this.logger.info('Following a document or a query', request);\n\n    return this.performOneCall<ISubscription>(callParams);\n  }\n\n  private currentListSubscriptions: Promise<ISubscription[]>;\n\n  /**\n   * Return a Promise of array of current subscriptions\n   * @param page The page of the subsctiptions\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {any}\n   */\n  @alertsPath('/subscriptions')\n  @accessTokenInUrl('accessToken')\n  @method('GET')\n  @requestDataType('application/json')\n  @responseType('text')\n  public listSubscriptions(page: number, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters) {\n    if (this.options.isGuestUser) {\n      return new Promise((resolve, reject) => {\n        reject();\n      });\n    }\n    if (this.currentListSubscriptions == null) {\n      callParams.queryString.push('page=' + (page || 0));\n\n      this.currentListSubscriptions = this.performOneCall<ISubscription[]>(callParams);\n      this.currentListSubscriptions.then((data: any) => {\n        this.currentListSubscriptions = null;\n        return data;\n      }).catch((e: AjaxError) => {\n        // Trap 503 error, as the listSubscription call is called on every page initialization\n        // to check for current subscriptions. By default, the search alert service is not enabled for most organization\n        // Don't want to pollute the console with un-needed noise and confusion\n        if (e.status != 503) {\n          throw e;\n        }\n      });\n    }\n    return this.currentListSubscriptions;\n  }\n\n  /**\n   * Update a subscription with new parameters\n   * @param subscription The subscription to update with new parameters\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<ISubscription>}\n   */\n  @alertsPath('/subscriptions/')\n  @accessTokenInUrl('accessToken')\n  @method('PUT')\n  @requestDataType('application/json')\n  @responseType('text')\n  public updateSubscription(subscription: ISubscription, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<ISubscription> {\n    callParams.requestData = subscription;\n\n    this.logger.info('Updating a subscription', subscription);\n\n    callParams.url += subscription.id;\n\n    return this.performOneCall<ISubscription>(callParams);\n  }\n\n  /**\n   * Delete a subscription\n   * @param subscription The subscription to delete\n   * @param callOptions Additional set of options to use for this call.\n   * @param callParams Options injected by the applied decorators.\n   * @returns {Promise<ISubscription>}\n   */\n  @alertsPath('/subscriptions/')\n  @accessTokenInUrl('accessToken')\n  @method('DELETE')\n  @requestDataType('application/json')\n  @responseType('text')\n  public deleteSubscription(subscription: ISubscription, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters): Promise<ISubscription> {\n    callParams.url += subscription.id;\n\n    return this.performOneCall<ISubscription>(callParams);\n  }\n\n  @path('/log')\n  @method('POST')\n  public logError(sentryLog: ISentryLog, callOptions?: IEndpointCallOptions, callParams?: IEndpointCallParameters) {\n    callParams.requestData = sentryLog;\n    return this.performOneCall(callParams, callOptions)\n      .then(() => {\n        return true;\n      })\n      .catch(() => {\n        return false;\n      });\n  }\n\n  public nuke() {\n    window.removeEventListener('beforeunload', this.onUnload);\n  }\n\n  protected createEndpointCaller() {\n    this.caller = new EndpointCaller(this.options);\n  }\n\n  private static isDebugArgumentPresent(): boolean {\n    return /[?&]debug=1([&]|$)/.test(window.location.search);\n  }\n\n  private static isUseLocalArgumentPresent(): boolean {\n    return /[?&]useLocal=1([&]|$)/.test(window.location.search);\n  }\n\n  private handleUnload() {\n    this.isRedirecting = true;\n  }\n\n  private buildBaseUri(path: string): string {\n    Assert.isString(path);\n    let uri = this.options.restUri;\n    uri = this.removeTrailingSlash(uri);\n\n    if (Utils.isNonEmptyString(this.options.version)) {\n      uri += '/' + this.options.version;\n    }\n    uri += path;\n    return uri;\n  }\n\n  public buildSearchAlertsUri(path: string): string {\n    Assert.isString(path);\n    let uri = this.options.searchAlertsUri || this.options.restUri + '/alerts';\n    if (uri == null) {\n      return null;\n    }\n    uri = this.removeTrailingSlash(uri);\n    uri += path;\n    return uri;\n  }\n\n  // see https://github.com/palantir/tslint/issues/1421\n  // tslint:disable-next-line:no-unused-variable\n  private buildAccessToken(tokenKey: string): string[] {\n    let queryString: string[] = [];\n\n    if (Utils.isNonEmptyString(this.options.accessToken)) {\n      queryString.push(tokenKey + '=' + encodeURIComponent(this.options.accessToken));\n    }\n\n    return queryString;\n  }\n\n  private buildBaseQueryString(callOptions?: IEndpointCallOptions): string[] {\n    callOptions = _.extend({}, callOptions);\n    let queryString: string[] = [];\n\n    for (let name in this.options.queryStringArguments) {\n      queryString.push(name + '=' + encodeURIComponent(this.options.queryStringArguments[name]));\n    }\n\n    if (callOptions && _.isArray(callOptions.authentication) && callOptions.authentication.length != 0) {\n      queryString.push('authentication=' + callOptions.authentication.join(','));\n    }\n\n    return queryString;\n  }\n\n  private buildCompleteQueryString(query?: string, queryObject?: IQuery): string[] {\n    // In an ideal parallel reality, the entire query used in the 'search' call is used here.\n    // In this reality however, we must support GET calls (ex: GET /html) for CORS/JSONP/IE reasons.\n    // Therefore, we cherry-pick parts of the query to include in a 'query string' instead of a body payload.\n    let queryString: string[] = [];\n    if (queryObject) {\n      _.each(['q', 'aq', 'cq', 'dq', 'searchHub', 'tab', 'language', 'pipeline', 'lowercaseOperators'], (key) => {\n        if (queryObject[key]) {\n          queryString.push(key + '=' + encodeURIComponent(queryObject[key]));\n        }\n      });\n\n      _.each(queryObject.context, (value, key) => {\n        queryString.push('context[' + key + ']=' + encodeURIComponent(value));\n      });\n\n      if (queryObject.fieldsToInclude) {\n        queryString.push(`fieldsToInclude=[${_.map(queryObject.fieldsToInclude, (field) => '\"' + encodeURIComponent(field.replace('@', '')) + '\"').join(',')}]`);\n      }\n\n    } else if (query) {\n      queryString.push('q=' + encodeURIComponent(query));\n    }\n\n    return queryString;\n  }\n\n  private buildViewAsHtmlQueryString(uniqueId: string, callOptions?: IViewAsHtmlOptions): string[] {\n    callOptions = _.extend({}, callOptions);\n    let queryString: string[] = this.buildBaseQueryString(callOptions);\n    queryString.push('uniqueId=' + encodeURIComponent(uniqueId));\n\n    if (callOptions.query || callOptions.queryObject) {\n      queryString.push('enableNavigation=true');\n    }\n\n    if (callOptions.requestedOutputSize) {\n      queryString.push('requestedOutputSize=' + encodeURIComponent(callOptions.requestedOutputSize.toString()));\n    }\n\n    if (callOptions.contentType) {\n      queryString.push('contentType=' + encodeURIComponent(callOptions.contentType));\n    }\n    return queryString;\n  }\n\n  private performOneCall<T>(params: IEndpointCallParameters, callOptions?: IEndpointCallOptions, autoRenewToken = true): Promise<T> {\n    let queryString = this.buildBaseQueryString(callOptions);\n    params.queryString = params.queryString.concat(queryString);\n    params.queryString = _.uniq(params.queryString);\n\n    return this.caller.call(params)\n      .then((response?: ISuccessResponse<T>) => {\n        if (response.data && (<any>response.data).clientDuration) {\n          (<any>response.data).clientDuration = response.duration;\n        }\n        return response.data;\n      }).catch((error?: IErrorResponse) => {\n        if (autoRenewToken && this.canRenewAccessToken() && this.isAccessTokenExpiredStatus(error.statusCode)) {\n          this.renewAccessToken().then(() => {\n            return this.performOneCall(params, callOptions, autoRenewToken);\n          })\n            .catch(() => {\n              return Promise.reject(this.handleErrorResponse(error));\n            });\n        } else if (error.statusCode == 0 && this.isRedirecting) {\n          // The page is getting redirected\n          // Set timeout on return with empty string, since it does not really matter\n          _.defer(function () {\n            return '';\n          });\n        } else {\n          return Promise.reject(this.handleErrorResponse(error));\n        }\n      });\n  }\n\n  private handleErrorResponse(errorResponse: IErrorResponse): Error {\n    if (this.isMissingAuthenticationProviderStatus(errorResponse.statusCode)) {\n      return new MissingAuthenticationError(errorResponse.data['provider']);\n    } else if (errorResponse.data && errorResponse.data.message && errorResponse.data.type) {\n      return new QueryError(errorResponse);\n    } else if (errorResponse.data && errorResponse.data.message) {\n      return new AjaxError(`Request Error : ${errorResponse.data.message}`, errorResponse.statusCode);\n    } else {\n      return new AjaxError('Request Error', errorResponse.statusCode);\n    }\n  }\n\n  private canRenewAccessToken(): boolean {\n    return Utils.isNonEmptyString(this.options.accessToken) && _.isFunction(this.options.renewAccessToken);\n  }\n\n  private renewAccessToken(): Promise<string> {\n    this.logger.info('Renewing expired access token');\n    return this.options.renewAccessToken().then((token: string) => {\n      Assert.isNonEmptyString(token);\n      this.options.accessToken = token;\n      this.createEndpointCaller();\n      return token;\n    }).catch((e: string) => {\n      this.logger.error('Failed to renew access token', e);\n      return e;\n    });\n  }\n\n  private removeTrailingSlash(uri: string) {\n    if (this.hasTrailingSlash(uri)) {\n      uri = uri.substr(0, uri.length - 1);\n    }\n    return uri;\n  }\n\n  private hasTrailingSlash(uri: string) {\n    return uri.charAt(uri.length - 1) == '/';\n  }\n\n  private isMissingAuthenticationProviderStatus(status: number): boolean {\n    return status == 402;\n  }\n\n  private isAccessTokenExpiredStatus(status: number): boolean {\n    return status == 419;\n  }\n}\n\n\n// It's taken for granted that methods using decorators have :\n// IEndpointCallOptions as their second to last parameter\n// IEndpointCallParameters as their last parameter\n// The default parameters for each member of the injected {@link IEndpointCallParameters} are the following:\n// url: '',\n// queryString: [],\n// requestData: {},\n// requestDataType: undefined,\n// method: '',\n// responseType: '',\n// errorsAsSuccess: false\n\n\nfunction path(path: string) {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      let uri = this.buildBaseUri(path);\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].url = uri;\n      } else {\n        let params: IEndpointCallParameters = {\n          url: uri,\n          queryString: [],\n          requestData: {},\n          method: '',\n          responseType: '',\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\nfunction alertsPath(path: string) {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      let uri = this.buildSearchAlertsUri(path);\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].url = uri;\n      } else {\n        let params: IEndpointCallParameters = {\n          url: uri,\n          queryString: [],\n          requestData: {},\n          method: '',\n          responseType: '',\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\nfunction requestDataType(type: string) {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].requestDataType = type;\n      } else {\n        let params: IEndpointCallParameters = {\n          url: '',\n          queryString: [],\n          requestData: {},\n          requestDataType: type,\n          method: '',\n          responseType: '',\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\nfunction method(met: string) {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].method = met;\n      } else {\n        let params: IEndpointCallParameters = {\n          url: '',\n          queryString: [],\n          requestData: {},\n          method: met,\n          responseType: '',\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\nfunction responseType(resp: string) {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].responseType = resp;\n      } else {\n        let params: IEndpointCallParameters = {\n          url: '',\n          queryString: [],\n          requestData: {},\n          method: '',\n          responseType: resp,\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\nfunction accessTokenInUrl(tokenKey: string = 'access_token') {\n  return function (target: Object, key: string, descriptor: TypedPropertyDescriptor<any>) {\n    let originalMethod = descriptor.value;\n    let nbParams = target[key].prototype.constructor.length;\n\n    descriptor.value = function (...args: any[]) {\n      let queryString = this.buildAccessToken(tokenKey);\n      if (args[nbParams - 1]) {\n        args[nbParams - 1].queryString = args[nbParams - 1].queryString.concat(queryString);\n      } else {\n        let params: IEndpointCallParameters = {\n          url: '',\n          queryString: queryString,\n          requestData: {},\n          method: '',\n          responseType: '',\n          errorsAsSuccess: false\n        };\n        args[nbParams - 1] = params;\n      }\n      let result = originalMethod.apply(this, args);\n      return result;\n    };\n\n    return descriptor;\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/SearchEndpoint.ts\n **/","import { IStringMap } from '../rest/GenericParam';\nimport { Logger } from '../misc/Logger';\nimport { Assert } from '../misc/Assert';\nimport { TimeSpan } from '../utils/TimeSpanUtils';\nimport { DeviceUtils } from '../utils/DeviceUtils';\nimport { Utils } from '../utils/Utils';\nimport { JQueryUtils } from '../utils/JQueryutils';\nimport _ = require('underscore');\n\ndeclare var XDomainRequest;\ndeclare var $;\n\n/**\n * Parameters that can be used when calling an {@link EndpointCaller}\n */\nexport interface IEndpointCallParameters {\n  /**\n   * Url to target\n   */\n  url: string;\n  /**\n   * Array of query string params.<br/>\n   * eg: ['foo=1','bar=2']\n   */\n  queryString: string[];\n  /**\n   * Body of the request.<br/>\n   * key -> value map (JSON)\n   */\n  requestData: IStringMap<any>;\n  /**\n   * Request data type.<br/>\n   * eg: \"application/json\", \"application/x-www-form-urlencoded; charset=\\\"UTF-8\\\"\"\n   */\n  requestDataType?: string;\n  /**\n   * Or HTTP verb : GET, POST, PUT, etc.\n   */\n  method: string;\n  /**\n   * responseType of the request.</br>\n   * eg: \"text\", \"arraybuffer\" etc.\n   */\n  responseType: string;\n  /**\n   * Flag to specify if the endpoint should return different type of error as actual 200 success for the browser, but with the error code/message contained in the response.\n   */\n  errorsAsSuccess: boolean;\n}\n\n/**\n * Information about a request\n */\nexport interface IRequestInfo<T> {\n  /**\n   * Url that was requested\n   */\n  url: string;\n  /**\n   * The query string parameters that were used for this request\n   */\n  queryString: string[];\n  /**\n   * The data that was sent for this request\n   */\n  requestData: IStringMap<any>;\n  /**\n   * The requestDataType that was used for this request\n   */\n  requestDataType: string;\n  /**\n   * The timestamp at which the request started\n   */\n  begun: Date;\n  /**\n   * The method that was used for this request\n   */\n  method: string;\n  /**\n   * The headers for the request.\n   */\n  headers?: IStringMap<string>;\n}\n\n/**\n * A generic response\n */\nexport interface IResponse<T> {\n  /**\n   * Data of the response\n   */\n  data?: T;\n}\n\n/**\n * A generic success response\n */\nexport interface ISuccessResponse<T> extends IResponse<T> {\n  /**\n   * The time that the successfull response took to complete\n   */\n  duration: number;\n  /**\n   * Data of the response\n   */\n  data: T;\n}\n\n/**\n * An error response\n */\nexport interface IErrorResponse extends IResponse<IStringMap<any>> {\n  /**\n   * Status code for the error\n   */\n  statusCode: number;\n  /**\n   * Data about the error\n   */\n  data?: {\n    /**\n     * Message for the error\n     */\n    message?: string;\n    /**\n     * Type of the error\n     */\n    type?: string;\n    /**\n     * A report provided by the search api\n     */\n    executionReport?: string;\n    [key: string]: any;\n  };\n}\n\n/**\n * Possible options when creating a {@link EndpointCaller}\n */\nexport interface IEndpointCallerOptions {\n  /**\n   * The access token to use for this endpoint.\n   */\n  accessToken?: string;\n  /**\n   * The username to use to log into this endpoint. Used for basic auth.<br/>\n   * Not used if accessToken is provided.\n   */\n  username?: string;\n  /**\n   * The password to use to log into this endpoint. Used for basic auth.<br/>\n   * Not used if accessToken is provided.\n   */\n  password?: string;\n  /**\n   * A function which will allow external code to modify all endpoint call parameters before they are sent by the browser.\n   *\n   * Used in very specific scenario where the network infrastructure require special request headers to be added or removed, for example.\n   */\n  requestModifier?: (params: IRequestInfo<any>) => IRequestInfo<any>;\n\n  /**\n   * The XmlHttpRequest implementation to use instead of the native one.\n   * If not specified, the native one is used.\n   */\n  xmlHttpRequest?: new () => XMLHttpRequest;\n}\n\n// In ie8, XMLHttpRequest has no status property, so let's use this enum instead\nenum XMLHttpRequestStatus {\n  OPENED = XMLHttpRequest.OPENED || 1,\n  HEADERS_RECEIVED = XMLHttpRequest.HEADERS_RECEIVED || 2,\n  DONE = XMLHttpRequest.DONE || 4\n}\n\n/**\n * This class is in charge of calling an endpoint (eg: a {@link SearchEndpoint}).\n *\n * This means it's only uses to execute an XMLHttpRequest (for example), massage the response and check if there are errors.\n *\n * Will execute the call and return a Promise.\n *\n * Call using one of those options :\n *\n * * XMLHttpRequest for recent browser that support CORS, or if the endpoint is on the same origin.\n * * XDomainRequest for older IE browser that do not support CORS.\n * * Jsonp if all else fails, or is explicitly enabled.\n */\nexport class EndpointCaller {\n  public logger: Logger;\n\n  /**\n   * Set this property to true to enable Jsonp call to the endpoint.<br/>\n   * Be aware that jsonp is \"easier\" to setup endpoint wise, but has a lot of drawback and limitation for the client code.<br/>\n   * Default to false.\n   * @type {boolean}\n   */\n  public useJsonp = false;\n\n  private static JSONP_ERROR_TIMEOUT = 10000;\n  /**\n   * Create a new EndpointCaller.\n   * @param options Specify the authentication that will be used for this endpoint. Not needed if the endpoint is public and has no authentication\n   */\n  constructor(public options: IEndpointCallerOptions = {}) {\n    this.logger = new Logger(this);\n  }\n\n  /**\n   * Generic call to the endpoint using the provided {@link IEndpointCallParameters}.<br/>\n   * Internally, will decide which method to use to call the endpoint :<br/>\n   * -- XMLHttpRequest for recent browser that support CORS, or if the endpoint is on the same origin.<br/>\n   * -- XDomainRequest for older IE browser that do not support CORS.<br/>\n   * -- Jsonp if all else fails, or is explicitly enabled.\n   * @param params The parameters to use for the call\n   * @returns {any} A promise of the given type\n   */\n  public call<T>(params: IEndpointCallParameters): Promise<ISuccessResponse<T>> {\n\n    var requestInfo: IRequestInfo<T> = {\n      url: params.url,\n      queryString: params.errorsAsSuccess ? params.queryString.concat(['errorsAsSuccess=1']) : params.queryString,\n      requestData: params.requestData,\n      requestDataType: params.requestDataType || 'application/x-www-form-urlencoded; charset=\"UTF-8\"',\n      begun: new Date(),\n      method: params.method\n    };\n    requestInfo.headers = this.buildRequestHeaders(requestInfo);\n    if (_.isFunction(this.options.requestModifier)) {\n      requestInfo = this.options.requestModifier(requestInfo);\n    }\n\n\n    this.logger.trace('Performing REST request', requestInfo);\n    var urlObject = this.parseURL(requestInfo.url);\n    // In IE8, hostname and port return \"\" when we are on the same domain.\n    var isLocalHost = (window.location.hostname === urlObject.hostname) || (urlObject.hostname === '');\n\n    var currentPort = (window.location.port != '' ? window.location.port : (window.location.protocol == 'https:' ? '443' : '80'));\n    var isSamePort = currentPort == urlObject.port;\n    var isCrossOrigin = !(isLocalHost && isSamePort);\n    if (!this.useJsonp) {\n      if (this.isCORSSupported() || !isCrossOrigin) {\n        return this.callUsingXMLHttpRequest(requestInfo, params.responseType);\n      } else if (this.isXDomainRequestSupported()) {\n        return this.callUsingXDomainRequest(requestInfo);\n      } else {\n        return this.callUsingAjaxJsonP(requestInfo);\n      }\n    } else {\n      return this.callUsingAjaxJsonP(requestInfo);\n    }\n  }\n\n  /**\n   * Call the endpoint using XMLHttpRequest. Used internally by {@link EndpointCaller.call}.<br/>\n   * Will try internally to handle error if it can.<br/>\n   * Promise will otherwise fail with the error type.\n   * @param requestInfo The info about the request\n   * @param responseType The responseType. Default to text. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType\n   * @returns {Promise<T>|Promise}\n   */\n  public callUsingXMLHttpRequest<T>(requestInfo: IRequestInfo<T>, responseType = 'text'): Promise<ISuccessResponse<T>> {\n    return new Promise((resolve, reject) => {\n      var xmlHttpRequest = this.getXmlHttpRequest();\n\n      // Beware, most stuff must be set on the event that says the request is OPENED.\n      // Otherwise it'll bork on some browsers. Gotta love standards.\n\n      // This sent variable allowed to remove the second call of onreadystatechange with the state OPENED in IE11\n      var sent = false;\n\n      xmlHttpRequest.onreadystatechange = (ev) => {\n        if (xmlHttpRequest.readyState == XMLHttpRequestStatus.OPENED && !sent) {\n          sent = true;\n          xmlHttpRequest.withCredentials = true;\n\n          _.each(requestInfo.headers, (headerValue, headerKey) => {\n            xmlHttpRequest.setRequestHeader(headerKey, headerValue);\n          });\n\n          if (requestInfo.method == 'GET') {\n            xmlHttpRequest.send();\n          } else if (requestInfo.requestDataType.indexOf('application/json') === 0) {\n            xmlHttpRequest.send(JSON.stringify(requestInfo.requestData));\n          } else {\n            xmlHttpRequest.send(this.convertJsonToFormBody(requestInfo.requestData));\n          }\n\n          // The \"responseType\" varies if the request is a success or not.\n          // Therefore we postpone setting \"responseType\" until we know if the\n          // request is a success or not. Doing so, we avoid this potential\n          // error in Chrome:\n          //\n          //   Uncaught InvalidStateError: Failed to read the 'responseText'\n          //   property from 'XMLHttpRequest': The value is only accessible if\n          //   the object's 'responseType' is '' or 'text' (was 'document').\n          //\n        } else if (xmlHttpRequest.readyState == XMLHttpRequestStatus.HEADERS_RECEIVED) {\n          var status = xmlHttpRequest.status;\n\n          if (this.isSuccessHttpStatus(status)) {\n            xmlHttpRequest.responseType = responseType;\n          } else {\n            xmlHttpRequest.responseType = 'text';\n          }\n        } else if (xmlHttpRequest.readyState == XMLHttpRequestStatus.DONE) {\n          var status = xmlHttpRequest.status;\n          var data;\n          switch (responseType) {\n            case 'json':\n              data = xmlHttpRequest.response;\n              // Work around a bug in IE11 where responseType jsonis not supported : the response comes back as a plain string\n              // Force the json parse manually\n              if (responseType == 'json' && DeviceUtils.getDeviceName() == 'IE') {\n                try {\n                  data = JSON.parse(data);\n                } catch (e) {\n                  // Do nothing, it probably means the data was JSON already\n                }\n              }\n              break;\n            case 'text':\n              data = this.tryParseResponseText(xmlHttpRequest.responseText, xmlHttpRequest.getResponseHeader('Content-Type'));\n              break;\n            default:\n              data = xmlHttpRequest.response;\n              break;\n          }\n\n          if (data == undefined) {\n            data = this.tryParseResponseText(xmlHttpRequest.responseText, xmlHttpRequest.getResponseHeader('Content-Type'));\n          }\n\n          if (this.isSuccessHttpStatus(status)) {\n            this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject);\n          } else {\n            this.handleError(requestInfo, xmlHttpRequest.status, data, reject);\n          }\n        }\n      };\n\n      var queryString = requestInfo.queryString;\n      if (requestInfo.method == 'GET') {\n        queryString = queryString.concat(this.convertJsonToQueryString(requestInfo.requestData));\n      }\n      xmlHttpRequest.open(requestInfo.method, this.combineUrlAndQueryString(requestInfo.url, queryString));\n    });\n  }\n\n  /**\n   * Call the endpoint using XDomainRequest https://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx<br/>\n   * Used for IE8/9\n   * @param requestInfo The info about the request\n   * @returns {Promise<T>|Promise}\n   */\n  public callUsingXDomainRequest<T>(requestInfo: IRequestInfo<T>): Promise<IResponse<T>> {\n    return new Promise((resolve, reject) => {\n      var queryString = requestInfo.queryString.concat([]);\n\n      // XDomainRequest don't support including stuff in the header, so we must\n      // put the access token in the query string if we have one.\n      if (this.options.accessToken) {\n        queryString.push('access_token=' + encodeURIComponent(this.options.accessToken));\n      }\n\n      var xDomainRequest = new XDomainRequest();\n      if (requestInfo.method == 'GET') {\n        queryString = queryString.concat(this.convertJsonToQueryString(requestInfo.requestData));\n      }\n      xDomainRequest.open(requestInfo.method, this.combineUrlAndQueryString(requestInfo.url, queryString));\n\n      xDomainRequest.onload = () => {\n        var data = this.tryParseResponseText(xDomainRequest.responseText, xDomainRequest.contentType);\n        this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject);\n      };\n\n      xDomainRequest.onerror = () => {\n        var data = this.tryParseResponseText(xDomainRequest.responseText, xDomainRequest.contentType);\n        this.handleError(requestInfo, 0, data, reject);\n      };\n\n      // We must set those functions otherwise it will sometime fail in IE\n      xDomainRequest.ontimeout = () => this.logger.error('Request timeout', xDomainRequest, requestInfo.requestData);\n      xDomainRequest.onprogress = () => this.logger.trace('Request progress', xDomainRequest, requestInfo.requestData);\n\n      // We must open the request in a separate thread, for obscure reasons\n      _.defer(() => {\n        if (requestInfo.method == 'GET') {\n          xDomainRequest.send();\n        } else {\n          xDomainRequest.send(this.convertJsonToFormBody(requestInfo.requestData));\n        }\n      });\n    });\n  }\n\n  /**\n   * Call the endpoint using Jsonp https://en.wikipedia.org/wiki/JSONP<br/>\n   * Should be used for dev only, or for very special setup as using jsonp has a lot of drawbacks.\n   * @param requestInfo The info about the request\n   * @returns {Promise<T>|Promise}\n   */\n  public callUsingAjaxJsonP<T>(requestInfo: IRequestInfo<T>): Promise<IResponse<T>> {\n    let jQuery = JQueryUtils.getJQuery();\n    Assert.check(jQuery, 'Using jsonp without having included jQuery is not supported.');\n    return new Promise((resolve, reject) => {\n      var queryString = requestInfo.queryString.concat(this.convertJsonToQueryString(requestInfo.requestData));\n\n      // JSONP don't support including stuff in the header, so we must\n      // put the access token in the query string if we have one.\n      if (this.options.accessToken) {\n        queryString.push('access_token=' + encodeURIComponent(this.options.accessToken));\n      }\n\n      queryString.push('callback=?');\n\n      jQuery.ajax({\n        url: this.combineUrlAndQueryString(requestInfo.url, queryString),\n        dataType: 'jsonp',\n        success: (data: any) => this.handleSuccessfulResponseThatMightBeAnError(requestInfo, data, resolve, reject),\n        timeout: EndpointCaller.JSONP_ERROR_TIMEOUT,\n        error: () => this.handleError(requestInfo, 0, undefined, reject)\n      });\n    });\n  }\n\n  private parseURL(url: string) {\n    var urlObject = document.createElement('a');\n    urlObject.href = url;\n    return urlObject;\n  }\n\n  private getXmlHttpRequest(): XMLHttpRequest {\n    var newXmlHttpRequest = this.options.xmlHttpRequest || XMLHttpRequest;\n    return new newXmlHttpRequest();\n  }\n\n  private convertJsonToQueryString(json: { [key: string]: any; }): string[] {\n    Assert.exists(json);\n\n    var result: string[] = [];\n    _.each(json, (value, key) => {\n      if (value != null) {\n        if (_.isObject(value)) {\n          result.push(key + '=' + encodeURIComponent(JSON.stringify(value)));\n        } else {\n          result.push(key + '=' + encodeURIComponent(value.toString()));\n        }\n      }\n    });\n\n    return result;\n  }\n\n  private convertJsonToFormBody(json: { [key: string]: any; }): string {\n    return this.convertJsonToQueryString(json).join('&');\n  }\n\n  private handleSuccessfulResponseThatMightBeAnError<T>(requestInfo: IRequestInfo<T>, data: any, success, error) {\n    if (this.isErrorResponseBody(data)) {\n      this.handleError(requestInfo, data.statusCode, data, error);\n    } else {\n      this.handleSuccess(requestInfo, data, success);\n    }\n  }\n\n  private handleSuccess<T>(requestInfo: IRequestInfo<T>, data: T, success) {\n    var querySuccess: ISuccessResponse<T> = {\n      duration: TimeSpan.fromDates(requestInfo.begun, new Date()).getMilliseconds(),\n      data: data\n    };\n\n    this.logger.trace('REST request successful', data, requestInfo);\n    success(querySuccess);\n  }\n\n  private handleError<T>(requestInfo: IRequestInfo<T>, status: number, data: any, error) {\n    var queryError: IErrorResponse = {\n      statusCode: status,\n      data: data\n    };\n    this.logger.error('REST request failed', status, data, requestInfo);\n    error(queryError);\n  }\n\n  private combineUrlAndQueryString(url: String, queryString: string[]): string {\n    var questionMark = '?';\n    if (url.match(/\\?$/)) {\n      questionMark = '';\n    }\n    return url + (queryString.length > 0 ? questionMark + queryString.join('&') : '');\n  }\n\n  private isXDomainRequestSupported(): boolean {\n    return 'XDomainRequest' in window;\n  }\n\n  private isCORSSupported(): boolean {\n    return 'withCredentials' in this.getXmlHttpRequest();\n  }\n\n  private isSuccessHttpStatus(status: number): boolean {\n    return status >= 200 && status < 300 || status === 304;\n  }\n\n  private tryParseResponseText(json: string, contentType: string): any {\n    if (contentType != null && contentType.indexOf('application/json') != -1) {\n      if (Utils.isNonEmptyString(json)) {\n        try {\n          return JSON.parse(json);\n        } catch (ex) {\n          return undefined;\n        }\n      } else {\n        return undefined;\n      }\n    } else {\n      return json;\n    }\n  }\n\n  private isErrorResponseBody(data: any): boolean {\n    if (data && data.statusCode) {\n      return !this.isSuccessHttpStatus(data.statusCode);\n    } else {\n      return false;\n    }\n  }\n\n  private buildRequestHeaders<T>(requestInfo: IRequestInfo<T>): IStringMap<string> {\n    let headers: IStringMap<string> = {};\n    if (this.options.accessToken) {\n      headers['Authorization'] = `Bearer ${this.options.accessToken}`;\n    } else if (this.options.username && this.options.password) {\n      headers['Authorization'] = `Basic ${btoa(this.options.username + ':' + this.options.password)}`;\n    }\n\n    if (requestInfo.method == 'GET') {\n      return headers;\n    }\n\n    if (requestInfo.requestDataType.indexOf('application/json') === 0) {\n      headers['Content-Type'] = 'application/json; charset=\"UTF-8\"';\n    } else {\n      headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=\"UTF-8\"';\n    }\n\n    return headers;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/EndpointCaller.ts\n **/","// Ensure that we're not going to get console is undefined error in IE8-9\nif (!window['console']) {\n  console = <any>{\n    log: function () {\n    },\n    debug: function () {\n    },\n    info: function () {\n    },\n    warn: function () {\n    },\n    error: function () {\n    },\n    assert: function () {\n    },\n    clear: function () {\n    },\n    count: function () {\n    },\n    dir: function () {\n    },\n    dirxml: function () {\n    },\n    group: function () {\n    },\n    groupCollapsed: function () {\n    },\n    groupEnd: function () {\n    },\n    msIsIndependentlyComposed: function (element: any): any {\n    },\n    profile: function () {\n    },\n    profileEnd: function () {\n    },\n    select: function () {\n    },\n    time: function () {\n    },\n    timeEnd: function () {\n    },\n    trace: function () {\n    }\n  };\n}\n\n\nexport class Logger {\n  static TRACE = 1;\n  static DEBUG = 2;\n  static INFO = 3;\n  static WARN = 4;\n  static ERROR = 5;\n  static NOTHING = 6;\n\n  static level = Logger.INFO;\n  static executionTime = false;\n\n  constructor(private owner: any) {\n  }\n\n  trace(...stuff: any[]) {\n    if (Logger.level <= Logger.TRACE) {\n      this.log('TRACE', stuff);\n    }\n  }\n\n  debug(...stuff: any[]) {\n    if (Logger.level <= Logger.DEBUG) {\n      this.log('DEBUG', stuff);\n    }\n  }\n\n  info(...stuff: any[]) {\n    if (Logger.level <= Logger.INFO) {\n      this.log('INFO', stuff);\n    }\n  }\n\n  warn(...stuff: any[]) {\n    if (Logger.level <= Logger.WARN) {\n      this.log('WARN', stuff);\n    }\n  }\n\n  error(...stuff: any[]) {\n    if (Logger.level <= Logger.ERROR) {\n      this.log('ERROR', stuff);\n    }\n  }\n\n  private log(level: string, stuff: any[]) {\n    if (window['console'] && console.log) {\n      console.log([level, this.owner].concat(stuff));\n      if (Logger.executionTime) {\n        console.timeEnd('Execution time');\n        console.time('Execution time');\n      }\n    }\n  }\n\n  static enable() {\n    Logger.level = Logger.TRACE;\n  }\n\n  static disable() {\n    Logger.level = Logger.NOTHING;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Logger.ts\n **/","import { Logger } from '../misc/Logger';\nimport { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\nexport class Assert {\n  private static logger = new Logger('Assert');\n\n  static failureHandler = (message?: string) => {\n    Assert.logger.error('Assertion Failed!', message);\n\n    if (window['console'] && console.trace) {\n      console.trace();\n    }\n\n    if (Utils.isNonEmptyString(message)) {\n      throw new PreconditionFailedException(message);\n    } else {\n      throw new PreconditionFailedException('Assertion Failed!');\n    }\n  }\n\n  static fail(message?: string) {\n    Assert.failureHandler(message);\n  }\n\n  static check(condition: boolean, message?: string) {\n    if (!condition) {\n      Assert.fail(message);\n    }\n  }\n\n  static isUndefined(obj: any) {\n    Assert.check(Utils.isUndefined(obj), 'Value should be undefined.');\n  }\n\n  static isNotUndefined(obj: any) {\n    Assert.check(!Utils.isUndefined(obj), 'Value should not be undefined.');\n  }\n\n  static isNull(obj: any) {\n    Assert.check(Utils.isNull(obj), 'Value should be null.');\n  }\n\n  static isNotNull(obj: any) {\n    Assert.check(!Utils.isNull(obj), 'Value should not be null.');\n  }\n\n  static exists(obj: any) {\n    Assert.check(!Utils.isNullOrUndefined(obj), 'Value should not be null or undefined');\n  }\n\n  static doesNotExists(obj: any) {\n    Assert.check(Utils.isNullOrUndefined(obj), 'Value should be null or undefined');\n  }\n\n  static isString(obj: any) {\n    Assert.check(_.isString(obj), 'Value should be a string.');\n  }\n\n  static stringStartsWith(str: string, start: string) {\n    Assert.isNonEmptyString(str);\n    Assert.isNonEmptyString(start);\n    Assert.check(str.indexOf(start) == 0, 'Value should start with ' + start);\n  }\n\n  static isNonEmptyString(str: string) {\n    Assert.check(Utils.isNonEmptyString(str), 'Value should be a non-empty string.');\n  }\n\n  static isNumber(obj: any) {\n    Assert.check(_.isNumber(obj), 'Value should be a number.');\n  }\n\n  static isLargerThan(expected: number, actual: number) {\n    Assert.check(actual > expected, 'Value ' + actual + ' should be larger than ' + expected);\n  }\n\n  static isLargerOrEqualsThan(expected: number, actual: number) {\n    Assert.check(actual >= expected, 'Value ' + actual + ' should be larger or equal than ' + expected);\n  }\n\n  static isSmallerThan(expected: number, actual: number) {\n    Assert.check(actual < expected, 'Value ' + actual + ' should be smaller than ' + expected);\n  }\n\n  static isSmallerOrEqualsThan(expected: number, actual: number) {\n    Assert.check(actual <= expected, 'Value ' + actual + ' should be smaller or equal than ' + expected);\n  }\n}\n\nexport class PreconditionFailedException extends Error {\n  constructor(public message: string) {\n    super(message);\n  }\n\n  toString() {\n    return this.message;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Assert.ts\n **/","import { IQueryResult } from '../rest/QueryResult';\nimport _ = require('underscore');\n\nconst isCoveoFieldRegex = /^@[a-zA-Z0-9_\\.]+$/;\n\nexport class Utils {\n  static isUndefined(obj: any): boolean {\n    return typeof obj == 'undefined';\n  }\n\n  static isNull(obj: any): boolean {\n    return obj === null;\n  }\n\n  static isNullOrUndefined(obj: any): boolean {\n    return Utils.isUndefined(obj) || Utils.isNull(obj);\n  }\n\n  static exists(obj: any): boolean {\n    return !Utils.isNullOrUndefined(obj);\n  }\n\n  static toNotNullString(str: string): string {\n    return _.isString(str) ? str : '';\n  }\n\n  static anyTypeToString(value: any): string {\n    return value ? value.toString() : '';\n  }\n\n  static isNullOrEmptyString(str: string): boolean {\n    return Utils.isNullOrUndefined(str) || !Utils.isNonEmptyString(str);\n  }\n\n  static isNonEmptyString(str: string): boolean {\n    return _.isString(str) && str !== '';\n  }\n\n  static isEmptyString(str: string): boolean {\n    return !Utils.isNonEmptyString(str);\n  }\n\n  static stringStartsWith(str: string, startWith: string): boolean {\n    return str.slice(0, startWith.length) == startWith;\n  }\n\n  static isNonEmptyArray(obj: any): boolean {\n    return _.isArray(obj) && obj.length > 0;\n  }\n\n  static isEmptyArray(obj: any): boolean {\n    return !Utils.isNonEmptyArray(obj);\n  }\n\n  static isHtmlElement(obj: any): boolean {\n    if (window['HTMLElement'] != undefined) {\n      return obj instanceof HTMLElement;\n    } else { // IE 8 FIX\n      return obj && obj.nodeType && obj.nodeType == 1;\n    }\n  }\n\n  static parseIntIfNotUndefined(str: string): number {\n    if (Utils.isNonEmptyString(str)) {\n      return parseInt(str, 10);\n    } else {\n      return undefined;\n    }\n  }\n\n  static parseFloatIfNotUndefined(str: string): number {\n    if (Utils.isNonEmptyString(str)) {\n      return parseFloat(str);\n    } else {\n      return undefined;\n    }\n  }\n\n  static round(num: number, decimals: number) {\n    return Math.round(num * Math.pow(10, decimals)) / Math.pow(10, decimals);\n  }\n\n  static parseBooleanIfNotUndefined(str: string): boolean {\n    if (Utils.isNonEmptyString(str)) {\n      switch (str.toLowerCase()) {\n        case 'true':\n        case '1':\n        case 'yes':\n          return true;\n        case 'false':\n        case '0':\n        case 'no':\n          return false;\n        default:\n          return undefined;\n      }\n    } else {\n      return undefined;\n    }\n  }\n\n  static trim(value: string): string {\n    if (value == null) {\n      return null;\n    }\n    return value.replace(/^\\s+|\\s+$/g, '');\n  }\n\n  static encodeHTMLEntities(rawStr: string) {\n    let ret = [];\n    for (let i = rawStr.length - 1; i >= 0; i--) {\n      if (/^[a-z0-9]/i.test(rawStr[i])) {\n        ret.unshift(rawStr[i]);\n      } else {\n        ret.unshift(['&#', rawStr.charCodeAt(i), ';'].join(''));\n      }\n    }\n    return ret.join('');\n  }\n\n  static decodeHTMLEntities(rawString: string) {\n    return rawString.replace(/&#(\\d+);/g, function (match, dec) {\n      return String.fromCharCode(dec);\n    });\n  }\n\n  static arrayEqual(array1: any[], array2: any[], sameOrder: boolean = true): boolean {\n    if (sameOrder) {\n      return _.isEqual(array1, array2);\n    } else {\n      let arrays = [array1, array2];\n      return _.all(arrays, (array: any[]) => {\n        return array.length == arrays[0].length && _.difference(array, arrays[0]).length == 0;\n      });\n    }\n  }\n\n  static objectEqual(obj1: Object, obj2: Object): boolean {\n    return _.isEqual(obj1, obj2);\n  }\n\n\n  static isCoveoField(field: string): boolean {\n    return isCoveoFieldRegex.test(field);\n  }\n\n  static escapeRegexCharacter(str: string) {\n    let ret = str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n    return ret;\n  }\n\n  static getCaseInsensitiveProperty(object: {}, name: string): any {\n    // First try using a fast case-sensitive lookup\n    let value = object[name];\n\n    // Then try a fast case-sensitive lookup with lowercase name\n    if (value == null) {\n      let lowerCaseName = name.toLowerCase();\n      value = object[lowerCaseName];\n      // Then try a slow scanning of all the properties\n      if (value == null) {\n        let matchingKey = _.find(_.keys(object), (key: string) => key.toLowerCase() == lowerCaseName);\n        if (matchingKey != null) {\n          value = object[matchingKey];\n        }\n      }\n    }\n    return value;\n  }\n\n  static getFieldValue(result: IQueryResult, name: string): any {\n    // Be as forgiving as possible about the field name, since we expect\n    // user provided values.\n    if (name == null) {\n      return undefined;\n    }\n    name = Utils.trim(name);\n    if (name[0] == '@') {\n      name = name.substr(1);\n    }\n    if (name == '') {\n      return undefined;\n    }\n\n    // At this point the name should be well formed\n    if (!Utils.isCoveoField('@' + name)) {\n      throw `Not a valid field : ${name}`;\n    }\n    // Handle namespace field values of the form sf.Foo.Bar\n    let parts = name.split('.').reverse();\n    let obj = result.raw;\n    while (parts.length > 1) {\n      obj = Utils.getCaseInsensitiveProperty(obj, parts.pop());\n      if (Utils.isUndefined(obj)) {\n        return undefined;\n      }\n    }\n    let value = Utils.getCaseInsensitiveProperty(obj, parts[0]);\n    // If still nothing, look at the root of the result\n    if (value == null) {\n      value = Utils.getCaseInsensitiveProperty(result, name);\n    }\n    return value;\n  }\n\n  static throttle(func, wait, options: { leading?: boolean; trailing?: boolean; } = {}, context?, args?) {\n    let result;\n    let timeout: number = null;\n    let previous = 0;\n    let later = function () {\n      previous = options.leading === false ? 0 : new Date().getTime();\n      timeout = null;\n      result = func.apply(context, args);\n    };\n    return function () {\n      let now = new Date().getTime();\n      if (!previous && options.leading === false) {\n        previous = now;\n      }\n      let remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0) {\n        clearTimeout(timeout);\n        timeout = null;\n        previous = now;\n        result = func.apply(context, args);\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  }\n\n  static extendDeep(target, src): {} {\n    if (!target) {\n      target = {};\n    }\n    let isArray = _.isArray(src);\n    let toReturn = isArray && [] || {};\n    if (isArray) {\n      target = target || [];\n      toReturn = toReturn['concat'](target);\n      _.each(src, (e, i, obj) => {\n        if (typeof target[i] === 'undefined') {\n          toReturn[i] = <any>e;\n        } else if (typeof e === 'object') {\n          toReturn[i] = Utils.extendDeep(target[i], e);\n        } else {\n          if (target.indexOf(e) === -1) {\n            toReturn['push'](e);\n          }\n        }\n      });\n    } else {\n      if (target && typeof target === 'object') {\n        _.each(_.keys(target), (key) => {\n          toReturn[key] = target[key];\n        });\n      }\n      _.each(_.keys(src), (key) => {\n        if (typeof src[key] !== 'object' || !src[key]) {\n          toReturn[key] = src[key];\n        } else {\n          if (!target[key]) {\n            toReturn[key] = src[key];\n          } else {\n            toReturn[key] = Utils.extendDeep(target[key], src[key]);\n          }\n        }\n      });\n    }\n    return toReturn;\n  }\n\n  static getQueryStringValue(key, queryString = window.location.search) {\n    return queryString.replace(new RegExp('^(?:.*[&\\\\?]' + key.replace(/[\\.\\+\\*]/g, '\\\\$&') + '(?:\\\\=([^&]*))?)?.*$', 'i'), '$1');\n  }\n\n  static isValidUrl(str: string): boolean {\n    let regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/;\n    return regexp.test(str);\n  }\n\n  static debounce(func: Function, wait: number) {\n    let timeout: number;\n    let stackTraceTimeout: number;\n    return function (...args: any[]) {\n      if (timeout == null) {\n        timeout = setTimeout(() => {\n          timeout = null;\n        }, wait);\n        stackTraceTimeout = setTimeout(() => {\n          func.apply(this, args);\n          stackTraceTimeout = null;\n        });\n      } else if (stackTraceTimeout == null) {\n        clearTimeout(timeout);\n        timeout = setTimeout(() => {\n          func.apply(this, args);\n          timeout = null;\n        }, wait);\n      }\n    };\n  }\n\n  static readCookie(name: string) {\n    let nameEQ = name + '=';\n    let ca = document.cookie.split(';');\n    for (let i = 0; i < ca.length; i++) {\n      let c = ca[i];\n      while (c.charAt(0) == ' ') {\n        c = c.substring(1, c.length);\n      }\n      if (c.indexOf(nameEQ) == 0) {\n        return c.substring(nameEQ.length, c.length);\n      }\n    }\n    return null;\n  }\n\n  static toDashCase(camelCased: string) {\n    return camelCased.replace(/([a-z][A-Z])/g, (g) => g[0] + '-' + g[1].toLowerCase());\n  }\n\n  // Based on http://stackoverflow.com/a/8412989\n  static parseXml(xml: string): XMLDocument {\n    if (typeof DOMParser != 'undefined') {\n      return (new DOMParser()).parseFromString(xml, 'text/xml');\n    } else if (typeof ActiveXObject != 'undefined' && new ActiveXObject('Microsoft.XMLDOM')) {\n      var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');\n      xmlDoc.async = 'false';\n      xmlDoc.loadXML(xml);\n      return xmlDoc;\n    } else {\n      throw new Error('No XML parser found');\n    }\n  }\n\n  static copyObject<T>(target: T, src: T) {\n    _.each(_.keys(src), key => {\n      if (typeof src[key] !== 'object' || !src[key]) {\n        target[key] = src[key];\n      } else if (!target[key]) {\n        target[key] = src[key];\n      } else {\n        this.copyObject(target[key], src[key]);\n      }\n    });\n  }\n\n  static copyObjectAttributes<T>(target: T, src: T, attributes: string[]) {\n    _.each(_.keys(src), key => {\n      if (_.contains(attributes, key)) {\n        if (typeof src[key] !== 'object' || !src[key]) {\n          target[key] = src[key];\n        } else if (!target[key]) {\n          target[key] = src[key];\n        } else {\n          this.copyObject(target[key], src[key]);\n        }\n      }\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/Utils.ts\n **/","//     Underscore.js 1.8.3\n//     http://underscorejs.org\n//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `exports` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var\n    push             = ArrayProto.push,\n    slice            = ArrayProto.slice,\n    toString         = ObjProto.toString,\n    hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind,\n    nativeCreate       = Object.create;\n\n  // Naked function reference for surrogate-prototype-swapping.\n  var Ctor = function(){};\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) {\n    if (obj instanceof _) return obj;\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n  };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root._ = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.8.3';\n\n  // Internal function that returns an efficient (for current engines) version\n  // of the passed-in callback, to be repeatedly applied in other Underscore\n  // functions.\n  var optimizeCb = function(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      case 2: return function(value, other) {\n        return func.call(context, value, other);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  };\n\n  // A mostly-internal function to generate callbacks that can be applied\n  // to each element in a collection, returning the desired result — either\n  // identity, an arbitrary callback, a property matcher, or a property accessor.\n  var cb = function(value, context, argCount) {\n    if (value == null) return _.identity;\n    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n    if (_.isObject(value)) return _.matcher(value);\n    return _.property(value);\n  };\n  _.iteratee = function(value, context) {\n    return cb(value, context, Infinity);\n  };\n\n  // An internal function for creating assigner functions.\n  var createAssigner = function(keysFunc, undefinedOnly) {\n    return function(obj) {\n      var length = arguments.length;\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  };\n\n  // An internal function for creating a new object that inherits from another.\n  var baseCreate = function(prototype) {\n    if (!_.isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  };\n\n  var property = function(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  };\n\n  // Helper for collection methods to determine whether a collection\n  // should be iterated as an array or as an object\n  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  var getLength = property('length');\n  var isArrayLike = function(collection) {\n    var length = getLength(collection);\n    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n  };\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles raw objects in addition to array-likes. Treats all\n  // sparse array-likes as if they were dense.\n  _.each = _.forEach = function(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var keys = _.keys(obj);\n      for (i = 0, length = keys.length; i < length; i++) {\n        iteratee(obj[keys[i]], keys[i], obj);\n      }\n    }\n    return obj;\n  };\n\n  // Return the results of applying the iteratee to each element.\n  _.map = _.collect = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Create a reducing function iterating left or right.\n  function createReduce(dir) {\n    // Optimized iterator function as using arguments.length\n    // in the main function will deoptimize the, see #1991.\n    function iterator(obj, iteratee, memo, keys, index, length) {\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = keys ? keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    }\n\n    return function(obj, iteratee, memo, context) {\n      iteratee = optimizeCb(iteratee, context, 4);\n      var keys = !isArrayLike(obj) && _.keys(obj),\n          length = (keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      // Determine the initial value if none is provided.\n      if (arguments.length < 3) {\n        memo = obj[keys ? keys[index] : index];\n        index += dir;\n      }\n      return iterator(obj, iteratee, memo, keys, index, length);\n    };\n  }\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`.\n  _.reduce = _.foldl = _.inject = createReduce(1);\n\n  // The right-associative version of reduce, also known as `foldr`.\n  _.reduceRight = _.foldr = createReduce(-1);\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, predicate, context) {\n    var key;\n    if (isArrayLike(obj)) {\n      key = _.findIndex(obj, predicate, context);\n    } else {\n      key = _.findKey(obj, predicate, context);\n    }\n    if (key !== void 0 && key !== -1) return obj[key];\n  };\n\n  // Return all the elements that pass a truth test.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    _.each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, predicate, context) {\n    return _.filter(obj, _.negate(cb(predicate)), context);\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Aliased as `any`.\n  _.some = _.any = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  };\n\n  // Determine if the array or object contains a given item (using `===`).\n  // Aliased as `includes` and `include`.\n  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n    if (!isArrayLike(obj)) obj = _.values(obj);\n    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n    return _.indexOf(obj, item, fromIndex) >= 0;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    var isFunc = _.isFunction(method);\n    return _.map(obj, function(value) {\n      var func = isFunc ? method : value[method];\n      return func == null ? func : func.apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, _.property(key));\n  };\n\n  // Convenience version of a common use case of `filter`: selecting only objects\n  // containing specific `key:value` pairs.\n  _.where = function(obj, attrs) {\n    return _.filter(obj, _.matcher(attrs));\n  };\n\n  // Convenience version of a common use case of `find`: getting the first object\n  // containing specific `key:value` pairs.\n  _.findWhere = function(obj, attrs) {\n    return _.find(obj, _.matcher(attrs));\n  };\n\n  // Return the maximum element (or element-based computation).\n  _.max = function(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Shuffle a collection, using the modern version of the\n  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n  _.shuffle = function(obj) {\n    var set = isArrayLike(obj) ? obj : _.values(obj);\n    var length = set.length;\n    var shuffled = Array(length);\n    for (var index = 0, rand; index < length; index++) {\n      rand = _.random(0, index);\n      if (rand !== index) shuffled[index] = shuffled[rand];\n      shuffled[rand] = set[index];\n    }\n    return shuffled;\n  };\n\n  // Sample **n** random values from a collection.\n  // If **n** is not specified, returns a single random element.\n  // The internal `guard` argument allows it to work with `map`.\n  _.sample = function(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = _.values(obj);\n      return obj[_.random(obj.length - 1)];\n    }\n    return _.shuffle(obj).slice(0, Math.max(0, n));\n  };\n\n  // Sort the object's values by a criterion produced by an iteratee.\n  _.sortBy = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value: value,\n        index: index,\n        criteria: iteratee(value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  };\n\n  // An internal function used for aggregate \"group by\" operations.\n  var group = function(behavior) {\n    return function(obj, iteratee, context) {\n      var result = {};\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n  });\n\n  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n  // when you know that your index values will be unique.\n  _.indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n\n  // Counts instances of an object that group by a certain criterion. Pass\n  // either a string attribute to count by, or a function that returns the\n  // criterion.\n  _.countBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key]++; else result[key] = 1;\n  });\n\n  // Safely create a real, live array from anything iterable.\n  _.toArray = function(obj) {\n    if (!obj) return [];\n    if (_.isArray(obj)) return slice.call(obj);\n    if (isArrayLike(obj)) return _.map(obj, _.identity);\n    return _.values(obj);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n  };\n\n  // Split a collection into two arrays: one whose elements all satisfy the given\n  // predicate, and one whose elements all do not satisfy the predicate.\n  _.partition = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var pass = [], fail = [];\n    _.each(obj, function(value, key, obj) {\n      (predicate(value, key, obj) ? pass : fail).push(value);\n    });\n    return [pass, fail];\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head` and `take`. The **guard** check\n  // allows it to work with `_.map`.\n  _.first = _.head = _.take = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[0];\n    return _.initial(array, array.length - n);\n  };\n\n  // Returns everything but the last entry of the array. Especially useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array.\n  _.last = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[array.length - 1];\n    return _.rest(array, Math.max(0, array.length - n));\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n  // Especially useful on the arguments object. Passing an **n** will return\n  // the rest N values in the array.\n  _.rest = _.tail = _.drop = function(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, _.identity);\n  };\n\n  // Internal implementation of a recursive `flatten` function.\n  var flatten = function(input, shallow, strict, startIndex) {\n    var output = [], idx = 0;\n    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n        //flatten current level of array or arguments object\n        if (!shallow) value = flatten(value, shallow, strict);\n        var j = 0, len = value.length;\n        output.length += len;\n        while (j < len) {\n          output[idx++] = value[j++];\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  };\n\n  // Flatten out an array, either recursively (by default), or just one level.\n  _.flatten = function(array, shallow) {\n    return flatten(array, shallow, false);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n    if (!_.isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!_.contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!_.contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(flatten(arguments, true, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays.\n  _.intersection = function(array) {\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var item = array[i];\n      if (_.contains(result, item)) continue;\n      for (var j = 1; j < argsLength; j++) {\n        if (!_.contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = flatten(arguments, true, true, 1);\n    return _.filter(array, function(value){\n      return !_.contains(rest, value);\n    });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    return _.unzip(arguments);\n  };\n\n  // Complement of _.zip. Unzip accepts an array of arrays and groups\n  // each array's elements on shared indices\n  _.unzip = function(array) {\n    var length = array && _.max(array, getLength).length || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = _.pluck(array, index);\n    }\n    return result;\n  };\n\n  // Converts lists into objects. Pass either a single array of `[key, value]`\n  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n  // the corresponding values.\n  _.object = function(list, values) {\n    var result = {};\n    for (var i = 0, length = getLength(list); i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  };\n\n  // Generator function to create the findIndex and findLastIndex functions\n  function createPredicateIndexFinder(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = getLength(array);\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  }\n\n  // Returns the first index on an array-like that passes a predicate test\n  _.findIndex = createPredicateIndexFinder(1);\n  _.findLastIndex = createPredicateIndexFinder(-1);\n\n  // Use a comparator function to figure out the smallest index at which\n  // an object should be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = getLength(array);\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  };\n\n  // Generator function to create the indexOf and lastIndexOf functions\n  function createIndexFinder(dir, predicateFind, sortedIndex) {\n    return function(array, item, idx) {\n      var i = 0, length = getLength(array);\n      if (typeof idx == 'number') {\n        if (dir > 0) {\n            i = idx >= 0 ? idx : Math.max(idx + length, i);\n        } else {\n            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n        }\n      } else if (sortedIndex && idx && length) {\n        idx = sortedIndex(array, item);\n        return array[idx] === item ? idx : -1;\n      }\n      if (item !== item) {\n        idx = predicateFind(slice.call(array, i, length), _.isNaN);\n        return idx >= 0 ? idx + i : -1;\n      }\n      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n        if (array[idx] === item) return idx;\n      }\n      return -1;\n    };\n  }\n\n  // Return the position of the first occurrence of an item in an array,\n  // or -1 if the item is not included in the array.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (stop == null) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = step || 1;\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Determines whether to execute a function as a constructor\n  // or a normal function with the provided arguments\n  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (_.isObject(result)) return result;\n    return self;\n  };\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n  // available.\n  _.bind = function(func, context) {\n    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n    var args = slice.call(arguments, 2);\n    var bound = function() {\n      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n    };\n    return bound;\n  };\n\n  // Partially apply a function by creating a version that has had some of its\n  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n  // as a placeholder, allowing any combination of arguments to be pre-filled.\n  _.partial = function(func) {\n    var boundArgs = slice.call(arguments, 1);\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  };\n\n  // Bind a number of an object's methods to that object. Remaining arguments\n  // are the method names to be bound. Useful for ensuring that all callbacks\n  // defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var i, length = arguments.length, key;\n    if (length <= 1) throw new Error('bindAll must be passed function names');\n    for (i = 1; i < length; i++) {\n      key = arguments[i];\n      obj[key] = _.bind(obj[key], obj);\n    }\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){\n      return func.apply(null, args);\n    }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = _.partial(_.delay, _, 1);\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time. Normally, the throttled function will run\n  // as much as it can, without ever going more than once per `wait` duration;\n  // but if you'd like to disable the execution on the leading edge, pass\n  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n  _.throttle = function(func, wait, options) {\n    var context, args, result;\n    var timeout = null;\n    var previous = 0;\n    if (!options) options = {};\n    var later = function() {\n      previous = options.leading === false ? 0 : _.now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n    return function() {\n      var now = _.now();\n      if (!previous && options.leading === false) previous = now;\n      var remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _.debounce = function(func, wait, immediate) {\n    var timeout, args, context, timestamp, result;\n\n    var later = function() {\n      var last = _.now() - timestamp;\n\n      if (last < wait && last >= 0) {\n        timeout = setTimeout(later, wait - last);\n      } else {\n        timeout = null;\n        if (!immediate) {\n          result = func.apply(context, args);\n          if (!timeout) context = args = null;\n        }\n      }\n    };\n\n    return function() {\n      context = this;\n      args = arguments;\n      timestamp = _.now();\n      var callNow = immediate && !timeout;\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (callNow) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n\n      return result;\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return _.partial(wrapper, func);\n  };\n\n  // Returns a negated version of the passed-in predicate.\n  _.negate = function(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  };\n\n  // Returns a function that will only be executed on and after the Nth call.\n  _.after = function(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  };\n\n  // Returns a function that will only be executed up to (but not including) the Nth call.\n  _.before = function(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = _.partial(_.before, 2);\n\n  // Object Functions\n  // ----------------\n\n  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n  function collectNonEnumProps(obj, keys) {\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n    // Constructor is a special case.\n    var prop = 'constructor';\n    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n        keys.push(prop);\n      }\n    }\n  }\n\n  // Retrieve the names of an object's own properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve all the property names of an object.\n  _.allKeys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[keys[i]];\n    }\n    return values;\n  };\n\n  // Returns the results of applying the iteratee to each element of the object\n  // In contrast to _.map it returns an object\n  _.mapObject = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys =  _.keys(obj),\n          length = keys.length,\n          results = {},\n          currentKey;\n      for (var index = 0; index < length; index++) {\n        currentKey = keys[index];\n        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n      }\n      return results;\n  };\n\n  // Convert an object into a list of `[key, value]` pairs.\n  _.pairs = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [keys[i], obj[keys[i]]];\n    }\n    return pairs;\n  };\n\n  // Invert the keys and values of an object. The values must be serializable.\n  _.invert = function(obj) {\n    var result = {};\n    var keys = _.keys(obj);\n    for (var i = 0, length = keys.length; i < length; i++) {\n      result[obj[keys[i]]] = keys[i];\n    }\n    return result;\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = createAssigner(_.allKeys);\n\n  // Assigns a given object with all the own properties in the passed-in object(s)\n  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n  _.extendOwn = _.assign = createAssigner(_.keys);\n\n  // Returns the first key on an object that passes a predicate test\n  _.findKey = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = _.keys(obj), key;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  };\n\n  // Return a copy of the object only containing the whitelisted properties.\n  _.pick = function(object, oiteratee, context) {\n    var result = {}, obj = object, iteratee, keys;\n    if (obj == null) return result;\n    if (_.isFunction(oiteratee)) {\n      keys = _.allKeys(obj);\n      iteratee = optimizeCb(oiteratee, context);\n    } else {\n      keys = flatten(arguments, false, false, 1);\n      iteratee = function(value, key, obj) { return key in obj; };\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  };\n\n   // Return a copy of the object without the blacklisted properties.\n  _.omit = function(obj, iteratee, context) {\n    if (_.isFunction(iteratee)) {\n      iteratee = _.negate(iteratee);\n    } else {\n      var keys = _.map(flatten(arguments, false, false, 1), String);\n      iteratee = function(value, key) {\n        return !_.contains(keys, key);\n      };\n    }\n    return _.pick(obj, iteratee, context);\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = createAssigner(_.allKeys, true);\n\n  // Creates an object that inherits from the given prototype object.\n  // If additional properties are provided then they will be added to the\n  // created object.\n  _.create = function(prototype, props) {\n    var result = baseCreate(prototype);\n    if (props) _.extendOwn(result, props);\n    return result;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Returns whether an object has a given set of `key:value` pairs.\n  _.isMatch = function(object, attrs) {\n    var keys = _.keys(attrs), length = keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  };\n\n\n  // Internal recursive comparison function for `isEqual`.\n  var eq = function(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n      case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return '' + a === '' + b;\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive.\n        // Object(NaN) is equivalent to NaN\n        if (+a !== +a) return +b !== +b;\n        // An `egal` comparison is performed for other numeric values.\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a === +b;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      // Deep compare objects.\n      var keys = _.keys(a), key;\n      length = keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (_.keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = keys[length];\n        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n  };\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (obj == null) return true;\n    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n    return _.keys(obj).length === 0;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  };\n\n  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n    _['is' + name] = function(obj) {\n      return toString.call(obj) === '[object ' + name + ']';\n    };\n  });\n\n  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n  // there isn't any inspectable \"Arguments\" type.\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return _.has(obj, 'callee');\n    };\n  }\n\n  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n  // IE 11 (#1621), and in Safari 8 (#1929).\n  if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n    _.isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  // Is a given object a finite number?\n  _.isFinite = function(obj) {\n    return isFinite(obj) && !isNaN(parseFloat(obj));\n  };\n\n  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n  _.isNaN = function(obj) {\n    return _.isNumber(obj) && obj !== +obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Shortcut function for checking if an object has a given property directly\n  // on itself (in other words, not on a prototype).\n  _.has = function(obj, key) {\n    return obj != null && hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iteratees.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Predicate-generating functions. Often useful outside of Underscore.\n  _.constant = function(value) {\n    return function() {\n      return value;\n    };\n  };\n\n  _.noop = function(){};\n\n  _.property = property;\n\n  // Generates a function for a given object that returns a given property.\n  _.propertyOf = function(obj) {\n    return obj == null ? function(){} : function(key) {\n      return obj[key];\n    };\n  };\n\n  // Returns a predicate for checking whether an object has a given set of\n  // `key:value` pairs.\n  _.matcher = _.matches = function(attrs) {\n    attrs = _.extendOwn({}, attrs);\n    return function(obj) {\n      return _.isMatch(obj, attrs);\n    };\n  };\n\n  // Run a function **n** times.\n  _.times = function(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  };\n\n  // Return a random integer between min and max (inclusive).\n  _.random = function(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  };\n\n  // A (possibly faster) way to get the current timestamp as an integer.\n  _.now = Date.now || function() {\n    return new Date().getTime();\n  };\n\n   // List of HTML entities for escaping.\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var unescapeMap = _.invert(escapeMap);\n\n  // Functions for escaping and unescaping strings to/from HTML interpolation.\n  var createEscaper = function(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    // Regexes for identifying a key that needs to be escaped\n    var source = '(?:' + _.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n  _.escape = createEscaper(escapeMap);\n  _.unescape = createEscaper(unescapeMap);\n\n  // If the value of the named `property` is a function then invoke it with the\n  // `object` as context; otherwise, return it.\n  _.result = function(object, property, fallback) {\n    var value = object == null ? void 0 : object[property];\n    if (value === void 0) {\n      value = fallback;\n    }\n    return _.isFunction(value) ? value.call(object) : value;\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /(.)^/;\n\n  // Certain characters need to be escaped so that they can be put into a\n  // string literal.\n  var escapes = {\n    \"'\":      \"'\",\n    '\\\\':     '\\\\',\n    '\\r':     'r',\n    '\\n':     'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  var escapeChar = function(match) {\n    return '\\\\' + escapes[match];\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  // NB: `oldSettings` only exists for backwards compatibility.\n  _.template = function(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = _.defaults({}, settings, _.templateSettings);\n\n    // Combine delimiters into one regular expression via alternation.\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n\n    // Compile the template source, escaping string literals appropriately.\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escaper, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n\n      // Adobe VMs need the match returned to produce the correct offest.\n      return match;\n    });\n    source += \"';\\n\";\n\n    // If a variable is not specified, place data values in local scope.\n    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    try {\n      var render = new Function(settings.variable || 'obj', '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _);\n    };\n\n    // Provide the compiled source as a convenience for precompilation.\n    var argument = settings.variable || 'obj';\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  };\n\n  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n  _.chain = function(obj) {\n    var instance = _(obj);\n    instance._chain = true;\n    return instance;\n  };\n\n  // OOP\n  // ---------------\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(instance, obj) {\n    return instance._chain ? _(obj).chain() : obj;\n  };\n\n  // Add your own custom functions to the Underscore object.\n  _.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n      var func = _[name] = obj[name];\n      _.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return result(this, func.apply(_, args));\n      };\n    });\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      var obj = this._wrapped;\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n      return result(this, obj);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  _.each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      return result(this, method.apply(this._wrapped, arguments));\n    };\n  });\n\n  // Extracts the result from a wrapped and chained object.\n  _.prototype.value = function() {\n    return this._wrapped;\n  };\n\n  // Provide unwrapping proxy for some methods used in engine operations\n  // such as arithmetic and JSON stringification.\n  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n  _.prototype.toString = function() {\n    return '' + this._wrapped;\n  };\n\n  // AMD registration happens at the end for compatibility with AMD loaders\n  // that may not enforce next-turn semantics on modules. Even though general\n  // practice for AMD registration is to be anonymous, underscore registers\n  // as a named module because, like jQuery, it is a base library that is\n  // popular enough to be bundled in a third party lib, but not be part of\n  // an AMD load request. Those cases could generate an error when an\n  // anonymous define() is called outside of a loader request.\n  if (typeof define === 'function' && define.amd) {\n    define('underscore', [], function() {\n      return _;\n    });\n  }\n}.call(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/underscore/underscore.js\n ** module id = 16\n ** module chunks = 0 1\n **/","import { Assert } from '../misc/Assert';\n\n/**\n * The possible options to use when calculating a timespan\n */\nexport interface ITimeSpanUtilsOptions {\n  /**\n   * Specify if the given timespan is in seconds or milliseconds\n   */\n  isMilliseconds: boolean;\n}\n\nexport class TimeSpan {\n  private milliseconds: number;\n\n  constructor(time: number, isMilliseconds = true) {\n    if (isMilliseconds) {\n      this.milliseconds = time;\n    } else {\n      this.milliseconds = time * 1000;\n    }\n  }\n\n  getMilliseconds() {\n    return this.milliseconds;\n  }\n\n  getSeconds() {\n    return this.getMilliseconds() / 1000;\n  }\n\n  getMinutes() {\n    return this.getSeconds() / 60;\n  }\n\n  getHours() {\n    return this.getMinutes() / 60;\n  }\n\n  getDays() {\n    return this.getHours() / 24;\n  }\n\n  getWeeks() {\n    return this.getDays() / 7;\n  }\n\n  getHHMMSS(): string {\n    var hours = Math.floor(this.getHours());\n    var minutes = Math.floor(this.getMinutes()) % 60;\n    var seconds = Math.floor(this.getSeconds()) % 60;\n    var hoursString, minutesString, secondsString;\n    if (hours == 0) {\n      hoursString = '';\n    } else {\n      hoursString = hours < 10 ? '0' + hours.toString() : hours.toString();\n    }\n    minutesString = minutes < 10 ? '0' + minutes.toString() : minutes.toString();\n    secondsString = seconds < 10 ? '0' + seconds.toString() : seconds.toString();\n    var hhmmss = (hoursString != '' ? hoursString + ':' : '') + minutesString + ':' + secondsString;\n    return hhmmss;\n  }\n\n  static fromDates(from: Date, to: Date): TimeSpan {\n    Assert.exists(from);\n    Assert.exists(to);\n    return new TimeSpan(to.valueOf() - from.valueOf());\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/TimeSpanUtils.ts\n **/","// Not sure about this : In year 2033 who's to say that this list won't be 50 pages long !\nimport { ResponsiveComponents } from '../ui/ResponsiveComponents/ResponsiveComponents';\nconst mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\nexport class DeviceUtils {\n\n  static getDeviceName(): string {\n    var userAgent = navigator.userAgent;\n    if (userAgent.match(/Android/i)) {\n      return 'Android';\n    }\n    if (userAgent.match(/BlackBerry/i)) {\n      return 'BlackBerry';\n    }\n    if (userAgent.match(/iPhone/i)) {\n      return 'iPhone';\n    }\n    if (userAgent.match(/iPad/i)) {\n      return 'iPad';\n    }\n    if (userAgent.match(/iPod/i)) {\n      return 'iPod';\n    }\n    if (userAgent.match(/Opera Mini/i)) {\n      return 'Opera Mini';\n    }\n    if (userAgent.match(/IEMobile/i)) {\n      return 'IE Mobile';\n    }\n    if (userAgent.match(/Chrome/i)) {\n      return 'Chrome';\n    }\n    if (userAgent.match(/MSIE/i) || userAgent.match(/Trident/i)) {\n      return 'IE';\n    }\n    if (userAgent.match(/Opera/i)) {\n      return 'Opera';\n    }\n    if (userAgent.match(/Firefox/i)) {\n      return 'Firefox';\n    }\n    if (userAgent.match(/Safari/i)) {\n      return 'Safari';\n    }\n    return 'Others';\n  }\n\n  static isAndroid() {\n    return DeviceUtils.getDeviceName() == 'Android';\n  }\n\n  static isIos() {\n    var deviceName = DeviceUtils.getDeviceName();\n    return deviceName == 'iPhone' || deviceName == 'iPad' || deviceName == 'iPod';\n  }\n\n  static isIE8or9(): boolean {\n    var myNav = navigator.userAgent.toLowerCase();\n    if (myNav.indexOf('msie') == -1) {\n      return false;\n    }\n    return parseInt(myNav.split('msie')[1]) < 10;\n  }\n\n  static isMobileDevice() {\n    return mobile;\n  }\n\n  /**\n   * @deprecated\n   *\n   * Use ResponsiveComponents.isSmallScreenWidth() instead\n   */\n  static isSmallScreenWidth() {\n    return new ResponsiveComponents().isSmallScreenWidth();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/DeviceUtils.ts\n **/","import { Assert } from '../../misc/Assert';\nexport const MEDIUM_SCREEN_WIDTH = 800;\nexport const SMALL_SCREEN_WIDTH = 480;\n\n/**\n * This class serves as a way to get and set the different screen size breakpoints for the interface.\n *\n * By settings those, you can impact, amongst other, the {@link Facet}, {@link Tab} or {@link ResultList} behaviour.\n *\n * For example, the {@link Facet} components of your interface will switch to a dropdown menu when the screen size reaches 800px or less.\n *\n * You could modify this value using this calls\n *\n * Normally, you would interact with this class using the instance bound to {@link SearchInterface.responsiveComponents}\n */\nexport class ResponsiveComponents {\n  private smallScreenWidth: number;\n  private mediumScreenWidth: number;\n\n  constructor(public windoh: Window = window) {\n  }\n\n  /**\n   * Set the breakpoint for small screen size.\n   * @param width\n   */\n  public setSmallScreenWidth(width: number) {\n    Assert.check(width < this.getMediumScreenWidth(), `Cannot set small screen width (${width}) larger or equal to the current medium screen width (${this.getMediumScreenWidth()})`);\n    this.smallScreenWidth = width;\n  }\n\n  /**\n   * Set the breakpoint for medium screen size\n   * @param width\n   */\n  public setMediumScreenWidth(width: number) {\n    Assert.check(width > this.getSmallScreenWidth(), `Cannot set medium screen width (${width}) smaller or equal to the current small screen width (${this.getSmallScreenWidth()})`);\n    this.mediumScreenWidth = width;\n  }\n\n  /**\n   * Get the current breakpoint for small screen size.\n   *\n   * If it was not explicitly set by {@link ResponsiveComponents.setSmallScreenWidth}, the default value is `480`.\n   * @returns {number}\n   */\n  public getSmallScreenWidth() {\n    if (this.smallScreenWidth == null) {\n      return SMALL_SCREEN_WIDTH;\n    }\n    return this.smallScreenWidth;\n  }\n\n  /**\n   * Get the current breakpoint for medium screen size.\n   *\n   * If it was not explicitly set by {@link ResponsiveComponents.setMediumScreenWidth}, the default value is `800`.\n   * @returns {number}\n   */\n  public getMediumScreenWidth() {\n    if (this.mediumScreenWidth == null) {\n      return MEDIUM_SCREEN_WIDTH;\n    }\n    return this.mediumScreenWidth;\n  }\n\n  /**\n   * Return true if the current screen size is smaller than the current breakpoint set for small screen width.\n   * @returns {boolean}\n   */\n  public isSmallScreenWidth() {\n    if (this.windoh['clientWidth'] != null) {\n      return this.windoh['clientWidth'] <= this.getSmallScreenWidth();\n    } else {\n      return document.body.clientWidth <= this.getSmallScreenWidth();\n    }\n  }\n\n  /**\n   * Return true if the current screen size is smaller than the current breakpoint set for medium screen width.\n   * @returns {boolean}\n   */\n  public isMediumScreenWidth() {\n    if (this.isSmallScreenWidth()) {\n      return false;\n    }\n    if (this.windoh['clientWidth'] != null) {\n      return this.windoh['clientWidth'] <= this.getMediumScreenWidth();\n    }\n    return document.body.clientWidth <= this.getMediumScreenWidth();\n  }\n\n  /**\n   * Return true if the current screen size is larger than the current breakpoint set for medium and small.\n   * @returns {boolean}\n   */\n  public isLargeScreenWidth() {\n    return !this.isSmallScreenWidth() && !this.isMediumScreenWidth();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveComponents.ts\n **/","export class JQueryUtils {\n  static getJQuery() {\n    if (window && window['Coveo'] && window['Coveo']['$']) {\n      return window['Coveo']['$'];\n    }\n    return false;\n  }\n\n  static isInstanceOfJQuery(obj: Object): boolean {\n    let jq = this.getJQuery();\n    if (jq) {\n      return obj instanceof jq;\n    }\n    return false;\n  }\n\n  static isInstanceOfJqueryEvent(obj: Object): boolean {\n    let jq = this.getJQuery();\n    if (jq) {\n      return obj instanceof jq.Event;\n    }\n    return false;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/JQueryutils.ts\n **/","import { Assert } from '../misc/Assert';\nimport { IEndpointError } from '../rest/EndpointError';\n\nexport class AjaxError implements IEndpointError {\n  public type;\n  public name;\n\n  constructor(public message: string, public status: number) {\n    Assert.exists(message);\n    Assert.exists(status);\n    this.name = this.type = 'Ajax Error (status: ' + status + ')';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/AjaxError.ts\n **/","import { IEndpointError } from './EndpointError';\n\nexport class MissingAuthenticationError implements IEndpointError {\n  public type: string;\n  public message: string;\n  public isMissingAuthentication = true;\n  public name: string;\n\n  constructor(public provider: string) {\n    this.name = this.type = this.message = `Missing Authentication (provider: ${provider})`;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/MissingAuthenticationError.ts\n **/","import { IQueryResults } from '../rest/QueryResults';\nimport { IQueryResult } from '../rest/QueryResult';\nimport { IQuery } from '../rest/Query';\nimport { Assert } from '../misc/Assert';\nimport { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\ndeclare let crypto: Crypto;\n\nexport class QueryUtils {\n  static createGuid(): string {\n    let guid: string;\n    let success: boolean = false;\n    if ((typeof (crypto) != 'undefined' && typeof (crypto.getRandomValues) != 'undefined')) {\n      try {\n        guid = QueryUtils.generateWithCrypto();\n        success = true;\n      } catch (e) {\n        success = false;\n      }\n    }\n\n    if (!success) {\n      guid = QueryUtils.generateWithRandom();\n    }\n\n    return guid;\n  }\n\n  // This method is a fallback as it's generate a lot of collisions in Chrome.\n  static generateWithRandom(): string {\n    // http://stackoverflow.com/a/2117523\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n      let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n      return v.toString(16);\n    });\n  }\n\n  static generateWithCrypto(): string {\n    let buf = new Uint16Array(8);\n    crypto.getRandomValues(buf);\n    let S4 = function (num) {\n      let ret = num.toString(16);\n      while (ret.length < 4) {\n        ret = '0' + ret;\n      }\n      return ret;\n    };\n    return (S4(buf[0]) + S4(buf[1]) + '-' + S4(buf[2]) + '-' + S4(buf[3]) + '-' + S4(buf[4]) + '-' + S4(buf[5]) + S4(buf[6]) + S4(buf[7]));\n  }\n\n  static setStateObjectOnQueryResults(state: any, results: IQueryResults) {\n    QueryUtils.setPropertyOnResults(results, 'state', state);\n  }\n\n  static setStateObjectOnQueryResult(state: any, result: IQueryResult) {\n    QueryUtils.setPropertyOnResult(result, 'state', state);\n  }\n\n  static setSearchInterfaceObjectOnQueryResult(searchInterface, result: IQueryResult) {\n    QueryUtils.setPropertyOnResult(result, 'searchInterface', searchInterface);\n  }\n\n  static setIndexAndUidOnQueryResults(query: IQuery, results: IQueryResults, queryUid: string, pipeline: string, splitTestRun: string) {\n    Assert.exists(query);\n    Assert.exists(results);\n    let index = query.firstResult;\n    QueryUtils.setPropertyOnResults(results, 'queryUid', queryUid);\n    QueryUtils.setPropertyOnResults(results, 'pipeline', pipeline);\n    QueryUtils.setPropertyOnResults(results, 'splitTestRun', splitTestRun);\n    QueryUtils.setPropertyOnResults(results, 'index', index, () => ++index);\n  }\n\n  static setTermsToHighlightOnQueryResults(query: IQuery, results: IQueryResults) {\n    QueryUtils.setPropertyOnResults(results, 'termsToHighlight', results.termsToHighlight);\n    QueryUtils.setPropertyOnResults(results, 'phrasesToHighlight', results.phrasesToHighlight);\n  }\n\n  static splitFlags(flags: string, delimiter: string = ';') {\n    Assert.exists(flags);\n    return flags.split(delimiter);\n  }\n\n  static isAttachment(result: IQueryResult) {\n    return _.contains(QueryUtils.splitFlags(result.flags), 'IsAttachment');\n  }\n\n  static containsAttachment(result: IQueryResult) {\n    return _.contains(QueryUtils.splitFlags(result.flags), 'ContainsAttachment');\n  }\n\n  static hasHTMLVersion(result: IQueryResult) {\n    return _.contains(QueryUtils.splitFlags(result.flags), 'HasHtmlVersion');\n  }\n\n  static hasThumbnail(result: IQueryResult) {\n    return _.contains(QueryUtils.splitFlags(result.flags), 'HasThumbnail');\n  }\n\n  static hasExcerpt(result: IQueryResult) {\n    return result.excerpt != undefined && result.excerpt != '';\n  }\n\n  static getAuthor(result: IQueryResult): string {\n    return result.raw['author'];\n  }\n\n  static getUriHash(result: IQueryResult): string {\n    return result.raw['urihash'];\n  }\n\n  static getObjectType(result: IQueryResult): string {\n    return result.raw['objecttype'];\n  }\n\n  static getCollection(result: IQueryResult): string {\n    return result.raw['collection'];\n  }\n\n  static getSource(result: IQueryResult): string {\n    return result.raw['source'];\n  }\n\n  static getLanguage(result: IQueryResult): string {\n    return result.raw['language'];\n  }\n\n  static getPermanentId(result: IQueryResult): { fieldValue: string, fieldUsed: string } {\n    let fieldValue;\n    let fieldUsed;\n    let permanentId = Utils.getFieldValue(result, 'permanentid');\n    if (permanentId) {\n      fieldUsed = 'permanentid';\n      fieldValue = permanentId;\n    } else {\n      fieldUsed = 'urihash';\n      fieldValue = Utils.getFieldValue(result, 'urihash');\n    }\n    return {\n      fieldValue: fieldValue,\n      fieldUsed: fieldUsed\n    };\n  }\n\n  static quoteAndEscapeIfNeeded(str: string): string {\n    Assert.isString(str);\n    return QueryUtils.isAtomicString(str) || (QueryUtils.isRangeString(str) || QueryUtils.isRangeWithoutOuterBoundsString(str)) ? str : QueryUtils.quoteAndEscape(str);\n  }\n\n  static quoteAndEscape(str: string): string {\n    Assert.isString(str);\n    return `\"${QueryUtils.escapeString(str)}\"`;\n  }\n\n  static escapeString(str: string): string {\n    Assert.isString(str);\n    return str.replace(/\"/g, ' ');\n  }\n\n  static isAtomicString(str: string): boolean {\n    Assert.isString(str);\n    return /^\\d+(\\.\\d+)?$|^[\\d\\w]+$/.test(str);\n  }\n\n  static isRangeString(str: string): boolean {\n    Assert.isString(str);\n    return /^\\d+(\\.\\d+)?\\.\\.\\d+(\\.\\d+)?$|^\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}\\.\\.\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}$/.test(str);\n  }\n\n  static isRangeWithoutOuterBoundsString(str: string): boolean {\n    Assert.isString(str);\n    return /^\\d+(\\.\\d+)?$|^\\d{4}\\/\\d{2}\\/\\d{2}@\\d{2}:\\d{2}:\\d{2}$/.test(str);\n  }\n\n  static buildFieldExpression(field: string, operator: string, values: string[]) {\n    Assert.isNonEmptyString(field);\n    Assert.stringStartsWith(field, '@');\n    Assert.isNonEmptyString(operator);\n    Assert.isLargerOrEqualsThan(1, values.length);\n\n    if (values.length == 1) {\n      return field + operator + QueryUtils.quoteAndEscapeIfNeeded(values[0]);\n    } else {\n      return field + operator + '(' + _.map(values, (str) => QueryUtils.quoteAndEscapeIfNeeded(str)).join(',') + ')';\n    }\n  }\n\n  static buildFieldNotEqualExpression(field: string, values: string[]) {\n    Assert.isNonEmptyString(field);\n    Assert.stringStartsWith(field, '@');\n    Assert.isLargerOrEqualsThan(1, values.length);\n\n    let filter: string;\n    if (values.length == 1) {\n      filter = field + '==' + QueryUtils.quoteAndEscapeIfNeeded(values[0]);\n    } else {\n      filter = field + '==' + '(' + _.map(values, (str) => QueryUtils.quoteAndEscapeIfNeeded(str)).join(',') + ')';\n    }\n\n    return '(NOT ' + filter + ')';\n  }\n\n  static mergeQueryString(url: string, queryString: string) {\n    let queryStringPosition = url.indexOf('?');\n    if (queryStringPosition != -1) {\n      url += '&' + queryString;\n    } else {\n      url += '?' + queryString;\n    }\n    return url;\n  }\n\n  static mergePath(url: string, path: string) {\n    let urlSplit = url.split('?');\n    return urlSplit[0] + path + '?' + (urlSplit[1] || '');\n  }\n\n  public static setPropertyOnResults(results: IQueryResults, property: string, value: any, afterOneLoop?: () => any) {\n    _.each(results.results, (result: IQueryResult) => {\n      QueryUtils.setPropertyOnResult(result, property, value);\n      value = afterOneLoop ? afterOneLoop() : value;\n    });\n  }\n\n  public static setPropertyOnResult(result: IQueryResult, property: string, value: any) {\n    result[property] = value;\n    _.each(result.childResults, (child: IQueryResult) => {\n      child[property] = value;\n    });\n    if (!Utils.isNullOrUndefined(result.parentResult)) {\n      result.parentResult[property] = value;\n    }\n  }\n\n  // http://stackoverflow.com/a/11582513\n  public static getUrlParameter(name: string): string {\n    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [, ''])[1].replace(/\\+/g, '%20')) || null;\n  }\n\n  public static isStratusAgnosticField(fieldToVerify: string, fieldToMatch: string): boolean {\n    let checkForSystem = /^(@?)(sys)?(.*)/i;\n    let matchFieldToVerify = checkForSystem.exec(fieldToVerify);\n    let matchFieldToMatch = checkForSystem.exec(fieldToMatch);\n    if (matchFieldToVerify && matchFieldToMatch) {\n      return (matchFieldToVerify[1] + matchFieldToVerify[3]).toLowerCase() == (matchFieldToMatch[1] + matchFieldToMatch[3]).toLowerCase();\n    }\n    return false;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/QueryUtils.ts\n **/","import { IEndpointError } from './EndpointError';\nimport { IErrorResponse } from './EndpointCaller';\nimport { Assert } from '../misc/Assert';\n\nexport class QueryError implements IEndpointError {\n  public status: number;\n  public message: string;\n  public type: string;\n  public queryExecutionReport: any;\n  public name: string;\n\n  constructor(errorResponse: IErrorResponse) {\n    this.status = errorResponse.statusCode;\n    this.message = errorResponse.data.message;\n    this.name = this.type = errorResponse.data.type;\n    this.queryExecutionReport = errorResponse.data.executionReport;\n\n    Assert.isNumber(this.status);\n    Assert.isNonEmptyString(this.message);\n    Assert.isNonEmptyString(this.type);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/QueryError.ts\n **/","declare function require(moduleName: string): any;\nexport const ModalBox = require('exports?Coveo.ModalBox!../node_modules/modal-box/bin/ModalBox.min.js');\nexport const MagicBox = require('exports?Coveo.MagicBox!../node_modules/coveomagicbox/bin/MagicBox.min.js');\nexport const LocaleString = require('exports?window.String.toLocaleString!../lib/l10n/l10n.min.js');\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ExternalModulesShim.ts\n **/","var Coveo;!function(e){var o;!function(e){function o(e,o){void 0===o&&(o={});var n=o.body||document.body;n.className?n.className.indexOf(\"coveo-modalBox-opened\")==-1&&(n.className+=\" coveo-modalBox-opened\"):n.className=\"coveo-modalBox-opened\";var c=document.createElement(\"div\");c.className=\"coveo-modalBox\",n.appendChild(c),o.fullscreen===!0&&(c.className+=\" coveo-fullscreen\");var d=document.createElement(\"div\");d.className=\"coveo-overlay\",c.appendChild(d);var s=document.createElement(\"div\");if(s.className=\"coveo-wrapper\",c.appendChild(s),null!=o.title){var r=document.createElement(\"div\");r.className=\"coveo-title\",s.appendChild(r),r.innerHTML=o.title,o.titleClose===!0&&r.addEventListener(\"click\",function(){return v()})}e.className+=\" coveo-body\",s.appendChild(e);var i,v=function(e,t){void 0===e&&(e=0),void 0===t&&(t=!1);var d=null==o.validation||o.validation(e);if(d!==!1||t){c.parentElement&&c.parentElement.removeChild(c);var s=l.indexOf(v);return s>=0&&l.splice(s,1),null==n.querySelector(\".coveo-modalBox\")&&a(n,\"coveo-modalBox-opened\"),!0}return!1},u=function(e,o){var n=document.createElement(\"div\");n.className=\"coveo-button\",n.textContent=e,n.addEventListener(\"click\",function(){return v(o)}),i.appendChild(n)};return null!=o.buttons&&(i=document.createElement(\"div\"),i.className=\"coveo-buttons\",s.appendChild(i),o.buttons&t.OK&&u(\"Ok\",t.OK),o.buttons&t.APPLY&&u(\"Apply\",t.APPLY),o.buttons&t.YES&&u(\"Yes\",t.YES),o.buttons&t.NO&&u(\"No\",t.NO),o.buttons&t.CANCEL&&u(\"Cancel\",t.CANCEL)),l.push(v),o.overlayClose===!0&&d.addEventListener(\"click\",function(e){return v()}),null!=o.className&&(c.className+=\" \"+o.className),{modalBox:c,overlay:d,wrapper:s,buttons:i,content:e,close:v}}function n(e){void 0===e&&(e=!1);for(var o=0;l.length>o;){var n=l[o](0,e);n||o++}}function a(e,o){e.className=e.className.replace(new RegExp(\"(^|\\\\s)\"+o+\"(\\\\s|\\\\b)\",\"g\"),\"$1\")}!function(e){e[e.OK=1]=\"OK\",e[e.APPLY=2]=\"APPLY\",e[e.YES=4]=\"YES\",e[e.NO=8]=\"NO\",e[e.CANCEL=16]=\"CANCEL\"}(e.BUTTON||(e.BUTTON={}));var t=e.BUTTON,l=[];e.open=o,e.close=n}(o=e.ModalBox||(e.ModalBox={}))}(Coveo||(Coveo={}));\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Coveo.ModalBox;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/exports-loader?Coveo.ModalBox!./~/modal-box/bin/ModalBox.min.js\n ** module id = 26\n ** module chunks = 0 1\n **/","var Coveo,__extends=this&&this.__extends||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);function s(){this.constructor=t}t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)};!function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){var s=this;this.expression=e,this.input=n,_.isString(t)?this.value=t:_.isArray(t)&&(this.subResults=t,_.forEach(this.subResults,function(t){t.parent=s}))}return t.prototype.isSuccess=function(){return null!=this.value||null!=this.subResults&&_.all(this.subResults,function(t){return t.isSuccess()})},t.prototype.path=function(t){var e=null!=this.parent&&this.parent!=t?this.parent.path(t):[];return e.push(this),e},t.prototype.findParent=function(t){for(var e=this,n=_.isString(t)?function(e){return t==e.expression.id}:t;null!=e&&!n(e);)e=e.parent;return e},t.prototype.find=function(t){var e=_.isString(t)?function(e){return t==e.expression.id}:t;if(e(this))return this;if(this.subResults)for(var n=0;n<this.subResults.length;n++){var s=this.subResults[n].find(e);if(s)return s}return null},t.prototype.findAll=function(t){var e=[],n=_.isString(t)?function(e){return t==e.expression.id}:t;return n(this)&&e.push(this),this.subResults&&(e=_.reduce(this.subResults,function(t,e){return t.concat(e.findAll(n))},e)),e},t.prototype.resultAt=function(t,e){if(t<0||t>this.getLength())return[];if(null!=e){if(_.isString(e)){if(e==this.expression.id)return[this]}else if(e(this))return[this]}else if(null!=(null==this.value&&null==this.subResults?this.input:this.value))return[this];if(null!=this.subResults){for(var n=[],s=0;s<this.subResults.length;s++){var i=this.subResults[s];if(n=n.concat(i.resultAt(t,e)),(t-=i.getLength())<0)break}return n}return[]},t.prototype.getExpect=function(){return null==this.value&&null==this.subResults?[this]:null!=this.subResults?_.reduce(this.subResults,function(t,e){return t.concat(e.getExpect())},[]):[]},t.prototype.getBestExpect=function(){var t=this.getExpect(),e=(n=_.groupBy(t,function(t){return t.input}))[_.last(_.keys(n).sort(function(t,e){return e.length-t.length}))],n=_.groupBy(e,function(t){return t.expression.id});return _.map(n,function(t){return _.chain(t).map(function(t){return{path:t.path().length,result:t}}).sortBy(\"path\").pluck(\"result\").first().value()})},t.prototype.getHumanReadableExpect=function(){var t=this.getBestExpect(),e=t.length>0?_.last(t).input:\"\";return\"Expected \"+_.map(t,function(t){return t.getHumanReadable()}).join(\" or \")+\" but \"+(e.length>0?JSON.stringify(e[0]):\"end of input\")+\" found.\"},t.prototype.before=function(){if(null==this.parent)return\"\";var t=_.indexOf(this.parent.subResults,this);return this.parent.before()+_.chain(this.parent.subResults).first(t).map(function(t){return t.toString()}).join(\"\").value()},t.prototype.after=function(){if(null==this.parent)return\"\";var t=_.indexOf(this.parent.subResults,this);return _.chain(this.parent.subResults).last(this.parent.subResults.length-t-1).map(function(t){return t.toString()}).join(\"\").value()+this.parent.after()},t.prototype.getLength=function(){return null!=this.value?this.value.length:null!=this.subResults?_.reduce(this.subResults,function(t,e){return t+e.getLength()},0):this.input.length},t.prototype.toHtmlElement=function(){var t=document.createElement(\"span\"),e=null!=this.expression?this.expression.id:null;return null!=e&&t.setAttribute(\"data-id\",e),t.setAttribute(\"data-success\",this.isSuccess().toString()),null!=this.value?(t.appendChild(document.createTextNode(this.value)),t.setAttribute(\"data-value\",this.value)):null!=this.subResults?_.each(this.subResults,function(e){t.appendChild(e.toHtmlElement())}):(t.appendChild(document.createTextNode(this.input)),t.setAttribute(\"data-input\",this.input),t.className=\"magic-box-error\"+(this.input.length>0?\"\":\" magic-box-error-empty\")),t.result=this,t},t.prototype.clean=function(e){if(null!=e||!this.isSuccess()){e=e||_.last(this.getBestExpect()).path(this);var n=_.first(e);if(null!=n){var s=_.indexOf(this.subResults,n),i=-1==s?[]:_.map(_.first(this.subResults,s),function(t){return t.clean()});return i.push(n.clean(_.rest(e))),new t(i,this.expression,this.input)}return new t(null,this.expression,this.input)}return null!=this.value?new t(this.value,this.expression,this.input):null!=this.subResults?new t(_.map(this.subResults,function(t){return t.clean()}),this.expression,this.input):void 0},t.prototype.clone=function(){return null!=this.value?new t(this.value,this.expression,this.input):null!=this.subResults?new t(_.map(this.subResults,function(t){return t.clone()}),this.expression,this.input):new t(null,this.expression,this.input)},t.prototype.toString=function(){return null!=this.value?this.value:null!=this.subResults?_.map(this.subResults,function(t){return t.toString()}).join(\"\"):this.input},t.prototype.getHumanReadable=function(){return this.expression instanceof e.ExpressionConstant?JSON.stringify(this.expression.value):this.expression.id},t}(),e.Result=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(n){t.call(this,[n],e.ExpressionEndOfInput,n.input);var s=new e.Result(null,e.ExpressionEndOfInput,n.input.substr(n.getLength()));s.parent=this,this.subResults.push(s)}return __extends(n,t),n}(e.Result),e.EndOfInputResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(e,n,s,i){var o=this;t.call(this,null!=e?[e]:null,n,s),this.result=e,this.expression=n,this.input=s,this.failAttempt=i,_.forEach(this.failAttempt,function(t){t.parent=o})}return __extends(n,t),n.prototype.getExpect=function(){var t=this,e=[];return null!=this.result&&(e=this.result.getExpect()),(e=_.reduce(this.failAttempt,function(t,e){return t.concat(e.getExpect())},e)).length>0&&_.all(e,function(e){return e.input==t.input})?[this]:e},n.prototype.clean=function(t){if(null!=t||!this.isSuccess()){t=_.rest(t||_.last(this.getBestExpect()).path(this));var n=_.first(t);return null==n?new e.Result(null,this.expression,this.input):new e.Result([n.clean(_.rest(t))],this.expression,this.input)}return new e.Result(_.map(this.result.subResults,function(t){return t.clean()}),this.expression,this.input)},n}(e.Result),e.OptionResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(t){function n(e,n,s,i){t.call(this,e,n,s),this.results=e,this.expression=n,this.input=s,_.last(e)!=i&&(this.failAttempt=i,null!=this.failAttempt&&(this.failAttempt.parent=this))}return __extends(n,t),n.prototype.getExpect=function(){var e=t.prototype.getExpect.call(this);return null!=this.failAttempt?e.concat(this.failAttempt.getExpect()):e},n.prototype.clean=function(n){if(null!=this.failAttempt&&(null!=n||!this.isSuccess())){n=n||_.last(this.getBestExpect()).path(this);var s=_.first(n);if(null!=s&&s==this.failAttempt){var i=_.last(this.subResults),o=_.map(null!=i&&i.isSuccess()?this.subResults:_.initial(this.subResults),function(t){return t.clean()});return o.push(s.clean(_.rest(n))),new e.Result(o,this.expression,this.input)}}return t.prototype.clean.call(this,n)},n}(e.Result),e.RefResult=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){this.value=t,this.id=e}return t.prototype.parse=function(t,n){var s=0==t.indexOf(this.value),i=new e.Result(s?this.value:null,this,t);return s&&n&&t.length>this.value.length?new e.EndOfInputResult(i):i},t.prototype.toString=function(){return this.value},t}(),e.ExpressionConstant=n}(Coveo||(Coveo={})),function(t){(t.MagicBox||(t.MagicBox={})).ExpressionEndOfInput={id:\"end of input\",parse:null}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){this.func=t,this.id=e,this.grammar=n}return t.prototype.parse=function(t,e){return this.func(t,e,this)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionFunction=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){if(this.parts=t,this.id=e,0==t.length)throw JSON.stringify(e)+\" should have at least 1 parts\"}return t.prototype.parse=function(t,n){for(var s,i=[],o=t,r=0;r<this.parts.length;r++){if(s=this.parts[r].parse(o,n&&r==this.parts.length-1),i.push(s),!s.isSuccess())break;o=o.substr(s.getLength())}return new e.Result(i,this,t)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionList=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e){this.parts=t,this.id=e}return t.prototype.parse=function(t,n){for(var s=[],i=0;i<this.parts.length;i++){var o=this.parts[i].parse(t,n);if(o.isSuccess())return new e.OptionResult(o,this,t,s);s.push(o)}return new e.OptionResult(null,this,t,s)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionOptions=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n,s){this.ref=t,this.occurrence=e,this.id=n,this.grammar=s}return t.prototype.parse=function(t,e){var n=this.grammar.getExpression(this.ref);if(null==n)throw\"Expression not found:\"+this.ref;return\"?\"==this.occurrence||null==this.occurrence?this.parseOnce(t,e,n):this.parseMany(t,e,n)},t.prototype.parseOnce=function(t,n,s){var i=s.parse(t,n),o=i.isSuccess();return o||\"?\"!=this.occurrence?new e.RefResult([i],this,t,o?null:i):n?0==t.length?new e.RefResult([],this,t,i):_.all(i.getBestExpect(),function(t){return t.expression==e.ExpressionEndOfInput})?new e.RefResult([new e.Result(null,e.ExpressionEndOfInput,t)],this,t,i):i:new e.RefResult([],this,t,null)},t.prototype.parseMany=function(t,n,s){var i,o,r=[],u=t;do{(o=(i=s.parse(u,!1)).isSuccess())&&(r.push(i),u=u.substr(i.getLength()))}while(o&&i.input!=u);var a=_.isNumber(this.occurrence)?this.occurrence:\"+\"==this.occurrence?1:0;if(r.length<a)r.push(i);else if(n)if(r.length>0){var l=_.last(r);(i=s.parse(l.input,!0)).isSuccess()?r[r.length-1]=i:(r.push(new e.Result(null,e.ExpressionEndOfInput,l.input.substr(l.getLength()))),i=s.parse(l.input.substr(l.getLength()),!0))}else if(0!=t.length){var p=new e.Result(null,e.ExpressionEndOfInput,t);return new e.RefResult([p],this,t,i)}return new e.RefResult(r,this,t,i)},t.prototype.toString=function(){return this.id},t}(),e.ExpressionRef=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,e,n){this.value=t,this.id=e}return t.prototype.parse=function(t,n){var s=t.match(this.value);null!=s&&0!=s.index&&(s=null);var i=new e.Result(null!=s?s[0]:null,this,t);return i.isSuccess()&&n&&t.length>i.value.length?new e.EndOfInputResult(i):i},t.prototype.toString=function(){return this.id},t}(),e.ExpressionRegExp=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n){void 0===n&&(n={}),this.expressions={},this.start=new e.ExpressionRef(t,null,\"start\",this),this.addExpressions(n)}return t.prototype.addExpressions=function(t){var e=this;_.each(t,function(t,n){e.addExpression(n,t)})},t.prototype.addExpression=function(e,n){if(e in this.expressions)throw\"Grammar already contain the id:\"+e;this.expressions[e]=t.buildExpression(n,e,this)},t.prototype.getExpression=function(t){return this.expressions[t]},t.prototype.parse=function(t){return this.start.parse(t,!0)},t.buildExpression=function(t,n,s){if(\"undefined\"==typeof t)throw\"Invalid Expression: \"+t;if(_.isString(t))return this.buildStringExpression(t,n,s);if(_.isArray(t))return new e.ExpressionOptions(_.map(t,function(t,i){return new e.ExpressionRef(t,null,n+\"_\"+i,s)}),n);if(_.isRegExp(t))return new e.ExpressionRegExp(t,n,s);if(_.isFunction(t))return new e.ExpressionFunction(t,n,s);throw\"Invalid Expression: \"+t},t.buildStringExpression=function(n,s,i){var o=t.stringMatch(n,t.spliter),r=_.map(o,function(t,n){if(t[1]){var o=t[1],r=t[3]?Number(t[3]):t[2]||null;return new e.ExpressionRef(o,r,s+\"_\"+n,i)}return new e.ExpressionConstant(t[4],s+\"_\"+n)});if(1==r.length){var u=r[0];return u.id=s,u}return new e.ExpressionList(r,s)},t.stringMatch=function(t,e){for(var n,s=[],i=new RegExp(e.source,\"g\");null!==(n=i.exec(t));)s.push(n);return s},t.spliter=/\\[(\\w+)(\\*|\\+|\\?|\\{([1-9][0-9]*)\\})?\\]|(.[^\\[]*)/,t}(),e.Grammar=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n,s){this.element=t,this.onchange=n,this.magicBox=s,this.hasFocus=!1,this.justPressedTab=!1,this.underlay=document.createElement(\"div\"),this.underlay.className=\"magic-box-underlay\",this.highlightContainer=document.createElement(\"span\"),this.highlightContainer.className=\"magic-box-highlight-container\",this.underlay.appendChild(this.highlightContainer),this.ghostTextContainer=document.createElement(\"span\"),this.ghostTextContainer.className=\"magic-box-ghost-text\",this.underlay.appendChild(this.ghostTextContainer),this.input=e.$$(t).find(\"input\"),this.input?t.insertBefore(this.underlay,this.input):(this.input=document.createElement(\"input\"),t.appendChild(this.underlay),t.appendChild(this.input)),this.input.spellcheck=!1,this.input.setAttribute(\"form\",\"coveo-dummy-form\"),this.input.setAttribute(\"autocomplete\",\"off\"),this.setupHandler()}return t.prototype.updateInput=function(){this.input.value!=this.result.input&&(this.input.value=this.result.input,this.hasFocus&&this.setCursor(this.getValue().length))},t.prototype.updateHighlight=function(){e.$$(this.highlightContainer).empty(),this.highlightContainer.appendChild(this.result.toHtmlElement())},t.prototype.updateWordCompletion=function(){e.$$(this.ghostTextContainer).empty(),null!=this.wordCompletion&&this.ghostTextContainer.appendChild(document.createTextNode(this.wordCompletion.substr(this.result.input.length)))},t.prototype.updateScroll=function(t){var n=this;void 0===t&&(t=!0);var s=function(){n.underlay.clientWidth<n.underlay.scrollWidth&&(n.underlay.style.visibility=\"hidden\",n.underlay.scrollLeft=n.input.scrollLeft,n.underlay.scrollTop=n.input.scrollTop,n.underlay.style.visibility=\"visible\"),n.updateScrollDefer=null,n.hasFocus&&n.updateScroll()};t?null==this.updateScrollDefer&&(this.updateScrollDefer=e.requestAnimationFrame(s)):s()},t.prototype.setResult=function(t,e){this.result=t,this.updateInput(),this.updateHighlight(),_.isUndefined(e)&&null!=this.wordCompletion&&0==this.wordCompletion.indexOf(this.result.input)?this.updateWordCompletion():this.setWordCompletion(e),this.updateScroll()},t.prototype.setWordCompletion=function(t){null!=t&&0!=t.toLowerCase().indexOf(this.result.input.toLowerCase())&&(t=null),this.wordCompletion=t,this.updateWordCompletion(),this.updateScroll()},t.prototype.setCursor=function(t){if(this.input.focus(),this.input.createTextRange){var e=this.input.createTextRange();e.move(\"character\",t),e.select()}else null!=this.input.selectionStart&&(this.input.focus(),this.input.setSelectionRange(t,t))},t.prototype.getCursor=function(){return this.input.selectionStart},t.prototype.setupHandler=function(){var t=this;this.input.onblur=function(){t.hasFocus=!1,setTimeout(function(){t.hasFocus||t.onblur&&t.onblur()},300),t.updateScroll()},this.input.onfocus=function(){t.hasFocus||(t.hasFocus=!0,t.updateScroll(),t.onfocus&&t.onfocus())},this.input.onkeydown=function(e){t.keydown(e)},this.input.onkeyup=function(e){t.keyup(e)},this.input.onclick=function(){t.onchangecursor()},this.input.oncut=function(){setTimeout(function(){t.onInputChange()})},this.input.onpaste=function(){setTimeout(function(){t.onInputChange()})}},t.prototype.focus=function(){var t=this;this.hasFocus=!0,setTimeout(function(){t.input.focus(),t.setCursor(t.getValue().length)})},t.prototype.blur=function(){this.hasFocus&&this.input.blur()},t.prototype.keydown=function(t){var n=this;switch(t.keyCode||t.which){case 9:!this.justPressedTab&&this.magicBox.hasSuggestions()&&t.preventDefault(),this.justPressedTab=!0;break;default:t.stopPropagation(),this.justPressedTab=!1,null==this.onkeydown||this.onkeydown(t.keyCode||t.which)?e.requestAnimationFrame(function(){n.onInputChange()}):t.preventDefault()}},t.prototype.keyup=function(t){switch(t.keyCode||t.which){case 9:this.tabPress();break;case 37:case 39:this.onchangecursor();break;default:null==this.onkeydown||this.onkeyup(t.keyCode||t.which)?this.onInputChange():t.preventDefault()}},t.prototype.tabPress=function(){null!=this.wordCompletion&&(this.input.value=this.wordCompletion),this.ontabpress&&this.ontabpress(),this.magicBox.showSuggestion()},t.prototype.onInputChange=function(){this.result.input!=this.input.value&&this.onchange(this.input.value,!1)},t.prototype.getValue=function(){return this.input.value},t.prototype.getWordCompletion=function(){return this.wordCompletion},t}(),e.InputManager=n}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),n=function(){function t(t,n){var s=this;this.element=t,this.count=1,this.options=_.defaults(n,{selectableClass:\"magic-box-suggestion\",selectedClass:\"magic-box-selected\"}),void 0==this.options.timeout&&(this.options.timeout=500),this.hasSuggestions=!1,e.$$(this.element).on(\"mouseover\",function(t){s.handleMouseOver(t)}),e.$$(this.element).on(\"mouseout\",function(t){s.handleMouseOut(t)})}return t.prototype.handleMouseOver=function(t){var n=e.$$(t.target),s=n.parents(this.options.selectableClass);n.hasClass(this.options.selectableClass)?this.addSelectedClass(n.el):s.length>0&&this.element.contains(s[0])&&this.addSelectedClass(s[0])},t.prototype.handleMouseOut=function(t){var n=e.$$(t.target),s=n.parents(this.options.selectableClass);if(t.relatedTarget){var i=e.$$(t.relatedTarget).parents(this.options.selectableClass);n.hasClass(this.options.selectedClass)&&!e.$$(t.relatedTarget).hasClass(this.options.selectableClass)?n.removeClass(this.options.selectedClass):0==i.length&&s.length>0&&e.$$(s[0]).removeClass(this.options.selectedClass)}else n.hasClass(this.options.selectedClass)?n.removeClass(this.options.selectedClass):s.length>0&&e.$$(s[0]).removeClass(this.options.selectedClass)},t.prototype.moveDown=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0),n=this.element.getElementsByClassName(this.options.selectableClass),s=-1;if(null!=t){e.$$(t).removeClass(this.options.selectedClass);for(var i=0;i<n.length;i++)if(t==n.item(i)){s=i;break}s=-1==s?0:s+1}else s=0;return null!=(t=n.item(s))&&e.$$(t).addClass(this.options.selectedClass),this.returnMoved(t)},t.prototype.moveUp=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0),n=this.element.getElementsByClassName(this.options.selectableClass),s=-1;if(null!=t){e.$$(t).removeClass(this.options.selectedClass);for(var i=0;i<n.length;i++)if(t==n.item(i)){s=i;break}s=-1==s?n.length-1:s-1}else s=n.length-1;return null!=(t=n.item(s))&&e.$$(t).addClass(this.options.selectedClass),this.returnMoved(t)},t.prototype.select=function(){var t=this.element.getElementsByClassName(this.options.selectedClass).item(0);return null!=t&&e.$$(t).trigger(\"keyboardSelect\"),t},t.prototype.mergeSuggestions=function(t,e){var n,s=this,i=[],o=!0;t=_.compact(t);var r=this.pendingSuggestion=new Promise(function(e,u){_.each(t,function(t){var e=!1;setTimeout(function(){e=!0,o=!1},s.options.timeout),t.then(function(t){!e&&t&&(i=i.concat(t))})});var a=function(){o&&(n&&clearTimeout(n),0==i.length?e([]):r==s.pendingSuggestion||null==s.pendingSuggestion?e(i.sort(function(t,e){return e.index-t.index})):u(\"new request queued\")),o=!1};0==t.length&&a(),void 0==t&&a(),n=setTimeout(function(){a()},s.options.timeout),Promise.all(t).then(function(){return a()})});r.then(function(t){return e&&e(t),s.updateSuggestions(t),t}).catch(function(){return null})},t.prototype.updateSuggestions=function(t){var n=this;e.$$(this.element).empty(),this.element.className=\"magic-box-suggestions\",_.each(t,function(t){var s=t.dom;if(s){e.$$(s).removeClass(n.options.selectedClass);var i=e.$$(s).find(\".\"+n.options.selectableClass);e.$$(i).removeClass(n.options.selectedClass)}else{if((s=document.createElement(\"div\")).className=\"magic-box-suggestion\",null!=t.html)s.innerHTML=t.html;else if(null!=t.text)s.appendChild(document.createTextNode(t.text));else if(null!=t.separator){s.className=\"magic-box-suggestion-seperator\";var o=document.createElement(\"div\");o.className=\"magic-box-suggestion-seperator-label\",o.appendChild(document.createTextNode(t.separator)),s.appendChild(o)}e.$$(s).on(\"click\",function(){t.onSelect()}),e.$$(s).on(\"keyboardSelect\",function(){t.onSelect()}),e.$$(s).addClass(n.options.selectableClass)}s.suggestion=t,n.element.appendChild(s)}),t.length>0?(e.$$(this.element).addClass(\"magic-box-hasSuggestion\"),this.hasSuggestions=!0):(e.$$(this.element).removeClass(\"magic-box-hasSuggestion\"),this.hasSuggestions=!1)},t.prototype.returnMoved=function(t){if(null!=t){if(t.suggestion)return t.suggestion;if(t[\"no-text-suggestion\"])return null;if(t instanceof HTMLElement)return{text:e.$$(t).text()}}return null},t.prototype.addSelectedClass=function(t){for(var n=this.element.getElementsByClassName(this.options.selectedClass),s=0;s<n.length;s++){var i=n.item(s);e.$$(i).removeClass(this.options.selectedClass)}e.$$(t).addClass(this.options.selectedClass)},t}(),e.SuggestionsManager=n}(Coveo||(Coveo={})),function(t){var e;(function(t){var n=function(t,e){return'<span class=\"'+t+'\">'+_.escape(e)+\"</span>\"};t.highlightText=function(t,e,s,i,o){if(void 0===s&&(s=!1),void 0===i&&(i=\"magic-box-hightlight\"),void 0===o&&(o=\"\"),0==e.length)return t;var r=e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\"),u=new RegExp(\"(\"+r+\")|(.*?(?=\"+r+\")|.+)\",s?\"gi\":\"g\");return t.replace(u,function(t,e,s){return n(null!=e?i:o,t)})};var s=function(){function t(t){this.el=t}return t.prototype.text=function(t){if(!t)return this.el.innerText||this.el.textContent;void 0!=this.el.innerText?this.el.innerText=t:void 0!=this.el.textContent&&(this.el.textContent=t)},t.prototype.nodeListToArray=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t.item(e);return n},t.prototype.empty=function(){for(;this.el.firstChild;)this.el.removeChild(this.el.firstChild)},t.prototype.show=function(){this.el.style.display=\"visible\"},t.prototype.hide=function(){this.el.style.display=\"none\"},t.prototype.toggle=function(t){void 0===t?\"visible\"==this.el.style.display?this.hide():this.show():t?this.show():this.hide()},t.prototype.find=function(t){return this.el.querySelector(t)},t.prototype.is=function(t){return this.el.tagName.toLowerCase()==t.toLowerCase()||!(\".\"!=t[0]||!this.hasClass(t.substr(1)))||\"#\"==t[0]&&this.el.getAttribute(\"id\")==t.substr(1)},t.prototype.closest=function(t){for(var n=this.el,s=!1;!s&&(e.$$(n).hasClass(t)&&(s=!0),\"body\"!=n.tagName.toLowerCase())&&null!=n.parentElement;)s||(n=n.parentElement);if(s)return n},t.prototype.parent=function(t){if(void 0!=this.el.parentElement)return this.traverseAncestorForClass(this.el.parentElement,t)},t.prototype.parents=function(e){for(var n=[],s=this.parent(e);s;)n.push(s),s=new t(s).parent(e);return n},t.prototype.findAll=function(t){return this.nodeListToArray(this.el.querySelectorAll(t))},t.prototype.findClass=function(t){return\"getElementsByClassName\"in this.el?this.nodeListToArray(this.el.getElementsByClassName(t)):this.nodeListToArray(this.el.querySelectorAll(\".\"+t))},t.prototype.findId=function(t){return document.getElementById(t)},t.prototype.addClass=function(t){this.hasClass(t)||(this.el.className?this.el.className+=\" \"+t:this.el.className=t)},t.prototype.removeClass=function(t){this.el.className=this.el.className.replace(new RegExp(\"(^|\\\\s)\"+t+\"(\\\\s|\\\\b)\",\"g\"),\"$1\")},t.prototype.toggleClass=function(t,e){e?this.addClass(t):this.removeClass(t)},t.prototype.getClass=function(){return this.el.className.match(t.CLASS_NAME_REGEX)||[]},t.prototype.hasClass=function(t){return _.contains(this.getClass(),t)},t.prototype.detach=function(){this.el.parentElement&&this.el.parentElement.removeChild(this.el)},t.prototype.on=function(e,n){var s=this;if(_.isArray(e))_.each(e,function(t){s.on(t,n)});else{var i=this.getJQuery();if(i)i(this.el).on(e,n);else if(this.el.addEventListener){var o=function(t){n(t,t.detail)};t.handlers.push({eventHandle:n,fn:o}),this.el.addEventListener(e,o,!1)}else this.el.on&&this.el.on(\"on\"+e,n)}},t.prototype.one=function(t,e){var n=this;if(_.isArray(t))_.each(t,function(t){n.one(t,e)});else{var s=function(i){return n.off(t,s),e(i)};this.on(t,s)}},t.prototype.off=function(e,n){var s=this;if(_.isArray(e))_.each(e,function(t){s.off(t,n)});else{var i=this.getJQuery();if(i)i(this.el).off(e,n);else if(this.el.removeEventListener){var o=0,r=_.find(t.handlers,function(t,e){if(t.eventHandle==n)return o=e,!0});r&&(this.el.removeEventListener(e,r.fn,!1),t.handlers.splice(o,1))}else this.el.off&&this.el.off(\"on\"+e,n)}},t.prototype.trigger=function(t,e){var n=this.getJQuery();if(n)n(this.el).trigger(t,e);else if(void 0!==CustomEvent){var s=new CustomEvent(t,{detail:e,bubbles:!0});this.el.dispatchEvent(s)}},t.prototype.isEmpty=function(){return t.ONLY_WHITE_SPACE_REGEX.test(this.el.innerHTML)},t.prototype.isDescendant=function(t){for(var e=this.el.parentNode;null!=e;){if(e==t)return!0;e=e.parentNode}return!1},t.prototype.traverseAncestorForClass=function(t,n){void 0===t&&(t=this.el),0==n.indexOf(\".\")&&(n=n.substr(1));for(var s=!1;!s&&(e.$$(t).hasClass(n)&&(s=!0),\"body\"!=t.tagName.toLowerCase())&&null!=t.parentElement;)s||(t=t.parentElement);if(s)return t},t.prototype.getJQuery=function(){return void 0!=window.jQuery&&window.jQuery},t.CLASS_NAME_REGEX=/-?[_a-zA-Z]+[_a-zA-Z0-9-]*/g,t.ONLY_WHITE_SPACE_REGEX=/^\\s*$/,t.handlers=[],t}();t.Dom=s})((e=t.MagicBox||(t.MagicBox={})).Utils||(e.Utils={}))}(Coveo||(Coveo={})),function(t){var e;(e=t.MagicBox||(t.MagicBox={})).$$=function(t){return window.Coveo&&window.Coveo.$$?window.Coveo.$$(t):new e.Utils.Dom(t)}}(Coveo||(Coveo={})),function(t){var e;(function(t){function n(t,e,n,s){_.each(s.expressions,function(e){_.contains(t,e)||t.push(e)}),_.each(s.basicExpressions,function(t){_.contains(e,t)||e.push(t)}),_.each(s.grammars,function(t,e){if(e in n){if(!_.isArray(n[e])||!_.isArray(t))throw _.each(t,function(t){n[e].push(t)}),\"Can not merge \"+e+\"(\"+new String(t)+\" => \"+new String(n[e])+\")\";_.each(t,function(t){n[e].push(t)})}else n[e]=t})}function s(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];for(var s=[],i=[],o={Start:[\"Expressions\",\"Empty\"],Expressions:\"[OptionalSpaces][Expression][ExpressionsList*][OptionalSpaces]\",ExpressionsList:\"[Spaces][Expression]\",Expression:s,BasicExpression:i,OptionalSpaces:/ */,Spaces:/ +/,Empty:/(?!.)/},r=0;r<t.length;r++)n(s,i,o,t[r]),_.each(t[r].include,function(e){_.contains(t,e)||t.push(e)});return s.push(\"BasicExpression\"),{start:\"Start\",expressions:o}}t.Expressions=s,t.ExpressionsGrammar=function(){for(var t=[],n=0;n<arguments.length;n++)t[n-0]=arguments[n];var i=s.apply(this,t);return new e.Grammar(i.start,i.expressions)}})((e=t.MagicBox||(t.MagicBox={})).Grammars||(e.Grammars={}))}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).notWordStart=\" ()[],$@'\\\"\",n.notInWord=\" ()[],:\",n.Basic={basicExpressions:[\"Word\",\"DoubleQuoted\"],grammars:{DoubleQuoted:'\"[NotDoubleQuote]\"',NotDoubleQuote:/[^\"]*/,SingleQuoted:\"'[NotSingleQuote]'\",NotSingleQuote:/[^']*/,Number:/-?(0|[1-9]\\d*)(\\.\\d+)?/,Word:function(t,s,i){var o=new RegExp(\"[^\"+n.notWordStart.replace(/(.)/g,\"\\\\$1\")+\"][^\"+n.notInWord.replace(/(.)/g,\"\\\\$1\")+\"]*\"),r=t.match(o);null!=r&&0!=r.index&&(r=null);var u=new e.Result(null!=r?r[0]:null,i,t);return u.isSuccess()&&s&&t.length>u.value.length?new e.EndOfInputResult(u):u}}}}(Coveo||(Coveo={})),function(t){var e;((e=t.MagicBox||(t.MagicBox={})).Grammars||(e.Grammars={})).SubExpression={basicExpressions:[\"SubExpression\"],grammars:{SubExpression:\"([Expressions])\"}}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Date={grammars:{Date:\"[DateYear]/[DateMonth]/[DateDay]\",DateYear:/([0-9]{4})/,DateMonth:/(1[0-2]|0?[1-9])/,DateDay:/([1-2][0-9]|3[0-1]|0?[1-9])/,DateRange:\"[Date][Spaces?]..[Spaces?][Date]\",DateRelative:[\"DateRelativeNegative\",\"DateRelativeTerm\"],DateRelativeTerm:/now|today|yesterday/,DateRelativeNegative:\"[DateRelativeTerm][DateRelativeNegativeRef]\",DateRelativeNegativeRef:/([\\-\\+][0-9]+(s|m|h|d|mo|y))/},include:[n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Field={basicExpressions:[\"FieldSimpleQuery\",\"FieldQuery\",\"Field\"],grammars:{FieldQuery:\"[Field][OptionalSpaces][FieldQueryOperation]\",FieldQueryOperation:[\"FieldQueryValue\",\"FieldQueryNumeric\"],FieldQueryValue:\"[FieldOperator][OptionalSpaces][FieldValue]\",FieldQueryNumeric:\"[FieldOperatorNumeric][OptionalSpaces][FieldValueNumeric]\",FieldSimpleQuery:\"[FieldName]:[OptionalSpaces][FieldValue]\",Field:\"@[FieldName]\",FieldName:/[a-zA-Z][a-zA-Z0-9\\.\\_]*/,FieldOperator:/==|=|<>/,FieldOperatorNumeric:/<=|>=|<|>/,FieldValue:[\"DateRange\",\"NumberRange\",\"DateRelative\",\"Date\",\"Number\",\"FieldValueList\",\"FieldValueString\"],FieldValueNumeric:[\"DateRelative\",\"Date\",\"Number\"],FieldValueString:[\"DoubleQuoted\",\"FieldValueNotQuoted\"],FieldValueList:\"([FieldValueString][FieldValueStringList*])\",FieldValueStringList:\"[FieldValueSeparator][FieldValueString]\",FieldValueSeparator:/ *, */,FieldValueNotQuoted:/[^ \\(\\),]+/,NumberRange:\"[Number][Spaces?]..[Spaces?][Number]\"},include:[n.Date,n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).QueryExtension={basicExpressions:[\"QueryExtension\"],grammars:{QueryExtension:\"$[QueryExtensionName]([QueryExtensionArguments])\",QueryExtensionName:/\\w+/,QueryExtensionArguments:\"[QueryExtensionArgumentList*][QueryExtensionArgument]\",QueryExtensionArgumentList:\"[QueryExtensionArgument][Spaces?],[Spaces?]\",QueryExtensionArgument:\"[QueryExtensionArgumentName]:[Spaces?][QueryExtensionArgumentValue]\",QueryExtensionArgumentName:/\\w+/,QueryExtensionArgumentValue:[\"SingleQuoted\",\"Expressions\"]},include:[n.Basic]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).NestedQuery={basicExpressions:[\"NestedQuery\"],grammars:{NestedQuery:\"[[NestedField][OptionalSpaces][Expressions]]\",NestedField:\"[[Field]]\",FieldValue:[\"NestedQuery\"]},include:[n.Field]}}(Coveo||(Coveo={})),function(t){var e,n;e=t.MagicBox||(t.MagicBox={}),(n=e.Grammars||(e.Grammars={})).Complete={include:[n.NestedQuery,n.QueryExtension,n.SubExpression,n.Field,n.Basic]}}(Coveo||(Coveo={})),function(t){!function(t){var e=function(){function e(e,n,s){var i=this;void 0===s&&(s={}),this.element=e,this.grammar=n,this.options=s,this.lastSuggestions=[],_.isUndefined(this.options.inline)&&(this.options.inline=!1),t.$$(e).addClass(\"magic-box\"),this.options.inline&&t.$$(e).addClass(\"magic-box-inline\"),this.result=this.grammar.parse(\"\"),this.displayedResult=this.result.clean(),this.clearDom=document.createElement(\"div\"),this.clearDom.className=\"magic-box-clear\";var o=document.createElement(\"div\");o.className=\"magic-box-icon\",this.clearDom.appendChild(o);var r=t.$$(e).find(\".magic-box-input\");r?e.insertBefore(this.clearDom,r):((r=document.createElement(\"div\")).className=\"magic-box-input\",e.appendChild(this.clearDom),e.appendChild(r)),this.inputManager=new t.InputManager(r,function(t,e){e?(i.setText(t),i.onselect&&i.onselect(i.getFirstSuggestionText())):(i.setText(t),i.showSuggestion(),i.onchange&&i.onchange())},this),this.inputManager.ontabpress=function(){i.ontabpress&&i.ontabpress()};var u=this.inputManager.getValue();u&&(this.displayedResult.input=u),this.inputManager.setResult(this.displayedResult);var a=document.createElement(\"div\");a.className=\"magic-box-suggestions\",this.element.appendChild(a),this.suggestionsManager=new t.SuggestionsManager(a,{selectableClass:this.options.selectableSuggestionClass,selectedClass:this.options.selectedSuggestionClass,timeout:this.options.suggestionTimeout}),this.setupHandler()}return e.prototype.getResult=function(){return this.result},e.prototype.getDisplayedResult=function(){return this.displayedResult},e.prototype.setText=function(e){t.$$(this.element).toggleClass(\"magic-box-notEmpty\",e.length>0),this.result=this.grammar.parse(e),this.displayedResult=this.result.clean(),this.inputManager.setResult(this.displayedResult)},e.prototype.setCursor=function(t){this.inputManager.setCursor(t)},e.prototype.getCursor=function(){return this.inputManager.getCursor()},e.prototype.resultAtCursor=function(t){return this.displayedResult.resultAt(this.getCursor(),t)},e.prototype.setupHandler=function(){var e=this;this.inputManager.onblur=function(){t.$$(e.element).removeClass(\"magic-box-hasFocus\"),e.onblur&&e.onblur(),e.options.inline||e.clearSuggestion()},this.inputManager.onfocus=function(){t.$$(e.element).addClass(\"magic-box-hasFocus\"),e.showSuggestion(),e.onfocus&&e.onfocus()},this.inputManager.onkeydown=function(t){return 38!=t&&40!=t&&(13==t?(null==e.suggestionsManager.select()&&e.onsubmit&&e.onsubmit(),!1):(27==t&&(e.clearSuggestion(),e.blur()),!0))},this.inputManager.onchangecursor=function(){e.showSuggestion()},this.inputManager.onkeyup=function(t){if(38==t)e.onmove&&e.onmove(),e.focusOnSuggestion(e.suggestionsManager.moveUp()),e.onchange&&e.onchange();else{if(40!=t)return!0;e.onmove&&e.onmove(),e.focusOnSuggestion(e.suggestionsManager.moveDown()),e.onchange&&e.onchange()}return!1},this.clearDom.onclick=function(){e.clear()}},e.prototype.showSuggestion=function(){var t=this;this.suggestionsManager.mergeSuggestions(null!=this.getSuggestions?this.getSuggestions():[],function(e){t.updateSuggestion(e)})},e.prototype.updateSuggestion=function(t){var e=this;this.lastSuggestions=t;var n=this.getFirstSuggestionText();this.inputManager.setWordCompletion(n&&n.text),this.onsuggestions&&this.onsuggestions(t),_.each(t,function(t){null==t.onSelect&&null!=t.text&&(t.onSelect=function(){e.setText(t.text),e.onselect&&e.onselect(t)})})},e.prototype.focus=function(){t.$$(this.element).addClass(\"magic-box-hasFocus\"),this.inputManager.focus()},e.prototype.blur=function(){this.inputManager.blur()},e.prototype.clearSuggestion=function(){var t=this;this.suggestionsManager.mergeSuggestions([],function(e){t.updateSuggestion(e)}),this.inputManager.setWordCompletion(null)},e.prototype.focusOnSuggestion=function(t){null==t||null==t.text?(t=this.getFirstSuggestionText(),this.inputManager.setResult(this.displayedResult,t&&t.text)):this.inputManager.setResult(this.grammar.parse(t.text).clean(),t.text)},e.prototype.getFirstSuggestionText=function(){return _.find(this.lastSuggestions,function(t){return null!=t.text})},e.prototype.getText=function(){return this.inputManager.getValue()},e.prototype.getWordCompletion=function(){return this.inputManager.getWordCompletion()},e.prototype.clear=function(){this.setText(\"\"),this.showSuggestion(),this.focus(),this.onclear&&this.onclear()},e.prototype.hasSuggestions=function(){return this.suggestionsManager.hasSuggestions},e}();t.Instance=e,t.create=function(t,n,s){return new e(t,n,s)},t.requestAnimationFrame=function(t){return\"requestAnimationFrame\"in window?window.requestAnimationFrame(t):setTimeout(t)}}(t.MagicBox||(t.MagicBox={}))}(Coveo||(Coveo={}));\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = Coveo.MagicBox;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/exports-loader?Coveo.MagicBox!./~/coveomagicbox/bin/MagicBox.min.js\n ** module id = 27\n ** module chunks = 0 1\n **/","!function(){\"use strict\";var t,e,n=\"undefined\",r=\"string\",i=self.navigator,o=String,a=Object.prototype.hasOwnProperty,l={},u={},s=!1,f=!0,c=/^\\s*application\\/(?:vnd\\.oftn\\.|x-)?l10n\\+json\\s*(?:$|;)/i,p=\"locale\",g=\"defaultLocale\",h=\"toLocaleString\",y=\"toLowerCase\",v=Array.prototype.indexOf||function(t){for(var e=this.length,n=0;e>n;n++)if(n in this&&this[n]===t)return n;return-1},d=function(e){var n=new t;return n.open(\"GET\",e,s),n.send(null),200!==n.status?(setTimeout(function(){var t=new Error(\"Unable to load localization data: \"+e);throw t.name=\"Localization Error\",t},0),{}):JSON.parse(n.responseText)},m=o[h]=function(t){if(arguments.length>0&&\"number\"!=typeof t)if(typeof t===r)m(d(t));else if(t===s)u={};else{var e,n,i;for(e in t)if(a.call(t,e)){if(n=t[e],e=e[y](),e in u&&n!==s||(u[e]={}),n===s)continue;if(typeof n===r){if(0!==o[p][y]().indexOf(e)){e in l||(l[e]=[]),l[e].push(n);continue}n=d(n)}for(i in n)a.call(n,i)&&(u[e][i]=n[i])}}return Function.prototype[h].apply(o,arguments)},w=function(t){for(var e,n=l[t],r=0,i=n.length;i>r;r++)e={},e[t]=d(n[r]),m(e);delete l[t]},b=o.prototype[h]=function(){var t,n=e,r=o[n?g:p],i=r[y]().split(\"-\"),a=i.length,c=this.valueOf();e=s;do if(t=i.slice(0,a).join(\"-\"),t in l&&w(t),t in u&&c in u[t])return u[t][c];while(a-->1);return!n&&o[g]?(e=f,b.call(c)):c};if(typeof XMLHttpRequest===n&&typeof ActiveXObject!==n){var L=ActiveXObject;t=function(){try{return new L(\"Msxml2.XMLHTTP.6.0\")}catch(t){}try{return new L(\"Msxml2.XMLHTTP.3.0\")}catch(e){}try{return new L(\"Msxml2.XMLHTTP\")}catch(n){}throw new Error(\"XMLHttpRequest not supported by this browser.\")}}else t=XMLHttpRequest;if(o[g]=o[g]||\"\",o[p]=i&&(i.language||i.userLanguage)||\"\",typeof document!==n)for(var T,M=document.getElementsByTagName(\"link\"),O=M.length;O--;){var X=M[O],x=(X.getAttribute(\"rel\")||\"\")[y]().split(/\\s+/);c.test(X.type)&&(-1!==v.call(x,\"localizations\")?m(X.getAttribute(\"href\")):-1!==v.call(x,\"localization\")&&(T={},T[(X.getAttribute(\"hreflang\")||\"\")[y]()]=X.getAttribute(\"href\"),m(T)))}}();\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = window.String.toLocaleString;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/exports-loader?window.String.toLocaleString!./lib/l10n/l10n.min.js\n ** module id = 28\n ** module chunks = 0 1\n **/","import * as Globalize from 'globalize';\nimport {LocaleString} from '../ExternalModulesShim';\nvar merge = function(obj1, obj2) {\n  var obj3 = {};\n  for(var attrname in obj1){obj3[attrname] = obj1[attrname]; }\n  for(var attrname in obj2){obj3[attrname] = obj2[attrname]; }\n  return obj3;\n}\nvar dict = {\n  \"Unknown\": \"Unknown\",\n  \"And\": \"AND\",\n  \"Authenticating\": \"Authenticating {0}...\",\n  \"Clear\": \"Clear {0}\",\n  \"CompleteQuery\": \"Complete Query\",\n  \"Exclude\": \"Exclude {0}\",\n  \"EnterTag\": \"Add Tag\",\n  \"Next\": \"Next\",\n  \"Last\": \"Last\",\n  \"Link\": \"Link\",\n  \"Or\": \"OR\",\n  \"Previous\": \"Previous\",\n  \"QueryDidntMatchAnyDocuments\": \"Your query did not match any documents.\",\n  \"QueryException\": \"Your query has an error: {0}.\",\n  \"Me\": \"Me\",\n  \"Remove\": \"Remove\",\n  \"Search\": \"Search\",\n  \"SearchFor\": \"Search for {0}\",\n  \"ShareQuery\": \"Share Query\",\n  \"Preferences\": \"Preferences\",\n  \"LinkOpeningSettings\": \"Link Opening Settings\",\n  \"Reauthenticate\": \"Reauthenticate {0}\",\n  \"ResultsFilteringExpression\": \"Results Filtering Expressions\",\n  \"FiltersInYourPreferences\": \"Filters in your preferences\",\n  \"Create\": \"Create\",\n  \"SearchIn\": \"Search in {0}\",\n  \"Seconds\": \"in {0} second<pl>s</pl>\",\n  \"ShowingResultsOf\": \"Result<pl>s</pl> {0}<pl>-{1}</pl> of {2}\",\n  \"SwitchTo\": \"Switch to {0}\",\n  \"Unexclude\": \"Unexclude {0}\",\n  \"ClearAllFilters\": \"Clear All Filters\",\n  \"SkipLogin\": \"Skip login\",\n  \"LoginInProgress\": \"Login in progress, please wait ...\",\n  \"Login\": \"Log In\",\n  \"GetStarted\": \"Get Started\",\n  \"More\": \"More\",\n  \"NMore\": \"{0} more...\",\n  \"Less\": \"Fewer\",\n  \"Settings\": \"Settings\",\n  \"Score\": \"Score\",\n  \"ScoreDescription\": \"The score is computed from the number of occurrences as well as from the position in the result set.\",\n  \"Occurrences\": \"Occurrences\",\n  \"OccurrencesDescription\": \"Sort by number of occurrences, with values having the highest number appearing first.\",\n  \"Label\": \"Label\",\n  \"Of\": \"of\",\n  \"LabelDescription\": \"Sort alphabetically on the field values.\",\n  \"Value\": \"Value\",\n  \"ValueDescription\": \"Sort on the values of the first computed field\",\n  \"AlphaAscending\": \"Value Ascending\",\n  \"AlphaDescending\": \"Value Descending\",\n  \"ChiSquare\": \"Chi Square\",\n  \"Nosort\": \"No Sort\",\n  \"NosortDescription\": \"Do not sort the values. The values will be returned in a random order.\",\n  \"RelativeFrequency\": \"Relative Frequency\",\n  \"RelativeFrequencyDescription\": \"Sort based on the relative frequency of values. Less common values will appear higher.\",\n  \"DateDistribution\": \"Date distribution\",\n  \"Custom\": \"Custom\",\n  \"CustomDescription\": \"Sort based on a custom order\",\n  \"ComputedField\": \"Computed Field\",\n  \"Ascending\": \"Ascending\",\n  \"Descending\": \"Descending\",\n  \"noResultFor\": \"No results for {0}\",\n  \"autoCorrectedQueryTo\": \"Query was automatically corrected to {0}\",\n  \"didYouMean\": \"Did you mean: {0}\",\n  \"SuggestedResults\": \"Suggested Results\",\n  \"SuggestedQueries\": \"Suggested Queries\",\n  \"MostRelevantItems\": \"Most relevant items:\",\n  \"AllItems\": \"All items:\",\n  \"ShowLess\": \"Show less\",\n  \"ShowMore\": \"Show more\",\n  \"HideFacet\": \"Hide Facet\",\n  \"ShowFacet\": \"Show Facet\",\n  \"AndOthers\": \"and {0} other<pl>s</pl>\",\n  \"Others\": \"{0} other<pl>s</pl>\",\n  \"MostRelevantPosts\": \"Most Relevant Posts:\",\n  \"CompleteThread\": \"Complete Thread:\",\n  \"ShowCompleteThread\": \"Show Complete Thread\",\n  \"ShowOnlyTopMatchingPosts\": \"Show Only Top Matching Posts\",\n  \"MostRelevantReplies\": \"Most Relevant Replies:\",\n  \"AllConversation\": \"All Conversation:\",\n  \"ShowAllConversation\": \"Show All Conversation\",\n  \"ShowAllReplies\": \"Show All Replies\",\n  \"ShowOnlyMostRelevantReplies\": \"Show Only Most Relevant Replies\",\n  \"Close\": \"Close\",\n  \"Open\": \"Open\",\n  \"OpenInOutlookWhenPossible\": \"Open in Outlook (when possible)\",\n  \"AlwaysOpenInNewWindow\": \"Always open results in new window\",\n  \"Quickview\": \"Quick View\",\n  \"NoQuickview\": \"The Quick View for this document is unavailable\",\n  \"ErrorReport\": \"Error Report\",\n  \"OopsError\": \"Something went wrong.\",\n  \"ProblemPersists\": \"If the problem persists contact the administrator.\",\n  \"GoBack\": \"Go Back\",\n  \"Reset\": \"Reset\",\n  \"Retry\": \"Retry\",\n  \"MoreInfo\": \"More Information\",\n  \"Username\": \"Username\",\n  \"Password\": \"Password\",\n  \"PostedBy\": \"Posted by\",\n  \"CannotConnect\": \"Cannot connect to the server address.\",\n  \"BadUserPass\": \"Password does not match with username.\",\n  \"PleaseEnterYourCredentials\": \"Please enter your credentials for {0}.\",\n  \"PleaseEnterYourSearchPage\": \"Please enter your search page URL\",\n  \"Collapse\": \"Collapse\",\n  \"Collapsable\": \"Collapsible\",\n  \"Expand\": \"Expand\",\n  \"Today\": \"Today\",\n  \"Yesterday\": \"Yesterday\",\n  \"Tomorrow\": \"Tomorrow\",\n  \"Duration\": \"Duration: {0}\",\n  \"IndexDuration\": \"Index Duration: {0}\",\n  \"ProxyDuration\": \"Proxy Duration: {0}\",\n  \"ClientDuration\": \"Client Duration: {0}\",\n  \"Unavailable\": \"Unavailable\",\n  \"Reply\": \"Reply\",\n  \"ReplyAll\": \"Reply All\",\n  \"Forward\": \"Forward\",\n  \"From\": \"From\",\n  \"Caption\": \"Caption\",\n  \"Expression\": \"Expression\",\n  \"Tab\": \"Tab\",\n  \"Tabs\": \"Tabs\",\n  \"EnterExpressionName\": \"Enter expression name\",\n  \"EnterExpressionToFilterWith\": \"Enter expression to filter results with\",\n  \"SelectTab\": \"Select Tab\",\n  \"SelectAll\": \"Select All\",\n  \"PageUrl\": \"Search page URL\",\n  \"ErrorSavingToDevice\": \"Error while saving the information to your device\",\n  \"ErrorReadingFromDevice\": \"Error while reading the information from your device\",\n  \"AppIntro\": \"Speak with a product specialist who can answer your questions about Coveo and help you decide which Coveo solution is right for you. Or, try a live demo !\",\n  \"TryDemo\": \"Try the demo\",\n  \"ContactUs\": \"Contact us\",\n  \"NewToCoveo\": \"New to Coveo?\",\n  \"LetUsHelpGetStarted\": \"Let us help you get started\",\n  \"LikesThis\": \"{0} like<sn>s</sn> this.\",\n  \"CannotConnectSearchPage\": \"Cannot connect to your search page\",\n  \"AreYouSureDeleteFilter\": \"Are you sure you want to delete the filter {0} with the expression {1}\",\n  \"OnlineHelp\": \"Online Help\",\n  \"Done\": \"Done\",\n  \"SaveFacetState\": \"Save this facet state\",\n  \"ClearFacetState\": \"Clear facet state\",\n  \"DisplayingTheOnlyMessage\": \"Displaying the only message in this conversation\",\n  \"NoNetworkConnection\": \"No network connection\",\n  \"UnknownConnection\": \"Unknown connection\",\n  \"EthernetConnection\": \"Ethernet connection\",\n  \"WiFi\": \"WiFi connection\",\n  \"CELL\": \"Cellular connection\",\n  \"CELL_2G\": \"Cellular 2G connection\",\n  \"CELL_3G\": \"Cellular 3G connection\",\n  \"CELL_4G\": \"Cellular 4G connection\",\n  \"Relevance\": \"Relevance\",\n  \"Date\": \"Date\",\n  \"Amount\": \"Amount\",\n  \"QueryExceptionNoException\": \"No exception\",\n  \"QueryExceptionInvalidSyntax\": \"Invalid syntax\",\n  \"QueryExceptionInvalidCustomField\": \"Invalid custom field\",\n  \"QueryExceptionInvalidDate\": \"Invalid date\",\n  \"QueryExceptionInvalidExactPhrase\": \"Invalid exact phrase\",\n  \"QueryExceptionInvalidDateOp\": \"Invalid date operator\",\n  \"QueryExceptionInvalidNear\": \"Invalid NEAR operator\",\n  \"QueryExceptionInvalidWeightedNear\": \"Invalid weighted NEAR\",\n  \"QueryExceptionInvalidTerm\": \"Invalid term\",\n  \"QueryExceptionTooManyTerms\": \"Too many terms\",\n  \"QueryExceptionWildcardTooGeneral\": \"Wildcard too general\",\n  \"QueryExceptionInvalidSortField\": \"Invalid sort field\",\n  \"QueryExceptionInvalidSmallStringOp\": \"Invalid small string operator\",\n  \"QueryExceptionRequestedResultsMax\": \"Requested results maximum\",\n  \"QueryExceptionAggregatedMirrorDead\": \"Aggregated mirror is offline\",\n  \"QueryExceptionAggregatedMirrorQueryTimeOut\": \"Aggregated mirror query timeout\",\n  \"QueryExceptionAggregatedMirrorInvalidBuildNumber\": \"Aggregated mirror invalid build number\",\n  \"QueryExceptionAggregatedMirrorCannotConnect\": \"Aggregated mirror cannot connect\",\n  \"QueryExceptionNotEnoughLeadingCharsWildcard\": \"Not enough leading character wildcard\",\n  \"QueryExceptionSecurityInverterNotFound\": \"Security inverter not found\",\n  \"QueryExceptionSecurityInverterAccessDenied\": \"Security inverter access denied\",\n  \"QueryExceptionAggregatedMirrorCannotImpersonate\": \"Aggregated mirror cannot impersonate\",\n  \"QueryExceptionUnexpected\": \"Unexpected\",\n  \"QueryExceptionAccessDenied\": \"Access denied\",\n  \"QueryExceptionSuperUserTokenInvalid\": \"Super user token invalid\",\n  \"QueryExceptionSuperUserTokenExpired\": \"Super user token is expired\",\n  \"QueryExceptionLicenseQueriesExpired\": \"Queries license expired\",\n  \"QueryExceptionLicenseSuperUserTokenNotSupported\": \"License super user token not supported\",\n  \"QueryExceptionInvalidSession\": \"Invalid session\",\n  \"QueryExceptionInvalidDocument\": \"Invalid document\",\n  \"QueryExceptionSearchDisabled\": \"Search disabled\",\n  \"FileType\": \"File type\",\n  \"ShowAttachment\": \"Show attachment\",\n  \"OnFeed\": \"on {0}'s feed.\",\n  \"Author\": \"Author\",\n  \"NoTitle\": \"No title\",\n  \"CurrentSelections\": \"Current selections\",\n  \"AllContent\": \"All content\",\n  \"CancelLastAction\": \"Cancel last action\",\n  \"SearchTips\": \"Search tips\",\n  \"CheckSpelling\": \"Check the spelling of your keywords.\",\n  \"TryUsingFewerKeywords\": \"Try using fewer, different or more general keywords.\",\n  \"SelectFewerFilters\": \"Select fewer filters to broaden your search.\",\n  \"Document\": \"Document\",\n  \"Time\": \"Time\",\n  \"StartDate\": \"Start Date\",\n  \"StartTime\": \"Start Time\",\n  \"DurationTitle\": \"Duration\",\n  \"UserQuery\": \"User query\",\n  \"ShowUserActions\": \"Show User Actions\",\n  \"NoData\": \"No data available\",\n  \"EventType\": \"Event type\",\n  \"GoToFullSearch\": \"Full search\",\n  \"GoToEdition\": \"Customize Panel\",\n  \"RemoveContext\": \"Remove context\",\n  \"BoxAttachToCase\": \"Attach to case\",\n  \"AttachToCase\": \"Attach to case\",\n  \"Attach\": \"Attach\",\n  \"Attached\": \"Attached\",\n  \"Detach\": \"Detach\",\n  \"Details\": \"Details\",\n  \"AdditionalFilters\": \"Additional filters\",\n  \"SelectNonContextualSearch\": \"Remove the context from the current record to broaden your search\",\n  \"CopyPasteToSupport\": \"Copy paste this message to Coveo Support team for more information.\",\n  \"FollowQueryDescription\": \"Alert me for changes to the search results of this query.\",\n  \"SearchAlerts_Panel\": \"Manage Alerts\",\n  \"SearchAlerts_PanelDescription\": \"View and manage your search alerts.\",\n  \"SearchAlerts_PanelNoSearchAlerts\": \"You have no subscriptions.\",\n  \"SearchAlerts_Fail\": \"The Search Alerts service is currently unavailable.\",\n  \"SearchAlerts_Type\": \"Type\",\n  \"SearchAlerts_Content\": \"Content\",\n  \"SearchAlerts_Actions\": \"Action\",\n  \"EmptyQuery\": \"&lt;empty&gt;\",\n  \"SearchAlerts_Type_followQuery\": \"Query\",\n  \"SearchAlerts_Type_followDocument\": \"Item\",\n  \"SearchAlerts_unFollowing\": \"Stop Following\",\n  \"SearchAlerts_follow\": \"Follow\",\n  \"SearchAlerts_followed\": \"Followed\",\n  \"SearchAlerts_followQuery\": \"Follow Query\",\n  \"Subscription_StopFollowingQuery\": \"Stop Following Query\",\n  \"SearchAlerts_Frequency\": \"When\",\n  \"SubscriptionsManageSubscriptions\": \"Manage Alerts\",\n  \"SubscriptionsMessageFollowQuery\": \"You will receive alerts when the query <b>{0}</b> returns new or updated items.\",\n  \"SubscriptionsMessageFollow\": \"You will receive alerts for changes to the item <b>{0}</b>.\",\n  \"Expiration\": \"Expiration\",\n  \"Monthly\": \"Monthly\",\n  \"Daily\": \"Daily\",\n  \"Monday\": \"Monday\",\n  \"Tuesday\": \"Tuesday\",\n  \"Wednesday\": \"Wednesday\",\n  \"Thursday\": \"Thursday\",\n  \"Friday\": \"Friday\",\n  \"Saturday\": \"Saturday\",\n  \"Sunday\": \"Sunday\",\n  \"NextDay\": \"Next {0}\",\n  \"LastDay\": \"Last {0}\",\n  \"StartTypingCaseForSuggestions\": \"Describe your problem to see possible solutions\",\n  \"ExportToExcel\": \"Export to Excel\",\n  \"ExportToExcelDescription\": \"Export search results to Excel\",\n  \"CaseCreationNoResults\": \"No recommended solutions were found\",\n  \"SortBy\": \"Sort by\",\n  \"BoxCreateArticle\": \"Create Article\",\n  \"Facets\": \"Facets\",\n  \"AdvancedSearch\": \"Advanced Search\",\n  \"Keywords\": \"Keywords\",\n  \"AllTheseWords\": \"All these words\",\n  \"ExactPhrase\": \"This exact phrase\",\n  \"AnyOfTheseWords\": \"Any of these words\",\n  \"NoneOfTheseWords\": \"None of these words\",\n  \"Anytime\": \"Anytime\",\n  \"InTheLast\": \"In the last\",\n  \"Days\": \"days\",\n  \"Months\": \"months\",\n  \"Between\": \"Between\",\n  \"Language\": \"Language\",\n  \"Size\": \"Size\",\n  \"AtLeast\": \"at least\",\n  \"AtMost\": \"at most\",\n  \"Contains\": \"contains\",\n  \"DoesNotContain\": \"does not contain\",\n  \"Matches\": \"matches\",\n  \"Bytes\": \"bytes\",\n  \"list\": \"List\",\n  \"card\": \"Card\",\n  \"table\": \"Table\",\n  \"ResultLinks\": \"Result links\",\n  \"EnableQuerySyntax\": \"Enable query syntax\",\n  \"On\": \"On\",\n  \"Off\": \"Off\",\n  \"Automatic\": \"Automatic\",\n  \"ResultsPerPage\": \"Results per page\",\n  \"objecttype_people\": \"People\",\n  \"objecttype_message\": \"Message\",\n  \"objecttype_feed\": \"RSS Feed\",\n  \"objecttype_thread\": \"Thread\",\n  \"objecttype_file\": \"File\",\n  \"objecttype_board\": \"Board\",\n  \"objecttype_category\": \"Category\",\n  \"objecttype_account\": \"Account\",\n  \"objecttype_annotation\": \"Note\",\n  \"objecttype_campaign\": \"Campaign\",\n  \"objecttype_case\": \"Case\",\n  \"objecttype_contentversion\": \"Salesforce File\",\n  \"objecttype_contact\": \"Contact\",\n  \"objecttype_contract\": \"Contract\",\n  \"objecttype_event\": \"Event\",\n  \"objecttype_email\": \"Email\",\n  \"objecttype_goal\": \"Goal\",\n  \"objecttype_incident\": \"Case\",\n  \"objecttype_invoice\": \"Invoice\",\n  \"objecttype_lead\": \"Lead\",\n  \"objecttype_list\": \"Marketing List\",\n  \"objecttype_solution\": \"Solution\",\n  \"objecttype_task\": \"Task\",\n  \"objecttype_user\": \"User\",\n  \"objecttype_attachment\": \"Attachment\",\n  \"objecttype_casecomment\": \"Case Comment\",\n  \"objecttype_opportunity\": \"Opportunity\",\n  \"objecttype_opportunityproduct\": \"Opportunity Product\",\n  \"objecttype_feeditem\": \"Chatter\",\n  \"objecttype_feedcomment\": \"Chatter\",\n  \"objecttype_note\": \"Note\",\n  \"objecttype_product\": \"Product\",\n  \"objecttype_partner\": \"Partner\",\n  \"objecttype_queueitem\": \"Queue Item\",\n  \"objecttype_quote\": \"Quote\",\n  \"objecttype_salesliterature\": \"Sales Literature\",\n  \"objecttype_salesorder\": \"Sales Order\",\n  \"objecttype_service\": \"Service\",\n  \"objecttype_socialprofile\": \"Social Profile\",\n  \"objecttype_kbdocumentation\": \"Documentation\",\n  \"objecttype_kbtechnicalarticle\": \"Documentation\",\n  \"objecttype_kbsolution\": \"Solution\",\n  \"objecttype_kbknowledgearticle\": \"Knowledge Article\",\n  \"objecttype_kbattachment\": \"Attachment\",\n  \"objecttype_kbarticle\": \"Article\",\n  \"objecttype_kbarticlecomment\": \"Article Comment\",\n  \"objecttype_knowledgearticle\": \"Knowledge Article\",\n  \"filetype_box user\": \"Box User\",\n  \"filetype_html\": \"HTML File\",\n  \"filetype_wiki\": \"Wiki\",\n  \"filetype_webscraperwebpage\": \"Web Page\",\n  \"filetype_image\": \"Image\",\n  \"filetype_folder\": \"Folder\",\n  \"filetype_txt\": \"Text\",\n  \"filetype_zip\": \"Zip File\",\n  \"filetype_olefile\": \"OLE file\",\n  \"filetype_gmailmessage\": \"Gmail Message\",\n  \"filetype_pdf\": \"PDF File\",\n  \"filetype_swf\": \"Flash File\",\n  \"filetype_xml\": \"XML File\",\n  \"filetype_vsd\": \"Visio\",\n  \"filetype_svg\": \"SVG\",\n  \"filetype_svm\": \"Open Office\",\n  \"filetype_rssitem\": \"RSS feed\",\n  \"filetype_doc\": \"Document\",\n  \"filetype_docx\": \"Microsoft Word Document\",\n  \"filetype_xls\": \"Spreadsheet Document\",\n  \"filetype_ppt\": \"Presentation Document\",\n  \"filetype_video\": \"Video\",\n  \"filetype_youtube\": \"YouTube video\",\n  \"filetype_saleforceitem\": \"Salesforce\",\n  \"filetype_dynamicscrmitem\": \"Dynamics CRM\",\n  \"filetype_salesforceitem\": \"Salesforce\",\n  \"filetype_odt\": \"Open Text Document\",\n  \"filetype_cfpage\": \"Confluence Page\",\n  \"filetype_cfcomment\": \"Confluence Comment\",\n  \"filetype_cfspace\": \"Confluence Space\",\n  \"filetype_cfblogentry\": \"Confluence Blog Entry\",\n  \"filetype_confluencespace\": \"Confluence Space\",\n  \"filetype_exchangemessage\": \"Message\",\n  \"filetype_exchangeappointment\": \"Appointment\",\n  \"filetype_exchangenote\": \"Note\",\n  \"filetype_exchangetask\": \"Task\",\n  \"filetype_exchangeperson\": \"Exchange User\",\n  \"filetype_activedirperson\": \"Active Directory User\",\n  \"filetype_exchangeactivity\": \"Activity\",\n  \"filetype_exchangecalendarmessage\": \"Calendar Message\",\n  \"filetype_exchangedocument\": \"Exchange Document\",\n  \"filetype_exchangedsn\": \"DSN\",\n  \"filetype_exchangefreebusy\": \"Free/Busy\",\n  \"filetype_exchangegroup\": \"Group\",\n  \"filetype_exchangerssfeed\": \"RSS Feed\",\n  \"filetype_exchangejunkmessage\": \"Junk Email\",\n  \"filetype_exchangeofficecom\": \"Communications\",\n  \"filetype_lithiummessage\": \"Lithium Message\",\n  \"filetype_lithiumthread\": \"Lithium Thread\",\n  \"filetype_lithiumboard\": \"Lithium Board\",\n  \"filetype_lithiumcategory\": \"Lithium Category\",\n  \"filetype_lithiumcommunity\": \"Lithium Community\",\n  \"filetype_spportal\": \"Portal\",\n  \"filetype_spsite\": \"Site\",\n  \"filetype_spuserprofile\": \"SharePoint User\",\n  \"filetype_sparea\": \"Area\",\n  \"filetype_spannouncement\": \"Announcement\",\n  \"filetype_spannouncementlist\": \"Announcements\",\n  \"filetype_spcontact\": \"Contact\",\n  \"filetype_spcontactlist\": \"Contacts\",\n  \"filetype_spcustomlist\": \"Custom Lists\",\n  \"filetype_spdiscussionboard\": \"Discussion Board\",\n  \"filetype_spdiscussionboardlist\": \"Discussion Boards\",\n  \"filetype_spdocumentlibrarylist\": \"Document Library\",\n  \"filetype_spevent\": \"Event\",\n  \"filetype_speventlist\": \"Events\",\n  \"filetype_spformlibrarylist\": \"Form Library\",\n  \"filetype_spissue\": \"Issue\",\n  \"filetype_spissuelist\": \"Issues\",\n  \"filetype_splink\": \"Link\",\n  \"filetype_splinklist\": \"Links\",\n  \"filetype_sppicturelibrarylist\": \"Picture Library\",\n  \"filetype_spsurvey\": \"Survey\",\n  \"filetype_spsurveylist\": \"Surveys\",\n  \"filetype_sptask\": \"Task\",\n  \"filetype_sptasklist\": \"Tasks\",\n  \"filetype_spagenda\": \"Agenda\",\n  \"filetype_spagendalist\": \"Ordres du jour\",\n  \"filetype_spattendee\": \"Attendee\",\n  \"filetype_spattendeelist\": \"Attendees\",\n  \"filetype_spcustomgridlist\": \"Custom Grids\",\n  \"filetype_spdecision\": \"Decision\",\n  \"filetype_spdecisionlist\": \"Decisions\",\n  \"filetype_spobjective\": \"Objective\",\n  \"filetype_spobjectivelist\": \"Objectives\",\n  \"filetype_sptextbox\": \"Textbox\",\n  \"filetype_sptextboxlist\": \"Textbox list\",\n  \"filetype_spthingstobring\": \"Thing To Bring\",\n  \"filetype_spthingstobringlist\": \"Things To Bring\",\n  \"filetype_sparealisting\": \"Area Listing\",\n  \"filetype_spmeetingserie\": \"Meeting series\",\n  \"filetype_spmeetingserielist\": \"Meeting Series List\",\n  \"filetype_spsitedirectory\": \"Site Directory Item\",\n  \"filetype_spsitedirectorylist\": \"Site Directory\",\n  \"filetype_spdatasource\": \"Data Source\",\n  \"filetype_spdatasourcelist\": \"Data Source List\",\n  \"filetype_splisttemplatecataloglist\": \"List Template Gallery\",\n  \"filetype_spwebpartcataloglist\": \"WebPart Gallery\",\n  \"filetype_spwebtemplatecataloglist\": \"Site Template Gallery\",\n  \"filetype_spworkspacepagelist\": \"Workspace Pages\",\n  \"filetype_spunknownlist\": \"Custom List\",\n  \"filetype_spadministratortask\": \"Administrator Task\",\n  \"filetype_spadministratortasklist\": \"Administrator Tasks\",\n  \"filetype_spareadocumentlibrarylist\": \"Area Document Library\",\n  \"filetype_spblogcategory\": \"Blog Category\",\n  \"filetype_spblogcategorylist\": \"Blog Categories\",\n  \"filetype_spblogcomment\": \"Blog Comment\",\n  \"filetype_spblogcommentlist\": \"Blog Comments\",\n  \"filetype_spblogpost\": \"Blog Post\",\n  \"filetype_spblogpostlist\": \"Blog Posts\",\n  \"filetype_spdataconnectionlibrarylist\": \"Data Connection Library\",\n  \"filetype_spdistributiongroup\": \"Distribution Group\",\n  \"filetype_spdistributiongrouplist\": \"Distribution Groups\",\n  \"filetype_spipfslist\": \"InfoPath Forms Servers\",\n  \"filetype_spkeyperformanceindicator\": \"Key Performance Indicator\",\n  \"filetype_spkeyperformanceindicatorlist\": \"Key Performance Indicators\",\n  \"filetype_splanguagesandtranslator\": \"Languages and Translator\",\n  \"filetype_splanguagesandtranslatorlist\": \"Languages and Translators\",\n  \"filetype_spmasterpagescataloglist\": \"Master Page Gallery\",\n  \"filetype_spnocodeworkflowlibrarylist\": \"No-code Workflow Libraries\",\n  \"filetype_spprojecttask\": \"Project Task\",\n  \"filetype_spprojecttasklist\": \"Project Tasks\",\n  \"filetype_sppublishingpageslibrarylist\": \"Page Library\",\n  \"filetype_spreportdocumentlibrarylist\": \"Report Document Library\",\n  \"filetype_spreportlibrarylist\": \"Report Library\",\n  \"filetype_spslidelibrarylist\": \"Slide Library\",\n  \"filetype_sptab\": \"Tabs\",\n  \"filetype_sptablist\": \"Tabs List\",\n  \"filetype_sptranslationmanagementlibrarylist\": \"Translation Management Library\",\n  \"filetype_spuserinformation\": \"User Information\",\n  \"filetype_spuserinformationlist\": \"User Information List\",\n  \"filetype_spwikipagelibrarylist\": \"Wiki Page Library\",\n  \"filetype_spworkflowhistory\": \"Workflow History\",\n  \"filetype_spworkflowhistorylist\": \"Workflow History List\",\n  \"filetype_spworkflowprocess\": \"Custom Workflow Process\",\n  \"filetype_spworkflowprocesslist\": \"Custom Workflow Processes\",\n  \"filetype_sppublishingimageslibrarylist\": \"Publishing Image Library\",\n  \"filetype_spcirculation\": \"Circulation\",\n  \"filetype_spcirculationlist\": \"Circulations\",\n  \"filetype_spdashboardslibrarylist\": \"Dashboards Library\",\n  \"filetype_spdataconnectionforperformancepointlibrarylist\": \"PerformancePoint Data Connection Library\",\n  \"filetype_sphealthreport\": \"Health Report\",\n  \"filetype_sphealthreportlist\": \"Health Reports\",\n  \"filetype_sphealthrule\": \"Health Rule\",\n  \"filetype_sphealthrulelist\": \"Health Rules\",\n  \"filetype_spimedictionary\": \"IME Dictionary\",\n  \"filetype_spimedictionarylist\": \"IME Dictionaries\",\n  \"filetype_spperformancepointcontent\": \"PerformancePoint Content\",\n  \"filetype_spperformancepointcontentlist\": \"PerformancePoint Contents\",\n  \"filetype_spphonecallmemo\": \"Phone Call Memo\",\n  \"filetype_spphonecallmemolist\": \"Phone Call Memos\",\n  \"filetype_sprecordlibrarylist\": \"Record Library\",\n  \"filetype_spresource\": \"Resource\",\n  \"filetype_spresourcelist\": \"Resources\",\n  \"filetype_spprocessdiagramslibrarylist\": \"Process Diagram Library\",\n  \"filetype_spsitethemeslibrarylist\": \"Site Theme Library\",\n  \"filetype_spsolutionslibrarylist\": \"Solution Library\",\n  \"filetype_spwfpublibrarylist\": \"WFPUB Library\",\n  \"filetype_spwhereabout\": \"Whereabout\",\n  \"filetype_spwhereaboutlist\": \"Whereabouts\",\n  \"filetype_spdocumentlink\": \"Link to a Document\",\n  \"filetype_spdocumentset\": \"Document Set\",\n  \"filetype_spmicrofeedpost\": \"Microfeed Post\",\n  \"filetype_spmicrofeedlist\": \"Microfeed\",\n  \"filetype_splistfolder\": \"List Folder\",\n  \"filetype_youtubevideo\": \"YouTube video\",\n  \"filetype_youtubeplaylistitem\": \"YouTube playlist item\",\n}\nexport function defaultLanguage() {\n  var locales = String[\"locales\"] || (String[\"locales\"] = {});\n  locales[\"en\"] = merge(locales[\"en\"], dict);\n  String[\"toLocaleString\"].call(this, { \"en\": dict });\n  String[\"locale\"] = \"en\";\n  String[\"defaultLocale\"] = \"en\";\n  Globalize.culture(\"en\")\n}\nexport function setLanguageAfterPageLoaded() {\n  var locales = String[\"locales\"] || (String[\"locales\"] = {});\n  locales[\"en\"] = merge(locales[\"en\"], dict);\n  String[\"toLocaleString\"].call(this, { \"en\": dict });\n  String[\"locale\"] = \"en\";\n  String[\"defaultLocale\"] = \"en\";\n  Globalize.culture(\"en\")\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/strings/DefaultLanguage.ts\n **/","module.exports = global[\"Globalize\"] = require(\"-!/home/travis/build/coveo/search-ui/lib/globalize/globalize.min.js\");\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./lib/globalize/globalize.min.js\n ** module id = 30\n ** module chunks = 0 1\n **/","/*! globalize - v0.1.1 - 2013-04-30\n* https://github.com/jquery/globalize\n* Copyright 2013 ; Licensed MIT */\nvar Globalize = (function(e,r){var t,n,a,s,u,l,i,c,o,f,d,p,h,g,b,m,y,M,v,k,z,F,A,x;t=function(e){return new t.prototype.init(e)},\"undefined\"!=typeof require&&\"undefined\"!=typeof exports&&\"undefined\"!=typeof module?module.exports=t:e.Globalize=t,t.cultures={},t.prototype={constructor:t,init:function(e){return this.cultures=t.cultures,this.cultureSelector=e,this}},t.prototype.init.prototype=t.prototype,t.cultures[\"default\"]={name:\"en\",englishName:\"English\",nativeName:\"English\",isRTL:!1,language:\"en\",numberFormat:{pattern:[\"-n\"],decimals:2,\",\":\",\",\".\":\".\",groupSizes:[3],\"+\":\"+\",\"-\":\"-\",NaN:\"NaN\",negativeInfinity:\"-Infinity\",positiveInfinity:\"Infinity\",percent:{pattern:[\"-n %\",\"n %\"],decimals:2,groupSizes:[3],\",\":\",\",\".\":\".\",symbol:\"%\"},currency:{pattern:[\"($n)\",\"$n\"],decimals:2,groupSizes:[3],\",\":\",\",\".\":\".\",symbol:\"$\"}},calendars:{standard:{name:\"Gregorian_USEnglish\",\"/\":\"/\",\":\":\":\",firstDay:0,days:{names:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],namesAbbr:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],namesShort:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]},months:{names:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\",\"\"],namesAbbr:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"\"]},AM:[\"AM\",\"am\",\"AM\"],PM:[\"PM\",\"pm\",\"PM\"],eras:[{name:\"A.D.\",start:null,offset:0}],twoDigitYearMax:2029,patterns:{d:\"M/d/yyyy\",D:\"dddd, MMMM dd, yyyy\",t:\"h:mm tt\",T:\"h:mm:ss tt\",f:\"dddd, MMMM dd, yyyy h:mm tt\",F:\"dddd, MMMM dd, yyyy h:mm:ss tt\",M:\"MMMM dd\",Y:\"yyyy MMMM\",S:\"yyyy'-'MM'-'dd'T'HH':'mm':'ss\"}}},messages:{}},t.cultures[\"default\"].calendar=t.cultures[\"default\"].calendars.standard,t.cultures.en=t.cultures[\"default\"],t.cultureSelector=\"en\",n=/^0x[a-f0-9]+$/i,a=/^[+\\-]?infinity$/i,s=/^[+\\-]?\\d*\\.?\\d*(e[+\\-]?\\d+)?$/,u=/^\\s+|\\s+$/g,l=function(e,r){if(e.indexOf)return e.indexOf(r);for(var t=0,n=e.length;n>t;t++)if(e[t]===r)return t;return-1},i=function(e,r){return e.substr(e.length-r.length)===r},c=function(){var e,t,n,a,s,u,l=arguments[0]||{},i=1,p=arguments.length,h=!1;for(\"boolean\"==typeof l&&(h=l,l=arguments[1]||{},i=2),\"object\"==typeof l||f(l)||(l={});p>i;i++)if(null!=(e=arguments[i]))for(t in e)n=l[t],a=e[t],l!==a&&(h&&a&&(d(a)||(s=o(a)))?(s?(s=!1,u=n&&o(n)?n:[]):u=n&&d(n)?n:{},l[t]=c(h,u,a)):a!==r&&(l[t]=a));return l},o=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},f=function(e){return\"[object Function]\"===Object.prototype.toString.call(e)},d=function(e){return\"[object Object]\"===Object.prototype.toString.call(e)},p=function(e,r){return 0===e.indexOf(r)},h=function(e){return(e+\"\").replace(u,\"\")},g=function(e){return isNaN(e)?0/0:Math[0>e?\"ceil\":\"floor\"](e)},b=function(e,r,t){var n;for(n=e.length;r>n;n+=1)e=t?\"0\"+e:e+\"0\";return e},m=function(e,r){for(var t=0,n=!1,a=0,s=e.length;s>a;a++){var u=e.charAt(a);switch(u){case\"'\":n?r.push(\"'\"):t++,n=!1;break;case\"\\\\\":n&&r.push(\"\\\\\"),n=!n;break;default:r.push(u),n=!1}}return t},y=function(e,r){r=r||\"F\";var t,n=e.patterns,a=r.length;if(1===a){if(t=n[r],!t)throw\"Invalid date format string '\"+r+\"'.\";r=t}else 2===a&&\"%\"===r.charAt(0)&&(r=r.charAt(1));return r},M=function(e,r,t){function n(e,r){var t,n=e+\"\";return r>1&&r>n.length?(t=v[r-2]+n,t.substr(t.length-r,r)):t=n}function a(){return h||g?h:(h=A.test(r),g=!0,h)}function s(e,r){if(b)return b[r];switch(r){case 0:return e.getFullYear();case 1:return e.getMonth();case 2:return e.getDate();default:throw\"Invalid part value \"+r}}var u,l=t.calendar,i=l.convert;if(!r||!r.length||\"i\"===r){if(t&&t.name.length)if(i)u=M(e,l.patterns.F,t);else{var c=new Date(e.getTime()),o=z(e,l.eras);c.setFullYear(F(e,l,o)),u=c.toLocaleString()}else u=\"\"+e;return u}var f=l.eras,d=\"s\"===r;r=y(l,r),u=[];var p,h,g,b,v=[\"0\",\"00\",\"000\"],A=/([^d]|^)(d|dd)([^d]|$)/g,x=0,I=k();for(!d&&i&&(b=i.fromGregorian(e));;){var S=I.lastIndex,w=I.exec(r),C=r.slice(S,w?w.index:r.length);if(x+=m(C,u),!w)break;if(x%2)u.push(w[0]);else{var D=w[0],H=D.length;switch(D){case\"ddd\":case\"dddd\":var O=3===H?l.days.namesAbbr:l.days.names;u.push(O[e.getDay()]);break;case\"d\":case\"dd\":h=!0,u.push(n(s(e,2),H));break;case\"MMM\":case\"MMMM\":var N=s(e,1);u.push(l.monthsGenitive&&a()?l.monthsGenitive[3===H?\"namesAbbr\":\"names\"][N]:l.months[3===H?\"namesAbbr\":\"names\"][N]);break;case\"M\":case\"MM\":u.push(n(s(e,1)+1,H));break;case\"y\":case\"yy\":case\"yyyy\":N=b?b[0]:F(e,l,z(e,f),d),4>H&&(N%=100),u.push(n(N,H));break;case\"h\":case\"hh\":p=e.getHours()%12,0===p&&(p=12),u.push(n(p,H));break;case\"H\":case\"HH\":u.push(n(e.getHours(),H));break;case\"m\":case\"mm\":u.push(n(e.getMinutes(),H));break;case\"s\":case\"ss\":u.push(n(e.getSeconds(),H));break;case\"t\":case\"tt\":N=12>e.getHours()?l.AM?l.AM[0]:\" \":l.PM?l.PM[0]:\" \",u.push(1===H?N.charAt(0):N);break;case\"f\":case\"ff\":case\"fff\":u.push(n(e.getMilliseconds(),3).substr(0,H));break;case\"z\":case\"zz\":p=e.getTimezoneOffset()/60,u.push((0>=p?\"+\":\"-\")+n(Math.floor(Math.abs(p)),H));break;case\"zzz\":p=e.getTimezoneOffset()/60,u.push((0>=p?\"+\":\"-\")+n(Math.floor(Math.abs(p)),2)+\":\"+n(Math.abs(e.getTimezoneOffset()%60),2));break;case\"g\":case\"gg\":l.eras&&u.push(l.eras[z(e,f)].name);break;case\"/\":u.push(l[\"/\"]);break;default:throw\"Invalid date format pattern '\"+D+\"'.\"}}}return u.join(\"\")},function(){var e;e=function(e,r,t){var n=t.groupSizes,a=n[0],s=1,u=Math.pow(10,r),l=Math.round(e*u)/u;isFinite(l)||(l=e),e=l;var i=e+\"\",c=\"\",o=i.split(/e/i),f=o.length>1?parseInt(o[1],10):0;i=o[0],o=i.split(\".\"),i=o[0],c=o.length>1?o[1]:\"\",f>0?(c=b(c,f,!1),i+=c.slice(0,f),c=c.substr(f)):0>f&&(f=-f,i=b(i,f+1,!0),c=i.slice(-f,i.length)+c,i=i.slice(0,-f)),c=r>0?t[\".\"]+(c.length>r?c.slice(0,r):b(c,r)):\"\";for(var d=i.length-1,p=t[\",\"],h=\"\";d>=0;){if(0===a||a>d)return i.slice(0,d+1)+(h.length?p+h+c:c);h=i.slice(d-a+1,d+1)+(h.length?p+h:\"\"),d-=a,n.length>s&&(a=n[s],s++)}return i.slice(0,d+1)+p+h+c},v=function(r,t,n){if(!isFinite(r))return 1/0===r?n.numberFormat.positiveInfinity:r===-1/0?n.numberFormat.negativeInfinity:n.numberFormat.NaN;if(!t||\"i\"===t)return n.name.length?r.toLocaleString():\"\"+r;t=t||\"D\";var a,s=n.numberFormat,u=Math.abs(r),l=-1;t.length>1&&(l=parseInt(t.slice(1),10));var i,c=t.charAt(0).toUpperCase();switch(c){case\"D\":a=\"n\",u=g(u),-1!==l&&(u=b(\"\"+u,l,!0)),0>r&&(u=\"-\"+u);break;case\"N\":i=s;case\"C\":i=i||s.currency;case\"P\":i=i||s.percent,a=0>r?i.pattern[0]:i.pattern[1]||\"n\",-1===l&&(l=i.decimals),u=e(u*(\"P\"===c?100:1),l,i);break;default:throw\"Bad number format specifier: \"+c}for(var o=/n|\\$|-|%/g,f=\"\";;){var d=o.lastIndex,p=o.exec(a);if(f+=a.slice(d,p?p.index:a.length),!p)break;switch(p[0]){case\"n\":f+=u;break;case\"$\":f+=s.currency.symbol;break;case\"-\":/[1-9]/.test(u)&&(f+=s[\"-\"]);break;case\"%\":f+=s.percent.symbol}}return f}}(),k=function(){return/\\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g},z=function(e,r){if(!r)return 0;for(var t,n=e.getTime(),a=0,s=r.length;s>a;a++)if(t=r[a].start,null===t||n>=t)return a;return 0},F=function(e,r,t,n){var a=e.getFullYear();return!n&&r.eras&&(a-=r.eras[t].offset),a},function(){var e,r,t,n,a,s,u;e=function(e,r){if(100>r){var t=new Date,n=z(t),a=F(t,e,n),s=e.twoDigitYearMax;s=\"string\"==typeof s?(new Date).getFullYear()%100+parseInt(s,10):s,r+=a-a%100,r>s&&(r-=100)}return r},r=function(e,r,t){var n,a=e.days,i=e._upperDays;return i||(e._upperDays=i=[u(a.names),u(a.namesAbbr),u(a.namesShort)]),r=s(r),t?(n=l(i[1],r),-1===n&&(n=l(i[2],r))):n=l(i[0],r),n},t=function(e,r,t){var n=e.months,a=e.monthsGenitive||e.months,i=e._upperMonths,c=e._upperMonthsGen;i||(e._upperMonths=i=[u(n.names),u(n.namesAbbr)],e._upperMonthsGen=c=[u(a.names),u(a.namesAbbr)]),r=s(r);var o=l(t?i[1]:i[0],r);return 0>o&&(o=l(t?c[1]:c[0],r)),o},n=function(e,r){var t=e._parseRegExp;if(t){var n=t[r];if(n)return n}else e._parseRegExp=t={};for(var a,s=y(e,r).replace(/([\\^\\$\\.\\*\\+\\?\\|\\[\\]\\(\\)\\{\\}])/g,\"\\\\\\\\$1\"),u=[\"^\"],l=[],i=0,c=0,o=k();null!==(a=o.exec(s));){var f=s.slice(i,a.index);if(i=o.lastIndex,c+=m(f,u),c%2)u.push(a[0]);else{var d,p=a[0],h=p.length;switch(p){case\"dddd\":case\"ddd\":case\"MMMM\":case\"MMM\":case\"gg\":case\"g\":d=\"(\\\\D+)\";break;case\"tt\":case\"t\":d=\"(\\\\D*)\";break;case\"yyyy\":case\"fff\":case\"ff\":case\"f\":d=\"(\\\\d{\"+h+\"})\";break;case\"dd\":case\"d\":case\"MM\":case\"M\":case\"yy\":case\"y\":case\"HH\":case\"H\":case\"hh\":case\"h\":case\"mm\":case\"m\":case\"ss\":case\"s\":d=\"(\\\\d\\\\d?)\";break;case\"zzz\":d=\"([+-]?\\\\d\\\\d?:\\\\d{2})\";break;case\"zz\":case\"z\":d=\"([+-]?\\\\d\\\\d?)\";break;case\"/\":d=\"(\\\\/)\";break;default:throw\"Invalid date format pattern '\"+p+\"'.\"}d&&u.push(d),l.push(a[0])}}m(s.slice(i),u),u.push(\"$\");var g=u.join(\"\").replace(/\\s+/g,\"\\\\s+\"),b={regExp:g,groups:l};return t[r]=b},a=function(e,r,t){return r>e||e>t},s=function(e){return e.split(\"\\u00a0\").join(\" \").toUpperCase()},u=function(e){for(var r=[],t=0,n=e.length;n>t;t++)r[t]=s(e[t]);return r},A=function(s,u,l){s=h(s);var i=l.calendar,c=n(i,u),o=RegExp(c.regExp).exec(s);if(null===o)return null;for(var f,d=c.groups,g=null,b=null,m=null,y=null,M=null,v=0,k=0,z=0,F=0,A=null,x=!1,I=0,S=d.length;S>I;I++){var w=o[I+1];if(w){var C=d[I],D=C.length,H=parseInt(w,10);switch(C){case\"dd\":case\"d\":if(y=H,a(y,1,31))return null;break;case\"MMM\":case\"MMMM\":if(m=t(i,w,3===D),a(m,0,11))return null;break;case\"M\":case\"MM\":if(m=H-1,a(m,0,11))return null;break;case\"y\":case\"yy\":case\"yyyy\":if(b=4>D?e(i,H):H,a(b,0,9999))return null;break;case\"h\":case\"hh\":if(v=H,12===v&&(v=0),a(v,0,11))return null;break;case\"H\":case\"HH\":if(v=H,a(v,0,23))return null;break;case\"m\":case\"mm\":if(k=H,a(k,0,59))return null;break;case\"s\":case\"ss\":if(z=H,a(z,0,59))return null;break;case\"tt\":case\"t\":if(x=i.PM&&(w===i.PM[0]||w===i.PM[1]||w===i.PM[2]),!x&&(!i.AM||w!==i.AM[0]&&w!==i.AM[1]&&w!==i.AM[2]))return null;break;case\"f\":case\"ff\":case\"fff\":if(F=H*Math.pow(10,3-D),a(F,0,999))return null;break;case\"ddd\":case\"dddd\":if(M=r(i,w,3===D),a(M,0,6))return null;break;case\"zzz\":var O=w.split(/:/);if(2!==O.length)return null;if(f=parseInt(O[0],10),a(f,-12,13))return null;var N=parseInt(O[1],10);if(a(N,0,59))return null;A=60*f+(p(w,\"-\")?-N:N);break;case\"z\":case\"zz\":if(f=H,a(f,-12,13))return null;A=60*f;break;case\"g\":case\"gg\":var T=w;if(!T||!i.eras)return null;T=h(T.toLowerCase());for(var j=0,$=i.eras.length;$>j;j++)if(T===i.eras[j].name.toLowerCase()){g=j;break}if(null===g)return null}}}var P,G=new Date,E=i.convert;if(P=E?E.fromGregorian(G)[0]:G.getFullYear(),null===b?b=P:i.eras&&(b+=i.eras[g||0].offset),null===m&&(m=0),null===y&&(y=1),E){if(G=E.toGregorian(b,m,y),null===G)return null}else{if(G.setFullYear(b,m,y),G.getDate()!==y)return null;if(null!==M&&G.getDay()!==M)return null}if(x&&12>v&&(v+=12),G.setHours(v,k,z,F),null!==A){var Y=G.getMinutes()-(A+G.getTimezoneOffset());G.setHours(G.getHours()+parseInt(Y/60,10),Y%60)}return G}}(),x=function(e,r,t){var n,a=r[\"-\"],s=r[\"+\"];switch(t){case\"n -\":a=\" \"+a,s=\" \"+s;case\"n-\":i(e,a)?n=[\"-\",e.substr(0,e.length-a.length)]:i(e,s)&&(n=[\"+\",e.substr(0,e.length-s.length)]);break;case\"- n\":a+=\" \",s+=\" \";case\"-n\":p(e,a)?n=[\"-\",e.substr(a.length)]:p(e,s)&&(n=[\"+\",e.substr(s.length)]);break;case\"(n)\":p(e,\"(\")&&i(e,\")\")&&(n=[\"-\",e.substr(1,e.length-2)])}return n||[\"\",e]},t.prototype.findClosestCulture=function(e){return t.findClosestCulture.call(this,e)},t.prototype.format=function(e,r,n){return t.format.call(this,e,r,n)},t.prototype.localize=function(e,r){return t.localize.call(this,e,r)},t.prototype.parseInt=function(e,r,n){return t.parseInt.call(this,e,r,n)},t.prototype.parseFloat=function(e,r,n){return t.parseFloat.call(this,e,r,n)},t.prototype.culture=function(e){return t.culture.call(this,e)},t.addCultureInfo=function(e,r,t){var n={},a=!1;\"string\"!=typeof e?(t=e,e=this.culture().name,n=this.cultures[e]):\"string\"!=typeof r?(t=r,a=null==this.cultures[e],n=this.cultures[e]||this.cultures[\"default\"]):(a=!0,n=this.cultures[r]),this.cultures[e]=c(!0,{},n,t),a&&(this.cultures[e].calendar=this.cultures[e].calendars.standard)},t.findClosestCulture=function(e){var r;if(!e)return this.findClosestCulture(this.cultureSelector)||this.cultures[\"default\"];if(\"string\"==typeof e&&(e=e.split(\",\")),o(e)){var t,n,a=this.cultures,s=e,u=s.length,l=[];for(n=0;u>n;n++){e=h(s[n]);var i,c=e.split(\";\");t=h(c[0]),1===c.length?i=1:(e=h(c[1]),0===e.indexOf(\"q=\")?(e=e.substr(2),i=parseFloat(e),i=isNaN(i)?0:i):i=1),l.push({lang:t,pri:i})}for(l.sort(function(e,r){return e.pri<r.pri?1:e.pri>r.pri?-1:0}),n=0;u>n;n++)if(t=l[n].lang,r=a[t])return r;for(n=0;u>n;n++)for(t=l[n].lang;;){var f=t.lastIndexOf(\"-\");if(-1===f)break;if(t=t.substr(0,f),r=a[t])return r}for(n=0;u>n;n++){t=l[n].lang;for(var d in a){var p=a[d];if(p.language===t)return p}}}else if(\"object\"==typeof e)return e;return r||null},t.format=function(e,r,t){var n=this.findClosestCulture(t);return e instanceof Date?e=M(e,r,n):\"number\"==typeof e&&(e=v(e,r,n)),e},t.localize=function(e,r){return this.findClosestCulture(r).messages[e]||this.cultures[\"default\"].messages[e]},t.parseDate=function(e,r,t){t=this.findClosestCulture(t);var n,a,s;if(r){if(\"string\"==typeof r&&(r=[r]),r.length)for(var u=0,l=r.length;l>u;u++){var i=r[u];if(i&&(n=A(e,i,t)))break}}else{s=t.calendar.patterns;for(a in s)if(n=A(e,s[a],t))break}return n||null},t.parseInt=function(e,r,n){return g(t.parseFloat(e,r,n))},t.parseFloat=function(e,r,t){\"number\"!=typeof r&&(t=r,r=10);var u=this.findClosestCulture(t),l=0/0,i=u.numberFormat;if(e.indexOf(u.numberFormat.currency.symbol)>-1&&(e=e.replace(u.numberFormat.currency.symbol,\"\"),e=e.replace(u.numberFormat.currency[\".\"],u.numberFormat[\".\"])),e.indexOf(u.numberFormat.percent.symbol)>-1&&(e=e.replace(u.numberFormat.percent.symbol,\"\")),e=e.replace(/ /g,\"\"),a.test(e))l=parseFloat(e);else if(!r&&n.test(e))l=parseInt(e,16);else{var c=x(e,i,i.pattern[0]),o=c[0],f=c[1];\"\"===o&&\"(n)\"!==i.pattern[0]&&(c=x(e,i,\"(n)\"),o=c[0],f=c[1]),\"\"===o&&\"-n\"!==i.pattern[0]&&(c=x(e,i,\"-n\"),o=c[0],f=c[1]),o=o||\"+\";var d,p,h=f.indexOf(\"e\");0>h&&(h=f.indexOf(\"E\")),0>h?(p=f,d=null):(p=f.substr(0,h),d=f.substr(h+1));var g,b,m=i[\".\"],y=p.indexOf(m);0>y?(g=p,b=null):(g=p.substr(0,y),b=p.substr(y+m.length));var M=i[\",\"];g=g.split(M).join(\"\");var v=M.replace(/\\u00A0/g,\" \");M!==v&&(g=g.split(v).join(\"\"));var k=o+g;if(null!==b&&(k+=\".\"+b),null!==d){var z=x(d,i,\"-n\");k+=\"e\"+(z[0]||\"+\")+z[1]}s.test(k)&&(l=parseFloat(k))}return l},t.culture=function(e){return e!==r&&(this.cultureSelector=e),this.findClosestCulture(e)||this.cultures[\"default\"]}; return Globalize;}(this));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./lib/globalize/globalize.min.js\n ** module id = 31\n ** module chunks = 0 1\n **/","export { Assert } from './misc/Assert';\nexport { Cache } from './misc/Cache';\nexport { Defer } from './misc/Defer';\nexport { L10N } from './misc/L10N';\nexport { Logger } from './misc/Logger';\nexport { Options } from './misc/Options';\nexport { l } from './strings/Strings';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/MiscModules.ts\n **/","export class Cache<Type> {\n  constructor(public onEmpty?: () => Type) {\n  }\n\n  private cache: Type[] = [];\n\n  public get(): Type {\n    if (this.cache.length == 0) {\n      return this.onEmpty();\n    } else {\n      return this.cache.pop();\n    }\n  }\n\n  public push(value: Type) {\n    this.cache.push(value);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Cache.ts\n **/","import _ = require('underscore');\n\nexport class Defer {\n  private static functions = [];\n\n  static defer(code: () => void) {\n    Defer.functions.push(code);\n    Defer.arm();\n  }\n\n  static flush() {\n    while (Defer.popOne()) {\n    }\n  }\n\n  private static arm() {\n    _.defer(() => {\n      if (Defer.popOne()) {\n        Defer.arm();\n      }\n    });\n  }\n\n  private static popOne() {\n    if (Defer.functions.length > 0) {\n      var fun = Defer.functions[0];\n      Defer.functions = _.rest(Defer.functions);\n      fun();\n      return Defer.functions.length > 0;\n    } else {\n      return false;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Defer.ts\n **/","import { LocaleString } from '../ExternalModulesShim';\nimport _ = require('underscore');\n\nString.toLocaleString = LocaleString;\nconst pluralRegex = /<pl>(((?!<\\/pl>).)*)<\\/pl>/g;\nconst singularRegex = /<sn>(((?!<\\/sn>).)*)<\\/sn>/g;\n\nexport var L10N = {\n  format: (key: string, ...args: any[]) => {\n    let value = key.toLocaleString();\n    if (args.length > 0) {\n      let last = _.last(args);\n      // Last argument is either the count or a boolean forcing plural (true) or singular (false)\n      if (_.isBoolean(last) || _.isNumber(last)) {\n        args.pop();\n        value = L10N.formatPlSn(value, last);\n      }\n      _.each(args, (arg, i) => value = value.replace(`{${i}}`, arg));\n    }\n    return value;\n  },\n  formatPlSn: (value: string, count: number | boolean) => {\n    let isPlural = _.isBoolean(count) ? count : count > 1;\n    if (isPlural) {\n      value = value.replace(pluralRegex, '$1').replace(singularRegex, '');\n    } else {\n      value = value.replace(pluralRegex, '').replace(singularRegex, '$1');\n    }\n    return value;\n  }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/L10N.ts\n **/","import { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\nexport class Options {\n  public merge<T>(provided: T): T {\n    return _.extend({}, this, provided);\n  }\n\n  public mergeDeep<T>(provided: T): T {\n    return _.extend({}, Utils.extendDeep(this, provided));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/Options.ts\n **/","import { L10N } from '../misc/L10N';\nexport function l(str : \"Unknown\");\nexport function l(str : \"And\");\nexport function l(str : \"Authenticating\" , param0: string);\nexport function l(str : \"Clear\" , param0: string);\nexport function l(str : \"CompleteQuery\");\nexport function l(str : \"Exclude\" , param0: string);\nexport function l(str : \"EnterTag\");\nexport function l(str : \"Next\");\nexport function l(str : \"Last\");\nexport function l(str : \"Link\");\nexport function l(str : \"Or\");\nexport function l(str : \"Previous\");\nexport function l(str : \"QueryDidntMatchAnyDocuments\");\nexport function l(str : \"QueryException\" , param0: string);\nexport function l(str : \"Me\");\nexport function l(str : \"Remove\");\nexport function l(str : \"Search\");\nexport function l(str : \"SearchFor\" , param0: string);\nexport function l(str : \"ShareQuery\");\nexport function l(str : \"Preferences\");\nexport function l(str : \"LinkOpeningSettings\");\nexport function l(str : \"Reauthenticate\" , param0: string);\nexport function l(str : \"ResultsFilteringExpression\");\nexport function l(str : \"FiltersInYourPreferences\");\nexport function l(str : \"Create\");\nexport function l(str : \"SearchIn\" , param0: string);\nexport function l(str : \"Seconds\" , param0: string, count: number);\nexport function l(str : \"ShowingResultsOf\" , param0: string, param1: string, param2: string, count: number);\nexport function l(str : \"SwitchTo\" , param0: string);\nexport function l(str : \"Unexclude\" , param0: string);\nexport function l(str : \"ClearAllFilters\");\nexport function l(str : \"SkipLogin\");\nexport function l(str : \"LoginInProgress\");\nexport function l(str : \"Login\");\nexport function l(str : \"GetStarted\");\nexport function l(str : \"More\");\nexport function l(str : \"NMore\" , param0: string);\nexport function l(str : \"Less\");\nexport function l(str : \"Settings\");\nexport function l(str : \"Score\");\nexport function l(str : \"ScoreDescription\");\nexport function l(str : \"Occurrences\");\nexport function l(str : \"OccurrencesDescription\");\nexport function l(str : \"Label\");\nexport function l(str : \"Of\");\nexport function l(str : \"LabelDescription\");\nexport function l(str : \"Value\");\nexport function l(str : \"ValueDescription\");\nexport function l(str : \"AlphaAscending\");\nexport function l(str : \"AlphaDescending\");\nexport function l(str : \"ChiSquare\");\nexport function l(str : \"Nosort\");\nexport function l(str : \"NosortDescription\");\nexport function l(str : \"RelativeFrequency\");\nexport function l(str : \"RelativeFrequencyDescription\");\nexport function l(str : \"DateDistribution\");\nexport function l(str : \"Custom\");\nexport function l(str : \"CustomDescription\");\nexport function l(str : \"ComputedField\");\nexport function l(str : \"Ascending\");\nexport function l(str : \"Descending\");\nexport function l(str : \"noResultFor\" , param0: string);\nexport function l(str : \"autoCorrectedQueryTo\" , param0: string);\nexport function l(str : \"didYouMean\" , param0: string);\nexport function l(str : \"SuggestedResults\");\nexport function l(str : \"SuggestedQueries\");\nexport function l(str : \"MostRelevantItems\");\nexport function l(str : \"AllItems\");\nexport function l(str : \"ShowLess\");\nexport function l(str : \"ShowMore\");\nexport function l(str : \"HideFacet\");\nexport function l(str : \"ShowFacet\");\nexport function l(str : \"AndOthers\" , param0: string, count: number);\nexport function l(str : \"Others\" , param0: string, count: number);\nexport function l(str : \"MostRelevantPosts\");\nexport function l(str : \"CompleteThread\");\nexport function l(str : \"ShowCompleteThread\");\nexport function l(str : \"ShowOnlyTopMatchingPosts\");\nexport function l(str : \"MostRelevantReplies\");\nexport function l(str : \"AllConversation\");\nexport function l(str : \"ShowAllConversation\");\nexport function l(str : \"ShowAllReplies\");\nexport function l(str : \"ShowOnlyMostRelevantReplies\");\nexport function l(str : \"Close\");\nexport function l(str : \"Open\");\nexport function l(str : \"OpenInOutlookWhenPossible\");\nexport function l(str : \"AlwaysOpenInNewWindow\");\nexport function l(str : \"Quickview\");\nexport function l(str : \"NoQuickview\");\nexport function l(str : \"ErrorReport\");\nexport function l(str : \"OopsError\");\nexport function l(str : \"ProblemPersists\");\nexport function l(str : \"GoBack\");\nexport function l(str : \"Reset\");\nexport function l(str : \"Retry\");\nexport function l(str : \"MoreInfo\");\nexport function l(str : \"Username\");\nexport function l(str : \"Password\");\nexport function l(str : \"PostedBy\");\nexport function l(str : \"CannotConnect\");\nexport function l(str : \"BadUserPass\");\nexport function l(str : \"PleaseEnterYourCredentials\" , param0: string);\nexport function l(str : \"PleaseEnterYourSearchPage\");\nexport function l(str : \"Collapse\");\nexport function l(str : \"Collapsable\");\nexport function l(str : \"Expand\");\nexport function l(str : \"Today\");\nexport function l(str : \"Yesterday\");\nexport function l(str : \"Tomorrow\");\nexport function l(str : \"Duration\" , param0: string);\nexport function l(str : \"IndexDuration\" , param0: string);\nexport function l(str : \"ProxyDuration\" , param0: string);\nexport function l(str : \"ClientDuration\" , param0: string);\nexport function l(str : \"Unavailable\");\nexport function l(str : \"Reply\");\nexport function l(str : \"ReplyAll\");\nexport function l(str : \"Forward\");\nexport function l(str : \"From\");\nexport function l(str : \"Caption\");\nexport function l(str : \"Expression\");\nexport function l(str : \"Tab\");\nexport function l(str : \"Tabs\");\nexport function l(str : \"EnterExpressionName\");\nexport function l(str : \"EnterExpressionToFilterWith\");\nexport function l(str : \"SelectTab\");\nexport function l(str : \"SelectAll\");\nexport function l(str : \"PageUrl\");\nexport function l(str : \"ErrorSavingToDevice\");\nexport function l(str : \"ErrorReadingFromDevice\");\nexport function l(str : \"AppIntro\");\nexport function l(str : \"TryDemo\");\nexport function l(str : \"ContactUs\");\nexport function l(str : \"NewToCoveo\");\nexport function l(str : \"LetUsHelpGetStarted\");\nexport function l(str : \"LikesThis\" , param0: string, count: number);\nexport function l(str : \"CannotConnectSearchPage\");\nexport function l(str : \"AreYouSureDeleteFilter\" , param0: string, param1: string);\nexport function l(str : \"OnlineHelp\");\nexport function l(str : \"Done\");\nexport function l(str : \"SaveFacetState\");\nexport function l(str : \"ClearFacetState\");\nexport function l(str : \"DisplayingTheOnlyMessage\");\nexport function l(str : \"NoNetworkConnection\");\nexport function l(str : \"UnknownConnection\");\nexport function l(str : \"EthernetConnection\");\nexport function l(str : \"WiFi\");\nexport function l(str : \"CELL\");\nexport function l(str : \"CELL_2G\");\nexport function l(str : \"CELL_3G\");\nexport function l(str : \"CELL_4G\");\nexport function l(str : \"Relevance\");\nexport function l(str : \"Date\");\nexport function l(str : \"Amount\");\nexport function l(str : \"QueryExceptionNoException\");\nexport function l(str : \"QueryExceptionInvalidSyntax\");\nexport function l(str : \"QueryExceptionInvalidCustomField\");\nexport function l(str : \"QueryExceptionInvalidDate\");\nexport function l(str : \"QueryExceptionInvalidExactPhrase\");\nexport function l(str : \"QueryExceptionInvalidDateOp\");\nexport function l(str : \"QueryExceptionInvalidNear\");\nexport function l(str : \"QueryExceptionInvalidWeightedNear\");\nexport function l(str : \"QueryExceptionInvalidTerm\");\nexport function l(str : \"QueryExceptionTooManyTerms\");\nexport function l(str : \"QueryExceptionWildcardTooGeneral\");\nexport function l(str : \"QueryExceptionInvalidSortField\");\nexport function l(str : \"QueryExceptionInvalidSmallStringOp\");\nexport function l(str : \"QueryExceptionRequestedResultsMax\");\nexport function l(str : \"QueryExceptionAggregatedMirrorDead\");\nexport function l(str : \"QueryExceptionAggregatedMirrorQueryTimeOut\");\nexport function l(str : \"QueryExceptionAggregatedMirrorInvalidBuildNumber\");\nexport function l(str : \"QueryExceptionAggregatedMirrorCannotConnect\");\nexport function l(str : \"QueryExceptionNotEnoughLeadingCharsWildcard\");\nexport function l(str : \"QueryExceptionSecurityInverterNotFound\");\nexport function l(str : \"QueryExceptionSecurityInverterAccessDenied\");\nexport function l(str : \"QueryExceptionAggregatedMirrorCannotImpersonate\");\nexport function l(str : \"QueryExceptionUnexpected\");\nexport function l(str : \"QueryExceptionAccessDenied\");\nexport function l(str : \"QueryExceptionSuperUserTokenInvalid\");\nexport function l(str : \"QueryExceptionSuperUserTokenExpired\");\nexport function l(str : \"QueryExceptionLicenseQueriesExpired\");\nexport function l(str : \"QueryExceptionLicenseSuperUserTokenNotSupported\");\nexport function l(str : \"QueryExceptionInvalidSession\");\nexport function l(str : \"QueryExceptionInvalidDocument\");\nexport function l(str : \"QueryExceptionSearchDisabled\");\nexport function l(str : \"FileType\");\nexport function l(str : \"ShowAttachment\");\nexport function l(str : \"OnFeed\" , param0: string);\nexport function l(str : \"Author\");\nexport function l(str : \"NoTitle\");\nexport function l(str : \"CurrentSelections\");\nexport function l(str : \"AllContent\");\nexport function l(str : \"CancelLastAction\");\nexport function l(str : \"SearchTips\");\nexport function l(str : \"CheckSpelling\");\nexport function l(str : \"TryUsingFewerKeywords\");\nexport function l(str : \"SelectFewerFilters\");\nexport function l(str : \"Document\");\nexport function l(str : \"Time\");\nexport function l(str : \"StartDate\");\nexport function l(str : \"StartTime\");\nexport function l(str : \"DurationTitle\");\nexport function l(str : \"UserQuery\");\nexport function l(str : \"ShowUserActions\");\nexport function l(str : \"NoData\");\nexport function l(str : \"EventType\");\nexport function l(str : \"GoToFullSearch\");\nexport function l(str : \"GoToEdition\");\nexport function l(str : \"RemoveContext\");\nexport function l(str : \"BoxAttachToCase\");\nexport function l(str : \"AttachToCase\");\nexport function l(str : \"Attach\");\nexport function l(str : \"Attached\");\nexport function l(str : \"Detach\");\nexport function l(str : \"Details\");\nexport function l(str : \"AdditionalFilters\");\nexport function l(str : \"SelectNonContextualSearch\");\nexport function l(str : \"CopyPasteToSupport\");\nexport function l(str : \"FollowQueryDescription\");\nexport function l(str : \"SearchAlerts_Panel\");\nexport function l(str : \"SearchAlerts_PanelDescription\");\nexport function l(str : \"SearchAlerts_PanelNoSearchAlerts\");\nexport function l(str : \"SearchAlerts_Fail\");\nexport function l(str : \"SearchAlerts_Type\");\nexport function l(str : \"SearchAlerts_Content\");\nexport function l(str : \"SearchAlerts_Actions\");\nexport function l(str : \"EmptyQuery\");\nexport function l(str : \"SearchAlerts_Type_followQuery\");\nexport function l(str : \"SearchAlerts_Type_followDocument\");\nexport function l(str : \"SearchAlerts_unFollowing\");\nexport function l(str : \"SearchAlerts_follow\");\nexport function l(str : \"SearchAlerts_followed\");\nexport function l(str : \"SearchAlerts_followQuery\");\nexport function l(str : \"Subscription_StopFollowingQuery\");\nexport function l(str : \"SearchAlerts_Frequency\");\nexport function l(str : \"SubscriptionsManageSubscriptions\");\nexport function l(str : \"SubscriptionsMessageFollowQuery\" , param0: string);\nexport function l(str : \"SubscriptionsMessageFollow\" , param0: string);\nexport function l(str : \"Expiration\");\nexport function l(str : \"Monthly\");\nexport function l(str : \"Daily\");\nexport function l(str : \"Monday\");\nexport function l(str : \"Tuesday\");\nexport function l(str : \"Wednesday\");\nexport function l(str : \"Thursday\");\nexport function l(str : \"Friday\");\nexport function l(str : \"Saturday\");\nexport function l(str : \"Sunday\");\nexport function l(str : \"NextDay\" , param0: string);\nexport function l(str : \"LastDay\" , param0: string);\nexport function l(str : \"StartTypingCaseForSuggestions\");\nexport function l(str : \"ExportToExcel\");\nexport function l(str : \"ExportToExcelDescription\");\nexport function l(str : \"CaseCreationNoResults\");\nexport function l(str : \"SortBy\");\nexport function l(str : \"BoxCreateArticle\");\nexport function l(str : \"Facets\");\nexport function l(str : \"AdvancedSearch\");\nexport function l(str : \"Keywords\");\nexport function l(str : \"AllTheseWords\");\nexport function l(str : \"ExactPhrase\");\nexport function l(str : \"AnyOfTheseWords\");\nexport function l(str : \"NoneOfTheseWords\");\nexport function l(str : \"Anytime\");\nexport function l(str : \"InTheLast\");\nexport function l(str : \"Days\");\nexport function l(str : \"Months\");\nexport function l(str : \"Between\");\nexport function l(str : \"Language\");\nexport function l(str : \"Size\");\nexport function l(str : \"AtLeast\");\nexport function l(str : \"AtMost\");\nexport function l(str : \"Contains\");\nexport function l(str : \"DoesNotContain\");\nexport function l(str : \"Matches\");\nexport function l(str : \"Bytes\");\nexport function l(str : \"list\");\nexport function l(str : \"card\");\nexport function l(str : \"table\");\nexport function l(str : \"ResultLinks\");\nexport function l(str : \"EnableQuerySyntax\");\nexport function l(str : \"On\");\nexport function l(str : \"Off\");\nexport function l(str : \"Automatic\");\nexport function l(str : \"ResultsPerPage\");\nexport function l(str : \"objecttype_people\");\nexport function l(str : \"objecttype_message\");\nexport function l(str : \"objecttype_feed\");\nexport function l(str : \"objecttype_thread\");\nexport function l(str : \"objecttype_file\");\nexport function l(str : \"objecttype_board\");\nexport function l(str : \"objecttype_category\");\nexport function l(str : \"objecttype_account\");\nexport function l(str : \"objecttype_annotation\");\nexport function l(str : \"objecttype_campaign\");\nexport function l(str : \"objecttype_case\");\nexport function l(str : \"objecttype_contentversion\");\nexport function l(str : \"objecttype_contact\");\nexport function l(str : \"objecttype_contract\");\nexport function l(str : \"objecttype_event\");\nexport function l(str : \"objecttype_email\");\nexport function l(str : \"objecttype_goal\");\nexport function l(str : \"objecttype_incident\");\nexport function l(str : \"objecttype_invoice\");\nexport function l(str : \"objecttype_lead\");\nexport function l(str : \"objecttype_list\");\nexport function l(str : \"objecttype_solution\");\nexport function l(str : \"objecttype_task\");\nexport function l(str : \"objecttype_user\");\nexport function l(str : \"objecttype_attachment\");\nexport function l(str : \"objecttype_casecomment\");\nexport function l(str : \"objecttype_opportunity\");\nexport function l(str : \"objecttype_opportunityproduct\");\nexport function l(str : \"objecttype_feeditem\");\nexport function l(str : \"objecttype_feedcomment\");\nexport function l(str : \"objecttype_note\");\nexport function l(str : \"objecttype_product\");\nexport function l(str : \"objecttype_partner\");\nexport function l(str : \"objecttype_queueitem\");\nexport function l(str : \"objecttype_quote\");\nexport function l(str : \"objecttype_salesliterature\");\nexport function l(str : \"objecttype_salesorder\");\nexport function l(str : \"objecttype_service\");\nexport function l(str : \"objecttype_socialprofile\");\nexport function l(str : \"objecttype_kbdocumentation\");\nexport function l(str : \"objecttype_kbtechnicalarticle\");\nexport function l(str : \"objecttype_kbsolution\");\nexport function l(str : \"objecttype_kbknowledgearticle\");\nexport function l(str : \"objecttype_kbattachment\");\nexport function l(str : \"objecttype_kbarticle\");\nexport function l(str : \"objecttype_kbarticlecomment\");\nexport function l(str : \"objecttype_knowledgearticle\");\nexport function l(str : \"filetype_box user\");\nexport function l(str : \"filetype_html\");\nexport function l(str : \"filetype_wiki\");\nexport function l(str : \"filetype_webscraperwebpage\");\nexport function l(str : \"filetype_image\");\nexport function l(str : \"filetype_folder\");\nexport function l(str : \"filetype_txt\");\nexport function l(str : \"filetype_zip\");\nexport function l(str : \"filetype_olefile\");\nexport function l(str : \"filetype_gmailmessage\");\nexport function l(str : \"filetype_pdf\");\nexport function l(str : \"filetype_swf\");\nexport function l(str : \"filetype_xml\");\nexport function l(str : \"filetype_vsd\");\nexport function l(str : \"filetype_svg\");\nexport function l(str : \"filetype_svm\");\nexport function l(str : \"filetype_rssitem\");\nexport function l(str : \"filetype_doc\");\nexport function l(str : \"filetype_docx\");\nexport function l(str : \"filetype_xls\");\nexport function l(str : \"filetype_ppt\");\nexport function l(str : \"filetype_video\");\nexport function l(str : \"filetype_youtube\");\nexport function l(str : \"filetype_saleforceitem\");\nexport function l(str : \"filetype_dynamicscrmitem\");\nexport function l(str : \"filetype_salesforceitem\");\nexport function l(str : \"filetype_odt\");\nexport function l(str : \"filetype_cfpage\");\nexport function l(str : \"filetype_cfcomment\");\nexport function l(str : \"filetype_cfspace\");\nexport function l(str : \"filetype_cfblogentry\");\nexport function l(str : \"filetype_confluencespace\");\nexport function l(str : \"filetype_exchangemessage\");\nexport function l(str : \"filetype_exchangeappointment\");\nexport function l(str : \"filetype_exchangenote\");\nexport function l(str : \"filetype_exchangetask\");\nexport function l(str : \"filetype_exchangeperson\");\nexport function l(str : \"filetype_activedirperson\");\nexport function l(str : \"filetype_exchangeactivity\");\nexport function l(str : \"filetype_exchangecalendarmessage\");\nexport function l(str : \"filetype_exchangedocument\");\nexport function l(str : \"filetype_exchangedsn\");\nexport function l(str : \"filetype_exchangefreebusy\");\nexport function l(str : \"filetype_exchangegroup\");\nexport function l(str : \"filetype_exchangerssfeed\");\nexport function l(str : \"filetype_exchangejunkmessage\");\nexport function l(str : \"filetype_exchangeofficecom\");\nexport function l(str : \"filetype_lithiummessage\");\nexport function l(str : \"filetype_lithiumthread\");\nexport function l(str : \"filetype_lithiumboard\");\nexport function l(str : \"filetype_lithiumcategory\");\nexport function l(str : \"filetype_lithiumcommunity\");\nexport function l(str : \"filetype_spportal\");\nexport function l(str : \"filetype_spsite\");\nexport function l(str : \"filetype_spuserprofile\");\nexport function l(str : \"filetype_sparea\");\nexport function l(str : \"filetype_spannouncement\");\nexport function l(str : \"filetype_spannouncementlist\");\nexport function l(str : \"filetype_spcontact\");\nexport function l(str : \"filetype_spcontactlist\");\nexport function l(str : \"filetype_spcustomlist\");\nexport function l(str : \"filetype_spdiscussionboard\");\nexport function l(str : \"filetype_spdiscussionboardlist\");\nexport function l(str : \"filetype_spdocumentlibrarylist\");\nexport function l(str : \"filetype_spevent\");\nexport function l(str : \"filetype_speventlist\");\nexport function l(str : \"filetype_spformlibrarylist\");\nexport function l(str : \"filetype_spissue\");\nexport function l(str : \"filetype_spissuelist\");\nexport function l(str : \"filetype_splink\");\nexport function l(str : \"filetype_splinklist\");\nexport function l(str : \"filetype_sppicturelibrarylist\");\nexport function l(str : \"filetype_spsurvey\");\nexport function l(str : \"filetype_spsurveylist\");\nexport function l(str : \"filetype_sptask\");\nexport function l(str : \"filetype_sptasklist\");\nexport function l(str : \"filetype_spagenda\");\nexport function l(str : \"filetype_spagendalist\");\nexport function l(str : \"filetype_spattendee\");\nexport function l(str : \"filetype_spattendeelist\");\nexport function l(str : \"filetype_spcustomgridlist\");\nexport function l(str : \"filetype_spdecision\");\nexport function l(str : \"filetype_spdecisionlist\");\nexport function l(str : \"filetype_spobjective\");\nexport function l(str : \"filetype_spobjectivelist\");\nexport function l(str : \"filetype_sptextbox\");\nexport function l(str : \"filetype_sptextboxlist\");\nexport function l(str : \"filetype_spthingstobring\");\nexport function l(str : \"filetype_spthingstobringlist\");\nexport function l(str : \"filetype_sparealisting\");\nexport function l(str : \"filetype_spmeetingserie\");\nexport function l(str : \"filetype_spmeetingserielist\");\nexport function l(str : \"filetype_spsitedirectory\");\nexport function l(str : \"filetype_spsitedirectorylist\");\nexport function l(str : \"filetype_spdatasource\");\nexport function l(str : \"filetype_spdatasourcelist\");\nexport function l(str : \"filetype_splisttemplatecataloglist\");\nexport function l(str : \"filetype_spwebpartcataloglist\");\nexport function l(str : \"filetype_spwebtemplatecataloglist\");\nexport function l(str : \"filetype_spworkspacepagelist\");\nexport function l(str : \"filetype_spunknownlist\");\nexport function l(str : \"filetype_spadministratortask\");\nexport function l(str : \"filetype_spadministratortasklist\");\nexport function l(str : \"filetype_spareadocumentlibrarylist\");\nexport function l(str : \"filetype_spblogcategory\");\nexport function l(str : \"filetype_spblogcategorylist\");\nexport function l(str : \"filetype_spblogcomment\");\nexport function l(str : \"filetype_spblogcommentlist\");\nexport function l(str : \"filetype_spblogpost\");\nexport function l(str : \"filetype_spblogpostlist\");\nexport function l(str : \"filetype_spdataconnectionlibrarylist\");\nexport function l(str : \"filetype_spdistributiongroup\");\nexport function l(str : \"filetype_spdistributiongrouplist\");\nexport function l(str : \"filetype_spipfslist\");\nexport function l(str : \"filetype_spkeyperformanceindicator\");\nexport function l(str : \"filetype_spkeyperformanceindicatorlist\");\nexport function l(str : \"filetype_splanguagesandtranslator\");\nexport function l(str : \"filetype_splanguagesandtranslatorlist\");\nexport function l(str : \"filetype_spmasterpagescataloglist\");\nexport function l(str : \"filetype_spnocodeworkflowlibrarylist\");\nexport function l(str : \"filetype_spprojecttask\");\nexport function l(str : \"filetype_spprojecttasklist\");\nexport function l(str : \"filetype_sppublishingpageslibrarylist\");\nexport function l(str : \"filetype_spreportdocumentlibrarylist\");\nexport function l(str : \"filetype_spreportlibrarylist\");\nexport function l(str : \"filetype_spslidelibrarylist\");\nexport function l(str : \"filetype_sptab\");\nexport function l(str : \"filetype_sptablist\");\nexport function l(str : \"filetype_sptranslationmanagementlibrarylist\");\nexport function l(str : \"filetype_spuserinformation\");\nexport function l(str : \"filetype_spuserinformationlist\");\nexport function l(str : \"filetype_spwikipagelibrarylist\");\nexport function l(str : \"filetype_spworkflowhistory\");\nexport function l(str : \"filetype_spworkflowhistorylist\");\nexport function l(str : \"filetype_spworkflowprocess\");\nexport function l(str : \"filetype_spworkflowprocesslist\");\nexport function l(str : \"filetype_sppublishingimageslibrarylist\");\nexport function l(str : \"filetype_spcirculation\");\nexport function l(str : \"filetype_spcirculationlist\");\nexport function l(str : \"filetype_spdashboardslibrarylist\");\nexport function l(str : \"filetype_spdataconnectionforperformancepointlibrarylist\");\nexport function l(str : \"filetype_sphealthreport\");\nexport function l(str : \"filetype_sphealthreportlist\");\nexport function l(str : \"filetype_sphealthrule\");\nexport function l(str : \"filetype_sphealthrulelist\");\nexport function l(str : \"filetype_spimedictionary\");\nexport function l(str : \"filetype_spimedictionarylist\");\nexport function l(str : \"filetype_spperformancepointcontent\");\nexport function l(str : \"filetype_spperformancepointcontentlist\");\nexport function l(str : \"filetype_spphonecallmemo\");\nexport function l(str : \"filetype_spphonecallmemolist\");\nexport function l(str : \"filetype_sprecordlibrarylist\");\nexport function l(str : \"filetype_spresource\");\nexport function l(str : \"filetype_spresourcelist\");\nexport function l(str : \"filetype_spprocessdiagramslibrarylist\");\nexport function l(str : \"filetype_spsitethemeslibrarylist\");\nexport function l(str : \"filetype_spsolutionslibrarylist\");\nexport function l(str : \"filetype_spwfpublibrarylist\");\nexport function l(str : \"filetype_spwhereabout\");\nexport function l(str : \"filetype_spwhereaboutlist\");\nexport function l(str : \"filetype_spdocumentlink\");\nexport function l(str : \"filetype_spdocumentset\");\nexport function l(str : \"filetype_spmicrofeedpost\");\nexport function l(str : \"filetype_spmicrofeedlist\");\nexport function l(str : \"filetype_splistfolder\");\nexport function l(str : \"filetype_youtubevideo\");\nexport function l(str : \"filetype_youtubeplaylistitem\");\nexport function l(...params : any[]);\nexport function l(...params : any[]) { return L10N.format.apply(this, arguments) };\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/strings/Strings.ts\n **/","export { AnalyticsEndpoint } from './rest/AnalyticsEndpoint';\nexport { EndpointCaller } from './rest/EndpointCaller';\nexport { QueryError } from './rest/QueryError';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/RestModules.ts\n **/","import { Logger } from '../misc/Logger';\nimport { EndpointCaller, IEndpointCallerOptions } from '../rest/EndpointCaller';\nimport { IAPIAnalyticsVisitResponseRest } from './APIAnalyticsVisitResponse';\nimport { IErrorResponse } from '../rest/EndpointCaller';\nimport { IAPIAnalyticsSearchEventsResponse } from '../rest/APIAnalyticsSearchEventsResponse';\nimport { ISearchEvent } from '../rest/SearchEvent';\nimport { IClickEvent } from '../rest/ClickEvent';\nimport { IAPIAnalyticsEventResponse } from './APIAnalyticsEventResponse';\nimport { Assert } from '../misc/Assert';\nimport { ICustomEvent } from './CustomEvent';\nimport { ITopQueries } from './TopQueries';\nimport { QueryUtils } from '../utils/QueryUtils';\nimport { Cookie } from '../utils/CookieUtils';\nimport { ISuccessResponse } from '../rest/EndpointCaller';\nimport { IStringMap } from '../rest/GenericParam';\nimport _ = require('underscore');\n\nexport interface IAnalyticsEndpointOptions {\n  token: string;\n  serviceUrl: string;\n  organization: string;\n}\n\nexport class AnalyticsEndpoint {\n  logger: Logger;\n\n  static DEFAULT_ANALYTICS_URI = 'https://usageanalytics.coveo.com';\n  static DEFAULT_ANALYTICS_VERSION = 'v15';\n  static CUSTOM_ANALYTICS_VERSION = undefined;\n  static VISITOR_COOKIE_TIME = 10000 * 24 * 60 * 60 * 1000;\n\n  static pendingRequest: Promise<any>;\n\n  private visitId: string;\n  private organization: string;\n  public endpointCaller: EndpointCaller;\n\n  constructor(public options: IAnalyticsEndpointOptions) {\n    this.logger = new Logger(this);\n\n    var endpointCallerOptions: IEndpointCallerOptions = {\n      accessToken: (this.options.token && this.options.token != '') ? this.options.token : null\n    };\n    this.endpointCaller = new EndpointCaller(endpointCallerOptions);\n    this.organization = options.organization;\n  }\n\n  public getCurrentVisitId(): string {\n    return this.visitId;\n  }\n\n  public getCurrentVisitIdPromise(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      if (this.getCurrentVisitId()) {\n        resolve(this.getCurrentVisitId());\n      } else {\n        var url = this.buildAnalyticsUrl('/analytics/visit');\n        this.getFromService<IAPIAnalyticsVisitResponseRest>(url, {})\n          .then((response: IAPIAnalyticsVisitResponseRest) => {\n            this.visitId = response.id;\n            resolve(this.visitId);\n          })\n          .catch((response: IErrorResponse) => {\n            reject(response);\n          });\n      }\n    });\n  }\n\n  public sendSearchEvents(searchEvents: ISearchEvent[]): Promise<IAPIAnalyticsSearchEventsResponse> {\n    if (searchEvents.length > 0) {\n      this.logger.info('Logging analytics search events', searchEvents);\n      return this.sendToService<ISearchEvent[], IAPIAnalyticsSearchEventsResponse>(searchEvents, 'searches', 'searchEvents');\n    }\n  }\n\n  public sendDocumentViewEvent(documentViewEvent: IClickEvent): Promise<IAPIAnalyticsEventResponse> {\n    Assert.exists(documentViewEvent);\n    this.logger.info('Logging analytics document view', documentViewEvent);\n    return this.sendToService(documentViewEvent, 'click', 'clickEvent');\n  }\n\n  public sendCustomEvent(customEvent: ICustomEvent) {\n    Assert.exists(customEvent);\n    this.logger.info('Logging analytics custom event', customEvent);\n    return this.sendToService(customEvent, 'custom', 'customEvent');\n  }\n\n  public getTopQueries(params: ITopQueries): Promise<string[]> {\n    var url = this.buildAnalyticsUrl('/stats/topQueries');\n    return this.getFromService<string[]>(url, params);\n  }\n\n  private sendToService<D, R>(data: D, path: string, paramName: string): Promise<R> {\n    var url = QueryUtils.mergePath(this.options.serviceUrl, '/rest/' + (AnalyticsEndpoint.CUSTOM_ANALYTICS_VERSION || AnalyticsEndpoint.DEFAULT_ANALYTICS_VERSION) + '/analytics/' + path);\n    var queryString = [];\n\n    if (this.organization) {\n      queryString.push('org=' + this.organization);\n    }\n    if (Cookie.get('visitorId')) {\n      queryString.push('visitor=' + encodeURIComponent(Cookie.get('visitorId')));\n    }\n\n    // We use pendingRequest because we don't want to have 2 request to analytics at the same time.\n    // Otherwise the cookie visitId won't be set correctly.\n    if (AnalyticsEndpoint.pendingRequest == null) {\n      AnalyticsEndpoint.pendingRequest = this.endpointCaller.call<R>({\n        errorsAsSuccess: false,\n        method: 'POST',\n        queryString: queryString,\n        requestData: data,\n        url: url,\n        responseType: 'text',\n        requestDataType: 'application/json'\n      }).then((res: ISuccessResponse<R>) => {\n        return this.handleAnalyticsEventResponse(<any>res.data);\n      }).finally(() => {\n        AnalyticsEndpoint.pendingRequest = null;\n      });\n      return AnalyticsEndpoint.pendingRequest;\n    } else {\n      return AnalyticsEndpoint.pendingRequest.finally(() => {\n        return this.sendToService<D, R>(data, path, paramName);\n      });\n    }\n  }\n\n  private getFromService<T>(url: string, params: IStringMap<string>): Promise<T> {\n    var paramsToSend = (this.options.token && this.options.token != '') ? _.extend({ 'access_token': this.options.token }, params) : params;\n    return this.endpointCaller.call<T>({\n      errorsAsSuccess: false,\n      method: 'GET',\n      queryString: this.options.organization ? ['org=' + encodeURIComponent(this.options.organization)] : [],\n      requestData: paramsToSend,\n      responseType: 'json',\n      url: url\n    }).then((res: ISuccessResponse<T>) => {\n      return res.data;\n    });\n  }\n\n  private handleAnalyticsEventResponse(response: IAPIAnalyticsEventResponse | IAPIAnalyticsSearchEventsResponse) {\n    var visitId: string;\n    var visitorId: string;\n\n    if (response['visitId']) {\n      visitId = response['visitId'];\n      visitorId = response['visitorId'];\n    } else if (response['searchEventResponses']) {\n      visitId = (<IAPIAnalyticsEventResponse>_.first(response['searchEventResponses'])).visitId;\n      visitorId = (<IAPIAnalyticsEventResponse>_.first(response['searchEventResponses'])).visitorId;\n    }\n\n    if (visitId) {\n      this.visitId = visitId;\n    }\n    if (visitorId) {\n      Cookie.set('visitorId', visitorId, AnalyticsEndpoint.VISITOR_COOKIE_TIME);\n    }\n\n    return response;\n  }\n\n\n  private buildAnalyticsUrl(path: string) {\n    return this.options.serviceUrl + '/rest/' + (AnalyticsEndpoint.CUSTOM_ANALYTICS_VERSION || AnalyticsEndpoint.DEFAULT_ANALYTICS_VERSION) + path;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/AnalyticsEndpoint.ts\n **/","// Code originally taken from : https://developers.livechatinc.com/blog/setting-cookies-to-subdomains-in-javascript/\nexport class Cookie {\n  private static prefix: string = 'coveo_';\n\n  static set(name: string, value: string, expiration?: number) {\n    let domain: string, domainParts: string[], date, expires: string, host: string;\n\n    if (expiration) {\n      date = new Date();\n      date.setTime(date.getTime() + expiration);\n      expires = '; expires=' + date.toGMTString();\n    } else {\n      expires = '';\n    }\n\n    host = location.hostname;\n    if (host.split('.').length === 1) {\n      // no '.' in a domain - it's localhost or something similar\n      document.cookie = this.prefix + name + '=' + value + expires + '; path=/';\n    } else {\n      // Remember the cookie on all subdomains.\n      //\n      // Start with trying to set cookie to the top domain.\n      // (example: if user is on foo.com, try to set\n      //  cookie to domain '.com')\n      //\n      // If the cookie will not be set, it means '.com'\n      // is a top level domain and we need to\n      // set the cookie to '.foo.com'\n      domainParts = host.split('.');\n      domainParts.shift();\n      domain = '.' + domainParts.join('.');\n\n      document.cookie = this.prefix + name + '=' + value + expires + '; path=/; domain=' + domain;\n\n      // check if cookie was successfuly set to the given domain\n      // (otherwise it was a Top-Level Domain)\n      if (Cookie.get(name) == null || Cookie.get(name) != value) {\n        // append '.' to current domain\n        domain = '.' + host;\n        document.cookie = this.prefix + name + '=' + value + expires + '; path=/; domain=' + domain;\n      }\n    }\n  }\n\n  static get(name: string) {\n    let nameEQ = this.prefix + name + '=';\n    let ca = document.cookie.split(';');\n    for (let i = 0; i < ca.length; i++) {\n      let c = ca[i];\n      while (c.charAt(0) == ' ') {\n        c = c.substring(1, c.length);\n      }\n\n      if (c.indexOf(nameEQ) == 0) {\n        return c.substring(nameEQ.length, c.length);\n      }\n    }\n    return null;\n  }\n\n  static erase(name: string) {\n    Cookie.set(name, '', -1);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/CookieUtils.ts\n **/","export { AdvancedSearchEvents } from './events/AdvancedSearchEvents';\nexport { AnalyticsEvents } from './events/AnalyticsEvents';\nexport { BreadcrumbEvents } from './events/BreadcrumbEvents';\nexport { DebugEvents } from './events/DebugEvents';\nexport { ImageResultListEvents } from './events/ImageResultListEvents';\nexport { InitializationEvents } from './events/InitializationEvents';\nexport { OmniboxEvents } from './events/OmniboxEvents';\nexport { PreferencesPanelEvents } from './events/PreferencesPanelEvents';\nexport { QueryEvents } from './events/QueryEvents';\nexport { ResultListEvents } from './events/ResultListEvents';\nexport { ResultLayoutEvents } from './events/ResultLayoutEvents';\nexport { SearchAlertsEvents } from './events/SearchAlertEvents';\nexport { SettingsEvents } from './events/SettingsEvents';\nexport { SliderEvents } from './events/SliderEvents';\nexport { StandaloneSearchInterfaceEvents } from './events/StandaloneSearchInterfaceEvents';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/EventsModules.ts\n **/","import { IExternalAdvancedSearchSection } from '../ui/AdvancedSearch/AdvancedSearchInput';\nimport { IQueryOptions } from '../controllers/QueryController';\nimport { IQueryResults } from '../rest/QueryResults';\n\n/**\n * Argument sent to all handlers bound on {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport interface IBuildingAdvancedSearchEventArgs {\n  /**\n   * Sections which external code can populate by pushing into this array.\n   */\n  sections: IExternalAdvancedSearchSection[];\n  /**\n   * An easy way to execute a new query.\n   * @param options\n   */\n  executeQuery: (options: IQueryOptions) => Promise<IQueryResults>;\n}\n\n/**\n * This static class is there to contains the different string definition for all the events related to the {@link AdvancedSearch} component.\n */\nexport class AdvancedSearchEvents {\n\n  /**\n   * Triggered when the {@link AdvancedSearch} component is being built.\n   *\n   * Allows external code to add new sections in the **Advanced Search** panel.\n   *\n   * All bound handlers receive {@link IBuildingAdvancedSearchEventArgs} as an argument\n   *\n   * @type {string}\n   */\n  public static buildingAdvancedSearch = 'buildingAdvancedSearch';\n  public static executeAdvancedSearch = 'executeAdvancedSearch';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/AdvancedSearchEvents.ts\n **/","import { IAPIDocumentViewEvent } from '../rest/APIDocumentViewEvent';\nimport { IAPISearchEvent } from '../rest/APISearchEvent';\nimport { IAPICustomEvent } from '../rest/APICustomEvent';\n\nexport interface IAnalyticsSearchEventsArgs {\n  searchEvents: IAPISearchEvent[];\n}\n\nexport interface IAnalyticsDocumentViewEventArgs {\n  documentViewEvent: IAPIDocumentViewEvent;\n}\n\nexport interface IAnalyticsCustomEventArgs {\n  customEvent: IAPICustomEvent;\n}\n\n/**\n * Argument sent to all handlers bound on {@link AnalyticsEvents.changeAnalyticsCustomData}.\n *\n * It extends the {@link IChangeableAnalyticsDataObject} interface.\n *\n * Take note that only the attributes described by {@link IChangeableAnalyticsDataObject} can be modified by external code.\n */\nexport interface IChangeAnalyticsCustomDataEventArgs extends IChangeableAnalyticsDataObject {\n  /**\n   * The type of the event that was just triggered.\n   *\n   * This can help external code to discriminate the event that it wishes to modify.\n   */\n  type: 'SearchEvent' | 'CustomEvent' | 'ClickEvent';\n  /**\n   * The type of the event.\n   *\n   * The type is normally a generic string that regroups all events triggered by the same feature or component.\n   *\n   * For example, all analytics events related to the Searchbox will all use the same actionType.\n   *\n   * Analytics events related to Facets, on the other hand, would use a different actionType.\n   */\n  actionType: string;\n  /**\n   * The cause of the event.\n   *\n   * All analytics events triggered by a different component will use a different action cause.\n   *\n   * For example, triggering a query by using the search box will send a `searchBoxSubmit` actionCause.\n   *\n   * Triggering a query with a facet selection, on the other hand, will send a `facetSelect`.\n   */\n  actionCause: string;\n}\n\n/**\n * The interface that describe the metadata for every analytics event.\n */\nexport interface IChangeableAnalyticsMetaObject {\n  /**\n   * The metadata for every analytics event is a simple key value pair, where the value has to be a simple string.\n   *\n   * The value cannot be a complex object.\n   */\n  [name: string]: string;\n}\n\n/**\n * The interface that describe part of the analytics event that can be modified.\n */\nexport interface IChangeableAnalyticsDataObject {\n  /**\n   * The metadata for the current event.\n   *\n   * External code can modify an existing value, or add a new key - value pair.\n   */\n  metaObject: IChangeableAnalyticsMetaObject;\n  /**\n   * The originLevel1 property can be used to describe the high level origin of the event.\n   *\n   * For example, this can be the location of the search page, or any name that allows you to uniquely identify a search interface.\n   *\n   * If not provided, this value will be `default`.\n   */\n  originLevel1: string;\n  /**\n   * The originLevel2 property can be used to describe the mid level origin of the event.\n   *\n   * By default, the framework will populate this with the currently selected tab.\n   */\n  originLevel2: string;\n  /**\n   * The originLevel3 property can be used to describe the low level origin of the event.\n   *\n   * By default, this property will be left empty.\n   */\n  originLevel3: string;\n  /**\n   * The language of the search interface.\n   *\n   * By default, this will be populated by the currently loaded localization and culture file for the search interface.\n   */\n  language: string;\n}\n\n/**\n * This static class is there to contains the different string definition for all the events related to analytics.\n */\nexport class AnalyticsEvents {\n  public static searchEvent = 'analyticsSearchEvent';\n  public static documentViewEvent = 'analyticsDocumentViewEvent';\n  public static customEvent = 'analyticsCustomEvent';\n  /**\n   * Triggered whenever an analytics event is logged. This event allows external code to modify the analytics data.\n   *\n   * All bound handlers will receive {@link IChangeAnalyticsCustomDataEventArgs} as an argument.\n   *\n   * The string value is `changeAnalyticsCustomData`.\n   */\n  public static changeAnalyticsCustomData = 'changeAnalyticsCustomData';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/AnalyticsEvents.ts\n **/","/**\n * Represent an item to insert in the breadcrumb\n */\nexport interface IBreadcrumbItem {\n  /**\n   * The HTMLElement to insert in the breadcrumb\n   */\n  element: HTMLElement;\n}\n\n/**\n * Event triggered when populating the breadcrumb\n */\nexport interface IPopulateBreadcrumbEventArgs {\n  breadcrumbs: IBreadcrumbItem[];\n}\n\nexport interface IClearBreadcrumbEventArgs {\n}\n\n/**\n * This static class is there to contains the different string definition for all the events related to {@link Breadcrumb}.\n */\nexport class BreadcrumbEvents {\n  /**\n   * Triggered when the breadcrumb needs to update its content. External code can use this event to provide bits of HTML that should be included in the breadcrumb.\n   *\n   * All handlers bound to this event will receive a {@link IPopulateBreadcrumbEventArgs} as an argument.\n   */\n  public static populateBreadcrumb = 'populateBreadcrumb';\n  /**\n   * Triggered when the user clicks the Clear All button in the breadcrumb. When this event is raised, every filter that is included in the breadcrumb should be removed.\n   *\n   * This event does not provide custom event data.\n   */\n  public static clearBreadcrumb = 'clearBreadcrumb';\n  public static redrawBreadcrumb = 'redrawBreadcrumb';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/BreadcrumbEvents.ts\n **/","export class DebugEvents {\n  public static showDebugPanel = 'showDebugPanel';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/DebugEvents.ts\n **/","\nexport interface ICompletedImageResultsLayoutEventArgs {\n}\n\nexport class ImageResultListEvents {\n  public static imageResultsLayoutComplete = 'imageResultsLayoutComplete';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/ImageResultListEvents.ts\n **/","/**\n * This static class is there to contain the different string definitions for all the events related to initialization.\n *\n * Note that these events will only be triggered when the {@link init} function is called.\n *\n * This means these events are normally called only once when the search interface is initialized.\n */\nexport class InitializationEvents {\n  /**\n   * This event is triggered right before each components inside the search interface get initialized (eg: Before the constructor of each component is executed).\n   *\n   * The string value is `beforeInitialization`.\n   * @type {string}\n   */\n  public static beforeInitialization = 'beforeInitialization';\n  /**\n   * Triggered after the components are initialized (eg: After the constructor of each component is executed)\n   * but before their state is set from the hash portion of the URL (e.g., http://mysearchinterface#q=myQuery ).\n   *\n   * This is also before the first query is launched (if the {@link SearchInterface.options.autoTriggerQuery} is `true`).\n   *\n   * The string value is `afterComponentsInitialization`.\n   * @type {string}\n   */\n  public static afterComponentsInitialization = 'afterComponentsInitialization';\n  /**\n   * Triggered right before the state from the URL (e.g., http://mysearchinterface#q=myQuery ) gets applied in the interface.\n   *\n   * This will typically only be useful if the {@link SearchInterface.options.enableHistory} is set to `true`.\n   *\n   * The string value is `restoreHistoryState`.\n   * @type {string}\n   */\n  public static restoreHistoryState = 'restoreHistoryState';\n  /**\n   * Triggered right after the UI is fully initialized.\n   *\n   * Concretely this means that the constructor of each component has been executed, and that the state coming for the URL (e.g., http://mysearchinterface#q=myquery) has been applied.\n   *\n   * It is triggered *before* the first query is launched, and if the {@link SearchInterface.options.autoTriggerQuery} is `true`.\n   *\n   * The string value is `afterInitialization`.\n   * @type {string}\n   */\n  public static afterInitialization = 'afterInitialization';\n  /**\n   * This is triggered when the UI needs to be dynamically removed so that components can unbind any internal handlers they might have set globally on the window or the document.\n   *\n   * After this event has been executed, the search interface can be dynamically removed and all handlers can be considered cleanly removed.\n   *\n   * The string value is `nuke`.\n   * @type {string}\n   */\n  public static nuke = 'nuke';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/InitializationEvents.ts\n **/","/// <reference path=\"../../lib/magic-box/index.d.ts\" />\n\n// The reference to magic-box with the triple slash is needed for dts-generator\n\nimport { IOmniboxData, IOmniboxDataRow } from '../ui/Omnibox/OmniboxInterface';\n\nexport interface IPopulateOmniboxEventArgs extends IOmniboxData {\n}\n\nexport interface IPopulateOmniboxEventRow extends IOmniboxDataRow {\n}\n\nexport interface IOmniboxPreprocessResultForQueryEventArgs {\n  result: Coveo.MagicBox.Result;\n}\n\nexport interface ICloseOmniboxEventArgs {\n}\n\nexport class OmniboxEvents {\n  public static populateOmnibox = 'populateOmnibox';\n  public static openOmnibox = 'openOmnibox';\n  public static closeOmnibox = 'closeOmnibox';\n\n  public static populateOmniboxSuggestions = 'populateOmniboxSuggestions';\n  public static omniboxPreprocessResultForQuery = 'omniboxPreprocessResultForQuery';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/OmniboxEvents.ts\n **/","\nexport interface ISavePreferencesEventArgs {\n}\n\nexport class PreferencesPanelEvents {\n  public static savePreferences = 'savePreferences';\n  public static exitPreferencesWithoutSave = 'exitPreferencesWithoutSave';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/PreferencesPanelEvents.ts\n **/","import { Component } from '../ui/Base/Component';\nimport { QueryBuilder } from '../ui/Base/QueryBuilder';\nimport { IQueryResults } from '../rest/QueryResults';\nimport { IQuery } from '../rest/Query';\nimport { ISearchEndpoint, IEndpointCallOptions } from '../rest/SearchEndpointInterface';\nimport { IEndpointError } from '../rest/EndpointError';\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.newQuery}\n */\nexport interface INewQueryEventArgs {\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n  /**\n   * If this property is set to true by any handlers, the query will not be executed.\n   */\n  cancel: boolean;\n  origin?: Component;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.buildingQuery}\n */\nexport interface IBuildingQueryEventArgs {\n  /**\n   * Allow handlers to modify the query by using the {@link QueryBuilder}\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n  /**\n   * If this property is set to true by any handlers, the query will not be executed.\n   */\n  cancel: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.doneBuildingQuery}\n */\nexport interface IDoneBuildingQueryEventArgs {\n  /**\n   * Allow handlers to modify the query by using the {@link QueryBuilder}\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n  /**\n   * If this property is set to true by any handlers, the query will not be executed.\n   */\n  cancel: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.duringQuery}\n */\nexport interface IDuringQueryEventArgs {\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * A promises for the results that will be returned by the Search API\n   */\n  promise: Promise<IQueryResults>;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.querySuccess}\n */\nexport interface IQuerySuccessEventArgs {\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * The results returned by the query that was executed\n   */\n  results: IQueryResults;\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.fetchMoreSuccess}\n */\nexport interface IFetchMoreSuccessEventArgs {\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * The results returned by the query that was executed\n   */\n  results: IQueryResults;\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.queryError}\n */\nexport interface IQueryErrorEventArgs {\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * The endpoint on which the error happened.\n   */\n  endpoint: ISearchEndpoint;\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * The error info / message itself.\n   */\n  error: IEndpointError;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.preprocessResults}\n */\nexport interface IPreprocessResultsEventArgs {\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * The results returned by the query that was executed\n   */\n  results: IQueryResults;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.preprocessMoreResults}\n */\nexport interface IPreprocessMoreResultsEventArgs {\n  /**\n   * The results returned by the query that was executed\n   */\n  results: IQueryResults;\n}\n\n/**\n * Argument sent to all handlers bound on {@link QueryEvents.noResults}\n */\nexport interface INoResultsEventArgs {\n  /**\n   * The {@link QueryBuilder} that was used for the current query\n   */\n  queryBuilder: QueryBuilder;\n  /**\n   * The query that was just executed\n   */\n  query: IQuery;\n  /**\n   * The results returned by the query that was executed\n   */\n  results: IQueryResults;\n  /**\n   * Determine if the query is a \"search as you type\"\n   */\n  searchAsYouType: boolean;\n  /**\n   * If set to true by any handler, the last query will automatically be re-executed again.\n   */\n  retryTheQuery: boolean;\n}\n\nexport interface IBuildingCallOptionsEventArgs {\n  options: IEndpointCallOptions;\n}\n\n/**\n * This static class is there to contains the different string definition for all the events related to query.\n *\n * Note that these events will only be triggered when the {@link QueryController.executeQuery} method is used, either directly or by using {@link executeQuery}\n */\nexport class QueryEvents {\n  /**\n   * Triggered when a new query is launched.\n   *\n   * All bound handlers will receive {@link INewQueryEventArgs} as an argument.\n   *\n   * The string value is `newQuery`.\n   * @type {string}\n   */\n  public static newQuery = 'newQuery';\n  /**\n   * Triggered when the query is being built.\n   *\n   * This is typically where all components will contribute their part to the {@link IQuery} using the {@link QueryBuilder}.\n   *\n   * All bound handlers will receive {@link IBuildingQueryEventArgs} as an argument.\n   *\n   * The string value is `buildingQuery`.\n   * @type {string}\n   */\n  public static buildingQuery = 'buildingQuery';\n  /**\n   * Triggered when the query is done being built.\n   *\n   * This is typically where the facet will add it's {@link IGroupByRequest} to the {@link IQuery}.\n   *\n   * All bound handlers will receive {@link IDoneBuildingQueryEventArgs} as an argument.\n   *\n   * The string value is `doneBuildingQuery`.\n   * @type {string}\n   */\n  public static doneBuildingQuery = 'doneBuildingQuery';\n  /**\n   * Triggered when the query is being executed on the Search API.\n   *\n   * All bound handlers will receive {@link IDuringQueryEventArgs} as an argument.\n   *\n   * The string value is `duringQuery`.\n   * @type {string}\n   */\n  public static duringQuery = 'duringQuery';\n  /**\n   * Triggered when more results are being fetched on the Search API (think : infinite scrolling, or pager).\n   *\n   * All bound handlers will receive {@link IDuringQueryEventArgs} as an argument.\n   *\n   * The string value is `duringFetchMoreQuery`.\n   * @type {string}\n   */\n  public static duringFetchMoreQuery = 'duringFetchMoreQuery';\n  /**\n   * Triggered when a query successfully returns from the Search API.\n   *\n   * All bound handlers will receive {@link IQuerySuccessEventArgs} as an argument.\n   *\n   * The string value is `querySuccess`.\n   * @type {string}\n   */\n  public static querySuccess = 'querySuccess';\n  /**\n   * Triggered when a more results were successfully returned from the Search API. (think : infinite scrolling, or pager).\n   *\n   * All bound handlers will receive {@link IFetchMoreSuccessEventArgs} as an argument.\n   *\n   * The string value is `fetchMoreSuccess`.\n   * @type {string}\n   */\n  public static fetchMoreSuccess = 'fetchMoreSuccess';\n  /**\n   * Triggered after the main query success event has finished executing.\n   *\n   * This is typically where facets will process the {@link IGroupByResult} and render themselves.\n   *\n   * All bound handlers will receive {@link IQuerySuccessEventArgs} as an argument.\n   *\n   * The string value is `deferredQuerySuccess`.\n   * @type {string}\n   */\n  public static deferredQuerySuccess = 'deferredQuerySuccess';\n  /**\n   * Triggered when there was an error executing a query on the Search API.\n   *\n   * All bound handlers will receive {@link IQueryErrorEventArgs} as an argument.\n   *\n   * The string value is `queryError`.\n   * @type {string}\n   */\n  public static queryError = 'queryError';\n  /**\n   * Triggered before the {@link QueryEvents.querySuccess} event.\n   *\n   * This allows external code to modify the results before rendering them.\n   *\n   * For example, the {@link Folding} component might use this event to construct a coherent parent child relationship between query results.\n   *\n   * All bound handlers will receive {@link IPreprocessResultsEventArgs} as an argument.\n   *\n   * The string value is `preprocessResults`.\n   * @type {string}\n   */\n  public static preprocessResults = 'preprocessResults';\n  /**\n   * Triggered before the {@link QueryEvents.fetchMoreSuccess} event.\n   *\n   * This allows external code to modify the results before rendering them.\n   *\n   * For example, the {@link Folding} component might use this event to construct a coherent parent child relationship between query results.\n   *\n   * All bound handlers will receive {@link IPreprocessResultsEventArgs} as an argument.\n   *\n   * The string value is `preprocessMoreResults`.\n   * @type {string}\n   */\n  public static preprocessMoreResults = 'preprocessMoreResults';\n  /**\n   * Triggered when there is no result for a particular query.\n   *\n   * All bound handlers will receive {@link INoResultsEventArgs} as an argument.\n   *\n   * The string value is `noResults`.\n   * @type {string}\n   */\n  public static noResults = 'noResults';\n  public static buildingCallOptions = 'buildingCallOptions';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/QueryEvents.ts\n **/","import { IQueryResult } from '../rest/QueryResult';\nimport { IQueryResults } from '../rest/QueryResults';\n\nexport interface IDisplayedNewResultEventArgs {\n  result: IQueryResult;\n  item: HTMLElement;\n}\n\nexport interface IDisplayedNewResultsEventArgs {\n}\n\nexport interface IOpenQuickviewEventArgs {\n  termsToHighlight: any;\n}\n\nexport interface IChangeLayoutEventArgs {\n  layout: string;\n  results?: IQueryResults;\n}\n\nexport class ResultListEvents {\n  public static newResultsDisplayed = 'newResultsDisplayed';\n  public static newResultDisplayed = 'newResultDisplayed';\n  public static openQuickview = 'openQuickview';\n  public static changeLayout = 'changeLayout';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/ResultListEvents.ts\n **/","export interface IResultLayoutPopulateArgs {\n  layouts: string[];\n}\nexport class ResultLayoutEvents {\n  public static populateResultLayout = 'populateResultLayout';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/ResultLayoutEvents.ts\n **/","import { ISubscription } from '../rest/Subscription';\n\nexport interface ISearchAlertsEventArgs {\n  subscription: ISubscription;\n  dom?: HTMLElement;\n}\n\nexport interface ISearchAlertsFailEventArgs {\n  dom?: HTMLElement;\n}\n\nexport interface ISearchAlertsPopulateMessageEventArgs {\n  text: Array<string | ISearchAlertsPopulateMessageText>;\n}\n\nexport interface ISearchAlertsPopulateMessageText {\n  lineThrough: boolean;\n  value: string;\n}\n\nexport class SearchAlertsEvents {\n  public static searchAlertsCreated = 'searchAlertsCreated';\n  public static searchAlertsDeleted = 'searchAlertsDeleted';\n  public static searchAlertsFail = 'searchAlertsFail';\n  public static searchAlertsPopulateMessage = 'searchAlertsPopulateMessage';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/SearchAlertEvents.ts\n **/","export class SettingsEvents {\n  public static settingsPopulateMenu = 'settingsPopulateMenu';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/SettingsEvents.ts\n **/","export interface IGraphValueSelectedArgs {\n  start: any;\n  end: any;\n  value: any;\n}\n\nexport class SliderEvents {\n  public static startSlide = 'startSlide';\n  public static duringSlide = 'duringSlide';\n  public static endSlide = 'endSlide';\n  public static graphValueSelected = 'graphValueSelected';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/SliderEvents.ts\n **/","export interface IBeforeRedirectEventArgs {\n  searchPageUri: string;\n  cancel: boolean;\n}\n\nexport class StandaloneSearchInterfaceEvents {\n  public static beforeRedirect = 'beforeRedirect';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/StandaloneSearchInterfaceEvents.ts\n **/","export { ColorUtils } from './utils/ColorUtils';\nexport { Cookie } from './utils/CookieUtils';\nexport { CurrencyUtils } from './utils/CurrencyUtils';\nexport { DateUtils } from './utils/DateUtils';\nexport { DeviceUtils } from './utils/DeviceUtils';\nexport { Dom, $$ } from './utils/Dom';\nexport { DomUtils } from './utils/DomUtils';\nexport { EmailUtils } from './utils/EmailUtils';\nexport { HashUtils } from './utils/HashUtils';\nexport { HighlightUtils, StringAndHoles } from './utils/HighlightUtils';\nexport { HTMLUtils } from './utils/HtmlUtils';\nexport { KEYBOARD, KeyboardUtils } from './utils/KeyboardUtils';\nexport { LocalStorageUtils } from './utils/LocalStorageUtils';\nexport { OSUtils, OS_NAME } from './utils/OSUtils';\nexport { PopupUtils } from './utils/PopupUtils';\nexport { QueryUtils } from './utils/QueryUtils';\nexport { StreamHighlightUtils } from './utils/StreamHighlightUtils';\nexport { StringUtils } from './utils/StringUtils';\nexport { TimeSpan } from './utils/TimeSpanUtils';\nexport { Utils } from './utils/Utils';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UtilsModules.ts\n **/","export class ColorUtils {\n  static hsvToRgb(h, s, v) {\n    var r, g, b;\n\n    var i = Math.floor(h * 6);\n    var f = h * 6 - i;\n    var p = v * (1 - s);\n    var q = v * (1 - f * s);\n    var t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v, g = t, b = p;\n        break;\n      case 1:\n        r = q, g = v, b = p;\n        break;\n      case 2:\n        r = p, g = v, b = t;\n        break;\n      case 3:\n        r = p, g = q, b = v;\n        break;\n      case 4:\n        r = t, g = p, b = v;\n        break;\n      case 5:\n        r = v, g = p, b = q;\n        break;\n    }\n\n    return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n  }\n\n  static rgbToHsv(r, g, b) {\n    r = r / 255, g = g / 255, b = b / 255;\n    var max = Math.max(r, g, b),\n      min = Math.min(r, g, b);\n    var h, s, v = max;\n\n    var d = max - min;\n    s = max == 0 ? 0 : d / max;\n\n    if (max == min) {\n      h = 0; // achromatic\n    } else {\n      switch (max) {\n        case r:\n          h = (g - b) / d + (g < b ? 6 : 0);\n          break;\n        case g:\n          h = (b - r) / d + 2;\n          break;\n        case b:\n          h = (r - g) / d + 4;\n          break;\n      }\n      h /= 6;\n    }\n\n    return [h, s, v];\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/ColorUtils.ts\n **/","import { Assert } from '../misc/Assert';\nimport { Options } from '../misc/Options';\nimport { Utils } from '../utils/Utils';\nimport Globalize = require('globalize');\n\nexport interface ICurrencyToStringOptions {\n  decimals?: number;\n  symbol?: string;\n}\n\nclass DefaultCurrencyToStringOptions extends Options implements ICurrencyToStringOptions {\n  decimals: number = 0;\n  symbol: string;\n}\n\nexport class CurrencyUtils {\n  static currencyToString(value: number, options?: ICurrencyToStringOptions): string {\n    if (Utils.isNullOrUndefined(value)) {\n      return '';\n    }\n    value = Number(value);\n\n    Assert.isNumber(value);\n\n    options = new DefaultCurrencyToStringOptions().merge(options);\n\n    var currency = Globalize.culture().numberFormat.currency;\n    var backup = currency.symbol;\n\n    if (Utils.isNonEmptyString(options.symbol)) {\n      currency.symbol = options.symbol;\n    }\n\n    var str = Globalize.format(value, 'c' + options.decimals.toString());\n    currency.symbol = backup;\n\n    return str;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/CurrencyUtils.ts\n **/","import { Options } from '../misc/Options';\nimport { Utils } from './Utils';\nimport { l } from '../strings/Strings';\nimport { TimeSpan } from './TimeSpanUtils';\nimport Globalize = require('globalize');\nimport _ = require('underscore');\n\nexport interface IDateToStringOptions {\n  now?: Date;\n  useTodayYesterdayAndTomorrow?: boolean;\n  useWeekdayIfThisWeek?: boolean;\n  omitYearIfCurrentOne?: boolean;\n  useLongDateFormat?: boolean;\n  includeTimeIfToday?: boolean;\n  includeTimeIfThisWeek?: boolean;\n  alwaysIncludeTime?: boolean;\n  predefinedFormat?: string;\n}\n\nclass DefaultDateToStringOptions extends Options implements IDateToStringOptions {\n  now: Date = new Date();\n  useTodayYesterdayAndTomorrow = true;\n  useWeekdayIfThisWeek = true;\n  omitYearIfCurrentOne = true;\n  useLongDateFormat = false;\n  includeTimeIfToday = true;\n  includeTimeIfThisWeek = true;\n  alwaysIncludeTime = false;\n  predefinedFormat: string = undefined;\n}\n\nexport class DateUtils {\n  static convertFromJsonDateIfNeeded(date: string): Date;\n  static convertFromJsonDateIfNeeded(date: number): Date;\n  static convertFromJsonDateIfNeeded(date: Date): Date;\n  static convertFromJsonDateIfNeeded(date: any): Date {\n    if (_.isDate(date)) {\n      return date;\n    } else if (date !== null && !isNaN(Number(date))) {\n      return new Date(Number(date));\n    } else if (_.isString(date)) {\n      return new Date(<string>date.replace('@', ' '));\n    } else {\n      return undefined;\n    }\n  }\n\n  static dateForQuery(date: Date): string {\n    return date.getFullYear() + '/' + DateUtils.padNumber((date.getMonth() + 1).toString()) + '/' + DateUtils.padNumber(date.getDate().toString());\n  }\n\n  private static padNumber(num: string, length: number = 2): string {\n    while (num.length < length) {\n      num = '0' + num;\n    }\n    return num;\n  }\n\n  static keepOnlyDatePart(date: Date): Date {\n    return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n  }\n\n  static offsetDateByDays(date: Date, offset: number): Date {\n    var newDate = new Date(date.valueOf());\n    newDate.setDate(newDate.getDate() + offset);\n\n    return newDate;\n  }\n\n  static dateToString(d: Date, options?: IDateToStringOptions): string {\n    if (Utils.isNullOrUndefined(d)) {\n      return '';\n    }\n\n    options = new DefaultDateToStringOptions().merge(options);\n\n    var dateOnly = DateUtils.keepOnlyDatePart(d);\n\n    if (options.predefinedFormat) {\n      return Globalize.format(dateOnly, options.predefinedFormat);\n    }\n\n    var today = DateUtils.keepOnlyDatePart(options.now);\n    if (options.useTodayYesterdayAndTomorrow) {\n      if (dateOnly.valueOf() == today.valueOf()) {\n        return l('Today');\n      }\n      var tomorrow = DateUtils.offsetDateByDays(today, 1);\n      if (dateOnly.valueOf() == tomorrow.valueOf()) {\n        return l('Tomorrow');\n      }\n      var yesterday = DateUtils.offsetDateByDays(today, -1);\n      if (dateOnly.valueOf() == yesterday.valueOf()) {\n        return l('Yesterday');\n      }\n    }\n\n    var isThisWeek = Math.abs(TimeSpan.fromDates(dateOnly, today).getDays()) < 7;\n    if (options.useWeekdayIfThisWeek && isThisWeek) {\n      if (dateOnly.valueOf() > today.valueOf()) {\n        return l('NextDay', Globalize.format(dateOnly, 'dddd'));\n      } else {\n        return l('LastDay', Globalize.format(dateOnly, 'dddd'));\n      }\n    }\n\n    if (options.omitYearIfCurrentOne && dateOnly.getFullYear() === today.getFullYear()) {\n      return Globalize.format(dateOnly, 'M');\n    }\n\n    if (options.useLongDateFormat) {\n      return Globalize.format(dateOnly, 'D');\n    }\n\n    return Globalize.format(dateOnly, 'd');\n  }\n\n  static timeToString(date: Date, options?: IDateToStringOptions): string {\n    if (Utils.isNullOrUndefined(date)) {\n      return '';\n    }\n\n    return Globalize.format(date, 't');\n  }\n\n  static dateTimeToString(date: Date, options?: IDateToStringOptions): string {\n    if (Utils.isNullOrUndefined(date)) {\n      return '';\n    }\n\n    options = new DefaultDateToStringOptions().merge(options);\n\n    var today = DateUtils.keepOnlyDatePart(options.now);\n    var isThisWeek = Math.abs(TimeSpan.fromDates(date, today).getDays()) < 7;\n    var datePart = DateUtils.dateToString(date, options);\n    var dateWithoutTime = DateUtils.keepOnlyDatePart(date);\n\n    if (options.alwaysIncludeTime || (options.includeTimeIfThisWeek && isThisWeek) || (options.includeTimeIfToday && dateWithoutTime.valueOf() == today.valueOf())) {\n      return datePart + ', ' + DateUtils.timeToString(date);\n    } else {\n      return datePart;\n    }\n  }\n\n  static monthToString(month: number): string {\n    var date = new Date(1980, month);\n    return Globalize.format(date, 'MMMM');\n  }\n\n  static isValid(date: any) {\n    if (date instanceof Date) {\n      return !isNaN(date.getTime());\n    }\n    return false;\n  }\n\n  static timeBetween(from: Date, to: Date) {\n    if (Utils.isNullOrUndefined(from) || Utils.isNullOrUndefined(to)) {\n      return '';\n    }\n\n    return ('0' + ((to.getTime() - from.getTime()) / (1000 * 60 * 60)).toFixed()).slice(-2) +\n      ':' + ('0' + ((to.getTime() - from.getTime()) % (1000 * 60 * 60) / (1000 * 60)).toFixed()).slice(-2) +\n      ':' + ('0' + ((to.getTime() - from.getTime()) % (1000 * 60) / (1000)).toFixed()).slice(-2);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/DateUtils.ts\n **/","import { Utils } from '../utils/Utils';\nimport { JQueryUtils } from '../utils/JQueryutils';\nimport { Assert } from '../misc/Assert';\nimport { Logger } from '../misc/Logger';\nimport _ = require('underscore');\n\nexport interface IOffset {\n  left: number;\n  top: number;\n}\n\n/**\n * This is essentially an helper class for dom manipulation.<br/>\n * This is intended to provide some basic functionality normally offered by jQuery.<br/>\n * To minimize the multiple jQuery conflict we have while integrating in various system, we implemented the very small subset that the framework needs.<br/>\n * See {@link $$}, which is a function that wraps this class constructor, for less verbose code.\n */\nexport class Dom {\n  private static CLASS_NAME_REGEX = /-?[_a-zA-Z]+[_a-zA-Z0-9-]*/g;\n  private static ONLY_WHITE_SPACE_REGEX = /^\\s*$/;\n\n  public el: HTMLElement;\n\n  /**\n   * Create a new Dom object with the given HTMLElement\n   * @param el The HTMLElement to wrap in a Dom object\n   */\n  constructor(el: HTMLElement) {\n    Assert.exists(el);\n    this.el = el;\n  }\n\n  private static handlers: { eventHandle: Function, fn: EventListener }[] = [];\n\n  /**\n   * Helper function to quickly create an HTMLElement\n   * @param type The type of the element (e.g. div, span)\n   * @param props The props (id, className, attributes) of the element<br/>\n   * Can be either specified in dashed-case strings ('my-attribute') or camelCased keys (myAttribute),\n   * the latter of which will automatically get replaced to dash-case.\n   * @param innerHTML The contents of the new HTMLElement, either in string form or as another HTMLElement\n   */\n  static createElement(type: string, props?: Object, ...children: Array<string | HTMLElement | Dom>): HTMLElement {\n    const elem: HTMLElement = document.createElement(type);\n\n    for (const key in props) {\n      if (key === 'className') {\n        elem.className = props['className'];\n      } else {\n        const attr = key.indexOf('-') !== -1 ? key : Utils.toDashCase(key);\n        elem.setAttribute(attr, props[key]);\n      }\n    }\n\n    _.each(children, (child: string | HTMLElement | Dom) => {\n      if (child instanceof HTMLElement) {\n        elem.appendChild(child);\n      } else if (_.isString(child)) {\n        elem.innerHTML += child;\n      } else if (child instanceof Dom) {\n        elem.appendChild(child.el);\n      }\n    });\n\n    return elem;\n  }\n\n  /**\n   * Adds the element to the children of the current element\n   * @param element The element to append\n   * @returns {string}\n   */\n  public append(element: HTMLElement) {\n    this.el.appendChild(element);\n  }\n\n  /**\n   * Get the css value of the specified property.<br/>\n   * @param property The property\n   * @returns {string}\n   */\n  public css(property: string): string {\n    if (this.el.style[property]) {\n      return this.el.style[property];\n    }\n    return window.getComputedStyle(this.el).getPropertyValue(property);\n  }\n\n  /**\n   * Get or set the text content of the HTMLElement.<br/>\n   * @param txt Optional. If given, this will set the text content of the element. If not, will return the text content.\n   * @returns {string}\n   */\n  public text(txt?: string): string {\n    if (Utils.isUndefined(txt)) {\n      return this.el.innerText || this.el.textContent;\n    } else {\n      if (this.el.innerText != undefined) {\n        this.el.innerText = txt;\n      } else if (this.el.textContent != undefined) {\n        this.el.textContent = txt;\n      }\n    }\n  }\n\n  /**\n   * Performant way to transform a NodeList to an array of HTMLElement, for manipulation<br/>\n   * http://jsperf.com/nodelist-to-array/72\n   * @param nodeList a {NodeList} to convert to an array\n   * @returns {HTMLElement[]}\n   */\n  public nodeListToArray(nodeList: NodeList): HTMLElement[] {\n    let i = nodeList.length;\n    const arr: HTMLElement[] = new Array(i);\n    while (i--) {\n      arr[i] = <HTMLElement>nodeList.item(i);\n    }\n    return arr;\n  }\n\n  /**\n   * Empty (remove all child) from the element;\n   */\n  public empty(): void {\n    while (this.el.firstChild) {\n      this.el.removeChild(this.el.firstChild);\n    }\n  }\n\n  /**\n   * Empty the element and all childs from the dom;\n   */\n  public remove(): void {\n    this.el.parentNode.removeChild(this.el);\n  }\n\n  /**\n   * Show the element;\n   */\n  public show(): void {\n    this.el.style.display = 'block';\n  }\n\n  /**\n   * Hide the element;\n   */\n  public hide(): void {\n    this.el.style.display = 'none';\n  }\n\n  /**\n   * Toggle the element visibility.<br/>\n   * Optional visible parameter, if specified will set the element visibility\n   * @param visible Optional parameter to display or hide the element\n   */\n  public toggle(visible?: boolean): void {\n    if (visible === undefined) {\n      if (this.el.style.display == 'block') {\n        this.hide();\n      } else {\n        this.show();\n      }\n    } else {\n      if (visible) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    }\n  }\n\n  /**\n   * Returns the value of the specified attribute.\n   * @param name The name of the attribute\n   */\n  public getAttribute(name: string): string {\n    return this.el.getAttribute(name);\n  }\n\n  /**\n   * Sets the value of the specified attribute.\n   * @param name The name of the attribute\n   * @param value The value to set\n   */\n  public setAttribute(name: string, value: string) {\n    this.el.setAttribute(name, value);\n  }\n\n  /**\n   * Find a child element, given a CSS selector\n   * @param selector A CSS selector, can be a .className or #id\n   * @returns {HTMLElement}\n   */\n  public find(selector: string): HTMLElement {\n    return <HTMLElement>this.el.querySelector(selector);\n  }\n\n  /**\n   * Check if the element match the selector.<br/>\n   * The selector can be a class, an id or a tag.<br/>\n   * Eg : .is('.foo') or .is('#foo') or .is('div').\n   */\n  public is(selector: string): boolean {\n    if (this.el.tagName.toLowerCase() == selector.toLowerCase()) {\n      return true;\n    }\n    if (selector[0] == '.') {\n      if (this.hasClass(selector.substr(1))) {\n        return true;\n      }\n    }\n\n    if (selector[0] == '#') {\n      if (this.el.getAttribute('id') == selector.substr(1)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Get the first element that matches the classname by testing the element itself and traversing up through its ancestors in the DOM tree.\n   *\n   * Stops at the body of the document\n   * @param className A CSS classname\n   */\n  public closest(className: string): HTMLElement {\n    return this.traverseAncestorForClass(this.el, className);\n  }\n\n  /**\n   * Get the first element that matches the classname by testing the element itself and traversing up through its ancestors in the DOM tree.\n   *\n   * Stops at the body of the document\n   * @returns {any}\n   */\n  public parent(className: string): HTMLElement {\n    if (this.el.parentElement == undefined) {\n      return undefined;\n    }\n    return this.traverseAncestorForClass(this.el.parentElement, className);\n  }\n\n  /**\n   *  Get all the ancestors of the current element that match the given className\n   *\n   *  Return an empty array if none found.\n   * @param className\n   * @returns {HTMLElement[]}\n   */\n  public parents(className: string): HTMLElement[] {\n    const parentsFound = [];\n    let parentFound = this.parent(className);\n    while (parentFound) {\n      parentsFound.push(parentFound);\n      parentFound = new Dom(parentFound).parent(className);\n    }\n    return parentsFound;\n  }\n\n  /**\n   * Return all children\n   * @returns {HTMLElement[]}\n   */\n  public children(): HTMLElement[] {\n    return this.nodeListToArray(this.el.children);\n  }\n\n  /**\n   * Return all siblings\n   * @returns {HTMLElement[]}\n   */\n  public siblings(selector: string): HTMLElement[] {\n    const sibs = [];\n    let currentElement = <HTMLElement>this.el.parentNode.firstChild;\n    for (; currentElement; currentElement = <HTMLElement>currentElement.nextSibling) {\n      if (currentElement != this.el) {\n        if (this.matches(currentElement, selector) || !selector) {\n          sibs.push(currentElement);\n        }\n      }\n    }\n    return sibs;\n  }\n\n  private matches(element: HTMLElement, selector: string) {\n    const all = document.querySelectorAll(selector);\n    for (let i = 0; i < all.length; i++) {\n      if (all[i] === element) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Find all children that match the given CSS selector\n   * @param selector A CSS selector, can be a .className\n   * @returns {HTMLElement[]}\n   */\n  public findAll(selector: string): HTMLElement[] {\n    return this.nodeListToArray(this.el.querySelectorAll(selector));\n  }\n\n  /**\n   * Find the child elements using a className\n   * @param className Class of the childs elements to find\n   * @returns {HTMLElement[]}\n   */\n  public findClass(className: string): HTMLElement[] {\n    if ('getElementsByClassName' in this.el) {\n      return this.nodeListToArray(this.el.getElementsByClassName(className));\n    }\n    // For ie 8\n    return this.nodeListToArray(this.el.querySelectorAll('.' + className));\n  }\n\n  /**\n   * Find an element using an ID\n   * @param id ID of the element to find\n   * @returns {HTMLElement}\n   */\n  public findId(id: string): HTMLElement {\n    return document.getElementById(id);\n  }\n\n  /**\n   * Add a class to the element. Takes care of not adding the same class if the element already has it.\n   * @param className Classname to add to the element\n   */\n  public addClass(classNames: string[]): void;\n  public addClass(className: string): void;\n  public addClass(className: any): void {\n    if (_.isArray(className)) {\n      _.each(className, (name: string) => {\n        this.addClass(name);\n      });\n    } else {\n      if (!this.hasClass(className)) {\n        if (this.el.className) {\n          this.el.className += ' ' + className;\n        } else {\n          this.el.className = className;\n        }\n      }\n    }\n  }\n\n  /**\n   * Remove the class on the element. Works even if the element does not possess the class.\n   * @param className Classname to remove on the the element\n   */\n  public removeClass(className: string): void {\n    this.el.className = this.el.className.replace(new RegExp(`(^|\\\\s)${className}(\\\\s|\\\\b)`, 'g'), '$1').trim();\n  }\n\n  /**\n   * Toggle the class on the element.\n   * @param className Classname to toggle\n   * @swtch If true, add the class regardless and if false, remove the class\n   */\n  public toggleClass(className: string, swtch?: boolean): void {\n    if (Utils.isNullOrUndefined(swtch)) {\n      if (this.hasClass(className)) {\n        this.removeClass(className);\n      } else {\n        this.addClass(className);\n      }\n    } else {\n      if (swtch) {\n        this.addClass(className);\n      } else {\n        this.removeClass(className);\n      }\n    }\n  }\n\n  /**\n   * Sets the inner html of the element\n   * @param html The html to set\n   */\n  public setHtml(html: string) {\n    this.el.innerHTML = html;\n  }\n\n  /**\n   * Return an array with all the classname on the element. Empty array if the element has not classname\n   * @returns {any|Array}\n   */\n  public getClass(): string[] {\n    return this.el.className.match(Dom.CLASS_NAME_REGEX) || [];\n  }\n\n  /**\n   * Check if the element has the given class name\n   * @param className Classname to verify\n   * @returns {boolean}\n   */\n  public hasClass(className: string): boolean {\n    return _.contains(this.getClass(), className);\n  }\n\n  /**\n   * Detach the element from the DOM.\n   */\n  public detach(): void {\n    this.el.parentElement && this.el.parentElement.removeChild(this.el);\n  }\n\n  /**\n   * Insert the current node after the given reference node\n   * @param refNode\n   */\n  public insertAfter(refNode: HTMLElement): void {\n    refNode.parentNode && refNode.parentNode.insertBefore(this.el, refNode.nextSibling);\n  }\n\n  /**\n   * Insert the current node before the given reference node\n   * @param refNode\n   */\n  public insertBefore(refNode: HTMLElement): void {\n    refNode.parentNode && refNode.parentNode.insertBefore(this.el, refNode);\n  }\n\n  /**\n   * Insert the given node as the first child of the current node\n   * @param toPrepend\n   */\n  public prepend(toPrepend: HTMLElement) {\n    if (this.el.firstChild) {\n      new Dom(toPrepend).insertBefore(<HTMLElement>this.el.firstChild);\n    } else {\n      this.el.appendChild(toPrepend);\n    }\n  }\n\n  /**\n   * Bind an event handler on the element. Accepts either one (a string) or multiple (Array<String>) event type.<br/>\n   * @param types The {string} or {Array<String>} of types on which to bind an event handler\n   * @param eventHandle The function to execute when the event is triggered\n   */\n  public on(types: string[], eventHandle: (evt: Event, data: any) => void): void;\n  public on(type: string, eventHandle: (evt: Event, data: any) => void): void;\n  public on(type: any, eventHandle: (evt: Event, data: any) => void): void {\n    if (_.isArray(type)) {\n      _.each(type, (t: string) => {\n        this.on(t, eventHandle);\n      });\n    } else {\n      const modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n      const jq = JQueryUtils.getJQuery();\n      if (jq) {\n        jq(this.el).on(modifiedType, eventHandle);\n      } else if (this.el.addEventListener) {\n        const fn = (e: CustomEvent) => {\n          eventHandle(e, e.detail);\n        };\n        Dom.handlers.push({\n          eventHandle: eventHandle,\n          fn: fn\n        });\n        this.el.addEventListener(modifiedType, fn, false);\n      } else if (this.el['on']) {\n        this.el['on']('on' + modifiedType, eventHandle);\n      }\n    }\n  }\n\n  /**\n   * Bind an event handler on the element. Accepts either one (a string) or multiple (Array<String>) event type.<br/>\n   * The event handler will execute only ONE time.\n   * @param types The {string} or {Array<String>} of types on which to bind an event handler\n   * @param eventHandle The function to execute when the event is triggered\n   */\n  public one(types: string[], eventHandle: (evt: Event, args?: any) => void): void;\n  public one(type: string, eventHandle: (evt: Event, args?: any) => void): void;\n  public one(type: any, eventHandle: (evt: Event, args?: any) => void): void {\n    if (_.isArray(type)) {\n      _.each(type, (t: string) => {\n        this.one(t, eventHandle);\n      });\n    } else {\n      const modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n      const once = (e: Event, args: any) => {\n        this.off(modifiedType, once);\n        return eventHandle(e, args);\n      };\n      this.on(modifiedType, once);\n    }\n  }\n\n  /**\n   * Remove an event handler on the element. Accepts either one (a string) or multiple (Array<String>) event type.<br/>\n   * @param types The {string} or {Array<String>} of types on which to remove an event handler\n   * @param eventHandle The function to remove on the element\n   */\n  public off(types: string[], eventHandle: (evt: Event, arg?: any) => void): void;\n  public off(type: string, eventHandle: (evt: Event, arg?: any) => void): void;\n  public off(type: any, eventHandle: (evt: Event, arg?: any) => void): void {\n    if (_.isArray(type)) {\n      _.each(type, (t: string) => {\n        this.off(t, eventHandle);\n      });\n    } else {\n      const modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n      const jq = JQueryUtils.getJQuery();\n      if (jq) {\n        jq(this.el).off(modifiedType, eventHandle);\n      } else if (this.el.removeEventListener) {\n        let idx = 0;\n        const found = _.find(Dom.handlers, (handlerObj: { eventHandle: Function, fn: EventListener }, i) => {\n          if (handlerObj.eventHandle == eventHandle) {\n            idx = i;\n            return true;\n          }\n        });\n        if (found) {\n          this.el.removeEventListener(modifiedType, found.fn, false);\n          Dom.handlers.splice(idx, 1);\n        }\n      } else if (this.el['off']) {\n        this.el['off']('on' + modifiedType, eventHandle);\n      }\n    }\n  }\n\n  /**\n   * Trigger an event on the element.\n   * @param type The event type to trigger\n   * @param data\n   */\n  public trigger(type: string, data?: { [key: string]: any }): void {\n    const modifiedType = this.processEventTypeToBeJQueryCompatible(type);\n    const jq = JQueryUtils.getJQuery();\n    if (jq) {\n      jq(this.el).trigger(modifiedType, data);\n    } else if (CustomEvent !== undefined) {\n      const event = new CustomEvent(modifiedType, { detail: data, bubbles: true });\n      this.el.dispatchEvent(event);\n    } else {\n      new Logger(this).error('CANNOT TRIGGER EVENT FOR OLDER BROWSER');\n    }\n  }\n\n  /**\n   * Check if the element is \"empty\" (has no innerHTML content). Whitespace is considered empty</br>\n   * @returns {boolean}\n   */\n  public isEmpty(): boolean {\n    return Dom.ONLY_WHITE_SPACE_REGEX.test(this.el.innerHTML);\n  }\n\n  /**\n   * Check if the element is a descendant of parent\n   * @param other\n   */\n  public isDescendant(parent: HTMLElement): boolean {\n    let node = this.el.parentNode;\n    while (node != null) {\n      if (node == parent) {\n        return true;\n      }\n      node = node.parentNode;\n    }\n    return false;\n  }\n\n  /**\n   * Replace the current element with the other element, then detach the current element\n   * @param otherElem\n   */\n  public replaceWith(otherElem: HTMLElement): void {\n    const parent = this.el.parentNode;\n    if (parent) {\n      new Dom(otherElem).insertAfter(this.el);\n    }\n    this.detach();\n  }\n\n  // based on http://api.jquery.com/position/\n  /**\n   * Return the position relative to the offset parent.\n   */\n  public position(): IOffset {\n    const offsetParent = this.offsetParent();\n    const offset = this.offset();\n    let parentOffset: IOffset = { top: 0, left: 0 };\n\n    if (!$$(offsetParent).is('html')) {\n      parentOffset = $$(offsetParent).offset();\n    }\n\n    let borderTopWidth = parseInt($$(offsetParent).css('borderTopWidth'));\n    let borderLeftWidth = parseInt($$(offsetParent).css('borderLeftWidth'));\n    borderTopWidth = isNaN(borderTopWidth) ? 0 : borderTopWidth;\n    borderLeftWidth = isNaN(borderLeftWidth) ? 0 : borderLeftWidth;\n\n    parentOffset = {\n      top: parentOffset.top + borderTopWidth,\n      left: parentOffset.left + borderLeftWidth\n    };\n\n    let marginTop = parseInt(this.css('marginTop'));\n    let marginLeft = parseInt(this.css('marginLeft'));\n    marginTop = isNaN(marginTop) ? 0 : marginTop;\n    marginLeft = isNaN(marginLeft) ? 0 : marginLeft;\n\n    return {\n      top: offset.top - parentOffset.top - marginTop,\n      left: offset.left - parentOffset.left - marginLeft\n    };\n  }\n\n  // based on https://api.jquery.com/offsetParent/\n  /**\n   * Returns the offset parent. The offset parent is the closest parent that is positioned.\n   * An element is positioned when its position property is not 'static', which is the default.\n   */\n  public offsetParent(): HTMLElement {\n    let offsetParent = this.el.offsetParent;\n\n    while (offsetParent instanceof HTMLElement && $$(offsetParent).css('position') === 'static') {\n      // Will break out if it stumbles upon an non-HTMLElement and return documentElement\n      offsetParent = (<HTMLElement>offsetParent).offsetParent;\n    }\n\n    if (!(offsetParent instanceof HTMLElement)) {\n      return document.documentElement;\n    }\n    return <HTMLElement>offsetParent;\n  }\n\n  // based on http://api.jquery.com/offset/\n  /**\n   * Return the position relative to the document.\n   */\n  public offset(): IOffset {\n    // In <=IE11, calling getBoundingClientRect on a disconnected node throws an error\n    if (!this.el.getClientRects().length) {\n      return { top: 0, left: 0 };\n    }\n\n    const rect = this.el.getBoundingClientRect();\n\n    if (rect.width || rect.height) {\n      let doc = this.el.ownerDocument;\n      let docElem = doc.documentElement;\n\n      return {\n        top: rect.top + window.pageYOffset - docElem.clientTop,\n        left: rect.left + window.pageXOffset - docElem.clientLeft\n      };\n    }\n    return rect;\n  }\n\n  /**\n   * Returns the offset width of the element\n   */\n  public width(): number {\n    return this.el.offsetWidth;\n  }\n\n  /**\n   * Returns the offset height of the element\n   */\n  public height(): number {\n    return this.el.offsetHeight;\n  }\n\n  /**\n   * Clone the node\n   * @param deep true if the children of the node should also be cloned, or false to clone only the specified node.\n   * @returns {Dom}\n   */\n  public clone(deep = false): Dom {\n    return $$(<HTMLElement>this.el.cloneNode(deep));\n  }\n\n  private processEventTypeToBeJQueryCompatible(event: string): string {\n    // From https://api.jquery.com/on/\n    // [...]\n    // > In addition, the .trigger() method can trigger both standard browser event names and custom event names to call attached handlers. Event names should only contain alphanumerics, underscore, and colon characters.\n    if (event) {\n      return event.replace(/[^a-zA-Z0-9\\:\\_]/g, '');\n    }\n    return event;\n  }\n\n  private traverseAncestorForClass(current = this.el, className: string): HTMLElement {\n    if (className.indexOf('.') == 0) {\n      className = className.substr(1);\n    }\n    let found = false;\n    while (!found) {\n      if ($$(current).hasClass(className)) {\n        found = true;\n      }\n      if (current.tagName.toLowerCase() == 'body') {\n        break;\n      }\n      if (current.parentElement == null) {\n        break;\n      }\n      if (!found) {\n        current = current.parentElement;\n      }\n    }\n    if (found) {\n      return current;\n    }\n    return undefined;\n  }\n}\n\nexport class Win {\n  constructor(public win: Window) {\n  }\n\n  public height(): number {\n    return this.win.innerHeight;\n  }\n\n  public width(): number {\n    return this.win.innerWidth;\n  }\n\n  public scrollY(): number {\n    return this.supportPageOffset() ? this.win.pageYOffset : this.isCSS1Compat() ? this.win.document.documentElement.scrollTop : this.win.document.body.scrollTop;\n  }\n\n  public scrollX(): number {\n    return this.supportPageOffset() ? window.pageXOffset : this.isCSS1Compat() ? document.documentElement.scrollLeft : document.body.scrollLeft;\n  }\n\n  private isCSS1Compat() {\n    return (this.win.document.compatMode || '') === 'CSS1Compat';\n  }\n\n  private supportPageOffset() {\n    return this.win.pageXOffset !== undefined;\n  }\n}\n\nexport class Doc {\n  constructor(public doc: Document) {\n  }\n\n  public height(): number {\n    const body = this.doc.body;\n    return Math.max(body.scrollHeight, body.offsetHeight);\n  }\n\n  public width(): number {\n    const body = this.doc.body;\n    return Math.max(body.scrollWidth, body.offsetWidth);\n  }\n}\n\n/**\n * Convenience wrapper for the {@link Dom} class. Used to do $$(element).<br/>\n * If passed with an argument which is not an HTMLElement, it will call {@link Dom.createElement}.\n * @param el The HTMLElement to wrap in a Dom object\n * @param type See {@link Dom.createElement}\n * @param props See {@link Dom.createElement}\n * @param ...children See {@link Dom.createElement}\n */\nexport function $$(dom: Dom): Dom;\nexport function $$(html: HTMLElement): Dom;\nexport function $$(type: string, props?: Object, ...children: Array<string | HTMLElement | Dom>): Dom;\nexport function $$(...args: any[]): Dom {\n  if (args.length === 1 && args[0] instanceof Dom) {\n    return args[0];\n  } else if (args.length === 1 && (!_.isString(args[0]))) {\n    return new Dom(<HTMLElement>args[0]);\n  } else {\n    return new Dom(Dom.createElement.apply(Dom, args));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/Dom.ts\n **/","import { $$, Dom } from './Dom';\nimport { IQueryResult } from '../rest/QueryResult';\nimport { IResultsComponentBindings } from '../ui/Base/ResultsComponentBindings';\nimport { DateUtils } from './DateUtils';\nimport { FileTypes } from '../ui/Misc/FileTypes';\nimport { Utils } from './Utils';\nimport { StringUtils } from './StringUtils';\n\nexport class DomUtils {\n  static getPopUpCloseButton(captionForClose: string, captionForReminder: string): string {\n    let container = document.createElement('span');\n\n    let closeButton = document.createElement('span');\n    $$(closeButton).addClass('coveo-close-button');\n    container.appendChild(closeButton);\n\n    let iconClose = document.createElement('span');\n    $$(iconClose).addClass('coveo-icon');\n    $$(iconClose).addClass('coveo-sprites-quickview-close');\n    closeButton.appendChild(iconClose);\n\n    $$(closeButton).text(captionForClose);\n\n    let closeReminder = document.createElement('span');\n    $$(closeReminder).addClass('coveo-pop-up-reminder');\n    $$(closeReminder).text(captionForReminder);\n    container.appendChild(closeReminder);\n\n    return container.outerHTML;\n  }\n\n  static getBasicLoadingAnimation() {\n    let loadDotClass = 'coveo-loading-dot';\n    let dom = document.createElement('div');\n    dom.className = 'coveo-first-loading-animation';\n    dom.innerHTML = `<div class='coveo-logo' ></div>\n    <div class='coveo-loading-container'>\n      <div class='${loadDotClass}'></div>\n      <div class='${loadDotClass}'></div>\n      <div class='${loadDotClass}'></div>\n      <div class='${loadDotClass}'></div>\n    </div>`;\n    return dom;\n  }\n\n  static highlightElement(initialString: string, valueToSearch: string): string {\n    let regex = new RegExp(Utils.escapeRegexCharacter(StringUtils.latinize(valueToSearch)), 'i');\n    let firstChar = StringUtils.latinize(initialString).search(regex);\n    let lastChar = firstChar + valueToSearch.length;\n    return `${StringUtils.htmlEncode(initialString.slice(0, firstChar))}<span class='coveo-highlight'>${StringUtils.htmlEncode(initialString.slice(firstChar, lastChar))}</span>${StringUtils.htmlEncode(initialString.slice(lastChar))}`;\n  }\n\n  static getLoadingSpinner(): HTMLElement {\n    let loading = $$('div', {\n      className: 'coveo-loading-spinner'\n    });\n    return loading.el;\n  }\n\n  static getModalBoxHeader(title: string): Dom {\n    let header = $$('div');\n    header.el.innerHTML = `<div class='coveo-modalbox-right-header'>\n        <span class='coveo-modalbox-close-button'>\n          <span class='coveo-icon coveo-sprites-common-clear'></span>\n        </span>\n      </div>\n      <div class='coveo-modalbox-left-header'>\n        <span class='coveo-modalbox-pop-up-reminder'> ${title || ''}</span>\n      </div>`;\n    return header;\n  }\n\n  static getQuickviewHeader(result: IQueryResult, options: { showDate: boolean; title: string }, bindings: IResultsComponentBindings): Dom {\n    let date = '';\n    if (options.showDate) {\n      date = DateUtils.dateTimeToString(new Date(Utils.getFieldValue(result, 'date')));\n    }\n    let fileType = FileTypes.get(result);\n    let header = $$('div');\n    header.el.innerHTML = `<div class='coveo-quickview-right-header'>\n        <span class='coveo-quickview-time'>${date}</span>\n        <span class='coveo-quickview-close-button'>\n          <span class='coveo-icon coveo-sprites-common-clear'></span>\n        </span>\n      </div>\n      <div class='coveo-quickview-left-header'>\n        <span class='coveo-quickview-icon coveo-small ${fileType.icon}'></span>\n        <a class='coveo-quickview-pop-up-reminder'> ${options.title || ''}</a>\n      </div>`;\n    new Coveo[Coveo['Salesforce'] ? 'SalesforceResultLink' : 'ResultLink'](header.find('.coveo-quickview-pop-up-reminder'), undefined, bindings, result);\n    return header;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/DomUtils.ts\n **/","import { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { l } from '../../strings/Strings';\nimport { Assert } from '../../misc/Assert';\nimport _ = require('underscore');\n\n// On-demand mapping of file types to captions. Used by facets, but I don't\n// really like this. Maybe a dedicated filetype facet would be better? Hmm...\nlet fileTypeCaptions: { [id: string]: string };\n\nexport interface IFileTypeInfo {\n  icon: string;\n  caption: string;\n}\n\nexport class FileTypes {\n  static get(result: IQueryResult): IFileTypeInfo {\n    var objecttype = <string>Utils.getFieldValue(result, 'objecttype');\n    var filetype = <string>Utils.getFieldValue(result, 'filetype');\n\n    // When @objecttype is File we fallback on @filetype for icons and such\n    if (Utils.isNonEmptyString(objecttype) && objecttype.toLowerCase() != 'file') {\n      return FileTypes.getObjectType(objecttype);\n    } else if (Utils.isNonEmptyString(filetype)) {\n      return FileTypes.getFileType(filetype);\n    } else {\n      return {\n        // This will render a default icon. Really it should not happen.\n        icon: 'coveo-icon filetype',\n        caption: l('Unknown')\n      };\n    }\n  }\n\n  static getObjectType(objecttype: string): IFileTypeInfo {\n    // We must use lowercase filetypes because that's how the CSS classes\n    // are generated (they are case sensitive, alas).\n    objecttype = objecttype.toLowerCase();\n\n    const variableValue = `objecttype_${objecttype}`;\n    // Most object types have a set of localized strings in the main dictionary\n    var localizedString = l(variableValue);\n\n    return {\n      'icon': 'coveo-icon objecttype ' + objecttype.replace(' ', '-'),\n      caption: localizedString != variableValue ? localizedString : objecttype\n    };\n  }\n\n  static getFileType(filetype: string): IFileTypeInfo {\n    // We must use lowercase filetypes because that's how the CSS classes\n    // are generated (they are case sensitive, alas).\n    filetype = filetype.toLowerCase();\n\n    // Sometimes, filetype begins with a period (typically means the index has\n    // no idea and uses the file extension as a filetype).\n    if (filetype[0] == '.') {\n      filetype = filetype.substring(1);\n    }\n\n    const variableValue = `filetype_${filetype}`;\n    // Most filetypes have a set of localized strings in the main dictionary\n    let localizedString = l(variableValue);\n\n    return {\n      'icon': 'coveo-icon filetype ' + filetype.replace(' ', '-'),\n      caption: localizedString != variableValue ? localizedString : filetype\n    };\n  }\n\n  static getFileTypeCaptions() {\n    if (fileTypeCaptions == undefined) {\n      fileTypeCaptions = {};\n      var strings = String['locales'][String['locale'].toLowerCase()];\n      Assert.isNotUndefined(strings);\n      _.each(_.keys(strings), function (key) {\n        if (key.indexOf('filetype_') == 0) {\n          fileTypeCaptions[key.substr('filetype_'.length)] = key.toLocaleString();\n        } else if (key.indexOf('objecttype_') == 0) {\n          fileTypeCaptions[key.substr('objecttype_'.length)] = key.toLocaleString();\n        }\n      });\n    }\n\n    return fileTypeCaptions;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Misc/FileTypes.ts\n **/","import { Assert } from '../misc/Assert';\nimport { IHighlight } from '../rest/Highlight';\nimport { $$ } from '../utils/Dom';\nimport * as latinize from 'latinize';\nimport _ = require('underscore');\n\nexport class StringUtils {\n  static javascriptEncode(value: string): string {\n    Assert.isString(value);\n\n    value = value.replace(/\\\\/g, '\\\\\\\\');\n    value = value.replace(/'/g, '\\\\\\'');\n    value = value.replace(/\"/g, '\\\\\"');\n\n    return value;\n  }\n\n  static htmlEncode(value: string): string {\n    Assert.isString(value);\n    let div = $$('div');\n    div.text(value);\n    return div.el.innerHTML;\n  }\n\n  static splice(value: string, index: number, remove: number, toAdd: string): string {\n    return value.slice(0, index) + toAdd + value.slice(index + Math.abs(remove));\n  }\n\n  static removeMiddle(value: string, length: number, toAdd: string): string {\n    if (value.length < length) {\n      return value;\n    }\n    let toRemove = value.length - length;\n    let index = Math.floor(length / 2);\n    return StringUtils.splice(value, index, toRemove, toAdd);\n  }\n\n  static regexEncode(value: string): string {\n    Assert.isString(value);\n    return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n  }\n\n  static stringToRegex(value: string, ignoreAccent = false): string {\n    Assert.isString(value);\n    let encoded = StringUtils.regexEncode(value);\n\n    if (ignoreAccent) {\n      return _.map(encoded, (char: string) => {\n        let regexp = _.find(StringUtils.accented, (regexp: RegExp) => char.match(regexp) != null);\n        if (regexp) {\n          return regexp.source;\n        }\n        return char;\n      }).join('');\n    }\n\n    return encoded;\n  }\n\n  static wildcardsToRegex(value: string, ignoreAccent = false): string {\n    Assert.isString(value);\n\n    let encoded = StringUtils.stringToRegex(value, ignoreAccent);\n\n    encoded = encoded.replace(/\\\\\\*/, '.*');\n    encoded = encoded.replace(/\\\\\\?/, '.');\n\n    return encoded;\n  }\n\n  static getHighlights(strToSearch: string, regexToFind: RegExp, dataHighlightGroupTerm: string): IHighlight[] {\n    let match, indexes: IHighlight[] = [];\n\n    while (match = regexToFind.exec(strToSearch)) {\n      let desiredMatch = match[2];\n      let undesiredMatch = match[1];\n      let offset = match.index + undesiredMatch.length;\n      indexes.push({ offset: offset, length: desiredMatch.length, dataHighlightGroupTerm: dataHighlightGroupTerm });\n      if (!regexToFind.global) {\n        break;\n      }\n    }\n    return _.isEmpty(indexes) ? undefined : indexes;\n  }\n\n  static encodeCarriageReturn(strToEncode: string): string {\n    Assert.isString(strToEncode);\n    return strToEncode.replace(/\\n/g, '<br/>');\n  }\n\n  static equalsCaseInsensitive(str1: string, str2: string) {\n    return str1.toLowerCase() == str2.toLowerCase();\n  }\n\n  static match(value: string, regex: RegExp) {\n    let results: string[][] = [];\n    let arr: string[];\n    while ((arr = regex.exec(value)) !== null) {\n      results.push(arr);\n    }\n    return results;\n  }\n\n  static hashCode(str: string): string {\n    let hash = 0;\n    let len = str.length;\n    for (let i = 0; i < len; i++) {\n      let char = str.charCodeAt(i);\n      hash = ((hash << 5) - hash) + char;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n    return hash.toString(16);\n  }\n\n  // http://stackoverflow.com/a/25575009\n  static latinize(str: string) {\n    return latinize(str);\n  }\n\n  static capitalizeFirstLetter(str: string) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n  }\n\n  public static accented: { [letter: string]: RegExp } = {\n    'A': /[Aa\\xaa\\xc0-\\xc5\\xe0-\\xe5\\u0100-\\u0105\\u01cd\\u01ce\\u0200-\\u0203\\u0226\\u0227\\u1d2c\\u1d43\\u1e00\\u1e01\\u1e9a\\u1ea0-\\u1ea3\\u2090\\u2100\\u2101\\u213b\\u249c\\u24b6\\u24d0\\u3371-\\u3374\\u3380-\\u3384\\u3388\\u3389\\u33a9-\\u33af\\u33c2\\u33ca\\u33df\\u33ff\\uff21\\uff41]/g,\n    'B': /[Bb\\u1d2e\\u1d47\\u1e02-\\u1e07\\u212c\\u249d\\u24b7\\u24d1\\u3374\\u3385-\\u3387\\u33c3\\u33c8\\u33d4\\u33dd\\uff22\\uff42]/g,\n    'C': /[Cc\\xc7\\xe7\\u0106-\\u010d\\u1d9c\\u2100\\u2102\\u2103\\u2105\\u2106\\u212d\\u216d\\u217d\\u249e\\u24b8\\u24d2\\u3376\\u3388\\u3389\\u339d\\u33a0\\u33a4\\u33c4-\\u33c7\\uff23\\uff43]/g,\n    'D': /[Dd\\u010e\\u010f\\u01c4-\\u01c6\\u01f1-\\u01f3\\u1d30\\u1d48\\u1e0a-\\u1e13\\u2145\\u2146\\u216e\\u217e\\u249f\\u24b9\\u24d3\\u32cf\\u3372\\u3377-\\u3379\\u3397\\u33ad-\\u33af\\u33c5\\u33c8\\uff24\\uff44]/g,\n    'E': /[Ee\\xc8-\\xcb\\xe8-\\xeb\\u0112-\\u011b\\u0204-\\u0207\\u0228\\u0229\\u1d31\\u1d49\\u1e18-\\u1e1b\\u1eb8-\\u1ebd\\u2091\\u2121\\u212f\\u2130\\u2147\\u24a0\\u24ba\\u24d4\\u3250\\u32cd\\u32ce\\uff25\\uff45]/g,\n    'F': /[Ff\\u1da0\\u1e1e\\u1e1f\\u2109\\u2131\\u213b\\u24a1\\u24bb\\u24d5\\u338a-\\u338c\\u3399\\ufb00-\\ufb04\\uff26\\uff46]/g,\n    'G': /[Gg\\u011c-\\u0123\\u01e6\\u01e7\\u01f4\\u01f5\\u1d33\\u1d4d\\u1e20\\u1e21\\u210a\\u24a2\\u24bc\\u24d6\\u32cc\\u32cd\\u3387\\u338d-\\u338f\\u3393\\u33ac\\u33c6\\u33c9\\u33d2\\u33ff\\uff27\\uff47]/g,\n    'H': /[Hh\\u0124\\u0125\\u021e\\u021f\\u02b0\\u1d34\\u1e22-\\u1e2b\\u1e96\\u210b-\\u210e\\u24a3\\u24bd\\u24d7\\u32cc\\u3371\\u3390-\\u3394\\u33ca\\u33cb\\u33d7\\uff28\\uff48]/g,\n    'I': /[Ii\\xcc-\\xcf\\xec-\\xef\\u0128-\\u0130\\u0132\\u0133\\u01cf\\u01d0\\u0208-\\u020b\\u1d35\\u1d62\\u1e2c\\u1e2d\\u1ec8-\\u1ecb\\u2071\\u2110\\u2111\\u2139\\u2148\\u2160-\\u2163\\u2165-\\u2168\\u216a\\u216b\\u2170-\\u2173\\u2175-\\u2178\\u217a\\u217b\\u24a4\\u24be\\u24d8\\u337a\\u33cc\\u33d5\\ufb01\\ufb03\\uff29\\uff49]/g,\n    'J': /[Jj\\u0132-\\u0135\\u01c7-\\u01cc\\u01f0\\u02b2\\u1d36\\u2149\\u24a5\\u24bf\\u24d9\\u2c7c\\uff2a\\uff4a]/g,\n    'K': /[Kk\\u0136\\u0137\\u01e8\\u01e9\\u1d37\\u1d4f\\u1e30-\\u1e35\\u212a\\u24a6\\u24c0\\u24da\\u3384\\u3385\\u3389\\u338f\\u3391\\u3398\\u339e\\u33a2\\u33a6\\u33aa\\u33b8\\u33be\\u33c0\\u33c6\\u33cd-\\u33cf\\uff2b\\uff4b]/g,\n    'L': /[Ll\\u0139-\\u0140\\u01c7-\\u01c9\\u02e1\\u1d38\\u1e36\\u1e37\\u1e3a-\\u1e3d\\u2112\\u2113\\u2121\\u216c\\u217c\\u24a7\\u24c1\\u24db\\u32cf\\u3388\\u3389\\u33d0-\\u33d3\\u33d5\\u33d6\\u33ff\\ufb02\\ufb04\\uff2c\\uff4c]/g,\n    'M': /[Mm\\u1d39\\u1d50\\u1e3e-\\u1e43\\u2120\\u2122\\u2133\\u216f\\u217f\\u24a8\\u24c2\\u24dc\\u3377-\\u3379\\u3383\\u3386\\u338e\\u3392\\u3396\\u3399-\\u33a8\\u33ab\\u33b3\\u33b7\\u33b9\\u33bd\\u33bf\\u33c1\\u33c2\\u33ce\\u33d0\\u33d4-\\u33d6\\u33d8\\u33d9\\u33de\\u33df\\uff2d\\uff4d]/g,\n    'N': /[Nn\\xd1\\xf1\\u0143-\\u0149\\u01ca-\\u01cc\\u01f8\\u01f9\\u1d3a\\u1e44-\\u1e4b\\u207f\\u2115\\u2116\\u24a9\\u24c3\\u24dd\\u3381\\u338b\\u339a\\u33b1\\u33b5\\u33bb\\u33cc\\u33d1\\uff2e\\uff4e]/g,\n    'O': /[Oo\\xba\\xd2-\\xd6\\xf2-\\xf6\\u014c-\\u0151\\u01a0\\u01a1\\u01d1\\u01d2\\u01ea\\u01eb\\u020c-\\u020f\\u022e\\u022f\\u1d3c\\u1d52\\u1ecc-\\u1ecf\\u2092\\u2105\\u2116\\u2134\\u24aa\\u24c4\\u24de\\u3375\\u33c7\\u33d2\\u33d6\\uff2f\\uff4f]/g,\n    'P': /[Pp\\u1d3e\\u1d56\\u1e54-\\u1e57\\u2119\\u24ab\\u24c5\\u24df\\u3250\\u3371\\u3376\\u3380\\u338a\\u33a9-\\u33ac\\u33b0\\u33b4\\u33ba\\u33cb\\u33d7-\\u33da\\uff30\\uff50]/g,\n    'Q': /[Qq\\u211a\\u24ac\\u24c6\\u24e0\\u33c3\\uff31\\uff51]/g,\n    'R': /[Rr\\u0154-\\u0159\\u0210-\\u0213\\u02b3\\u1d3f\\u1d63\\u1e58-\\u1e5b\\u1e5e\\u1e5f\\u20a8\\u211b-\\u211d\\u24ad\\u24c7\\u24e1\\u32cd\\u3374\\u33ad-\\u33af\\u33da\\u33db\\uff32\\uff52]/g,\n    'S': /[Ss\\u015a-\\u0161\\u017f\\u0218\\u0219\\u02e2\\u1e60-\\u1e63\\u20a8\\u2101\\u2120\\u24ae\\u24c8\\u24e2\\u33a7\\u33a8\\u33ae-\\u33b3\\u33db\\u33dc\\ufb06\\uff33\\uff53]/g,\n    'T': /[Tt\\u0162-\\u0165\\u021a\\u021b\\u1d40\\u1d57\\u1e6a-\\u1e71\\u1e97\\u2121\\u2122\\u24af\\u24c9\\u24e3\\u3250\\u32cf\\u3394\\u33cf\\ufb05\\ufb06\\uff34\\uff54]/g,\n    'U': /[Uu\\xd9-\\xdc\\xf9-\\xfc\\u0168-\\u0173\\u01af\\u01b0\\u01d3\\u01d4\\u0214-\\u0217\\u1d41\\u1d58\\u1d64\\u1e72-\\u1e77\\u1ee4-\\u1ee7\\u2106\\u24b0\\u24ca\\u24e4\\u3373\\u337a\\uff35\\uff55]/g,\n    'V': /[Vv\\u1d5b\\u1d65\\u1e7c-\\u1e7f\\u2163-\\u2167\\u2173-\\u2177\\u24b1\\u24cb\\u24e5\\u2c7d\\u32ce\\u3375\\u33b4-\\u33b9\\u33dc\\u33de\\uff36\\uff56]/g,\n    'W': /[Ww\\u0174\\u0175\\u02b7\\u1d42\\u1e80-\\u1e89\\u1e98\\u24b2\\u24cc\\u24e6\\u33ba-\\u33bf\\u33dd\\uff37\\uff57]/g,\n    'X': /[Xx\\u02e3\\u1e8a-\\u1e8d\\u2093\\u213b\\u2168-\\u216b\\u2178-\\u217b\\u24b3\\u24cd\\u24e7\\u33d3\\uff38\\uff58]/g,\n    'Y': /[Yy\\xdd\\xfd\\xff\\u0176-\\u0178\\u0232\\u0233\\u02b8\\u1e8e\\u1e8f\\u1e99\\u1ef2-\\u1ef9\\u24b4\\u24ce\\u24e8\\u33c9\\uff39\\uff59]/g,\n    'Z': /[Zz\\u0179-\\u017e\\u01f1-\\u01f3\\u1dbb\\u1e90-\\u1e95\\u2124\\u2128\\u24b5\\u24cf\\u24e9\\u3390-\\u3394\\uff3a\\uff5a]/g\n  };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/StringUtils.ts\n **/","(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(factory);\n  } else if (typeof exports === 'object') {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // running in browser\n    root.latinize = factory();\n  }\n})(this, function() {\n\n  function latinize(str) {\n    if (typeof str === 'string') {\n      return str.replace(/[^A-Za-z0-9]/g, function(x) {\n        return latinize.characters[x] || x;\n      });\n    } else {\n      return str;\n    }\n  }\n\n  latinize.characters = {\n    'Á': 'A',\n    'Ă': 'A',\n    'Ắ': 'A',\n    'Ặ': 'A',\n    'Ằ': 'A',\n    'Ẳ': 'A',\n    'Ẵ': 'A',\n    'Ǎ': 'A',\n    'Â': 'A',\n    'Ấ': 'A',\n    'Ậ': 'A',\n    'Ầ': 'A',\n    'Ẩ': 'A',\n    'Ẫ': 'A',\n    'Ä': 'A',\n    'Ǟ': 'A',\n    'Ȧ': 'A',\n    'Ǡ': 'A',\n    'Ạ': 'A',\n    'Ȁ': 'A',\n    'À': 'A',\n    'Ả': 'A',\n    'Ȃ': 'A',\n    'Ā': 'A',\n    'Ą': 'A',\n    'Å': 'A',\n    'Ǻ': 'A',\n    'Ḁ': 'A',\n    'Ⱥ': 'A',\n    'Ã': 'A',\n    'Ꜳ': 'AA',\n    'Æ': 'AE',\n    'Ǽ': 'AE',\n    'Ǣ': 'AE',\n    'Ꜵ': 'AO',\n    'Ꜷ': 'AU',\n    'Ꜹ': 'AV',\n    'Ꜻ': 'AV',\n    'Ꜽ': 'AY',\n    'Ḃ': 'B',\n    'Ḅ': 'B',\n    'Ɓ': 'B',\n    'Ḇ': 'B',\n    'Ƀ': 'B',\n    'Ƃ': 'B',\n    'Ć': 'C',\n    'Č': 'C',\n    'Ç': 'C',\n    'Ḉ': 'C',\n    'Ĉ': 'C',\n    'Ċ': 'C',\n    'Ƈ': 'C',\n    'Ȼ': 'C',\n    'Ď': 'D',\n    'Ḑ': 'D',\n    'Ḓ': 'D',\n    'Ḋ': 'D',\n    'Ḍ': 'D',\n    'Ɗ': 'D',\n    'Ḏ': 'D',\n    'Dz': 'D',\n    'Dž': 'D',\n    'Đ': 'D',\n    'Ƌ': 'D',\n    'DZ': 'DZ',\n    'DŽ': 'DZ',\n    'É': 'E',\n    'Ĕ': 'E',\n    'Ě': 'E',\n    'Ȩ': 'E',\n    'Ḝ': 'E',\n    'Ê': 'E',\n    'Ế': 'E',\n    'Ệ': 'E',\n    'Ề': 'E',\n    'Ể': 'E',\n    'Ễ': 'E',\n    'Ḙ': 'E',\n    'Ë': 'E',\n    'Ė': 'E',\n    'Ẹ': 'E',\n    'Ȅ': 'E',\n    'È': 'E',\n    'Ẻ': 'E',\n    'Ȇ': 'E',\n    'Ē': 'E',\n    'Ḗ': 'E',\n    'Ḕ': 'E',\n    'Ę': 'E',\n    'Ɇ': 'E',\n    'Ẽ': 'E',\n    'Ḛ': 'E',\n    'Ꝫ': 'ET',\n    'Ḟ': 'F',\n    'Ƒ': 'F',\n    'Ǵ': 'G',\n    'Ğ': 'G',\n    'Ǧ': 'G',\n    'Ģ': 'G',\n    'Ĝ': 'G',\n    'Ġ': 'G',\n    'Ɠ': 'G',\n    'Ḡ': 'G',\n    'Ǥ': 'G',\n    'Ḫ': 'H',\n    'Ȟ': 'H',\n    'Ḩ': 'H',\n    'Ĥ': 'H',\n    'Ⱨ': 'H',\n    'Ḧ': 'H',\n    'Ḣ': 'H',\n    'Ḥ': 'H',\n    'Ħ': 'H',\n    'Í': 'I',\n    'Ĭ': 'I',\n    'Ǐ': 'I',\n    'Î': 'I',\n    'Ï': 'I',\n    'Ḯ': 'I',\n    'İ': 'I',\n    'Ị': 'I',\n    'Ȉ': 'I',\n    'Ì': 'I',\n    'Ỉ': 'I',\n    'Ȋ': 'I',\n    'Ī': 'I',\n    'Į': 'I',\n    'Ɨ': 'I',\n    'Ĩ': 'I',\n    'Ḭ': 'I',\n    'Ꝺ': 'D',\n    'Ꝼ': 'F',\n    'Ᵹ': 'G',\n    'Ꞃ': 'R',\n    'Ꞅ': 'S',\n    'Ꞇ': 'T',\n    'Ꝭ': 'IS',\n    'Ĵ': 'J',\n    'Ɉ': 'J',\n    'Ḱ': 'K',\n    'Ǩ': 'K',\n    'Ķ': 'K',\n    'Ⱪ': 'K',\n    'Ꝃ': 'K',\n    'Ḳ': 'K',\n    'Ƙ': 'K',\n    'Ḵ': 'K',\n    'Ꝁ': 'K',\n    'Ꝅ': 'K',\n    'Ĺ': 'L',\n    'Ƚ': 'L',\n    'Ľ': 'L',\n    'Ļ': 'L',\n    'Ḽ': 'L',\n    'Ḷ': 'L',\n    'Ḹ': 'L',\n    'Ⱡ': 'L',\n    'Ꝉ': 'L',\n    'Ḻ': 'L',\n    'Ŀ': 'L',\n    'Ɫ': 'L',\n    'Lj': 'L',\n    'Ł': 'L',\n    'LJ': 'LJ',\n    'Ḿ': 'M',\n    'Ṁ': 'M',\n    'Ṃ': 'M',\n    'Ɱ': 'M',\n    'Ń': 'N',\n    'Ň': 'N',\n    'Ņ': 'N',\n    'Ṋ': 'N',\n    'Ṅ': 'N',\n    'Ṇ': 'N',\n    'Ǹ': 'N',\n    'Ɲ': 'N',\n    'Ṉ': 'N',\n    'Ƞ': 'N',\n    'Nj': 'N',\n    'Ñ': 'N',\n    'NJ': 'NJ',\n    'Ó': 'O',\n    'Ŏ': 'O',\n    'Ǒ': 'O',\n    'Ô': 'O',\n    'Ố': 'O',\n    'Ộ': 'O',\n    'Ồ': 'O',\n    'Ổ': 'O',\n    'Ỗ': 'O',\n    'Ö': 'O',\n    'Ȫ': 'O',\n    'Ȯ': 'O',\n    'Ȱ': 'O',\n    'Ọ': 'O',\n    'Ő': 'O',\n    'Ȍ': 'O',\n    'Ò': 'O',\n    'Ỏ': 'O',\n    'Ơ': 'O',\n    'Ớ': 'O',\n    'Ợ': 'O',\n    'Ờ': 'O',\n    'Ở': 'O',\n    'Ỡ': 'O',\n    'Ȏ': 'O',\n    'Ꝋ': 'O',\n    'Ꝍ': 'O',\n    'Ō': 'O',\n    'Ṓ': 'O',\n    'Ṑ': 'O',\n    'Ɵ': 'O',\n    'Ǫ': 'O',\n    'Ǭ': 'O',\n    'Ø': 'O',\n    'Ǿ': 'O',\n    'Õ': 'O',\n    'Ṍ': 'O',\n    'Ṏ': 'O',\n    'Ȭ': 'O',\n    'Ƣ': 'OI',\n    'Ꝏ': 'OO',\n    'Ɛ': 'E',\n    'Ɔ': 'O',\n    'Ȣ': 'OU',\n    'Ṕ': 'P',\n    'Ṗ': 'P',\n    'Ꝓ': 'P',\n    'Ƥ': 'P',\n    'Ꝕ': 'P',\n    'Ᵽ': 'P',\n    'Ꝑ': 'P',\n    'Ꝙ': 'Q',\n    'Ꝗ': 'Q',\n    'Ŕ': 'R',\n    'Ř': 'R',\n    'Ŗ': 'R',\n    'Ṙ': 'R',\n    'Ṛ': 'R',\n    'Ṝ': 'R',\n    'Ȑ': 'R',\n    'Ȓ': 'R',\n    'Ṟ': 'R',\n    'Ɍ': 'R',\n    'Ɽ': 'R',\n    'Ꜿ': 'C',\n    'Ǝ': 'E',\n    'Ś': 'S',\n    'Ṥ': 'S',\n    'Š': 'S',\n    'Ṧ': 'S',\n    'Ş': 'S',\n    'Ŝ': 'S',\n    'Ș': 'S',\n    'Ṡ': 'S',\n    'Ṣ': 'S',\n    'Ṩ': 'S',\n    'ß': 'ss',\n    'Ť': 'T',\n    'Ţ': 'T',\n    'Ṱ': 'T',\n    'Ț': 'T',\n    'Ⱦ': 'T',\n    'Ṫ': 'T',\n    'Ṭ': 'T',\n    'Ƭ': 'T',\n    'Ṯ': 'T',\n    'Ʈ': 'T',\n    'Ŧ': 'T',\n    'Ɐ': 'A',\n    'Ꞁ': 'L',\n    'Ɯ': 'M',\n    'Ʌ': 'V',\n    'Ꜩ': 'TZ',\n    'Ú': 'U',\n    'Ŭ': 'U',\n    'Ǔ': 'U',\n    'Û': 'U',\n    'Ṷ': 'U',\n    'Ü': 'U',\n    'Ǘ': 'U',\n    'Ǚ': 'U',\n    'Ǜ': 'U',\n    'Ǖ': 'U',\n    'Ṳ': 'U',\n    'Ụ': 'U',\n    'Ű': 'U',\n    'Ȕ': 'U',\n    'Ù': 'U',\n    'Ủ': 'U',\n    'Ư': 'U',\n    'Ứ': 'U',\n    'Ự': 'U',\n    'Ừ': 'U',\n    'Ử': 'U',\n    'Ữ': 'U',\n    'Ȗ': 'U',\n    'Ū': 'U',\n    'Ṻ': 'U',\n    'Ų': 'U',\n    'Ů': 'U',\n    'Ũ': 'U',\n    'Ṹ': 'U',\n    'Ṵ': 'U',\n    'Ꝟ': 'V',\n    'Ṿ': 'V',\n    'Ʋ': 'V',\n    'Ṽ': 'V',\n    'Ꝡ': 'VY',\n    'Ẃ': 'W',\n    'Ŵ': 'W',\n    'Ẅ': 'W',\n    'Ẇ': 'W',\n    'Ẉ': 'W',\n    'Ẁ': 'W',\n    'Ⱳ': 'W',\n    'Ẍ': 'X',\n    'Ẋ': 'X',\n    'Ý': 'Y',\n    'Ŷ': 'Y',\n    'Ÿ': 'Y',\n    'Ẏ': 'Y',\n    'Ỵ': 'Y',\n    'Ỳ': 'Y',\n    'Ƴ': 'Y',\n    'Ỷ': 'Y',\n    'Ỿ': 'Y',\n    'Ȳ': 'Y',\n    'Ɏ': 'Y',\n    'Ỹ': 'Y',\n    'Ź': 'Z',\n    'Ž': 'Z',\n    'Ẑ': 'Z',\n    'Ⱬ': 'Z',\n    'Ż': 'Z',\n    'Ẓ': 'Z',\n    'Ȥ': 'Z',\n    'Ẕ': 'Z',\n    'Ƶ': 'Z',\n    'IJ': 'IJ',\n    'Œ': 'OE',\n    'ᴀ': 'A',\n    'ᴁ': 'AE',\n    'ʙ': 'B',\n    'ᴃ': 'B',\n    'ᴄ': 'C',\n    'ᴅ': 'D',\n    'ᴇ': 'E',\n    'ꜰ': 'F',\n    'ɢ': 'G',\n    'ʛ': 'G',\n    'ʜ': 'H',\n    'ɪ': 'I',\n    'ʁ': 'R',\n    'ᴊ': 'J',\n    'ᴋ': 'K',\n    'ʟ': 'L',\n    'ᴌ': 'L',\n    'ᴍ': 'M',\n    'ɴ': 'N',\n    'ᴏ': 'O',\n    'ɶ': 'OE',\n    'ᴐ': 'O',\n    'ᴕ': 'OU',\n    'ᴘ': 'P',\n    'ʀ': 'R',\n    'ᴎ': 'N',\n    'ᴙ': 'R',\n    'ꜱ': 'S',\n    'ᴛ': 'T',\n    'ⱻ': 'E',\n    'ᴚ': 'R',\n    'ᴜ': 'U',\n    'ᴠ': 'V',\n    'ᴡ': 'W',\n    'ʏ': 'Y',\n    'ᴢ': 'Z',\n    'á': 'a',\n    'ă': 'a',\n    'ắ': 'a',\n    'ặ': 'a',\n    'ằ': 'a',\n    'ẳ': 'a',\n    'ẵ': 'a',\n    'ǎ': 'a',\n    'â': 'a',\n    'ấ': 'a',\n    'ậ': 'a',\n    'ầ': 'a',\n    'ẩ': 'a',\n    'ẫ': 'a',\n    'ä': 'a',\n    'ǟ': 'a',\n    'ȧ': 'a',\n    'ǡ': 'a',\n    'ạ': 'a',\n    'ȁ': 'a',\n    'à': 'a',\n    'ả': 'a',\n    'ȃ': 'a',\n    'ā': 'a',\n    'ą': 'a',\n    'ᶏ': 'a',\n    'ẚ': 'a',\n    'å': 'a',\n    'ǻ': 'a',\n    'ḁ': 'a',\n    'ⱥ': 'a',\n    'ã': 'a',\n    'ꜳ': 'aa',\n    'æ': 'ae',\n    'ǽ': 'ae',\n    'ǣ': 'ae',\n    'ꜵ': 'ao',\n    'ꜷ': 'au',\n    'ꜹ': 'av',\n    'ꜻ': 'av',\n    'ꜽ': 'ay',\n    'ḃ': 'b',\n    'ḅ': 'b',\n    'ɓ': 'b',\n    'ḇ': 'b',\n    'ᵬ': 'b',\n    'ᶀ': 'b',\n    'ƀ': 'b',\n    'ƃ': 'b',\n    'ɵ': 'o',\n    'ć': 'c',\n    'č': 'c',\n    'ç': 'c',\n    'ḉ': 'c',\n    'ĉ': 'c',\n    'ɕ': 'c',\n    'ċ': 'c',\n    'ƈ': 'c',\n    'ȼ': 'c',\n    'ď': 'd',\n    'ḑ': 'd',\n    'ḓ': 'd',\n    'ȡ': 'd',\n    'ḋ': 'd',\n    'ḍ': 'd',\n    'ɗ': 'd',\n    'ᶑ': 'd',\n    'ḏ': 'd',\n    'ᵭ': 'd',\n    'ᶁ': 'd',\n    'đ': 'd',\n    'ɖ': 'd',\n    'ƌ': 'd',\n    'ı': 'i',\n    'ȷ': 'j',\n    'ɟ': 'j',\n    'ʄ': 'j',\n    'dz': 'dz',\n    'dž': 'dz',\n    'é': 'e',\n    'ĕ': 'e',\n    'ě': 'e',\n    'ȩ': 'e',\n    'ḝ': 'e',\n    'ê': 'e',\n    'ế': 'e',\n    'ệ': 'e',\n    'ề': 'e',\n    'ể': 'e',\n    'ễ': 'e',\n    'ḙ': 'e',\n    'ë': 'e',\n    'ė': 'e',\n    'ẹ': 'e',\n    'ȅ': 'e',\n    'è': 'e',\n    'ẻ': 'e',\n    'ȇ': 'e',\n    'ē': 'e',\n    'ḗ': 'e',\n    'ḕ': 'e',\n    'ⱸ': 'e',\n    'ę': 'e',\n    'ᶒ': 'e',\n    'ɇ': 'e',\n    'ẽ': 'e',\n    'ḛ': 'e',\n    'ꝫ': 'et',\n    'ḟ': 'f',\n    'ƒ': 'f',\n    'ᵮ': 'f',\n    'ᶂ': 'f',\n    'ǵ': 'g',\n    'ğ': 'g',\n    'ǧ': 'g',\n    'ģ': 'g',\n    'ĝ': 'g',\n    'ġ': 'g',\n    'ɠ': 'g',\n    'ḡ': 'g',\n    'ᶃ': 'g',\n    'ǥ': 'g',\n    'ḫ': 'h',\n    'ȟ': 'h',\n    'ḩ': 'h',\n    'ĥ': 'h',\n    'ⱨ': 'h',\n    'ḧ': 'h',\n    'ḣ': 'h',\n    'ḥ': 'h',\n    'ɦ': 'h',\n    'ẖ': 'h',\n    'ħ': 'h',\n    'ƕ': 'hv',\n    'í': 'i',\n    'ĭ': 'i',\n    'ǐ': 'i',\n    'î': 'i',\n    'ï': 'i',\n    'ḯ': 'i',\n    'ị': 'i',\n    'ȉ': 'i',\n    'ì': 'i',\n    'ỉ': 'i',\n    'ȋ': 'i',\n    'ī': 'i',\n    'į': 'i',\n    'ᶖ': 'i',\n    'ɨ': 'i',\n    'ĩ': 'i',\n    'ḭ': 'i',\n    'ꝺ': 'd',\n    'ꝼ': 'f',\n    'ᵹ': 'g',\n    'ꞃ': 'r',\n    'ꞅ': 's',\n    'ꞇ': 't',\n    'ꝭ': 'is',\n    'ǰ': 'j',\n    'ĵ': 'j',\n    'ʝ': 'j',\n    'ɉ': 'j',\n    'ḱ': 'k',\n    'ǩ': 'k',\n    'ķ': 'k',\n    'ⱪ': 'k',\n    'ꝃ': 'k',\n    'ḳ': 'k',\n    'ƙ': 'k',\n    'ḵ': 'k',\n    'ᶄ': 'k',\n    'ꝁ': 'k',\n    'ꝅ': 'k',\n    'ĺ': 'l',\n    'ƚ': 'l',\n    'ɬ': 'l',\n    'ľ': 'l',\n    'ļ': 'l',\n    'ḽ': 'l',\n    'ȴ': 'l',\n    'ḷ': 'l',\n    'ḹ': 'l',\n    'ⱡ': 'l',\n    'ꝉ': 'l',\n    'ḻ': 'l',\n    'ŀ': 'l',\n    'ɫ': 'l',\n    'ᶅ': 'l',\n    'ɭ': 'l',\n    'ł': 'l',\n    'lj': 'lj',\n    'ſ': 's',\n    'ẜ': 's',\n    'ẛ': 's',\n    'ẝ': 's',\n    'ḿ': 'm',\n    'ṁ': 'm',\n    'ṃ': 'm',\n    'ɱ': 'm',\n    'ᵯ': 'm',\n    'ᶆ': 'm',\n    'ń': 'n',\n    'ň': 'n',\n    'ņ': 'n',\n    'ṋ': 'n',\n    'ȵ': 'n',\n    'ṅ': 'n',\n    'ṇ': 'n',\n    'ǹ': 'n',\n    'ɲ': 'n',\n    'ṉ': 'n',\n    'ƞ': 'n',\n    'ᵰ': 'n',\n    'ᶇ': 'n',\n    'ɳ': 'n',\n    'ñ': 'n',\n    'nj': 'nj',\n    'ó': 'o',\n    'ŏ': 'o',\n    'ǒ': 'o',\n    'ô': 'o',\n    'ố': 'o',\n    'ộ': 'o',\n    'ồ': 'o',\n    'ổ': 'o',\n    'ỗ': 'o',\n    'ö': 'o',\n    'ȫ': 'o',\n    'ȯ': 'o',\n    'ȱ': 'o',\n    'ọ': 'o',\n    'ő': 'o',\n    'ȍ': 'o',\n    'ò': 'o',\n    'ỏ': 'o',\n    'ơ': 'o',\n    'ớ': 'o',\n    'ợ': 'o',\n    'ờ': 'o',\n    'ở': 'o',\n    'ỡ': 'o',\n    'ȏ': 'o',\n    'ꝋ': 'o',\n    'ꝍ': 'o',\n    'ⱺ': 'o',\n    'ō': 'o',\n    'ṓ': 'o',\n    'ṑ': 'o',\n    'ǫ': 'o',\n    'ǭ': 'o',\n    'ø': 'o',\n    'ǿ': 'o',\n    'õ': 'o',\n    'ṍ': 'o',\n    'ṏ': 'o',\n    'ȭ': 'o',\n    'ƣ': 'oi',\n    'ꝏ': 'oo',\n    'ɛ': 'e',\n    'ᶓ': 'e',\n    'ɔ': 'o',\n    'ᶗ': 'o',\n    'ȣ': 'ou',\n    'ṕ': 'p',\n    'ṗ': 'p',\n    'ꝓ': 'p',\n    'ƥ': 'p',\n    'ᵱ': 'p',\n    'ᶈ': 'p',\n    'ꝕ': 'p',\n    'ᵽ': 'p',\n    'ꝑ': 'p',\n    'ꝙ': 'q',\n    'ʠ': 'q',\n    'ɋ': 'q',\n    'ꝗ': 'q',\n    'ŕ': 'r',\n    'ř': 'r',\n    'ŗ': 'r',\n    'ṙ': 'r',\n    'ṛ': 'r',\n    'ṝ': 'r',\n    'ȑ': 'r',\n    'ɾ': 'r',\n    'ᵳ': 'r',\n    'ȓ': 'r',\n    'ṟ': 'r',\n    'ɼ': 'r',\n    'ᵲ': 'r',\n    'ᶉ': 'r',\n    'ɍ': 'r',\n    'ɽ': 'r',\n    'ↄ': 'c',\n    'ꜿ': 'c',\n    'ɘ': 'e',\n    'ɿ': 'r',\n    'ś': 's',\n    'ṥ': 's',\n    'š': 's',\n    'ṧ': 's',\n    'ş': 's',\n    'ŝ': 's',\n    'ș': 's',\n    'ṡ': 's',\n    'ṣ': 's',\n    'ṩ': 's',\n    'ʂ': 's',\n    'ᵴ': 's',\n    'ᶊ': 's',\n    'ȿ': 's',\n    'ɡ': 'g',\n    'ᴑ': 'o',\n    'ᴓ': 'o',\n    'ᴝ': 'u',\n    'ť': 't',\n    'ţ': 't',\n    'ṱ': 't',\n    'ț': 't',\n    'ȶ': 't',\n    'ẗ': 't',\n    'ⱦ': 't',\n    'ṫ': 't',\n    'ṭ': 't',\n    'ƭ': 't',\n    'ṯ': 't',\n    'ᵵ': 't',\n    'ƫ': 't',\n    'ʈ': 't',\n    'ŧ': 't',\n    'ᵺ': 'th',\n    'ɐ': 'a',\n    'ᴂ': 'ae',\n    'ǝ': 'e',\n    'ᵷ': 'g',\n    'ɥ': 'h',\n    'ʮ': 'h',\n    'ʯ': 'h',\n    'ᴉ': 'i',\n    'ʞ': 'k',\n    'ꞁ': 'l',\n    'ɯ': 'm',\n    'ɰ': 'm',\n    'ᴔ': 'oe',\n    'ɹ': 'r',\n    'ɻ': 'r',\n    'ɺ': 'r',\n    'ⱹ': 'r',\n    'ʇ': 't',\n    'ʌ': 'v',\n    'ʍ': 'w',\n    'ʎ': 'y',\n    'ꜩ': 'tz',\n    'ú': 'u',\n    'ŭ': 'u',\n    'ǔ': 'u',\n    'û': 'u',\n    'ṷ': 'u',\n    'ü': 'u',\n    'ǘ': 'u',\n    'ǚ': 'u',\n    'ǜ': 'u',\n    'ǖ': 'u',\n    'ṳ': 'u',\n    'ụ': 'u',\n    'ű': 'u',\n    'ȕ': 'u',\n    'ù': 'u',\n    'ủ': 'u',\n    'ư': 'u',\n    'ứ': 'u',\n    'ự': 'u',\n    'ừ': 'u',\n    'ử': 'u',\n    'ữ': 'u',\n    'ȗ': 'u',\n    'ū': 'u',\n    'ṻ': 'u',\n    'ų': 'u',\n    'ᶙ': 'u',\n    'ů': 'u',\n    'ũ': 'u',\n    'ṹ': 'u',\n    'ṵ': 'u',\n    'ᵫ': 'ue',\n    'ꝸ': 'um',\n    'ⱴ': 'v',\n    'ꝟ': 'v',\n    'ṿ': 'v',\n    'ʋ': 'v',\n    'ᶌ': 'v',\n    'ⱱ': 'v',\n    'ṽ': 'v',\n    'ꝡ': 'vy',\n    'ẃ': 'w',\n    'ŵ': 'w',\n    'ẅ': 'w',\n    'ẇ': 'w',\n    'ẉ': 'w',\n    'ẁ': 'w',\n    'ⱳ': 'w',\n    'ẘ': 'w',\n    'ẍ': 'x',\n    'ẋ': 'x',\n    'ᶍ': 'x',\n    'ý': 'y',\n    'ŷ': 'y',\n    'ÿ': 'y',\n    'ẏ': 'y',\n    'ỵ': 'y',\n    'ỳ': 'y',\n    'ƴ': 'y',\n    'ỷ': 'y',\n    'ỿ': 'y',\n    'ȳ': 'y',\n    'ẙ': 'y',\n    'ɏ': 'y',\n    'ỹ': 'y',\n    'ź': 'z',\n    'ž': 'z',\n    'ẑ': 'z',\n    'ʑ': 'z',\n    'ⱬ': 'z',\n    'ż': 'z',\n    'ẓ': 'z',\n    'ȥ': 'z',\n    'ẕ': 'z',\n    'ᵶ': 'z',\n    'ᶎ': 'z',\n    'ʐ': 'z',\n    'ƶ': 'z',\n    'ɀ': 'z',\n    'ff': 'ff',\n    'ffi': 'ffi',\n    'ffl': 'ffl',\n    'fi': 'fi',\n    'fl': 'fl',\n    'ij': 'ij',\n    'œ': 'oe',\n    'st': 'st',\n    'ₐ': 'a',\n    'ₑ': 'e',\n    'ᵢ': 'i',\n    'ⱼ': 'j',\n    'ₒ': 'o',\n    'ᵣ': 'r',\n    'ᵤ': 'u',\n    'ᵥ': 'v',\n    'ₓ': 'x',\n    'Ё': 'YO',\n    'Й': 'I',\n    'Ц': 'TS',\n    'У': 'U',\n    'К': 'K',\n    'Е': 'E',\n    'Н': 'N',\n    'Г': 'G',\n    'Ш': 'SH',\n    'Щ': 'SCH',\n    'З': 'Z',\n    'Х': 'H',\n    'Ъ': \"'\",\n    'ё': 'yo',\n    'й': 'i',\n    'ц': 'ts',\n    'у': 'u',\n    'к': 'k',\n    'е': 'e',\n    'н': 'n',\n    'г': 'g',\n    'ш': 'sh',\n    'щ': 'sch',\n    'з': 'z',\n    'х': 'h',\n    'ъ': \"'\",\n    'Ф': 'F',\n    'Ы': 'I',\n    'В': 'V',\n    'А': 'a',\n    'П': 'P',\n    'Р': 'R',\n    'О': 'O',\n    'Л': 'L',\n    'Д': 'D',\n    'Ж': 'ZH',\n    'Э': 'E',\n    'ф': 'f',\n    'ы': 'i',\n    'в': 'v',\n    'а': 'a',\n    'п': 'p',\n    'р': 'r',\n    'о': 'o',\n    'л': 'l',\n    'д': 'd',\n    'ж': 'zh',\n    'э': 'e',\n    'Я': 'Ya',\n    'Ч': 'CH',\n    'С': 'S',\n    'М': 'M',\n    'И': 'I',\n    'Т': 'T',\n    'Ь': \"'\",\n    'Б': 'B',\n    'Ю': 'YU',\n    'я': 'ya',\n    'ч': 'ch',\n    'с': 's',\n    'м': 'm',\n    'и': 'i',\n    'т': 't',\n    'ь': \"'\",\n    'б': 'b',\n    'ю': 'yu'\n  };\n\n  return latinize;\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/latinize/latinize.js\n ** module id = 65\n ** module chunks = 0 1\n **/","import { Utils } from './Utils';\nimport { l } from '../strings/Strings';\nimport _ = require('underscore');\n\nexport class EmailUtils {\n  static splitSemicolonSeparatedListOfEmailAddresses(addresses: string): string[] {\n    var addressesAsList: string[] = addresses.split(/\\s*;\\s*/);\n    return _.filter(addressesAsList, (s: string) => {\n      return Utils.exists(s) && Utils.isNonEmptyString(Utils.trim(s));\n    });\n  }\n\n  static emailAddressesToHyperlinks(addresses: string[], companyDomain?: string, me?: string, lengthLimit = 2, truncateName = false): string {\n    addresses = _.filter(addresses, (s: string) => {\n      return Utils.exists(s) && Utils.isNonEmptyString(Utils.trim(s));\n    });\n    var hyperlinks = _.map(addresses, (item) => {\n      var emailArray = EmailUtils.parseEmail(item);\n      var email = emailArray[1];\n      var name = emailArray[0];\n      if (Utils.exists(me) && email == me) {\n        name = l('Me');\n      }\n      if (truncateName) {\n        var split = name.split(' ');\n        if (!Utils.isNullOrUndefined(split[1])) {\n          name = split[0] + ' ' + split[1].substring(0, 1) + '.';\n        }\n      }\n      var domainIndex = email.indexOf('@') >= 0 ? email.indexOf('@') + 1 : 0;\n      var domain = email.substr(domainIndex);\n      if (Utils.exists(companyDomain) && domain != companyDomain) {\n        name += ' (' + domain + ')';\n      }\n\n      return '<a title=\"' + item.replace(/'/g, '&quot;') + '\" href=\"mailto:' + encodeURI(email) + '\">' + name + '</a>';\n    });\n    var excess = hyperlinks.length - lengthLimit;\n    var andOthers = excess > 0 ? EmailUtils.buildEmailAddressesAndOthers(_.last(hyperlinks, excess)) : '';\n    return _.first(hyperlinks, lengthLimit).join(', ') + andOthers;\n  }\n\n  static buildEmailAddressesAndOthers(excessHyperLinks: string[]) {\n    return '<span class=\"coveo-emails-excess-collapsed coveo-active\" onclick=\"Coveo.TemplateHelpers.getHelper(\\'excessEmailToggle\\')(this);\"> ' + l('AndOthers', excessHyperLinks.length.toString(), excessHyperLinks.length) + '</span>' +\n      '<span class=\"coveo-emails-excess-expanded\"> , ' + excessHyperLinks.join(' , ') + '</span>';\n  }\n\n  static parseEmail(email: string): string[] {\n    let name: string;\n    let match = (<string>email).match(/^\\s*(.*)\\s+<(.*)>$/);\n    if (match != null) {\n      name = match[1];\n      if (/^'.*'|'.*'$/.test(name)) {\n        name = name.substr(1, name.length - 2);\n      }\n      email = match[2];\n    } else {\n      name = <string>email;\n      email = <string>email;\n    }\n    return [name, email];\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/EmailUtils.ts\n **/","import { Assert } from '../misc/Assert';\nimport { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\ninterface IHashUtils {\n  getHash(w: any);\n  getValue();\n  encodeValues();\n}\n\nexport class HashUtils {\n  private static DELIMITER = {\n    'objectStart': '{',\n    'objectEnd': '}',\n    'arrayStart': '[',\n    'arrayEnd': ']',\n    'objectStartRegExp': '^{',\n    'objectEndRegExp': '}+$',\n    'arrayStartRegExp': '^[',\n    'arrayEndRegExp': ']+$'\n  };\n\n  public static getHash(w = window): string {\n    Assert.exists(w);\n\n    // window.location.hash returns the DECODED hash on Firefox (it's a well known bug),\n    // so any & in values will be already unescaped. This breaks our value splitting.\n    // The following trick works on all browsers.\n    let ret = '#' + (w.location.href.split('#')[1] || '');\n    return HashUtils.getAjaxcrawlableHash(ret);\n  }\n\n  public static getValue(key: string, toParse: string): any {\n    Assert.isNonEmptyString(key);\n    Assert.exists(toParse);\n    toParse = HashUtils.getAjaxcrawlableHash(toParse);\n    let paramValue = HashUtils.getRawValue(key, toParse);\n    if (paramValue != undefined) {\n      paramValue = HashUtils.getValueDependingOnType(key, paramValue);\n    }\n    return paramValue;\n  }\n\n  public static encodeValues(values: {}): string {\n    let hash: String[] = [];\n    _.each(<_.Dictionary<any>>values, (valueToEncode, key, obj?) => {\n      let encodedValue = '';\n      if (Utils.isNonEmptyArray(valueToEncode)) {\n        encodedValue = HashUtils.encodeArray(valueToEncode);\n      } else if (_.isObject(valueToEncode) && Utils.isNonEmptyArray(_.keys(valueToEncode))) {\n        encodedValue = HashUtils.encodeObject(valueToEncode);\n      } else if (!Utils.isNullOrUndefined(valueToEncode)) {\n        encodedValue = encodeURIComponent(valueToEncode.toString());\n      }\n      if (encodedValue != '') {\n        hash.push(key + '=' + encodedValue);\n      }\n    });\n\n    return hash.join('&');\n  }\n\n  private static getAjaxcrawlableHash(hash: string) {\n    if (hash[1] != undefined && hash[1] == '!') {\n      return hash.substring(0, 1) + hash.substring(2);\n    } else {\n      return hash;\n    }\n  }\n\n  private static getRawValue(key: string, toParse: string): string {\n    Assert.exists(key);\n    Assert.exists(toParse);\n    Assert.check(toParse.indexOf('#') == 0 || toParse == '');\n\n    let toParseArray = toParse.substr(1).split('&');\n    let paramPos = 0;\n    let loop = true;\n    let paramValue: string = undefined;\n    while (loop) {\n      let paramValuePair = toParseArray[paramPos].split('=');\n      if (paramValuePair[0] == key) {\n        loop = false;\n        paramValue = paramValuePair[1];\n      } else {\n        paramPos++;\n        if (paramPos >= toParseArray.length) {\n          paramPos = undefined;\n          loop = false;\n        }\n      }\n    }\n    return paramValue;\n  }\n\n  private static getValueDependingOnType(key: string, paramValue: string): any {\n    let type = HashUtils.getValueType(key, paramValue);\n    let returnValue;\n\n    if (type == 'object') {\n      returnValue = HashUtils.decodeObject(paramValue);\n    } else if (type == 'array') {\n      returnValue = HashUtils.decodeArray(paramValue);\n    } else {\n      returnValue = decodeURIComponent(paramValue);\n    }\n    return returnValue;\n  }\n\n  private static getValueType(key: string, paramValue: string): string {\n    if (key == 'q') {\n      return 'other';\n    } else if (HashUtils.isObject(paramValue)) {\n      return 'object';\n    } else if (HashUtils.isArray(paramValue)) {\n      return 'array';\n    } else {\n      return 'other';\n    }\n  }\n\n  private static isArrayStartNotEncoded(value: string) {\n    return value.substr(0, 1) == HashUtils.DELIMITER.arrayStart;\n  }\n\n  private static isArrayStartEncoded(value: string) {\n    return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.arrayStart)) == 0;\n  }\n\n  private static isArrayEndNotEncoded(value: string) {\n    return value.substr(value.length - 1);\n  }\n\n  private static isArrayEndEncoded(value: string) {\n    return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.arrayEnd)) == value.length - encodeURIComponent(HashUtils.DELIMITER.arrayEnd).length;\n  }\n\n  private static isObjectStartNotEncoded(value: string) {\n    return value.substr(0, 1) == HashUtils.DELIMITER.objectStart;\n  }\n\n  private static isObjectStartEncoded(value: string) {\n    return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.objectStart)) == 0;\n  }\n\n  private static isObjectEndNotEncoded(value: string) {\n    return value.substr(value.length - 1) == HashUtils.DELIMITER.objectEnd;\n  }\n\n  private static isObjectEndEncoded(value: string) {\n    return value.indexOf(encodeURIComponent(HashUtils.DELIMITER.objectEnd)) == value.length - encodeURIComponent(HashUtils.DELIMITER.objectEnd).length;\n  }\n\n  private static isObject(value: string) {\n    let isObjectStart = HashUtils.isObjectStartNotEncoded(value) || HashUtils.isObjectStartEncoded(value);\n    let isObjectEnd = HashUtils.isObjectEndNotEncoded(value) || HashUtils.isObjectEndEncoded(value);\n    return isObjectStart && isObjectEnd;\n  }\n\n  private static isArray(value: string) {\n    let isArrayStart = HashUtils.isArrayStartNotEncoded(value) || HashUtils.isArrayStartEncoded(value);\n    let isArrayEnd = HashUtils.isArrayEndNotEncoded(value) || HashUtils.isArrayEndEncoded(value);\n    return isArrayStart && isArrayEnd;\n  }\n\n  public static encodeArray(array: string[]): string {\n    let arrayReturn = _.map(array, (value) => {\n      return encodeURIComponent(value);\n    });\n    return HashUtils.DELIMITER.arrayStart + arrayReturn.join(',') + HashUtils.DELIMITER.arrayEnd;\n  }\n\n  public static encodeObject(obj: Object): string {\n    let retArray = _.map(<_.Dictionary<any>>obj, (val, key?, obj?) => {\n      return `\"${encodeURIComponent(key)}\":${this.encodeValue(val)}`;\n    });\n    return HashUtils.DELIMITER.objectStart + retArray.join(' , ') + HashUtils.DELIMITER.objectEnd;\n  }\n\n  private static encodeValue(val: any) {\n    let encodedValue = '';\n    if (_.isArray(val)) {\n      encodedValue = HashUtils.encodeArray(val);\n    } else if (_.isObject(val)) {\n      encodedValue = HashUtils.encodeObject(val);\n    } else if (_.isNumber(val) || _.isBoolean(val)) {\n      encodedValue = encodeURIComponent(val.toString());\n    } else {\n      encodedValue = '\"' + encodeURIComponent(val) + '\"';\n    }\n    return encodedValue;\n  }\n\n  private static decodeObject(obj: string): Object {\n    if (HashUtils.isObjectStartEncoded(obj) && HashUtils.isObjectEndEncoded(obj)) {\n      obj = obj.replace(/encodeURIComponent(HashUtils.Delimiter.objectStart)/, HashUtils.DELIMITER.objectStart);\n      obj = obj.replace(encodeURIComponent(HashUtils.DELIMITER.objectEnd), HashUtils.DELIMITER.objectEnd);\n    }\n    return JSON.parse(decodeURIComponent(obj));\n  }\n\n  private static decodeArray(value: string): any[] {\n    if (HashUtils.isArrayStartEncoded(value) && HashUtils.isArrayEndEncoded(value)) {\n      value = value.replace(encodeURIComponent(HashUtils.DELIMITER.arrayStart), HashUtils.DELIMITER.arrayStart);\n      value = value.replace(encodeURIComponent(HashUtils.DELIMITER.arrayEnd), HashUtils.DELIMITER.arrayEnd);\n    }\n    value = value.substr(1);\n    value = value.substr(0, value.length - 1);\n    let array = value.split(',');\n    return _.map(array, (val) => {\n      return decodeURIComponent(val);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/HashUtils.ts\n **/","import { Utils } from './Utils';\nimport { IHighlight } from '../rest/Highlight';\nimport { Assert } from '../misc/Assert';\nimport _ = require('underscore');\n\nexport interface IStringHole {\n  begin: number;\n  size: number;\n  replacementSize: number;\n}\n\nexport class StringAndHoles {\n  value: string;\n  holes: IStringHole[];\n\n  static SHORTEN_END: string = '...';\n  static WORD_SHORTER: number = 10;\n\n  static replace(str: string, find: string, replace: string): StringAndHoles {\n    const strAndHoles = new StringAndHoles();\n\n    if (Utils.isNullOrEmptyString(str)) {\n      return strAndHoles;\n    }\n\n    let index = str.lastIndexOf(find);\n    if (index == -1) {\n      strAndHoles.value = str;\n      return strAndHoles;\n    }\n\n    const holes: IStringHole[] = [];\n    while (index >= 0) {\n      const hole = <IStringHole>{\n        begin: index,\n        size: find.length,\n        replacementSize: replace.length\n      };\n      holes.push(hole);\n      str = str.slice(0, index) + replace + str.slice(index + find.length);\n      index = str.lastIndexOf(find);\n    }\n\n    strAndHoles.holes = holes;\n    strAndHoles.value = str;\n    return strAndHoles;\n  }\n\n  /**\n   * Shorten the passed path intelligently (path-aware).\n   * Works with *local paths* and *network paths*\n   * @param uriOrig The path to shorten\n   * @param length The length to which the path will be shortened.\n   */\n  static shortenPath(uriOrig: string, length: number): StringAndHoles {\n    const strAndHoles = new StringAndHoles();\n    let uri = uriOrig;\n    if (Utils.isNullOrEmptyString(uri) || (uri.length <= length)) {\n      strAndHoles.value = uri;\n      return strAndHoles;\n    }\n\n    const holes: IStringHole[] = [];\n\n    let first = -1;\n    if (Utils.stringStartsWith(uri, '\\\\\\\\')) {\n      first = uri.indexOf('\\\\', first + 2);\n    } else {\n      first = uri.indexOf('\\\\');\n    }\n\n    if (first !== -1) {\n      let removed = 0;\n      let next = uri.indexOf('\\\\', first + 1);\n      while (next !== -1 && uri.length - removed + StringAndHoles.SHORTEN_END.length > length) {\n        removed = next - first - 1;\n        next = uri.indexOf('\\\\', next + 1);\n      }\n\n      if (removed > 0) {\n        uri = uri.slice(0, first + 1) + StringAndHoles.SHORTEN_END + uri.slice(removed);\n        const hole = <IStringHole>{\n          begin: first + 1,\n          size: removed - StringAndHoles.SHORTEN_END.length,\n          replacementSize: StringAndHoles.SHORTEN_END.length\n        };\n        holes.push(hole);\n      }\n    }\n\n    if (uri.length > length) {\n      const over = uri.length - length + StringAndHoles.SHORTEN_END.length;\n      const start = uri.length - over;\n      uri = uri.slice(0, start) + StringAndHoles.SHORTEN_END;\n      const hole = <IStringHole>{\n        begin: start,\n        size: over,\n        replacementSize: StringAndHoles.SHORTEN_END.length\n      };\n      holes.push(hole);\n    }\n\n    strAndHoles.holes = holes;\n    strAndHoles.value = uri;\n    return strAndHoles;\n  }\n\n  /**\n   * Shorten the passed string.\n   * @param toShortenOrig The string to shorten\n   * @param length The length to which the string will be shortened.\n   * @param toAppend The string to append at the end (usually, it is set to '...')\n   */\n  static shortenString(toShortenOrig: string, length: number = 200, toAppend?: string): StringAndHoles {\n    const toShorten = toShortenOrig;\n    toAppend = Utils.toNotNullString(toAppend);\n    const strAndHoles = new StringAndHoles();\n    if (Utils.isNullOrEmptyString(toShorten) || length <= toAppend.length) {\n      strAndHoles.value = toShorten;\n      return strAndHoles;\n    }\n\n    if (toShorten.length <= length) {\n      strAndHoles.value = toShorten;\n      return strAndHoles;\n    }\n\n    let str = toShorten;\n\n    length = length - toAppend.length;\n    str = str.slice(0, length);\n\n    if (toShorten.charAt(str.length) !== ' ') {\n      const pos = str.lastIndexOf(' ');\n      if (pos !== -1 && str.length - pos < StringAndHoles.WORD_SHORTER) {\n        str = str.slice(0, pos);\n      }\n    }\n    const holes: IStringHole[] = [];\n    holes[0] = <IStringHole>{\n      begin: str.length,\n      size: toShorten.length - str.length,\n      replacementSize: toAppend.length\n    };\n    str += toAppend;\n    strAndHoles.value = str;\n    strAndHoles.holes = holes;\n    return strAndHoles;\n  }\n\n  /**\n   * Shorten the passed URI intelligently (path-aware).\n   * @param toShortenOrig The URI to shorten\n   * @param length The length to which the URI will be shortened.\n   */\n  static shortenUri(uri: string, length: number): StringAndHoles {\n    const strAndHoles = new StringAndHoles();\n    if (Utils.isNullOrEmptyString(uri) || (uri.length <= length)) {\n      strAndHoles.value = uri;\n      return strAndHoles;\n    }\n\n    const holes: IStringHole[] = [];\n\n    let first = uri.indexOf('//');\n    if (first !== -1) {\n      first = uri.indexOf('/', first + 2);\n    }\n\n    if (first !== -1) {\n      let removed = 0;\n      let next = uri.indexOf('/', first + 1);\n      while (next !== -1 && uri.length - removed + StringAndHoles.SHORTEN_END.length > length) {\n        removed = next - first - 1;\n        next = uri.indexOf('/', next + 1);\n      }\n\n      if (removed > 0) {\n        uri = uri.slice(0, first + 1) + StringAndHoles.SHORTEN_END + uri.slice(first + 1 + removed);\n        const hole = <IStringHole>{\n          begin: first + 1,\n          size: removed,\n          replacementSize: StringAndHoles.SHORTEN_END.length\n        };\n        holes.push(hole);\n      }\n    }\n\n    if (uri.length > length) {\n      const over = uri.length - length + StringAndHoles.SHORTEN_END.length;\n      const start = uri.length - over;\n      uri = uri.slice(0, start) + StringAndHoles.SHORTEN_END;\n      const hole = <IStringHole>{\n        begin: start,\n        size: over,\n        replacementSize: StringAndHoles.SHORTEN_END.length\n      };\n      holes.push(hole);\n    }\n\n    strAndHoles.holes = holes;\n    strAndHoles.value = uri;\n    return strAndHoles;\n  }\n}\n\nexport class HighlightUtils {\n  /**\n   * Highlight the passed string using specified highlights and holes.\n   * @param content The string to highlight items in.\n   * @param highlights The highlighted positions to highlight in the string.\n   * @param holes Possible holes which are used to skip highlighting.\n   * @param cssClass The css class to use on the highlighting `span`.\n   */\n  static highlightString(content: string, highlights: IHighlight[], holes: IStringHole[], cssClass: string): string {\n    Assert.isNotUndefined(highlights);\n    Assert.isNotNull(highlights);\n    Assert.isNonEmptyString(cssClass);\n    if (Utils.isNullOrEmptyString(content)) {\n      return content;\n    }\n    const maxIndex = content.length;\n    let highlighted = '';\n    let last = 0;\n    for (let i = 0; i < highlights.length; i++) {\n      const highlight = highlights[i];\n      let start: number = highlight.offset;\n      let end: number = start + highlight.length;\n\n      if (holes !== null) {\n        let skip = false;\n        for (let j = 0; j < holes.length; j++) {\n          const hole = holes[j];\n          const holeBegin = hole.begin;\n          const holeEnd = holeBegin + hole.size;\n          if (start < holeBegin && end >= holeBegin && end < holeEnd) {\n            end = holeBegin;\n          } else if (start >= holeBegin && end < holeEnd) {\n            skip = true;\n            break;\n          } else if (start >= holeBegin && start < holeEnd && end >= holeEnd) {\n            start = holeBegin + hole.replacementSize;\n            end -= hole.size - hole.replacementSize;\n          } else if (start < holeBegin && end >= holeEnd) {\n            end -= hole.size - hole.replacementSize;\n          } else if (start >= holeEnd) {\n            const offset = hole.size - hole.replacementSize;\n            start -= offset;\n            end -= offset;\n          }\n        }\n        if (skip || start === end) {\n          continue;\n        }\n      }\n\n      if (end > maxIndex) {\n        break;\n      }\n\n      highlighted += _.escape(content.slice(last, start));\n      highlighted += `<span class=\"${cssClass}\"`;\n      if (highlight.dataHighlightGroup) {\n        highlighted += ` data-highlight-group=\"${highlight.dataHighlightGroup.toString()}\"`;\n      }\n      if (highlight.dataHighlightGroupTerm) {\n        highlighted += ` data-highlight-group-term=\"${highlight.dataHighlightGroupTerm}\"`;\n      }\n      highlighted += '>';\n      highlighted += _.escape(content.slice(start, end));\n      highlighted += '</span>';\n\n      last = end;\n    }\n    if (last != maxIndex) {\n      highlighted += _.escape(content.slice(last));\n    }\n    return highlighted;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/HighlightUtils.ts\n **/","import { DeviceUtils } from './DeviceUtils';\nimport { IQueryResult } from '../rest/QueryResult';\nimport { SearchEndpoint } from '../rest/SearchEndpoint';\nimport _ = require('underscore');\n\n/**\n * Options for building an `<a>` tag.\n */\nexport interface IAnchorUtilsOptions {\n  /**\n   * The tag's text content.\n   */\n  text?: string;\n  /**\n   * The target (`href` attribute).\n   */\n  target?: string;\n  /**\n   * The CSS class(es) of the tag.\n   */\n  class?: string;\n}\n\n/**\n * Options for building an `<img>` tag.\n */\nexport interface IImageUtilsOptions {\n  /**\n   * The alternative text for the image (`alt` attribute).\n   */\n  alt?: string;\n  /**\n   * The height of the image\n   */\n  height?: string;\n  /**\n   * The width of the image\n   */\n  width?: string;\n}\n\nexport class HTMLUtils {\n  static buildAttributeString(options: any): string {\n    var ret = [];\n    _.each(options, (val: any, key?: string, obj?) => {\n      if (val != undefined) {\n        ret.push(key + '=' + JSON.stringify(val.toString()));\n      }\n    });\n    return ret.join(' ');\n  }\n}\n\nexport class AnchorUtils {\n  static buildAnchor(href: string, options?: IAnchorUtilsOptions) {\n    var text;\n    if (!options || !options.text) {\n      text = href;\n    } else {\n      text = options.text;\n      options.text = undefined;\n    }\n    return `<a href='${href}' ${HTMLUtils.buildAttributeString(options)}>${text}</a>`;\n  }\n}\n\nexport class ImageUtils {\n  static buildImage(src?: string, options?: IImageUtilsOptions) {\n    var ret = '<img ';\n    ret += src ? `src='${src}' ` : '';\n    ret += HTMLUtils.buildAttributeString(options) + '/>';\n    return ret;\n  }\n\n  static selectImageFromResult(result: IQueryResult): HTMLElement {\n    return <HTMLElement>document.querySelector(`img[data-coveo-uri-hash=${result.raw['urihash']}]`);\n  }\n\n  static buildImageWithDirectSrcAttribute(endpoint: SearchEndpoint, result: IQueryResult) {\n    var image = new Image();\n    var dataStreamUri = endpoint.getViewAsDatastreamUri(result.uniqueId, '$Thumbnail$', { contentType: 'image/png' });\n    image.onload = () => {\n      ImageUtils.selectImageFromResult(result).setAttribute('src', dataStreamUri);\n    };\n    image.src = dataStreamUri;\n  }\n\n  static buildImageWithBase64SrcAttribute(endpoint: SearchEndpoint, result: IQueryResult) {\n    endpoint.getRawDataStream(result.uniqueId, '$Thumbnail$')\n      .then((response) => {\n        var rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));\n        ImageUtils.selectImageFromResult(result).setAttribute('src', 'data:image/png;base64, ' + btoa(rawBinary));\n      })\n      .catch(() => {\n        ImageUtils.selectImageFromResult(result).remove();\n      });\n  }\n\n  static buildImageFromResult(result: IQueryResult, endpoint: SearchEndpoint, options?: IImageUtilsOptions) {\n    options = options ? options : <IImageUtilsOptions>{};\n\n    let img = ImageUtils.buildImage(undefined, _.extend(options, { 'data-coveo-uri-hash': result.raw['urihash'] }));\n    if (endpoint.isJsonp() || DeviceUtils.isIE8or9()) {\n      // For jsonp and IE8-9 (XDomain) we can't GET/POST for binary data. We are limited to only setting the src attribute directly on the img.\n      ImageUtils.buildImageWithDirectSrcAttribute(endpoint, result);\n    } else {\n      // Base 64 img allows us to GET/POST the image as raw binary, so that we can also pass the credential of the user\n      // Useful for phonegap.\n      ImageUtils.buildImageWithBase64SrcAttribute(endpoint, result);\n    }\n    return img;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/HtmlUtils.ts\n **/","import { Utils } from './Utils';\nimport _ = require('underscore');\n\nexport enum KEYBOARD {\n  BACKSPACE = 8,\n  TAB = 9,\n  ENTER = 13,\n  SHIFT = 16,\n  CTRL = 17,\n  ALT = 18,\n  ESCAPE = 27,\n  SPACEBAR = 32,\n  PAGE_UP = 33,\n  PAGE_DOWN = 34,\n  HOME = 36,\n  LEFT_ARROW = 37,\n  UP_ARROW = 38,\n  RIGHT_ARROW = 39,\n  DOWN_ARROW = 40,\n  INSERT = 45,\n  DELETE = 46\n}\n\nexport class KeyboardUtils {\n  static keysEqual(key, code) {\n    if (!Utils.isNullOrUndefined(key.keyCode)) {\n      return key.keyCode == code;\n    } else if (!Utils.isNullOrUndefined(key.which)) {\n      return key.which == code;\n    }\n    return false;\n  }\n\n  static isAllowedKeyForOmnibox(e: KeyboardEvent): boolean {\n    var keycode = e.keyCode;\n    var valid =\n      (KeyboardUtils.isNumberKeyPushed(keycode)) ||\n      (keycode == 32 || keycode == 13) || // spacebar & return key(s)\n      (KeyboardUtils.isLetterKeyPushed(keycode)) ||\n      (keycode > 95 && keycode < 112) || // numpad keys\n      (keycode > 185 && keycode < 193) || // ;=,-./` (in order)\n      (keycode > 218 && keycode < 223) || // [\\]' (in order)\n      (keycode == KEYBOARD.BACKSPACE || keycode == KEYBOARD.DELETE) ||\n      (KeyboardUtils.isArrowKeyPushed(keycode));\n\n    return valid;\n  }\n\n  static isAllowedKeyForSearchAsYouType(e: KeyboardEvent): boolean {\n    return KeyboardUtils.isAllowedKeyForOmnibox(e) && !KeyboardUtils.isArrowKeyPushed(e.keyCode);\n  }\n\n  static isDeleteOrBackspace(e: KeyboardEvent) {\n    return KeyboardUtils.keysEqual(e, KEYBOARD.BACKSPACE) || KeyboardUtils.keysEqual(e, KEYBOARD.DELETE);\n  }\n\n  static isArrowKeyPushed(keycode: number): boolean {\n    return keycode == KEYBOARD.LEFT_ARROW ||\n      keycode == KEYBOARD.UP_ARROW ||\n      keycode == KEYBOARD.RIGHT_ARROW ||\n      keycode == KEYBOARD.DOWN_ARROW;\n  }\n\n  static isNumberKeyPushed(keycode: number): boolean {\n    return keycode > 47 && keycode < 58;\n  }\n\n  static isLetterKeyPushed(keycode: number): boolean {\n    return keycode > 64 && keycode < 91;\n  }\n\n  // Return a keyboard event listener that only executes the function if certain keys are pressed.\n  static keypressAction(keyCode: KEYBOARD | KEYBOARD[], action: Function) {\n    return (e: KeyboardEvent, ...data: any[]) => {\n      if (e) {\n        const eventCode = e.charCode || e.keyCode;\n        if (eventCode) {\n          if (_.isArray(keyCode) && _.contains(keyCode, eventCode)) {\n            action(e);\n          } else if (eventCode === keyCode) {\n            action(e);\n          }\n        }\n      }\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/KeyboardUtils.ts\n **/","var localStorage = window.localStorage;\nexport class LocalStorageUtils<T> {\n  constructor(public id: string) {\n  }\n\n  public save(data: T) {\n    try {\n      if (localStorage != null) {\n        localStorage.setItem(this.getLocalStorageKey(), JSON.stringify(data));\n      }\n    } catch (error) {\n    }\n  }\n\n  public load(): T {\n    try {\n      if (localStorage == null) {\n        return null;\n      }\n      var value = localStorage.getItem(this.getLocalStorageKey());\n      return value && JSON.parse(value);\n    } catch (error) {\n      return null;\n    }\n  }\n\n  public remove(key?: string) {\n    try {\n      if (localStorage != null) {\n        if (key == undefined) {\n          localStorage.removeItem(this.getLocalStorageKey());\n        } else {\n          var oldObj = this.load();\n          delete oldObj[key];\n          this.save(oldObj);\n        }\n      }\n    } catch (error) {\n    }\n  }\n\n  private getLocalStorageKey() {\n    return 'coveo-' + this.id;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/LocalStorageUtils.ts\n **/","export enum OS_NAME {\n  WINDOWS,\n  MACOSX,\n  UNIX,\n  LINUX,\n  UNKNOWN\n}\n\nexport class OSUtils {\n  static get(nav = navigator) {\n    var osName;\n    if (nav.appVersion.indexOf('Win') != -1) {\n      osName = OS_NAME.WINDOWS;\n    } else if (nav.appVersion.indexOf('Mac') != -1) {\n      osName = OS_NAME.MACOSX;\n    } else if (nav.appVersion.indexOf('X11') != -1) {\n      osName = OS_NAME.UNIX;\n    } else if (nav.appVersion.indexOf('Linux') != -1) {\n      osName = OS_NAME.LINUX;\n    } else {\n      osName = OS_NAME.UNKNOWN;\n    }\n    return osName;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/OSUtils.ts\n **/","import { $$, IOffset } from './Dom';\n\nexport interface IPosition {\n  vertical: VerticalAlignment;\n  horizontal: HorizontalAlignment;\n  verticalOffset?: number;\n  horizontalOffset?: number;\n  horizontalClip?: boolean;\n}\n\nexport enum VerticalAlignment {\n  TOP,\n  MIDDLE,\n  BOTTOM,\n  INNERTOP,\n  INNERBOTTOM\n}\n\nexport enum HorizontalAlignment {\n  LEFT,\n  CENTER,\n  RIGHT,\n  INNERLEFT,\n  INNERRIGHT\n}\n\ninterface IElementBoundary {\n  top: number;\n  left: number;\n  right: number;\n  bottom: number;\n}\n\nexport class PopupUtils {\n  static positionPopup(popUp: HTMLElement, nextTo: HTMLElement, boundary: HTMLElement, desiredPosition: IPosition, appendTo?: HTMLElement, checkForBoundary = 0) {\n    popUp.style.position = 'absolute';\n    if (appendTo) {\n      $$(appendTo).append(popUp);\n    }\n    desiredPosition.verticalOffset = desiredPosition.verticalOffset ? desiredPosition.verticalOffset : 0;\n    desiredPosition.horizontalOffset = desiredPosition.horizontalOffset ? desiredPosition.horizontalOffset : 0;\n\n    let popUpPosition = $$(nextTo).offset();\n    PopupUtils.basicVerticalAlignment(popUpPosition, popUp, nextTo, desiredPosition);\n    PopupUtils.basicHorizontalAlignment(popUpPosition, popUp, nextTo, desiredPosition);\n    PopupUtils.finalAdjustement($$(popUp).offset(), popUpPosition, popUp, desiredPosition);\n\n    let popUpBoundary = PopupUtils.getBoundary(popUp);\n    let boundaryPosition = PopupUtils.getBoundary(boundary);\n    if (checkForBoundary < 2) {\n      let checkBoundary = PopupUtils.checkForOutOfBoundary(popUpBoundary, boundaryPosition);\n      if (checkBoundary.horizontal != 'ok' && desiredPosition.horizontalClip === true) {\n        let width = popUp.offsetWidth;\n        if (popUpBoundary.left < boundaryPosition.left) {\n          width -= boundaryPosition.left - popUpBoundary.left;\n        }\n        if (popUpBoundary.right > boundaryPosition.right) {\n          width -= popUpBoundary.right - boundaryPosition.right;\n        }\n        popUp.style.width = width + 'px';\n        checkBoundary.horizontal = 'ok';\n      }\n      if (checkBoundary.vertical != 'ok' || checkBoundary.horizontal != 'ok') {\n        let newDesiredPosition = PopupUtils.alignInsideBoundary(desiredPosition, checkBoundary);\n        PopupUtils.positionPopup(popUp, nextTo, boundary, newDesiredPosition, appendTo, checkForBoundary + 1);\n      }\n    }\n  }\n\n  private static finalAdjustement(popUpOffSet: IOffset, popUpPosition: IOffset, popUp: HTMLElement, desiredPosition: IPosition) {\n    let position = $$(popUp).position();\n    popUp.style.top = (position.top + desiredPosition.verticalOffset) - (popUpOffSet.top - popUpPosition.top) + 'px';\n    popUp.style.left = (position.left + desiredPosition.horizontalOffset) - (popUpOffSet.left - popUpPosition.left) + 'px';\n  }\n\n  private static basicVerticalAlignment(popUpPosition: IOffset, popUp: HTMLElement, nextTo: HTMLElement, desiredPosition: IPosition) {\n    switch (desiredPosition.vertical) {\n      case VerticalAlignment.TOP:\n        popUpPosition.top -= popUp.offsetHeight;\n        break;\n      case VerticalAlignment.BOTTOM:\n        popUpPosition.top += nextTo.offsetHeight;\n        break;\n      case VerticalAlignment.MIDDLE:\n        popUpPosition.top -= popUp.offsetHeight / 3;\n      case VerticalAlignment.INNERTOP:\n        break; // Nothing to do, it's the default alignment normally\n      case VerticalAlignment.INNERBOTTOM:\n        popUpPosition.top -= popUp.offsetHeight - nextTo.offsetHeight;\n        break;\n      default:\n        break;\n    }\n  }\n\n  private static basicHorizontalAlignment(popUpPosition: IOffset, popUp: HTMLElement, nextTo: HTMLElement, desiredPosition: IPosition) {\n    switch (desiredPosition.horizontal) {\n      case HorizontalAlignment.LEFT:\n        popUpPosition.left -= popUp.offsetWidth;\n        break;\n      case HorizontalAlignment.RIGHT:\n        popUpPosition.left += nextTo.offsetWidth;\n        break;\n      case HorizontalAlignment.CENTER:\n        popUpPosition.left += PopupUtils.offSetToAlignCenter(popUp, nextTo);\n        break;\n      case HorizontalAlignment.INNERLEFT:\n        break; // Nothing to do, it's the default alignment normally\n      case HorizontalAlignment.INNERRIGHT:\n        popUpPosition.left -= popUp.offsetWidth - nextTo.offsetWidth;\n        break;\n      default:\n        break;\n    }\n  }\n\n  private static alignInsideBoundary(oldPosition: IPosition, checkBoundary) {\n    let newDesiredPosition = oldPosition;\n    if (checkBoundary.horizontal == 'left') {\n      newDesiredPosition.horizontal = HorizontalAlignment.RIGHT;\n    }\n    if (checkBoundary.horizontal == 'right') {\n      newDesiredPosition.horizontal = HorizontalAlignment.LEFT;\n    }\n    if (checkBoundary.vertical == 'top') {\n      newDesiredPosition.vertical = VerticalAlignment.BOTTOM;\n    }\n    if (checkBoundary.vertical == 'bottom') {\n      newDesiredPosition.vertical = VerticalAlignment.TOP;\n    }\n    return newDesiredPosition;\n  }\n\n  private static offSetToAlignCenter(popUp: HTMLElement, nextTo: HTMLElement) {\n    return (nextTo.offsetWidth - popUp.offsetWidth) / 2;\n  }\n\n  private static getBoundary(element: HTMLElement) {\n    let boundaryOffset = $$(element).offset();\n    let toAddVertically;\n    if (element.tagName.toLowerCase() == 'body') {\n      toAddVertically = Math.max(element.scrollHeight, element.offsetHeight);\n    } else if (element.tagName.toLowerCase() == 'html') {\n      toAddVertically = Math.max(element.clientHeight, element.scrollHeight, element.offsetHeight);\n    } else {\n      toAddVertically = element.offsetHeight;\n    }\n    return {\n      top: boundaryOffset.top,\n      left: boundaryOffset.left,\n      right: boundaryOffset.left + element.offsetWidth,\n      bottom: boundaryOffset.top + toAddVertically\n    };\n  }\n\n  private static checkForOutOfBoundary(popUpBoundary: IElementBoundary, boundary: IElementBoundary) {\n    let ret = {\n      vertical: 'ok',\n      horizontal: 'ok'\n    };\n    if (popUpBoundary.top < boundary.top) {\n      ret.vertical = 'top';\n    }\n    if (popUpBoundary.bottom > boundary.bottom) {\n      ret.vertical = 'bottom';\n    }\n    if (popUpBoundary.left < boundary.left) {\n      ret.horizontal = 'left';\n    }\n    if (popUpBoundary.right > boundary.right) {\n      ret.horizontal = 'right';\n    }\n    return ret;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/PopupUtils.ts\n **/","import { Options } from '../misc/Options';\nimport { HighlightUtils } from './HighlightUtils';\nimport { StringUtils } from './StringUtils';\nimport { Utils } from './Utils';\nimport { IHighlight } from '../rest/Highlight';\nimport { $$ } from './Dom';\nimport _ = require('underscore');\n\n// \\u2011: http://graphemica.com/%E2%80%91\n// Used to split terms and phrases. Should match characters that can separate words.\nconst wordBoundary = '[\\\\.\\\\-\\\\u2011\\\\s~=,.\\\\|\\\\/:\\'`’;_()!?&+]';\nconst regexStart = '(' + wordBoundary + '|^)(';\n\n/**\n * The possible options when highlighting a stream.\n */\nexport interface IStreamHighlightOptions {\n  /**\n   * The css class that the highlight will generate.\n   * Defaults to `coveo-highlight`.\n   */\n  cssClass?: string;\n  /**\n   * The regex flags that should be applied to generate the highlighting.\n   * Defaults to `gi`.\n   */\n  regexFlags?: string;\n}\n\nclass DefaultStreamHighlightOptions extends Options implements IStreamHighlightOptions {\n  constructor(public cssClass = 'coveo-highlight', public shorten = 0, public regexFlags = 'gi') {\n    super();\n  }\n}\n\nexport class StreamHighlightUtils {\n  static highlightStreamHTML(stream: string, termsToHighlight: { [originalTerm: string]: string[] }, phrasesToHighlight: { [phrase: string]: { [originalTerm: string]: string[] } }, options?: IStreamHighlightOptions) {\n    const opts = new DefaultStreamHighlightOptions().merge(options);\n    const container = createStreamHTMLContainer(stream);\n    const allElements = $$(container).findAll('*');\n    if (allElements.length > 0) {\n      _.each(allElements, (elem: HTMLElement, i: number) => {\n        const text = $$(elem).text();\n        elem.innerHTML = HighlightUtils.highlightString(text, getRestHighlightsForAllTerms(text, termsToHighlight, phrasesToHighlight, opts), [], opts.cssClass);\n      });\n    } else {\n      return StreamHighlightUtils.highlightStreamText(stream, termsToHighlight, phrasesToHighlight, options);\n    }\n    return container.innerHTML;\n  }\n\n  static highlightStreamText(stream: string, termsToHighlight: { [originalTerm: string]: string[] }, phrasesToHighlight: { [phrase: string]: { [originalTerm: string]: string[] } }, options?: IStreamHighlightOptions) {\n    const opts = new DefaultStreamHighlightOptions().merge(options);\n    return HighlightUtils.highlightString(stream, getRestHighlightsForAllTerms(stream, termsToHighlight, phrasesToHighlight, opts), [], opts.cssClass);\n  }\n}\n\n\nfunction getRestHighlightsForAllTerms(toHighlight: string, termsToHighlight: { [originalTerm: string]: string[] }, phrasesToHighlight: { [phrase: string]: { [originalTerm: string]: string[] } }, opts: IStreamHighlightOptions): IHighlight[] {\n  const indexes = [];\n  const sortedTerms = _.keys(termsToHighlight).sort(termsSorting);\n  _.each(sortedTerms, (term: string) => {\n    let termsToIterate = _.compact([term].concat(termsToHighlight[term]).sort(termsSorting));\n    termsToIterate = _.map(termsToIterate, (term) => Utils.escapeRegexCharacter(term));\n    let regex = regexStart;\n    regex += termsToIterate.join('|') + ')(?=(?:' + wordBoundary + '|$)+)';\n    const indexesFound = StringUtils.getHighlights(toHighlight, new RegExp(regex, opts.regexFlags), term);\n    if (indexesFound != undefined && Utils.isNonEmptyArray(indexesFound)) {\n      indexes.push(indexesFound);\n    }\n  });\n\n  _.each(phrasesToHighlight, (phrase, origPhrase) => {\n    const split = origPhrase.split(' ');\n    let regex = regexStart;\n    _.each(split, (origWord, i) => {\n      regex += '(?:' + [origWord].concat(phrase[origWord]).join('|') + ')';\n      if (i == split.length - 1) {\n        regex += '(?=';\n      }\n      regex += wordBoundary;\n      if (i == split.length - 1) {\n        regex += '|$)';\n      }\n      if (i != split.length - 1) {\n        regex += '+';\n      }\n    });\n    regex += ')';\n    const indexesFound = StringUtils.getHighlights(toHighlight, new RegExp(regex, opts.regexFlags), origPhrase);\n    if (indexesFound != undefined && Utils.isNonEmptyArray(indexesFound)) {\n      indexes.push(indexesFound);\n    }\n  });\n\n  return _.chain(indexes)\n    .flatten()\n    .compact()\n    .uniq((highlight: IHighlight) => {\n      return highlight.offset;\n    })\n    .sortBy((highlight: IHighlight) => {\n      return highlight.offset;\n    })\n    .map((highlight) => {\n      const keysFromTerms = _.keys(termsToHighlight);\n      const keysFromPhrases = _.keys(phrasesToHighlight);\n      const keys = keysFromTerms.concat(keysFromPhrases);\n      const group = _.indexOf(keys, highlight.dataHighlightGroupTerm) + 1;\n      return _.extend(highlight, { dataHighlightGroup: group });\n    })\n    .value();\n}\n\nfunction termsSorting(first: string, second: string) {\n  return first.length - second.length;\n}\n\nfunction createStreamHTMLContainer(stream: string) {\n  const container = $$('div').el;\n  container.innerHTML = stream;\n  return container;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/StreamHighlightUtils.ts\n **/","export { QueryController } from './controllers/QueryController';\nexport { FacetQueryController } from './controllers/FacetQueryController';\nexport { FacetRangeQueryController } from './controllers/FacetRangeQueryController';\nexport { FacetSliderQueryController } from './controllers/FacetSliderQueryController';\nexport { HierarchicalFacetQueryController } from './controllers/HierarchicalFacetQueryController';\nexport { HistoryController } from './controllers/HistoryController';\nexport { LocalStorageHistoryController } from './controllers/LocalStorageHistoryController';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ControllersModules.ts\n **/","import { RootComponent } from '../ui/Base/RootComponent';\nimport { IQueryResults } from '../rest/QueryResults';\nimport { QueryBuilder } from '../ui/Base/QueryBuilder';\nimport { IQuery } from '../rest/Query';\nimport { ISearchEndpoint, IEndpointCallOptions } from '../rest/SearchEndpointInterface';\nimport { SearchEndpoint } from '../rest/SearchEndpoint';\nimport { LocalStorageUtils } from '../utils/LocalStorageUtils';\nimport { ISearchInterfaceOptions } from '../ui/SearchInterface/SearchInterface';\nimport { Assert } from '../misc/Assert';\nimport { SearchEndpointWithDefaultCallOptions } from '../rest/SearchEndpointWithDefaultCallOptions';\nimport { INewQueryEventArgs, IPreprocessResultsEventArgs, INoResultsEventArgs, IQuerySuccessEventArgs, IQueryErrorEventArgs, IDuringQueryEventArgs, QueryEvents, IFetchMoreSuccessEventArgs, IDoneBuildingQueryEventArgs, IBuildingQueryEventArgs, IBuildingCallOptionsEventArgs } from '../events/QueryEvents';\nimport { QueryUtils } from '../utils/QueryUtils';\nimport { Defer } from '../misc/Defer';\nimport { $$, Dom } from '../utils/Dom';\nimport { Utils } from '../utils/Utils';\nimport { BaseComponent } from '../ui/Base/BaseComponent';\nimport { ModalBox } from '../ExternalModulesShim';\nimport { history } from 'coveo.analytics';\nimport _ = require('underscore');\n\n/**\n * Possible options when performing a query with the query controller\n */\nexport interface IQueryOptions {\n  /**\n   * If the analytics component is enabled in the interface, it will look for any query executed by the query controller for which no analytics event was associated.<br/>\n   * By setting this property to true, this will cancel this check when the query is performed\n   */\n  ignoreWarningSearchEvent?: boolean;\n  /**\n   * Specify that the query to execute is a search as you type. This information will be passed down in the query events for component and external code to determine their behavior\n   */\n  searchAsYouType?: boolean;\n  /**\n   * Specify a function that you wish to execute just before the query is executed\n   */\n  beforeExecuteQuery?: () => void;\n  /**\n   * Cancel the query\n   */\n  cancel?: boolean;\n  /**\n   * The component from which the query originated. For example the pager will set the property to tweak it's behaviour\n   */\n  origin?: any;\n\n  /**\n   * Whether or not to log the query in the user actions history when using the page view script: https://github.com/coveo/coveo.analytics.js.\n   * Only the 'q' part of the query will be logged.\n   * This option is useful, because it prevents the query to be logged twice when a {@link Recommendation} component is present.\n   * It also makes sure that only relevant queries are logged. For exemple, the 'empty' interface load query isn't logged.\n   */\n  logInActionsHistory?: boolean;\n  isFirstQuery?: boolean;\n  keepLastSearchUid?: boolean;\n  closeModalBox?: boolean;\n}\n\ninterface ILastQueryLocalStorage {\n  hash: string;\n  uid: string;\n  expire: number;\n}\n\nclass DefaultQueryOptions implements IQueryOptions {\n  searchAsYouType = false;\n  beforeExecuteQuery: () => void;\n  closeModalBox = true;\n  cancel = false;\n  logInActionsHistory = false;\n}\n\n/**\n * This class is automatically instantiated and bound to the root of your search interface when you initialize the framework.<br/>\n * It is essentially a singleton that wraps the access to the {@link SearchEndpoint} endpoint to execute query, and is in charge of triggering the different query events.<br/>\n * This is what every component of the framework uses internally to execute query or access the endpoint.<br/>\n * When calling <code>Coveo.executeQuery</code> this class is used.\n */\nexport class QueryController extends RootComponent {\n  static ID = 'QueryController';\n  public historyStore: CoveoAnalytics.HistoryStore;\n\n  private currentPendingQuery: Promise<IQueryResults>;\n  private lastQueryBuilder: QueryBuilder;\n  private lastQueryHash: string;\n  private lastQuery: IQuery;\n  private lastSearchUid: string;\n  private lastQueryResults: IQueryResults;\n  private currentError: any;\n  private firstQuery: boolean;\n  private createdOneQueryBuilder: boolean;\n  private showingExecutingQueryAnimation = false;\n  private overrideEndpoint: SearchEndpoint;\n\n  private localStorage = new LocalStorageUtils<ILastQueryLocalStorage>('lastQueryHash');\n\n  /**\n   * Create a new query controller\n   * @param element\n   * @param options\n   */\n  constructor(element: HTMLElement, public options: ISearchInterfaceOptions, public usageAnalytics, public searchInterface) {\n    super(element, QueryController.ID);\n    Assert.exists(element);\n    Assert.exists(options);\n    this.firstQuery = true;\n    this.historyStore = new history.HistoryStore();\n  }\n\n  /**\n   * Set the {@link SearchEndpoint} that the query controller should use to execute query\n   * @param endpoint\n   */\n  public setEndpoint(endpoint: SearchEndpoint) {\n    this.overrideEndpoint = endpoint;\n    this.logger.debug('Endpoint set', endpoint);\n  }\n\n  /**\n   * Get the {@link SearchEndpoint} that is currently used by the query controller to execute query\n   * @returns {SearchEndpoint}\n   */\n  public getEndpoint(): ISearchEndpoint {\n    let endpoint = this.overrideEndpoint || this.options.endpoint;\n\n    // We must wrap the endpoint in a decorator that'll add the call options\n    // we obtain by firing the proper event. Those are used for authentication\n    // providers, and I guess other stuff later on.\n    return new SearchEndpointWithDefaultCallOptions(endpoint, this.getCallOptions());\n  }\n\n  /**\n   * Return the last query that was performed by the query controller\n   * @returns {IQuery|Query}\n   */\n  public getLastQuery() {\n    return this.lastQuery || new QueryBuilder().build();\n  }\n\n  /**\n   * Return the last query results set.\n   * @returns {IQueryResults}\n   */\n  public getLastResults() {\n    return this.lastQueryResults;\n  }\n\n  /**\n   * Execute a query and return a Promise of IQueryResults.<br/>\n   * This will execute the normal query flow, triggering all the necessary query events (newQuery <br/>\n   * All components present in the interface will act accordingly (modify the query and render results if needed).\n   * @param options\n   * @returns {Promise<IQueryResults>}\n   */\n  public executeQuery(options?: IQueryOptions): Promise<IQueryResults> {\n    options = <IQueryOptions>_.extend(new DefaultQueryOptions(), options);\n\n    if (options.closeModalBox) {\n      ModalBox.close(true);\n    }\n\n    this.logger.debug('Executing new query');\n\n    this.cancelAnyCurrentPendingQuery();\n\n    if (options.beforeExecuteQuery != null) {\n      options.beforeExecuteQuery();\n    }\n\n    if (!options.ignoreWarningSearchEvent) {\n      this.usageAnalytics.warnAboutSearchEvent();\n    }\n\n    this.showExecutingQueryAnimation();\n\n    let dataToSendOnNewQuery: INewQueryEventArgs = {\n      searchAsYouType: options.searchAsYouType,\n      cancel: options.cancel,\n      origin: options.origin\n    };\n\n    this.newQueryEvent(dataToSendOnNewQuery);\n\n    if (dataToSendOnNewQuery.cancel) {\n      this.cancelQuery();\n      return;\n    }\n\n    let queryBuilder = this.createQueryBuilder(options);\n\n    // The query was canceled\n    if (!queryBuilder) {\n      return;\n    }\n\n    let query = queryBuilder.build();\n    if (options.logInActionsHistory) {\n      this.logQueryInActionsHistory(query, options.isFirstQuery);\n    }\n\n    let endpointToUse = this.getEndpoint();\n\n    let promise = this.currentPendingQuery = endpointToUse.search(query);\n    promise.then((queryResults) => {\n      Assert.exists(queryResults);\n      let firstQuery = this.firstQuery;\n      if (this.firstQuery) {\n        this.firstQuery = false;\n      }\n      // If our promise is no longer the current one, then the query\n      // has been cancel. We should do nothing here.\n      if (promise !== this.currentPendingQuery) {\n        return;\n      }\n\n      this.logger.debug('Query results received', query, queryResults);\n      let enableHistory = this.searchInterface && this.searchInterface.options && this.searchInterface.options.enableHistory;\n\n      if ((!firstQuery || enableHistory) && this.keepLastSearchUid(query, queryResults)) {\n        queryResults.searchUid = this.getLastSearchUid();\n        queryResults._reusedSearchUid = true;\n        QueryUtils.setPropertyOnResults(queryResults, 'queryUid', this.getLastSearchUid());\n      } else {\n        this.lastQueryHash = this.queryHash(query, queryResults);\n        this.lastSearchUid = queryResults.searchUid;\n      }\n\n      this.lastQuery = query;\n      this.lastQueryResults = queryResults;\n      this.currentError = null;\n\n      let dataToSendOnPreprocessResult: IPreprocessResultsEventArgs = {\n        queryBuilder: queryBuilder,\n        query: query,\n        results: queryResults,\n        searchAsYouType: options.searchAsYouType\n      };\n      this.preprocessResultsEvent(dataToSendOnPreprocessResult);\n\n      let dataToSendOnNoResult: INoResultsEventArgs = {\n        queryBuilder: queryBuilder,\n        query: query,\n        results: queryResults,\n        searchAsYouType: options.searchAsYouType,\n        retryTheQuery: false\n      };\n      if (queryResults.results.length == 0) {\n        this.noResultEvent(dataToSendOnNoResult);\n      }\n\n      if (dataToSendOnNoResult.retryTheQuery) {\n        // When retrying the query, we must forward the results to the deferred we\n        // initially returned, in case someone is listening on it.\n        return this.executeQuery();\n      } else {\n        this.lastQueryBuilder = queryBuilder;\n        this.currentPendingQuery = undefined;\n\n        let dataToSendOnSuccess: IQuerySuccessEventArgs = {\n          queryBuilder: queryBuilder,\n          query: query,\n          results: queryResults,\n          searchAsYouType: options.searchAsYouType\n        };\n        this.querySuccessEvent(dataToSendOnSuccess);\n\n        Defer.defer(() => {\n          this.deferredQuerySuccessEvent(dataToSendOnSuccess);\n          this.hideExecutingQueryAnimation();\n        });\n        return queryResults;\n      }\n    }).catch((error?: any) => {\n      // If our deferred is no longer the current one, then the query\n      // has been cancel. We should do nothing here.\n      if (promise !== this.currentPendingQuery) {\n        return;\n      }\n\n      this.logger.error('Query triggered an error', query, error);\n\n      // this.currentPendingQuery.reject(error);\n      this.currentPendingQuery = undefined;\n      let dataToSendOnError: IQueryErrorEventArgs = {\n        queryBuilder: queryBuilder,\n        endpoint: endpointToUse,\n        query: query,\n        error: error,\n        searchAsYouType: options.searchAsYouType\n      };\n\n      this.lastQuery = query;\n      this.lastQueryResults = null;\n      this.currentError = error;\n      this.queryError(dataToSendOnError);\n\n      this.hideExecutingQueryAnimation();\n    });\n\n    let dataToSendDuringQuery: IDuringQueryEventArgs = {\n      queryBuilder: queryBuilder,\n      query: query,\n      searchAsYouType: options.searchAsYouType,\n      promise: promise\n    };\n    this.duringQueryEvent(dataToSendDuringQuery);\n\n    return this.currentPendingQuery;\n  }\n\n  /**\n   * Using the same parameters as the last successful query, fetch another batch of results. Particularly useful for infinite scrolling, for example.\n   * @param count\n   * @returns {any}\n   */\n  public fetchMore(count: number): Promise<IQueryResults> {\n    if (this.currentPendingQuery != undefined) {\n      return undefined;\n    }\n    // Send all pending events (think : search as you type)\n    // This allows us to get the real search id for the results when the query returns\n    this.usageAnalytics.sendAllPendingEvents();\n\n    let queryBuilder = new QueryBuilder();\n    this.continueLastQueryBuilder(queryBuilder, count);\n    let query = queryBuilder.build();\n    let endpointToUse = this.getEndpoint();\n    let promise: any = this.currentPendingQuery = endpointToUse.search(query);\n    let dataToSendDuringQuery: IDuringQueryEventArgs = {\n      queryBuilder: queryBuilder,\n      query: query,\n      searchAsYouType: false,\n      promise: promise\n    };\n    $$(this.element).trigger(QueryEvents.duringFetchMoreQuery, dataToSendDuringQuery);\n    this.lastQueryBuilder = queryBuilder;\n    this.lastQuery = query;\n    promise.then((results?: IQueryResults) => {\n      // We re-use the search id from the initial search here, even though the\n      // server provided us with a new one. 'Fetch mores' are considered to be\n      // the same query from an analytics point of view.\n\n      this.currentPendingQuery = undefined;\n\n      if (this.lastQueryResults == null) {\n        this.lastQueryResults = results;\n      } else {\n        _.forEach(results.results, (result) => {\n          this.lastQueryResults.results.push(result);\n        });\n      }\n\n      let dataToSendOnPreprocessResult: IPreprocessResultsEventArgs = {\n        queryBuilder: queryBuilder,\n        query: query,\n        results: results,\n        searchAsYouType: false\n      };\n      this.preprocessResultsEvent(dataToSendOnPreprocessResult);\n      QueryUtils.setIndexAndUidOnQueryResults(query, results, this.getLastSearchUid(), results.pipeline, results.splitTestRun);\n      let dataToSendOnFetchMoreSuccess: IFetchMoreSuccessEventArgs = {\n        query: query,\n        results: results,\n        queryBuilder: queryBuilder,\n        searchAsYouType: false\n      };\n      this.fetchMoreSuccessEvent(dataToSendOnFetchMoreSuccess);\n    });\n    return this.currentPendingQuery;\n  }\n\n  /**\n   * Cancel any pending query\n   */\n  public cancelQuery(): void {\n    this.cancelAnyCurrentPendingQuery();\n    this.hideExecutingQueryAnimation();\n  }\n\n  public deferExecuteQuery(options?: IQueryOptions) {\n    this.showExecutingQueryAnimation();\n    Defer.defer(() => this.executeQuery(options));\n  }\n\n  public ensureCreatedQueryBuilder() {\n    if (!this.createdOneQueryBuilder) {\n      this.createQueryBuilder(new DefaultQueryOptions());\n    }\n  }\n\n  public createQueryBuilder(options: IQueryOptions): QueryBuilder {\n    Assert.exists(options);\n\n    this.createdOneQueryBuilder = true;\n\n    let queryBuilder = new QueryBuilder();\n\n    // Default values, components will probably override them if they exists\n    queryBuilder.language = <string>String['locale'];\n    queryBuilder.firstResult = queryBuilder.firstResult || 0;\n\n    // Allow outside code to customize the query builder. We provide two events,\n    // to allow someone to have a peep at the query builder after the first phase\n    // and add some stuff depending on what was put in there. The facets are using\n    // this mechanism to generate query overrides.\n    let dataToSendDuringBuildingQuery: IBuildingQueryEventArgs = {\n      queryBuilder: queryBuilder,\n      searchAsYouType: options.searchAsYouType,\n      cancel: options.cancel\n    };\n    this.buildingQueryEvent(dataToSendDuringBuildingQuery);\n\n    let dataToSendDuringDoneBuildingQuery: IDoneBuildingQueryEventArgs = {\n      queryBuilder: queryBuilder,\n      searchAsYouType: options.searchAsYouType,\n      cancel: options.cancel\n    };\n    this.doneBuildingQueryEvent(dataToSendDuringDoneBuildingQuery);\n\n    if (dataToSendDuringBuildingQuery.cancel || dataToSendDuringDoneBuildingQuery.cancel) {\n      this.cancelQuery();\n      return;\n    }\n\n    let pipeline = this.getPipelineInUrl();\n    if (pipeline) {\n      queryBuilder.pipeline = pipeline;\n    }\n\n    return queryBuilder;\n  }\n\n  public isStandaloneSearchbox(): boolean {\n    return Utils.isNonEmptyString(this.options.searchPageUri);\n  }\n\n  public saveLastQuery() {\n    this.localStorage.save({\n      expire: new Date().getTime() + 1000 * 60 * 30, // Psoucy rolled dice and said 30 mins was the magic number\n      hash: this.lastQueryHash,\n      uid: this.lastSearchUid\n    });\n  }\n\n\n  // This field is exposed for components rendered in the results or on-demand which\n  // need access to the entire query. For example, the QuickviewDocument need to pass\n  // the entire query to the Search API. For other components, QueryStateModel or\n  // listening to events like 'doneBuildingQuery' is the way to go.\n  public getLastQueryHash(): string {\n    if (this.lastQueryHash != null) {\n      return this.lastQueryHash;\n    }\n    this.loadLastQueryHash();\n    return this.lastQueryHash || this.queryHash(new QueryBuilder().build());\n  }\n\n  private getLastSearchUid(): string {\n    if (this.lastSearchUid != null) {\n      return this.lastSearchUid;\n    }\n    this.loadLastQueryHash();\n    return this.lastSearchUid;\n  }\n\n  private loadLastQueryHash() {\n    let lastQuery = this.localStorage.load();\n    if (lastQuery != null && new Date().getTime() <= lastQuery.expire) {\n      this.lastQueryHash = lastQuery.hash;\n      this.lastSearchUid = lastQuery.uid;\n      this.localStorage.remove();\n    }\n  }\n\n  private continueLastQueryBuilder(queryBuilder: QueryBuilder, count: number) {\n    _.extend(queryBuilder, this.lastQueryBuilder);\n    queryBuilder.firstResult = queryBuilder.firstResult + queryBuilder.numberOfResults;\n    queryBuilder.numberOfResults = count;\n  }\n\n  private getPipelineInUrl() {\n    return QueryUtils.getUrlParameter('pipeline');\n  }\n\n  private cancelAnyCurrentPendingQuery() {\n    if (Utils.exists(this.currentPendingQuery)) {\n      this.logger.debug('Cancelling current pending query');\n      Promise.reject('Cancelling current pending query');\n      this.currentPendingQuery = undefined;\n      return true;\n    }\n    return false;\n  }\n\n  private showExecutingQueryAnimation() {\n    if (!this.showingExecutingQueryAnimation) {\n      $$(this.element).addClass('coveo-executing-query');\n      this.showingExecutingQueryAnimation = true;\n    }\n  }\n\n  private hideExecutingQueryAnimation() {\n    if (this.showingExecutingQueryAnimation) {\n      $$(this.element).removeClass('coveo-executing-query');\n      this.showingExecutingQueryAnimation = false;\n    }\n  }\n\n  private keepLastSearchUid(query: IQuery, queryResults: IQueryResults) {\n    return this.getLastQueryHash() == this.queryHash(query, queryResults);\n  }\n\n  private queryHash(query: IQuery, queryResults?: IQueryResults): string {\n    let queryHash = JSON.stringify(_.omit(query, 'firstResult', 'groupBy', 'debug'));\n    if (queryResults != null) {\n      queryHash += queryResults.pipeline;\n    }\n    return queryHash;\n  }\n\n  private getCallOptions(): IEndpointCallOptions {\n    let args: IBuildingCallOptionsEventArgs = {\n      options: {\n        authentication: []\n      }\n    };\n\n    $$(this.element).trigger(QueryEvents.buildingCallOptions, args);\n    return args.options;\n  }\n\n  private newQueryEvent(args) {\n    $$(this.element).trigger(QueryEvents.newQuery, args);\n  }\n\n  private buildingQueryEvent(args) {\n    $$(this.element).trigger(QueryEvents.buildingQuery, args);\n  }\n\n  private doneBuildingQueryEvent(args) {\n    $$(this.element).trigger(QueryEvents.doneBuildingQuery, args);\n  }\n\n  private duringQueryEvent(args) {\n    $$(this.element).trigger(QueryEvents.duringQuery, args);\n  }\n\n  private querySuccessEvent(args) {\n    $$(this.element).trigger(QueryEvents.querySuccess, args);\n  }\n\n  private fetchMoreSuccessEvent(args) {\n    $$(this.element).trigger(QueryEvents.fetchMoreSuccess, args);\n  }\n\n  private deferredQuerySuccessEvent(args) {\n    $$(this.element).trigger(QueryEvents.deferredQuerySuccess, args);\n  }\n\n  private queryError(args) {\n    $$(this.element).trigger(QueryEvents.queryError, args);\n  }\n\n  private preprocessResultsEvent(args) {\n    $$(this.element).trigger(QueryEvents.preprocessResults, args);\n  }\n\n  private noResultEvent(args) {\n    $$(this.element).trigger(QueryEvents.noResults, args);\n  }\n\n  public debugInfo() {\n    let info: any = {\n      'query': this.lastQuery,\n    };\n\n    if (this.lastQueryResults != null) {\n      info.queryDuration = () => this.buildQueryDurationSection(this.lastQueryResults);\n      info.results = () => _.omit(this.lastQueryResults, 'results');\n    }\n\n    if (this.currentError != null) {\n      info.error = () => this.currentError;\n    }\n\n    return info;\n  }\n\n  private buildQueryDurationSection(queryResults: IQueryResults) {\n    let dom = Dom.createElement('div', { className: 'coveo-debug-queryDuration' });\n    let graph = Dom.createElement('div', { className: 'coveo-debug-durations' });\n    let debugRef = BaseComponent.getComponentRef('Debug');\n    dom.appendChild(graph);\n    _.forEach(debugRef.durationKeys, (key: string) => {\n      let duration = queryResults[key];\n      if (duration != null) {\n        graph.appendChild(Dom.createElement('div', {\n          className: 'coveo-debug-duration',\n          style: `width:${duration}px`,\n          'data-id': key\n        }));\n        let legend = Dom.createElement('div', { className: 'coveo-debug-duration-legend', 'data-id': key });\n        dom.appendChild(legend);\n        let keyDom = Dom.createElement('span', { className: 'coveo-debug-duration-label' });\n        keyDom.appendChild(document.createTextNode(key));\n        legend.appendChild(keyDom);\n        let durationDom = Dom.createElement('span', { className: 'coveo-debug-duration-value' });\n        durationDom.appendChild(document.createTextNode(duration));\n        legend.appendChild(durationDom);\n      }\n    });\n    return dom;\n  }\n\n  private logQueryInActionsHistory(query: IQuery, isFirstQuery: boolean) {\n    let queryElement: CoveoAnalytics.HistoryQueryElement = {\n      name: 'Query',\n      value: query.q,\n      time: JSON.stringify(new Date())\n    };\n    this.historyStore.addElement(queryElement);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/QueryController.ts\n **/","import { BaseComponent } from './BaseComponent';\n\nexport class RootComponent extends BaseComponent {\n  constructor(public element: HTMLElement, public type: string) {\n    super(element, type);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/RootComponent.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { Logger } from '../../misc/Logger';\n\ndeclare var Coveo;\n\nexport interface IComponentHtmlElement extends HTMLElement {\n  CoveoBoundComponents?: BaseComponent[];\n}\n\n/**\n * Every component in the framework ultimately inherits from this base component class.\n */\nexport class BaseComponent {\n  /**\n   * Allows component to log in the dev console.\n   */\n  public logger: Logger;\n  /**\n   * A disabled component will not participate in the query, or listen to {@link ComponentEvents}.\n   * @type {boolean}\n   */\n  public disabled = false;\n  /**\n   * The static ID that each component need to be identified.<br/>\n   * For example, SearchButton -> static ID : SearchButton -> className : CoveoSearchButton\n   */\n  static ID: string;\n\n  constructor(public element: HTMLElement, public type: string) {\n    Assert.exists(element);\n    Assert.isNonEmptyString(type);\n    this.logger = new Logger(this);\n    BaseComponent.bindComponentToElement(element, this);\n  }\n\n  /**\n   * Return the debug info about this component.\n   * @returns {any}\n   */\n  public debugInfo() {\n    var info: any = {};\n    info[this['constructor']['ID']] = this;\n    return info;\n  }\n\n  /**\n   * Disable the component.\n   * Normally this means that the component will not execute handlers for the framework events (query events, for example).\n   * Component are enabled by default on creation.\n   */\n  public disable() {\n    this.disabled = true;\n  }\n\n  /**\n   * Enable the component.\n   * Normally this means that the component will execute handlers for the framework events (query events, for example).\n   * Components are enabled by default on creation.\n   */\n  public enable() {\n    this.disabled = false;\n  }\n\n  static bindComponentToElement(element: HTMLElement, component: BaseComponent) {\n    Assert.exists(element);\n    Assert.exists(component);\n    Assert.isNonEmptyString(component.type);\n    element[BaseComponent.computeCssClassNameForType(component.type)] = component;\n    $$(element).addClass(BaseComponent.computeCssClassNameForType(component.type));\n    BaseComponent.getBoundComponentsForElement(element).push(component);\n  }\n\n  static computeCssClassName(componentClass: any): string {\n    return BaseComponent.computeCssClassNameForType(componentClass['ID']);\n  }\n\n  static computeCssClassNameForType(type: string): string {\n    Assert.isNonEmptyString(type);\n    return 'Coveo' + type;\n  }\n\n  static computeSelectorForType(type: string): string {\n    Assert.isNonEmptyString(type);\n    return '.' + BaseComponent.computeCssClassNameForType(type);\n  }\n\n  static getBoundComponentsForElement(element: IComponentHtmlElement): BaseComponent[] {\n    Assert.exists(element);\n\n    if (element.CoveoBoundComponents == null) {\n      element.CoveoBoundComponents = [];\n    }\n    return element.CoveoBoundComponents;\n  }\n\n  static getComponentRef(component: string): any {\n    return Coveo[component];\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/BaseComponent.ts\n **/","import { ExpressionBuilder } from './ExpressionBuilder';\nimport { IRankingFunction } from '../../rest/RankingFunction';\nimport { IQueryFunction } from '../../rest/QueryFunction';\nimport { IGroupByRequest } from '../../rest/GroupByRequest';\nimport { IQuery } from '../../rest/Query';\nimport _ = require('underscore');\n\n/**\n * Describe the expressions part of a QueryBuilder.\n */\nexport interface IQueryBuilderExpression {\n  /**\n   * The whole expression\n   */\n  full?: string;\n  /**\n   * The full part, but without the constant.\n   */\n  withoutConstant?: string;\n  /**\n   * The constant part of the expression\n   */\n  constant?: string;\n  /**\n   * The basic part of the expression\n   */\n  basic?: string;\n  /**\n   * The advanced part of the expression\n   */\n  advanced?: string;\n}\n\n/**\n * The QueryBuilder is used to build a {@link IQuery} that will be able to be executed using the Search API.<br/>\n * The class exposes several members and methods that help components and external code to build up the final query that is sent to the Search API.<br/>\n */\nexport class QueryBuilder {\n  /**\n   * Used to build the basic part of the query expression.<br/>\n   * This part typically consists of user-entered content such as query keywords, etc.\n   * @type {Coveo.ExpressionBuilder}\n   */\n  public expression: ExpressionBuilder = new ExpressionBuilder();\n  /**\n   * Used to build the advanced part of the query expression.<br/>\n   * This part is typically formed of filter expressions generated by components such as facets, external code, etc.\n   * @type {Coveo.ExpressionBuilder}\n   */\n  public advancedExpression: ExpressionBuilder = new ExpressionBuilder();\n  /**\n   * Used to build the advanced part of the query expression.<br/>\n   * This part is similar to `advancedExpression`, but its content is interpreted as a constant expression by the index and it takes advantage of special caching features.\n   * @type {Coveo.ExpressionBuilder}\n   */\n  public constantExpression: ExpressionBuilder = new ExpressionBuilder();\n  /**\n   * The contextual text.<br/>\n   * This is the contextual text part of the query. It uses the Coveo Machine Learning service to pick key keywords from the text and add them to the basic expression.\n   * This field is mainly used to pass context such a case description, long textual query or any other form of text that might help in\n   * refining the query.\n   */\n  public longQueryExpression: ExpressionBuilder = new ExpressionBuilder();\n  /**\n   * Used to build the disjunctive part of the query expression.<br/>\n   * When present, this part is evaluated separately from the other expressions and the matching results are merged to those matching expressions, `advancedExpression` and `constantExpression`.<br/>\n   * The final boolean expression for the query is thus (basic advanced constant) OR (disjunction).\n   * @type {Coveo.ExpressionBuilder}\n   */\n  public disjunctionExpression: ExpressionBuilder = new ExpressionBuilder();\n  /**\n   * The hub value set from the {@link Analytics} component.<br/>\n   * Used for analytics reporting in the Coveo platform.\n   */\n  public searchHub: string;\n  /**\n   * The tab value set from the {@link Tab} component.\n   */\n  public tab: string;\n  public language: string;\n  /**\n   * Name of the query pipeline to use.<br/>\n   * This specifies the name of the query pipeline to use for the query. If not specified, the default value is default, which means the default query pipeline will be used.\n   */\n  public pipeline: string;\n  /**\n   * The maximum age for cached query results, in milliseconds.<br/>\n   * If results for the exact same request (including user identities) are available in the in-memory cache, they will be used if they are not older than the specified value.<br/>\n   * Otherwise, the query will be sent to the index.\n   */\n  public maximumAge: number;\n  /**\n   * Whether to enable wildcards on the basic expression keywords.<br/>\n   * This enables the wildcard features of the index. Coveo Platform will expand keywords containing wildcard characters to the possible matching keywords to broaden the query.<br/>\n   * (see : https://onlinehelp.coveo.com/en/ces/7.0/user/using_wildcards_in_queries.htm).<br/>\n   * If not specified, this parameter defaults to false.\n   */\n  public enableWildcards: boolean;\n  /**\n   * Whether to enable question marks with wildcards.<br/>\n   * This enables using the question mark ? character within wildcard expressions.\n   */\n  public enableQuestionMarks: boolean;\n  /**\n   * Whether to disable the special query syntax such as field references for the basic query expression (parameter q).\n   * It is equivalent to a No syntax block applied to the basic query expression.\n   * If not specified, the parameter defaults to false.\n   */\n  public disableQuerySyntax: boolean = false;\n  /**\n   * Whether to enable the support for operator in lowercase (AND OR -> and or).\n   */\n  public enableLowercaseOperators: boolean;\n  /**\n   * Whether to enable partial matching of the basic expression keywords.<br/>\n   * By activating this, when the basic expression contains at least {@link IQuery.partialMatchKeywords}, documents containing only the number of keywords specified by {@link IQuery.partialMatchThreshold} will also match the query.<br/>\n   * Without this option, documents are required to contain all the keywords in order to match the query.<br/>\n   * If not specified, this parameter defaults to false.\n   */\n  public enablePartialMatch: boolean;\n  /**\n   * The minimum number of keywords needed to activate partial match.<br/>\n   * This specifies the minimum number of keywords needed for the partial match feature to activate.<br/>\n   * If the basic expression contains less than this number of keywords, no transformation is applied on the query.<br/>\n   * If not specified, this parameter defaults to 5.\n   */\n  public partialMatchKeywords: number;\n  /**\n   * The threshold to use for matching documents when partial match is enabled.<br/>\n   * This specifies the minimum number of query keywords that a document must contain when partial match is enabled. This value can either be an absolute number or a percentage value based on the total number of keywords.<br/>\n   * If not specified, this parameter defaults to 50%.\n   */\n  public partialMatchThreshold: string;\n  /**\n   * This is the 0-based index of the first result to return.<br/>\n   * If not specified, this parameter defaults to 0.\n   */\n  public firstResult: number = 0;\n  /**\n   * This is the number of results to return, starting from {@link IQuery.firstResult}.<br/>\n   * If not specified, this parameter defaults to 10.\n   */\n  public numberOfResults: number = 10;\n  /**\n   * This specifies the length (in number of characters) of the excerpts generated by the indexer based on the keywords present in the query.<br/>\n   * The index includes the top most interesting sentences (in the order they appear in the document) that fit in the specified number of characters.<br/>\n   * When not specified, the default value is 200.\n   */\n  public excerptLength: number;\n  /**\n   * This specifies a field on which {@link Folding} should be performed.<br/>\n   * Folding is a kind of duplicate filtering where only the first result with any given value of the field is included in the result set.<br/>\n   * It's typically used to return only one result in a conversation, for example when forum posts in a thread are indexed as separate items.\n   */\n  public filterField: string;\n  /**\n   * Number of results that should be folded, using the {@link IQuery.filterField}.\n   */\n  public filterFieldRange: number;\n  /**\n   * Specifies the `parentField` when doing parent-child loading (See : {@link Folding}).\n   */\n  public parentField: string;\n  /**\n   * Specifies the childField when doing parent-child loading (See : {@link Folding}).\n   */\n  public childField: string;\n  public fieldsToInclude: string[];\n  public requiredFields: string[] = [];\n  public includeRequiredFields: boolean = false;\n  public fieldsToExclude: string[];\n  /**\n   * Whether to enable query corrections on this query (see {@link DidYouMean}).\n   */\n  public enableDidYouMean: boolean = false;\n  /**\n   * Whether to enable debug info on the query.<br/>\n   * This will return additional information on the resulting JSON response from the Search API.<br/>\n   * Mostly: execution report (a detailed breakdown of the parsed and executed query).\n   */\n  public enableDebug: boolean = false;\n  /**\n   * Whether the index should take collaborative rating in account when ranking result (see : {@link ResultRating}).\n   */\n  public enableCollaborativeRating: boolean;\n  /**\n   * This specifies the sort criterion(s) to use to sort results. If not specified, this parameter defaults to relevancy.<br/>\n   * Possible values are : <br/>\n   * -- relevancy :  This uses all the configured ranking weights as well as any specified ranking expressions to rank results.<br/>\n   * -- dateascending / datedescending Sort using the value of the `@date` field, which is typically the last modification date of an item in the index.<br/>\n   * -- qre : Sort using only the weights applied through ranking expressions. This is much like using `relevancy` except that automatic weights based on keyword proximity etc, are not computed.<br/>\n   * -- nosort : Do not sort the results. The order in which items are returned is essentially random.<br/>\n   * -- @field ascending / @field descending Sort using the value of a custom field.\n   */\n  public sortCriteria: string = 'relevancy';\n  public sortField: string;\n  public retrieveFirstSentences: boolean = true;\n  public timezone: string;\n  public queryUid: string;\n  /**\n   * This specifies an array of Query Function operation that will be executed on the results.\n   */\n  public queryFunctions: IQueryFunction[] = [];\n  /**\n   * This specifies an array of Ranking Function operations that will be executed on the results.\n   */\n  public rankingFunctions: IRankingFunction[] = [];\n  /**\n   * This specifies an array of Group By operations that can be performed on the query results to extract facets.\n   */\n  public groupByRequests: IGroupByRequest[] = [];\n  public enableDuplicateFiltering: boolean = false;\n  /**\n   * The context is a map of key_value that can be used in the Query pipeline in the Coveo platform.<br/>\n   */\n  public context: { [key: string]: any };\n  /**\n   * The actions history represents the past actions a user made and is used by the Coveo Machine Learning service to suggest recommendations.\n   * It is generated by the page view script (https://github.com/coveo/coveo.analytics.js).\n   */\n  public actionsHistory: string;\n  /**\n   * This is the ID of the recommendation interface that generated the query.\n   */\n  public recommendation: string;\n  /**\n   * Build the current content or state of the query builder and return a {@link IQuery}.<br/>\n   * build can be called multiple times on the same QueryBuilder.\n   * @returns {IQuery}\n   */\n  build(): IQuery {\n    var query: IQuery = {\n      q: this.expression.build(),\n      aq: this.advancedExpression.build(),\n      cq: this.constantExpression.build(),\n      lq: this.longQueryExpression.build(),\n      dq: this.disjunctionExpression.build(),\n\n      searchHub: this.searchHub,\n      tab: this.tab,\n      language: this.language,\n      pipeline: this.pipeline,\n      maximumAge: this.maximumAge,\n\n      wildcards: this.enableWildcards,\n      questionMark: this.enableQuestionMarks,\n      lowercaseOperators: this.enableLowercaseOperators,\n      partialMatch: this.enablePartialMatch,\n      partialMatchKeywords: this.partialMatchKeywords,\n      partialMatchThreshold: this.partialMatchThreshold,\n\n      firstResult: this.firstResult,\n      numberOfResults: this.numberOfResults,\n      excerptLength: this.excerptLength,\n      filterField: this.filterField,\n      filterFieldRange: this.filterFieldRange,\n      parentField: this.parentField,\n      childField: this.childField,\n      fieldsToInclude: this.computeFieldsToInclude(),\n      fieldsToExclude: this.fieldsToExclude,\n      enableDidYouMean: this.enableDidYouMean,\n      sortCriteria: this.sortCriteria,\n      sortField: this.sortField,\n      queryFunctions: this.queryFunctions,\n      rankingFunctions: this.rankingFunctions,\n      groupBy: this.groupByRequests,\n      retrieveFirstSentences: this.retrieveFirstSentences,\n      timezone: this.timezone,\n      disableQuerySyntax: this.disableQuerySyntax,\n      enableDuplicateFiltering: this.enableDuplicateFiltering,\n      enableCollaborativeRating: this.enableCollaborativeRating,\n      debug: this.enableDebug,\n      context: this.context,\n      actionsHistory: this.actionsHistory,\n      recommendation: this.recommendation\n    };\n    return query;\n  }\n\n  /**\n   * Return only the expression(s) part(s) of the query, as a string.<br/>\n   * This means the basic, advanced and constant part in a complete expression {@link IQuery.q}, {@link IQuery.aq}, {@link IQuery.cq}.\n   * @returns {string}\n   */\n  public computeCompleteExpression(): string {\n    return this.computeCompleteExpressionParts().full;\n  }\n\n  /**\n   * Return only the expression(s) part(s) of the query, as an object.\n   * @returns {{full: string, withoutConstant: string, constant: string}}\n   */\n  public computeCompleteExpressionParts(): IQueryBuilderExpression {\n    var withoutConstant = ExpressionBuilder.merge(this.expression, this.advancedExpression);\n\n    return {\n      full: ExpressionBuilder.mergeUsingOr(ExpressionBuilder.merge(withoutConstant, this.constantExpression), this.disjunctionExpression).build(),\n      withoutConstant: ExpressionBuilder.mergeUsingOr(withoutConstant, this.disjunctionExpression).build(),\n      basic: ExpressionBuilder.mergeUsingOr(this.expression, this.disjunctionExpression).build(),\n      advanced: ExpressionBuilder.mergeUsingOr(this.advancedExpression, this.disjunctionExpression).build(),\n      constant: ExpressionBuilder.mergeUsingOr(this.constantExpression, this.disjunctionExpression).build()\n    };\n  }\n\n  /**\n   * Return only the expression(s) part(s) of the query, as a string, except the given expression.<br/>\n   * This is used by {@link Facet}, to build their group by request with query override.\n   * @param except\n   * @returns {string}\n   */\n  public computeCompleteExpressionExcept(except: string): string {\n    return this.computeCompleteExpressionPartsExcept(except).full;\n  }\n\n  /**\n   * Return only the expression(s) part(s) of the query, as an object, except the given expression.<br/>\n   * This is used by {@link Facet}, to build their group by request with query override.\n   * @param except\n   * @returns {{full: string, withoutConstant: string, constant: string}}\n   */\n  public computeCompleteExpressionPartsExcept(except: string): IQueryBuilderExpression {\n    var withoutConstantAndExcept = ExpressionBuilder.merge(this.expression, this.advancedExpression);\n    withoutConstantAndExcept.remove(except);\n\n    var basicAndExcept = new ExpressionBuilder();\n    basicAndExcept.fromExpressionBuilder(this.expression);\n    basicAndExcept.remove(except);\n\n    var advancedAndExcept = new ExpressionBuilder();\n    advancedAndExcept.fromExpressionBuilder(this.advancedExpression);\n    advancedAndExcept.remove(except);\n\n    return {\n      full: ExpressionBuilder.mergeUsingOr(ExpressionBuilder.merge(withoutConstantAndExcept, this.constantExpression), this.disjunctionExpression).build(),\n      withoutConstant: ExpressionBuilder.mergeUsingOr(withoutConstantAndExcept, this.disjunctionExpression).build(),\n      basic: ExpressionBuilder.mergeUsingOr(basicAndExcept, this.disjunctionExpression).build(),\n      advanced: ExpressionBuilder.mergeUsingOr(advancedAndExcept, this.disjunctionExpression).build(),\n      constant: ExpressionBuilder.mergeUsingOr(this.constantExpression, this.disjunctionExpression).build()\n    };\n  }\n\n  /**\n   * Add fields to specifically include when the results return.<br/>\n   * This can be used to accelerate the execution time of every query, as there is much less data to process if you whitelist specific fields.\n   * @param fields\n   */\n  public addFieldsToInclude(fields: string[]) {\n    this.fieldsToInclude = _.uniq((this.fieldsToInclude || []).concat(fields));\n  }\n\n  public addRequiredFields(fields: string[]) {\n    this.requiredFields = _.uniq(this.requiredFields.concat(fields));\n  }\n\n  /**\n   * Add fields to specifically exclude when the results return.<br/>\n   * This can be used to accelerate the execution time of every query, as there is much less data to process if you blacklist specific fields.\n   * @param fields\n   */\n  public addFieldsToExclude(fields: string[]) {\n    this.fieldsToExclude = _.uniq((this.fieldsToInclude || []).concat(fields));\n  }\n\n  public computeFieldsToInclude() {\n    if (this.includeRequiredFields || this.fieldsToInclude != null) {\n      return this.requiredFields.concat(this.fieldsToInclude || []);\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Add a single context key->value pair to the query.<br/>\n   * This is used by the Query pipeline in the Coveo platform.\n   * @param key\n   * @param value\n   */\n  public addContextValue(key: string, value: any) {\n    if (this.context == null) {\n      this.context = {};\n    }\n    this.context[key] = value;\n  }\n\n  /**\n   * Add a context object to the query.<br/>\n   * This can contain multiple key->value.<br/>\n   * This is used by the Query pipeline in the Coveo platform.\n   * @param values\n   */\n  public addContext(values: { [key: string]: any }) {\n    if (this.context == null) {\n      this.context = {};\n    }\n    _.extend(this.context, values);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/QueryBuilder.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport _ = require('underscore');\n\n/**\n * An `ExpressionBuilder` that is mostly used by the {@link QueryBuilder}.<br/>\n * It is used to build a single query expression.<br/>\n * It allows combining multiple expression parts into a single string and provides utilities to generate common expression parts.\n */\nexport class ExpressionBuilder {\n  private parts: string[] = []; // he he he\n  public wrapParts: boolean = true;\n\n  /**\n   * Add a new part to the expression.\n   * @param expression\n   */\n  public add(expression: string) {\n    Assert.isNonEmptyString(expression);\n    this.parts.push(expression);\n  }\n\n  /**\n   * Take another `ExpressionBuilder`, and copy it.\n   * @param expression\n   */\n  public fromExpressionBuilder(expression: ExpressionBuilder) {\n    this.parts = this.parts.concat(expression.parts);\n  }\n\n  /**\n   * Add a new part to the expression, but specific for field values<br/>\n   * eg @field=(value1,value2,value3).\n   * @param field The field for which to create an expression (e.g.: @foo).\n   * @param operator The operator to use e.g.: = (equal) == (strict equal) <> (not equal).\n   * @param values The values to put in the expression.\n   */\n  public addFieldExpression(field: string, operator: string, values: string[]) {\n    Assert.isNonEmptyString(field);\n    Assert.stringStartsWith(field, '@');\n    Assert.isNonEmptyString(operator);\n    Assert.isLargerOrEqualsThan(1, values.length);\n\n    this.add(QueryUtils.buildFieldExpression(field, operator, values));\n  }\n\n  /**\n   * Add a new part to the expression, but specific for field values<br/>\n   * eg : NOT @field==(value1, value2, value3).\n   * @param field The field for which to create an expression (e.g.: @foo)\n   * @param values The values to put in the expression.\n   */\n  public addFieldNotEqualExpression(field: string, values: string[]) {\n    Assert.isNonEmptyString(field);\n    Assert.stringStartsWith(field, '@');\n    Assert.isLargerOrEqualsThan(1, values.length);\n\n    this.add(QueryUtils.buildFieldNotEqualExpression(field, values));\n  }\n\n  /**\n   * Removes an expression from the builder.\n   * @param expression\n   */\n  public remove(expression: string) {\n    Assert.isNonEmptyString(expression);\n    var index = _.indexOf(this.parts, expression);\n    if (index != -1) {\n      this.parts.splice(_.indexOf(this.parts, expression), 1);\n    }\n  }\n\n  /**\n   * Checks if the builder is currently empty.\n   * @returns {boolean}\n   */\n  public isEmpty(): boolean {\n    return this.parts.length == 0;\n  }\n\n  /**\n   * Builds the expression string by combining all the parts together.<br/>\n   * @param exp expression to join the different parts, default to a space.\n   * @returns {any}\n   */\n  public build(exp: string = ' '): string {\n    if (this.parts.length == 0) {\n      return undefined;\n    } else if (this.parts.length == 1) {\n      return this.parts[0];\n    } else if (this.wrapParts) {\n      return '(' + this.parts.join(')' + exp + '(') + ')';\n    } else {\n      return this.parts.join(exp);\n    }\n  }\n\n  /**\n   * Merges several `ExpressionBuilder` together.\n   * @param builders Builders that should be merged.\n   * @returns {Coveo.ExpressionBuilder}\n   */\n  static merge(...builders: ExpressionBuilder[]): ExpressionBuilder {\n    var merged = new ExpressionBuilder();\n    _.each(builders, (builder: ExpressionBuilder) => {\n      merged.parts = merged.parts.concat(builder.parts);\n    });\n\n    return merged;\n  }\n\n  /**\n   * Merges several `ExpressionBuilder` together, using the OR operator.\n   * @param builders Builders that should be merged.\n   * @returns {Coveo.ExpressionBuilder}\n   */\n  static mergeUsingOr(...builders: ExpressionBuilder[]): ExpressionBuilder {\n    var nonEmpty = _.filter(builders, (b: ExpressionBuilder) => !b.isEmpty());\n\n    var merged = new ExpressionBuilder();\n\n    if (nonEmpty.length == 1) {\n      merged.parts = [].concat(nonEmpty[0].parts);\n    } else if (nonEmpty.length > 1) {\n      var parts = _.map(nonEmpty, b => b.build());\n      merged.add('(' + parts.join(') OR (') + ')');\n    }\n    return merged;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/ExpressionBuilder.ts\n **/","import { ISearchEndpoint, IEndpointCallOptions, IGetDocumentOptions, ISearchEndpointOptions, IViewAsHtmlOptions } from './SearchEndpointInterface';\nimport { IQuery } from './Query';\nimport { ITaggingRequest } from './TaggingRequest';\nimport { IRatingRequest } from './RatingRequest';\nimport { IRevealQuerySuggestRequest } from './RevealQuerySuggest';\nimport { IRevealQuerySuggestResponse } from './RevealQuerySuggest';\nimport { IIndexFieldValue } from '../rest/FieldValue';\nimport { IQueryResult } from '../rest/QueryResult';\nimport { IEndpointError } from '../rest/EndpointError';\nimport { IExtension } from '../rest/Extension';\nimport { IQueryResults } from './QueryResults';\nimport { IFieldDescription } from '../rest/FieldDescription';\nimport { IListFieldValuesRequest } from './ListFieldValuesRequest';\nimport { ISubscriptionRequest, ISubscription } from './Subscription';\nimport { ISentryLog } from './SentryLog';\nimport _ = require('underscore');\n\nexport class SearchEndpointWithDefaultCallOptions implements ISearchEndpoint {\n  options: ISearchEndpointOptions;\n\n  constructor(private endpoint: ISearchEndpoint, private callOptions?: IEndpointCallOptions) {\n    this.options = endpoint.options;\n  }\n\n  public getBaseUri(): string {\n    return this.endpoint.getBaseUri();\n  }\n\n  public getBaseAlertsUri(): string {\n    return this.endpoint.getBaseAlertsUri();\n  }\n\n  public getAuthenticationProviderUri(provider: string, returnUri: string, message: string): string {\n    return this.endpoint.getAuthenticationProviderUri(provider, returnUri, message);\n  }\n\n  public isJsonp(): boolean {\n    return this.endpoint.isJsonp();\n  }\n\n  public search(query: IQuery, callOptions?: IEndpointCallOptions): Promise<IQueryResults> {\n    return this.endpoint.search(query, this.enrichCallOptions(callOptions));\n  }\n\n  public getExportToExcelLink(query: IQuery, numberOfResults: number, callOptions?: IEndpointCallOptions): string {\n    return this.endpoint.getExportToExcelLink(query, numberOfResults, this.enrichCallOptions(callOptions));\n  }\n\n  public tagDocument(taggingRequest: ITaggingRequest, callOptions?: IEndpointCallOptions): Promise<boolean> {\n    return this.endpoint.tagDocument(taggingRequest, this.enrichCallOptions(taggingRequest));\n  }\n\n  public getRevealQuerySuggest(request: IRevealQuerySuggestRequest, callOptions?: IEndpointCallOptions): Promise<IRevealQuerySuggestResponse> {\n    return this.endpoint.getRevealQuerySuggest(request, this.enrichCallOptions(callOptions));\n  }\n\n  public rateDocument(ratingRequest: IRatingRequest, callOptions?: IEndpointCallOptions): Promise<boolean> {\n    return this.endpoint.rateDocument(ratingRequest, this.enrichCallOptions(callOptions));\n  }\n\n  public getRawDataStream(documentUniqueId: string, dataStreamType: string, callOptions?: IViewAsHtmlOptions): Promise<ArrayBuffer> {\n    return this.endpoint.getRawDataStream(documentUniqueId, dataStreamType, this.enrichCallOptions(callOptions));\n  }\n\n  public getDocument(documentUniqueId: string, callOptions?: IGetDocumentOptions): Promise<IQueryResult> {\n    return this.endpoint.getDocument(documentUniqueId, this.enrichCallOptions(callOptions));\n  }\n\n  public getDocumentText(documentUniqueID: string, callOptions?: IEndpointCallOptions): Promise<string> {\n    return this.endpoint.getDocumentText(documentUniqueID, this.enrichCallOptions(callOptions));\n  }\n\n  public getDocumentHtml(documentUniqueID: string, callOptions?: IViewAsHtmlOptions): Promise<HTMLDocument> {\n    return this.endpoint.getDocumentHtml(documentUniqueID, this.enrichCallOptions(callOptions));\n  }\n\n  public getViewAsHtmlUri(documentUniqueID: string, callOptions?: IViewAsHtmlOptions): string {\n    return this.endpoint.getViewAsHtmlUri(documentUniqueID, this.enrichCallOptions(callOptions));\n  }\n\n  public getViewAsDatastreamUri(documentUniqueID: string, dataStreamType: string, callOptions?: IViewAsHtmlOptions): string {\n    return this.endpoint.getViewAsDatastreamUri(documentUniqueID, dataStreamType, this.enrichCallOptions(callOptions));\n  }\n\n  public listFieldValues(request: IListFieldValuesRequest, callOptions?: IEndpointCallOptions): Promise<IIndexFieldValue[]> {\n    return this.endpoint.listFieldValues(request, this.enrichCallOptions(callOptions));\n  }\n\n  public listFields(callOptions?: IEndpointCallOptions): Promise<IFieldDescription[]> {\n    return this.endpoint.listFields(this.enrichCallOptions(callOptions));\n  }\n\n  public extensions(callOptions?: IEndpointCallOptions): Promise<IExtension[]> | Promise<IEndpointError> {\n    return this.endpoint.extensions(this.enrichCallOptions(callOptions));\n  }\n\n  public follow(request: ISubscriptionRequest): Promise<ISubscription> {\n    return this.endpoint.follow(request);\n  }\n\n  public listSubscriptions(page: number): Promise<ISubscription[]> {\n    return this.endpoint.listSubscriptions(page);\n  }\n\n  public updateSubscription(subscription: ISubscription): Promise<ISubscription> {\n    return this.endpoint.updateSubscription(subscription);\n  }\n\n  public deleteSubscription(subscription: ISubscription): Promise<ISubscription> {\n    return this.endpoint.deleteSubscription(subscription);\n  }\n\n  public logError(sentryLog: ISentryLog): Promise<boolean> {\n    return this.endpoint.logError(sentryLog);\n  }\n\n  private enrichCallOptions<T extends IEndpointCallOptions>(callOptions?: T): T {\n    return _.extend({}, callOptions, this.callOptions);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/SearchEndpointWithDefaultCallOptions.ts\n **/","\"use strict\";\nvar analytics = require('./analytics');\nexports.analytics = analytics;\nvar SimpleAnalytics = require('./simpleanalytics');\nexports.SimpleAnalytics = SimpleAnalytics;\nvar history = require('./history');\nexports.history = history;\nvar donottrack = require('./donottrack');\nexports.donottrack = donottrack;\nvar storage = require('./storage');\nexports.storage = storage;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/index.js\n ** module id = 82\n ** module chunks = 0 1\n **/","\"use strict\";\nvar history_1 = require('./history');\nrequire('whatwg-fetch');\nexports.Version = 'v15';\nexports.Endpoints = {\n    default: 'https://usageanalytics.coveo.com',\n    production: 'https://usageanalytics.coveo.com',\n    dev: 'https://usageanalyticsdev.coveo.com',\n    staging: 'https://usageanalyticsstaging.coveo.com'\n};\n;\nfunction defaultResponseTransformer(response) {\n    return response.json().then(function (data) {\n        data.raw = response;\n        return data;\n    });\n}\nvar Client = (function () {\n    function Client(opts) {\n        if (typeof opts === 'undefined') {\n            throw new Error('You have to pass options to this constructor');\n        }\n        this.endpoint = opts.endpoint || exports.Endpoints.default;\n        this.token = opts.token;\n        this.version = opts.version || exports.Version;\n    }\n    Client.prototype.sendEvent = function (eventType, request) {\n        return fetch(this.getRestEndpoint() + \"/analytics/\" + eventType, {\n            method: 'POST',\n            headers: this.getHeaders(),\n            mode: 'cors',\n            body: JSON.stringify(request),\n            credentials: 'include'\n        });\n    };\n    Client.prototype.sendSearchEvent = function (request) {\n        return this.sendEvent('search', request).then(defaultResponseTransformer);\n    };\n    Client.prototype.sendClickEvent = function (request) {\n        return this.sendEvent('click', request).then(defaultResponseTransformer);\n    };\n    Client.prototype.sendCustomEvent = function (request) {\n        return this.sendEvent('custom', request).then(defaultResponseTransformer);\n    };\n    Client.prototype.sendViewEvent = function (request) {\n        if (request.referrer === '') {\n            delete request.referrer;\n        }\n        var store = new history_1.HistoryStore();\n        var historyElement = {\n            name: 'PageView',\n            value: request.contentIdValue,\n            time: JSON.stringify(new Date()),\n        };\n        store.addElement(historyElement);\n        return this.sendEvent('view', request).then(defaultResponseTransformer);\n    };\n    Client.prototype.getVisit = function () {\n        return fetch(this.getRestEndpoint() + \"/analytics/visit\")\n            .then(defaultResponseTransformer);\n    };\n    Client.prototype.getHealth = function () {\n        return fetch(this.getRestEndpoint() + \"/analytics/monitoring/health\")\n            .then(defaultResponseTransformer);\n    };\n    Client.prototype.getRestEndpoint = function () {\n        return this.endpoint + \"/rest/\" + this.version;\n    };\n    Client.prototype.getHeaders = function () {\n        var headers = {\n            'Content-Type': \"application/json\"\n        };\n        if (this.token) {\n            headers['Authorization'] = \"Bearer \" + this.token;\n        }\n        return headers;\n    };\n    return Client;\n}());\nexports.Client = Client;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Client;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/analytics.js\n ** module id = 83\n ** module chunks = 0 1\n **/","\"use strict\";\nvar storage_1 = require('./storage');\nvar detector = require('./detector');\nexports.STORE_KEY = '__coveo.analytics.history';\nexports.MAX_NUMBER_OF_HISTORY_ELEMENTS = 20;\nexports.MIN_THRESHOLD_FOR_DUPLICATE_VALUE = 1000 * 60;\nexports.MAX_VALUE_SIZE = 75;\nvar HistoryStore = (function () {\n    function HistoryStore(store) {\n        this.store = store || storage_1.getAvailableStorage();\n        if (!(this.store instanceof storage_1.CookieStorage) && detector.hasCookieStorage()) {\n            new storage_1.CookieStorage().removeItem(exports.STORE_KEY);\n        }\n    }\n    ;\n    HistoryStore.prototype.addElement = function (elem) {\n        elem.internalTime = new Date().getTime();\n        this.cropQueryElement(elem);\n        var currentHistory = this.getHistoryWithInternalTime();\n        if (currentHistory != null) {\n            if (this.isValidEntry(elem)) {\n                this.setHistory([elem].concat(currentHistory));\n            }\n        }\n        else {\n            this.setHistory([elem]);\n        }\n    };\n    HistoryStore.prototype.getHistory = function () {\n        var history = this.getHistoryWithInternalTime();\n        return this.stripInternalTime(history);\n    };\n    HistoryStore.prototype.getHistoryWithInternalTime = function () {\n        try {\n            return JSON.parse(this.store.getItem(exports.STORE_KEY));\n        }\n        catch (e) {\n            return [];\n        }\n    };\n    HistoryStore.prototype.setHistory = function (history) {\n        try {\n            this.store.setItem(exports.STORE_KEY, JSON.stringify(history.slice(0, exports.MAX_NUMBER_OF_HISTORY_ELEMENTS)));\n        }\n        catch (e) { }\n    };\n    HistoryStore.prototype.clear = function () {\n        try {\n            this.store.removeItem(exports.STORE_KEY);\n        }\n        catch (e) { }\n    };\n    HistoryStore.prototype.getMostRecentElement = function () {\n        var currentHistory = this.getHistoryWithInternalTime();\n        if (currentHistory != null) {\n            var sorted = currentHistory.sort(function (first, second) {\n                if (first.internalTime == null && second.internalTime == null) {\n                    return 0;\n                }\n                if (first.internalTime == null && second.internalTime != null) {\n                    return 1;\n                }\n                if (first.internalTime != null && second.internalTime == null) {\n                    return -1;\n                }\n                return second.internalTime - first.internalTime;\n            });\n            return sorted[0];\n        }\n        return null;\n    };\n    HistoryStore.prototype.cropQueryElement = function (elem) {\n        if (elem.name && elem.name.toLowerCase() == 'query' && elem.value != null) {\n            elem.value = elem.value.slice(0, exports.MAX_VALUE_SIZE);\n        }\n    };\n    HistoryStore.prototype.isValidEntry = function (elem) {\n        var lastEntry = this.getMostRecentElement();\n        if (lastEntry && lastEntry.value == elem.value) {\n            return elem.internalTime - lastEntry.internalTime > exports.MIN_THRESHOLD_FOR_DUPLICATE_VALUE;\n        }\n        return true;\n    };\n    HistoryStore.prototype.stripInternalTime = function (history) {\n        if (history) {\n            history.forEach(function (part, index, array) {\n                delete part.internalTime;\n            });\n        }\n        return history;\n    };\n    return HistoryStore;\n}());\nexports.HistoryStore = HistoryStore;\n;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = HistoryStore;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/history.js\n ** module id = 84\n ** module chunks = 0 1\n **/","\"use strict\";\nvar detector = require('./detector');\nvar cookieutils_1 = require('./cookieutils');\nexports.preferredStorage = null;\nfunction getAvailableStorage() {\n    if (exports.preferredStorage) {\n        return exports.preferredStorage;\n    }\n    if (detector.hasLocalStorage()) {\n        return localStorage;\n    }\n    if (detector.hasCookieStorage()) {\n        return new CookieStorage();\n    }\n    if (detector.hasSessionStorage()) {\n        return sessionStorage;\n    }\n    return new NullStorage();\n}\nexports.getAvailableStorage = getAvailableStorage;\nvar CookieStorage = (function () {\n    function CookieStorage() {\n    }\n    CookieStorage.prototype.getItem = function (key) {\n        return cookieutils_1.Cookie.get(key);\n    };\n    CookieStorage.prototype.removeItem = function (key) {\n        cookieutils_1.Cookie.erase(key);\n    };\n    CookieStorage.prototype.setItem = function (key, data) {\n        cookieutils_1.Cookie.set(key, data);\n    };\n    return CookieStorage;\n}());\nexports.CookieStorage = CookieStorage;\nvar NullStorage = (function () {\n    function NullStorage() {\n    }\n    NullStorage.prototype.getItem = function (key) { return null; };\n    NullStorage.prototype.removeItem = function (key) { };\n    NullStorage.prototype.setItem = function (key, data) { };\n    return NullStorage;\n}());\nexports.NullStorage = NullStorage;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/storage.js\n ** module id = 85\n ** module chunks = 0 1\n **/","\"use strict\";\nfunction hasLocalStorage() {\n    try {\n        return 'localStorage' in window && window['localStorage'] !== null;\n    }\n    catch (e) {\n        return false;\n    }\n}\nexports.hasLocalStorage = hasLocalStorage;\n;\nfunction hasSessionStorage() {\n    try {\n        return 'sessionStorage' in window && window['sessionStorage'] !== null;\n    }\n    catch (e) {\n        return false;\n    }\n}\nexports.hasSessionStorage = hasSessionStorage;\n;\nfunction hasCookieStorage() {\n    return navigator.cookieEnabled;\n}\nexports.hasCookieStorage = hasCookieStorage;\n;\nfunction hasDocument() {\n    return document !== null;\n}\nexports.hasDocument = hasDocument;\n;\nfunction hasDocumentLocation() {\n    return hasDocument() && document.location !== null;\n}\nexports.hasDocumentLocation = hasDocumentLocation;\n;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/detector.js\n ** module id = 86\n ** module chunks = 0 1\n **/","\"use strict\";\nvar Cookie = (function () {\n    function Cookie() {\n    }\n    Cookie.set = function (name, value, expiration) {\n        var domain, domainParts, date, expires, host;\n        if (expiration) {\n            date = new Date();\n            date.setTime(date.getTime() + expiration);\n            expires = '; expires=' + date.toGMTString();\n        }\n        else {\n            expires = '';\n        }\n        host = location.hostname;\n        if (host.indexOf('.') === -1) {\n            document.cookie = name + '=' + value + expires + '; path=/';\n        }\n        else {\n            domainParts = host.split('.');\n            domainParts.shift();\n            domain = '.' + domainParts.join('.');\n            document.cookie = name + '=' + value + expires + '; path=/; domain=' + domain;\n            if (Cookie.get(name) == null || Cookie.get(name) != value) {\n                domain = '.' + host;\n                document.cookie = name + '=' + value + expires + '; path=/; domain=' + domain;\n            }\n        }\n    };\n    Cookie.get = function (name) {\n        var cookiePrefix = name + '=';\n        var cookieArray = document.cookie.split(';');\n        for (var i = 0; i < cookieArray.length; i++) {\n            var cookie = cookieArray[i];\n            cookie = cookie.replace(/^\\s+/, '');\n            if (cookie.indexOf(cookiePrefix) == 0) {\n                return cookie.substring(cookiePrefix.length, cookie.length);\n            }\n        }\n        return null;\n    };\n    Cookie.erase = function (name) {\n        Cookie.set(name, '', -1);\n    };\n    return Cookie;\n}());\nexports.Cookie = Cookie;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/cookieutils.js\n ** module id = 87\n ** module chunks = 0 1\n **/","(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = options.status === undefined ? 200 : options.status\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/whatwg-fetch/fetch.js\n ** module id = 88\n ** module chunks = 0 1\n **/","\"use strict\";\nvar analytics = require('./analytics');\nvar objectassign_1 = require('./objectassign');\nvar utils_1 = require('./utils');\nvar SimpleAPI = (function () {\n    function SimpleAPI() {\n    }\n    SimpleAPI.prototype.init = function (token, endpoint) {\n        if (typeof token === 'undefined') {\n            throw new Error(\"You must pass your token when you call 'init'\");\n        }\n        if (typeof token === 'string') {\n            endpoint = endpoint || analytics.Endpoints.default;\n            this.client = new analytics.Client({\n                token: token,\n                endpoint: endpoint\n            });\n        }\n        else if (typeof token === 'object' && typeof token.sendEvent !== 'undefined') {\n            this.client = token;\n        }\n        else {\n            throw new Error(\"You must pass either your token or a valid object when you call 'init'\");\n        }\n    };\n    SimpleAPI.prototype.send = function (event, customData) {\n        if (typeof this.client == 'undefined') {\n            throw new Error(\"You must call init before sending an event\");\n        }\n        customData = objectassign_1.default({}, {\n            hash: window.location.hash\n        }, customData);\n        switch (event) {\n            case 'pageview':\n                this.client.sendViewEvent({\n                    location: window.location.toString(),\n                    referrer: document.referrer,\n                    language: document.documentElement.lang,\n                    title: document.title,\n                    contentIdKey: utils_1.popFromObject(customData, 'contentIdKey'),\n                    contentIdValue: utils_1.popFromObject(customData, 'contentIdValue'),\n                    contentType: utils_1.popFromObject(customData, 'contentType'),\n                    anonymous: utils_1.popFromObject(customData, 'anonymous'),\n                    customData: customData\n                });\n                return;\n            default:\n                throw new Error(\"Event type: '\" + event + \"' not implemented\");\n        }\n    };\n    SimpleAPI.prototype.onLoad = function (callback) {\n        if (typeof callback == 'undefined') {\n            throw new Error(\"You must pass a function when you call 'onLoad'\");\n        }\n        callback();\n    };\n    return SimpleAPI;\n}());\nexports.SimpleAPI = SimpleAPI;\nvar simpleAPI = new SimpleAPI();\nexports.SimpleAnalytics = function (action) {\n    var params = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        params[_i - 1] = arguments[_i];\n    }\n    var actionFunction = simpleAPI[action];\n    if (actionFunction) {\n        return actionFunction.apply(simpleAPI, params);\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports.SimpleAnalytics;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/simpleanalytics.js\n ** module id = 89\n ** module chunks = 0 1\n **/","\"use strict\";\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\nvar objectAssignPonyfill = function (target) {\n    var sources = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        sources[_i - 1] = arguments[_i];\n    }\n    if (target === undefined || target === null) {\n        throw new TypeError('Cannot convert undefined or null to object');\n    }\n    var output = Object(target);\n    sources.forEach(function (source) {\n        var from = Object(source);\n        for (var key in from) {\n            if (hasOwnProperty.call(from, key)) {\n                output[key] = from[key];\n            }\n        }\n        if (getOwnPropertySymbols) {\n            var symbols = getOwnPropertySymbols(from);\n            symbols.forEach(function (symbol) {\n                if (propIsEnumerable.call(from, symbol)) {\n                    output[symbol] = from[symbol];\n                }\n            });\n        }\n    });\n    return output;\n};\nexports.ponyfill = objectAssignPonyfill;\nexports.assign = typeof Object.assign === 'function' ? Object.assign : objectAssignPonyfill;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports.assign;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/objectassign.js\n ** module id = 90\n ** module chunks = 0 1\n **/","\"use strict\";\nfunction popFromObject(object, key) {\n    if (object) {\n        var value = object[key];\n        delete object[key];\n        return value;\n    }\n}\nexports.popFromObject = popFromObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/utils.js\n ** module id = 91\n ** module chunks = 0 1\n **/","\"use strict\";\nexports.doNotTrack = [true, 'yes', '1'].indexOf(navigator.doNotTrack || navigator.msDoNotTrack || window.doNotTrack);\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = exports.doNotTrack;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/coveo.analytics/dist/donottrack.js\n ** module id = 92\n ** module chunks = 0 1\n **/","/// <reference path='../ui/Facet/Facet.ts' />\n\nimport { Facet } from '../ui/Facet/Facet';\nimport { IGroupByRequest } from '../rest/GroupByRequest';\nimport { IGroupByResult } from '../rest/GroupByResult';\nimport { ExpressionBuilder } from '../ui/Base/ExpressionBuilder';\nimport { FacetValue } from '../ui/Facet/FacetValues';\nimport { Utils } from '../utils/Utils';\nimport { QueryBuilder } from '../ui/Base/QueryBuilder';\nimport { FacetSearchParameters } from '../ui/Facet/FacetSearchParameters';\nimport { Assert } from '../misc/Assert';\nimport { IIndexFieldValue } from '../rest/FieldValue';\nimport { FacetUtils } from '../ui/Facet/FacetUtils';\nimport { IQueryResults } from '../rest/QueryResults';\nimport { IGroupByValue } from '../rest/GroupByValue';\nimport { IEndpointError } from '../rest/EndpointError';\nimport { IQueryBuilderExpression } from '../ui/Base/QueryBuilder';\nimport _ = require('underscore');\n\nexport class FacetQueryController {\n  public expressionToUseForFacetSearch: string;\n  public basicExpressionToUseForFacetSearch: string;\n  public advancedExpressionToUseForFacetSearch: string;\n  public constantExpressionToUseForFacetSearch: string;\n  public lastGroupByRequestIndex: number;\n  public lastGroupByRequest: IGroupByRequest;\n  public lastGroupByResult: IGroupByResult;\n\n  private currentSearchPromise: Promise<IQueryResults>;\n\n  constructor(public facet: Facet) {\n  }\n\n  /**\n   * Reset the expression for the facet search, used when a new query is triggered\n   */\n  public prepareForNewQuery() {\n    this.lastGroupByRequestIndex = undefined;\n    this.expressionToUseForFacetSearch = undefined;\n    this.constantExpressionToUseForFacetSearch = undefined;\n  }\n\n  /**\n   * Compute the filter expression that the facet need to output for the query\n   * @returns {string}\n   */\n  public computeOurFilterExpression(): string {\n    let builder = new ExpressionBuilder();\n    let selected = this.facet.values.getSelected();\n    if (selected.length > 0) {\n      if (this.facet.options.useAnd) {\n        _.each(selected, (value: FacetValue) => {\n          builder.addFieldExpression(<string>this.facet.options.field, '==', [value.value]);\n        });\n      } else {\n        builder.addFieldExpression(<string>this.facet.options.field, '==', _.map(selected, (value: FacetValue) => value.value));\n      }\n    }\n    let excluded = this.facet.values.getExcluded();\n    if (excluded.length > 0) {\n      builder.addFieldNotEqualExpression(<string>this.facet.options.field, _.map(excluded, (value: FacetValue) => value.value));\n    }\n    if (Utils.isNonEmptyString(this.facet.options.additionalFilter)) {\n      builder.add(this.facet.options.additionalFilter);\n    }\n    return builder.build();\n  }\n\n  /**\n   * Build the group by request for the facet, and insert it in the query builder\n   * @param queryBuilder\n   */\n  public putGroupByIntoQueryBuilder(queryBuilder: QueryBuilder) {\n    Assert.exists(queryBuilder);\n\n    let allowedValues = this.createGroupByAllowedValues();\n    let groupByRequest = this.createBasicGroupByRequest(allowedValues);\n\n    let queryOverrideObject = this.createGroupByQueryOverride(queryBuilder);\n    if (!Utils.isNullOrUndefined(queryOverrideObject)) {\n      groupByRequest.queryOverride = queryOverrideObject.basic;\n      groupByRequest.advancedQueryOverride = queryOverrideObject.advanced;\n      groupByRequest.constantQueryOverride = queryOverrideObject.constant;\n      this.expressionToUseForFacetSearch = queryOverrideObject.withoutConstant;\n      this.basicExpressionToUseForFacetSearch = queryOverrideObject.basic;\n      this.advancedExpressionToUseForFacetSearch = queryOverrideObject.advanced;\n      this.constantExpressionToUseForFacetSearch = queryOverrideObject.constant;\n    } else {\n      let parts = queryBuilder.computeCompleteExpressionParts();\n      this.expressionToUseForFacetSearch = parts.withoutConstant == null ? '@uri' : parts.withoutConstant;\n      this.basicExpressionToUseForFacetSearch = parts.basic == null ? '@uri' : parts.basic;\n      this.advancedExpressionToUseForFacetSearch = parts.advanced;\n      this.constantExpressionToUseForFacetSearch = parts.constant;\n    }\n    this.lastGroupByRequestIndex = queryBuilder.groupByRequests.length;\n    this.lastGroupByRequest = groupByRequest;\n    queryBuilder.groupByRequests.push(groupByRequest);\n  }\n\n  /**\n   * Search inside the facet, using a group by request\n   * @param params\n   * @param oldLength Optional params, used by the search method to call itself recursively to fetch all required values\n   * @returns {Promise|Promise<T>}\n   */\n  public search(params: FacetSearchParameters, oldLength = params.nbResults): Promise<IIndexFieldValue[]> {\n    return new Promise((resolve, reject) => {\n      let onResult = (fieldValues?: IIndexFieldValue[]) => {\n        let newLength = fieldValues.length;\n        fieldValues = this.checkForFacetSearchValuesToRemove(fieldValues, params.valueToSearch);\n        if (FacetUtils.needAnotherFacetSearch(fieldValues.length, newLength, oldLength, 5)) {\n          // This means that we removed enough values from the returned one that we need to perform a new search with more values requested.\n          params.nbResults += 5;\n          return this.search(params, fieldValues.length);\n        } else {\n          resolve(fieldValues);\n        }\n      };\n\n      let searchPromise = this.facet.getEndpoint().search(params.getQuery());\n      this.currentSearchPromise = searchPromise;\n\n      searchPromise.then((queryResults: IQueryResults) => {\n        if (this.currentSearchPromise == searchPromise) {\n          // params.getQuery() will generate a query for all excluded values + some new values\n          // there is no clean way to do a group by and remove some values\n          // so instead we request more values than we need, and crop all the one we don't want\n          let valuesCropped: IGroupByValue[] = [];\n          if (queryResults.groupByResults && queryResults.groupByResults[0]) {\n            _.each(queryResults.groupByResults[0].values, (v: IGroupByValue) => {\n              if (v.lookupValue) {\n                if (!_.contains(params.alwaysExclude, v.lookupValue.toLowerCase())) {\n                  valuesCropped.push(v);\n                }\n              } else {\n                if (!_.contains(params.alwaysExclude, v.value.toLowerCase())) {\n                  valuesCropped.push(v);\n                }\n              }\n            });\n          }\n          onResult(_.first(valuesCropped, params.nbResults));\n        } else {\n          reject();\n        }\n      })\n        .catch((error: IEndpointError) => {\n          reject(error);\n        });\n    });\n  }\n\n  public fetchMore(numberOfValuesToFetch: number) {\n    let params = new FacetSearchParameters(this.facet);\n    params.alwaysInclude = this.facet.options.allowedValues || _.pluck(this.facet.values.getAll(), 'value');\n    params.nbResults = numberOfValuesToFetch;\n    return this.facet.getEndpoint().search(params.getQuery());\n  }\n\n  public searchInFacetToUpdateDelta(facetValues: FacetValue[]) {\n    let params = new FacetSearchParameters(this.facet);\n    let query = params.getQuery();\n    query.aq = this.computeOurFilterExpression();\n    _.each(facetValues, (facetValue: FacetValue) => {\n      facetValue.waitingForDelta = true;\n    });\n    query.groupBy = [this.createBasicGroupByRequest(_.map(facetValues, (facetValue: FacetValue) => facetValue.value))];\n    query.groupBy[0].completeFacetWithStandardValues = false;\n    return this.facet.getEndpoint().search(query);\n  }\n\n  protected createGroupByAllowedValues() {\n    // if you want to keep displayed values next time, take all current values as allowed values\n    // otherwise take only the selected value\n    if (this.facet.options.allowedValues != undefined) {\n      return this.facet.options.allowedValues;\n    } else if (this.facet.options.customSort != undefined) {\n      // If there is a custom sort, we still need to add selectedValues to the group by\n      // Filter out duplicates with a lower case comparison on the value\n      return this.getUnionWithCustomSortLowercase(this.facet.options.customSort, this.getAllowedValuesFromSelected());\n    } else {\n      return _.map(this.getAllowedValuesFromSelected(), (facetValue: FacetValue) => facetValue.value);\n    }\n  }\n\n  private getUnionWithCustomSortLowercase(customSort: string[], facetValues: FacetValue[]) {\n    // This will take the custom sort, compare it against the passed in facetValues\n    // The comparison is lowercase.\n    // The union of the 2 arrays with duplicated filtered out is returned.\n\n    let toCompare = _.map(customSort, (val: string) => {\n      return val.toLowerCase();\n    });\n    let filtered = _.chain(facetValues)\n      .filter((facetValue: FacetValue) => {\n        return !_.contains(toCompare, facetValue.value.toLowerCase());\n      })\n      .map((facetValue: FacetValue) => {\n        return facetValue.value;\n      })\n      .value();\n    return _.compact(customSort.concat(filtered));\n  }\n\n  protected getAllowedValuesFromSelected() {\n    let facetValues: FacetValue[] = [];\n    if (this.facet.options.useAnd || !this.facet.keepDisplayedValuesNextTime) {\n      let selected = this.facet.values.getSelected();\n      if (selected.length == 0) {\n        return undefined;\n      }\n      facetValues = this.facet.values.getSelected();\n    } else {\n      facetValues = this.facet.values.getAll();\n    }\n    return facetValues;\n  }\n\n  private createGroupByQueryOverride(queryBuilder: QueryBuilder): IQueryBuilderExpression {\n    let additionalFilter = this.facet.options.additionalFilter ? this.facet.options.additionalFilter : '';\n    let queryOverrideObject: IQueryBuilderExpression = undefined;\n\n    if (this.facet.options.useAnd) {\n      if (Utils.isNonEmptyString(additionalFilter)) {\n        queryOverrideObject = queryBuilder.computeCompleteExpressionParts();\n        if (Utils.isEmptyString(queryOverrideObject.basic)) {\n          queryOverrideObject.basic = '@uri';\n        }\n      }\n    } else {\n      if (this.facet.values.hasSelectedOrExcludedValues()) {\n        queryOverrideObject = queryBuilder.computeCompleteExpressionPartsExcept(this.computeOurFilterExpression());\n        if (Utils.isEmptyString(queryOverrideObject.basic)) {\n          queryOverrideObject.basic = '@uri';\n        }\n      } else {\n        if (Utils.isNonEmptyString(additionalFilter)) {\n          queryOverrideObject = queryBuilder.computeCompleteExpressionParts();\n          if (Utils.isEmptyString(queryOverrideObject.basic)) {\n            queryOverrideObject.basic = '@uri';\n          }\n        }\n      }\n    }\n\n    if (queryOverrideObject) {\n      if (Utils.isNonEmptyString(additionalFilter)) {\n        queryOverrideObject.constant = queryOverrideObject.constant ? queryOverrideObject.constant + ' ' + additionalFilter : additionalFilter;\n      }\n    }\n    _.each(_.keys(queryOverrideObject), (k) => {\n      if (Utils.isEmptyString(queryOverrideObject[k]) || Utils.isNullOrUndefined(queryOverrideObject[k])) {\n        delete queryOverrideObject[k];\n      }\n    });\n    if (_.keys(queryOverrideObject).length == 0) {\n      queryOverrideObject = undefined;\n    }\n    return queryOverrideObject;\n  }\n\n  protected createBasicGroupByRequest(allowedValues?: string[], addComputedField: boolean = true): IGroupByRequest {\n    let nbOfRequestedValues = this.facet.numberOfValues;\n    if (this.facet.options.customSort != null) {\n      // If we have a custom sort, we need to make sure that we always request at least enough values to always receive them\n      let usedValues = this.getUnionWithCustomSortLowercase(this.facet.options.customSort, this.facet.values.getSelected().concat(this.facet.values.getExcluded()));\n      nbOfRequestedValues = Math.max(nbOfRequestedValues, usedValues.length);\n    }\n    let groupByRequest: IGroupByRequest = {\n      field: <string>this.facet.options.field,\n      maximumNumberOfValues: nbOfRequestedValues + (this.facet.options.enableMoreLess ? 1 : 0),\n      sortCriteria: this.facet.options.sortCriteria,\n      injectionDepth: this.facet.options.injectionDepth,\n      completeFacetWithStandardValues: this.facet.options.allowedValues == undefined ? true : false\n    };\n    if (this.facet.options.lookupField) {\n      groupByRequest.lookupField = <string>this.facet.options.lookupField;\n    }\n    if (allowedValues != null) {\n      groupByRequest.allowedValues = allowedValues;\n    }\n\n    if (addComputedField && Utils.isNonEmptyString(<string>this.facet.options.computedField)) {\n      groupByRequest.computedFields = [{\n        field: <string>this.facet.options.computedField,\n        operation: this.facet.options.computedFieldOperation\n      }];\n    }\n    return groupByRequest;\n  }\n\n  private checkForFacetSearchValuesToRemove(fieldValues: IIndexFieldValue[], valueToCheckAgainst: string) {\n    let regex = FacetUtils.getRegexToUseForFacetSearch(valueToCheckAgainst, this.facet.options.facetSearchIgnoreAccents);\n\n    return _.filter<IIndexFieldValue>(fieldValues, (fieldValue) => {\n      let isAllowed =\n        _.isEmpty(this.facet.options.allowedValues) ||\n        _.contains(this.facet.options.allowedValues, fieldValue.value);\n\n      let value = this.facet.getValueCaption(fieldValue);\n      return isAllowed && regex.test(value);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/FacetQueryController.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { Facet } from './Facet';\nimport { Utils } from '../../utils/Utils';\nimport { FacetUtils } from './FacetUtils';\nimport { IGroupByRequest } from '../../rest/GroupByRequest';\nimport { IQuery } from '../../rest/Query';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport class FacetSearchParameters {\n  public searchEvenIfEmpty: boolean;\n  public nbResults: number;\n  public ignoreAccents: boolean;\n  public valueToSearch: string = '';\n  public alwaysInclude: string[] = [];\n  public alwaysExclude: string[] = [];\n  public sortCriteria = 'occurrences';\n  public fetchMore = false;\n\n  constructor(public facet: Facet) {\n    this.nbResults = facet.options.numberOfValuesInFacetSearch;\n    this.ignoreAccents = facet.options.facetSearchIgnoreAccents;\n    this.searchEvenIfEmpty = facet.searchInterface.isNewDesign();\n  }\n\n  public setValueToSearch(value: string) {\n    this.valueToSearch = value;\n    if (Utils.isNonEmptyString(value)) {\n      this.valueToSearch = this.valueToSearch.trim();\n      this.alwaysInclude = this.alwaysInclude.concat(FacetUtils.getValuesToUseForSearchInFacet(this.valueToSearch, this.facet));\n    }\n    return this;\n  }\n\n  public excludeCurrentlyDisplayedValuesInSearch(searchResults: HTMLElement) {\n    _.each(this.getCurrentlyShowedValueInSearch(searchResults), (v) => {\n      var expandedValues = FacetUtils.getValuesToUseForSearchInFacet(v, this.facet);\n      _.each(expandedValues, (expanded) => {\n        this.alwaysExclude.push(expanded);\n      });\n    });\n    _.each(this.facet.getDisplayedFacetValues(), (v) => {\n      var expandedValues = FacetUtils.getValuesToUseForSearchInFacet(v.value, this.facet);\n      _.each(expandedValues, (expanded) => {\n        this.alwaysExclude.push(expanded);\n      });\n    });\n  }\n\n  public getGroupByRequest(): IGroupByRequest {\n    this.lowerCaseAll();\n    var nbResults = this.nbResults;\n    if (this.facet.searchInterface.isNewDesign()) {\n      nbResults += this.alwaysExclude.length;\n    }\n\n    var typedByUser = [];\n    if (this.valueToSearch) {\n      typedByUser = ['*' + this.valueToSearch + '*'];\n    }\n\n    var request: IGroupByRequest = {\n      allowedValues: typedByUser.concat(this.alwaysInclude).concat(this.alwaysExclude),\n      maximumNumberOfValues: nbResults,\n      completeFacetWithStandardValues: this.facet.options.lookupField ? false : true, // See : https://coveord.atlassian.net/browse/JSUI-728\n      field: <string>this.facet.options.field,\n      sortCriteria: this.facet.options.sortCriteria || this.sortCriteria,\n      injectionDepth: this.facet.options.injectionDepth,\n    };\n\n    if (this.facet.options.lookupField) {\n      request.lookupField = <string>this.facet.options.lookupField;\n    }\n\n    if (this.facet.options.computedField) {\n      request.computedFields = [{\n        field: <string>this.facet.options.computedField,\n        operation: this.facet.options.computedFieldOperation\n      }];\n    }\n    return request;\n  }\n\n  public getQuery(): IQuery {\n    var lastQuery = _.clone(this.facet.queryController.getLastQuery());\n    if (!lastQuery) {\n      // There should normally always be a last query available\n      // If not, just create an empty one.\n      lastQuery = new QueryBuilder().build();\n    }\n    // We want to always force query syntax to true for a facet search,\n    // but arrange for the basic expression to adapt itself with no syntax block\n    if (!lastQuery.disableQuerySyntax) {\n      lastQuery.q = this.facet.facetQueryController.basicExpressionToUseForFacetSearch;\n    } else {\n      if (this.facet.facetQueryController.basicExpressionToUseForFacetSearch == '@uri') {\n        lastQuery.q = '';\n      } else {\n        lastQuery.q = `<@- ${this.facet.facetQueryController.basicExpressionToUseForFacetSearch} -@>`;\n      }\n    }\n    lastQuery.disableQuerySyntax = false;\n    lastQuery.cq = this.facet.facetQueryController.constantExpressionToUseForFacetSearch;\n    lastQuery.aq = this.facet.facetQueryController.advancedExpressionToUseForFacetSearch;\n    lastQuery.enableDidYouMean = false;\n    lastQuery.firstResult = 0;\n    lastQuery.numberOfResults = 0;\n    lastQuery.fieldsToInclude = [];\n    lastQuery.groupBy = [this.getGroupByRequest()];\n    return lastQuery;\n  }\n\n  private getCurrentlyShowedValueInSearch(searchResults: HTMLElement) {\n    return _.map($$(searchResults).findAll('.coveo-facet-value-caption'), (val) => {\n      return $$(val).text();\n    });\n  }\n\n  private lowerCaseAll() {\n    this.alwaysExclude = _.chain(this.alwaysExclude)\n      .map((v) => {\n        return v.toLowerCase();\n      })\n      .uniq()\n      .value();\n\n    this.alwaysInclude = _.chain(this.alwaysInclude)\n      .map((v) => {\n        return v.toLowerCase();\n      })\n      .uniq()\n      .value();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetSearchParameters.ts\n **/","/// <reference path='Facet.ts' />\nimport { Facet } from './Facet';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { FileTypes } from '../Misc/FileTypes';\nimport { DateUtils } from '../../utils/DateUtils';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\ndeclare const Coveo;\n\nexport class FacetUtils {\n  static getRegexToUseForFacetSearch(value: string, ignoreAccent: boolean) {\n    return new RegExp(StringUtils.stringToRegex(value, ignoreAccent), 'i');\n  }\n\n  static getValuesToUseForSearchInFacet(original: string, facet: Facet): string[] {\n    let ret = [original];\n    let regex = this.getRegexToUseForFacetSearch(original, facet.options.facetSearchIgnoreAccents);\n    if (facet.options.valueCaption) {\n      _.chain(facet.options.valueCaption)\n        .pairs()\n        .filter((pair) => {\n          return regex.test(pair[1]);\n        })\n        .each((match) => {\n          ret.push(match[0]);\n        });\n      if (QueryUtils.isStratusAgnosticField(<string>facet.options.field, '@objecttype') || QueryUtils.isStratusAgnosticField(<string>facet.options.field, '@filetype')) {\n        _.each(FileTypes.getFileTypeCaptions(), (value: string, key: string) => {\n          if (!(key in facet.options.valueCaption) && regex.test(value)) {\n            ret.push(key);\n          }\n        });\n      }\n    } else if (QueryUtils.isStratusAgnosticField(<string>facet.options.field, '@objecttype') || QueryUtils.isStratusAgnosticField(<string>facet.options.field, '@filetype')) {\n      _.each(_.filter(_.pairs(FileTypes.getFileTypeCaptions()), (pair) => {\n        return regex.test(pair[1]);\n      }), (match) => {\n        ret.push(match[0]);\n      });\n    } else if (QueryUtils.isStratusAgnosticField(<string>facet.options.field, '@month')) {\n      _.each(_.range(1, 13), (month) => {\n        if (regex.test(DateUtils.monthToString(month - 1))) {\n          ret.push(('0' + month.toString()).substr(-2));\n        }\n      });\n    }\n    return ret;\n  }\n\n  static buildFacetSearchPattern(values: string[]) {\n    values = _.map(values, (value) => {\n      return Utils.escapeRegexCharacter(value);\n    });\n    values[0] = '.*' + values[0] + '.*';\n    return values.join('|');\n  }\n\n  static needAnotherFacetSearch(currentSearchLength: number, newSearchLength: number, oldSearchLength: number, desiredSearchLength: number) {\n    // Something was removed (currentSearch < newSearch)\n    // && we might want to display more facet search result(currentSearch < desiredSearch)\n    // && the new query returned more stuff than the old one so there's still more results(currentSearchLength > oldLength)\n    return currentSearchLength < newSearchLength && currentSearchLength < desiredSearchLength && currentSearchLength > oldSearchLength;\n  }\n\n  static addNoStateCssClassToFacetValues(facet: Facet, container: HTMLElement) {\n    // This takes care of adding the correct css class on each facet value checkbox (empty white box) if at least one value is selected in that facet\n    if (facet.values.getSelected().length != 0) {\n      let noStates = $$(container).findAll('li:not(.coveo-selected)');\n      _.each(noStates, (noState) => {\n        $$(noState).addClass('coveo-no-state');\n      });\n    }\n  }\n\n  static tryToGetTranslatedCaption(field: string, value: string) {\n    let found: string;\n\n    if (QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@filetype')) {\n      found = FileTypes.getFileType(value.toLowerCase()).caption;\n    } else if (QueryUtils.isStratusAgnosticField(field.toLowerCase(), '@month')) {\n      try {\n        let month = parseInt(value);\n        found = DateUtils.monthToString(month - 1);\n      } catch (ex) {\n        // Do nothing\n      }\n    }\n    return found != undefined && Utils.isNonEmptyString(found) ? found : value;\n  }\n\n  static clipCaptionsToAvoidOverflowingTheirContainer(facet: Facet, forceClip?: boolean) {\n    // in new design, we don't need this : use flexbox instead (sorry IE user)\n    if (facet.getBindings && facet.getBindings().searchInterface && facet.getBindings().searchInterface.isNewDesign()) {\n      return;\n    }\n    if (!(Coveo.HierarchicalFacet && facet instanceof Coveo.HierarchicalFacet) || forceClip) {\n      facet.logger.trace('Clipping captions');\n      // force facet to show to calculate width\n      $$(facet.element).show();\n      let element = facet.element;\n      let captions = $$(element).findAll('.coveo-facet-value-caption');\n      for (let i = 0; i < captions.length; i++) {\n        if (captions[i].style.width != '') {\n          captions[i].style.width = '';\n        }\n      }\n      let labels = $$(element).findAll('.coveo-facet-value-label-wrapper');\n      let labelsMaxWidth: { element: HTMLElement; width: number; crop: number; label: HTMLElement; }[] = [];\n      for (let i = 0; i < labels.length; i++) {\n        let label: HTMLElement = labels[i];\n        let caption: HTMLElement = $$(label).find('.coveo-facet-value-caption');\n\n        let labelWidth = label.scrollWidth;\n        let labelVisibleWidth = label.clientWidth;\n\n        let captionWidth = caption.scrollWidth;\n\n        let crop = Math.max(0, labelWidth - labelVisibleWidth);\n        if (crop) {\n          labelsMaxWidth.push({\n            element: caption,\n            width: captionWidth,\n            crop: crop,\n            label: label\n          });\n        }\n      }\n      // remove the specific css class\n      element.style.display = '';\n      for (let i = 0; i < labelsMaxWidth.length; i++) {\n        let labelMaxWidth = labelsMaxWidth[i];\n        labelMaxWidth.element.style.width = labelMaxWidth.width - labelMaxWidth.crop + 'px';\n        if (labelMaxWidth.crop > 0) {\n          labelMaxWidth.label.setAttribute('title', $$(labelMaxWidth.element).text());\n        } else {\n          labelMaxWidth.label.setAttribute('title', null);\n        }\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetUtils.ts\n **/","/// <reference path=\"../ui/FacetRange/FacetRange.ts\" />\n\nimport { FacetQueryController } from './FacetQueryController';\nimport { FacetRange } from '../ui/FacetRange/FacetRange';\nimport { Utils } from '../utils/Utils';\nimport { IGroupByRequest } from '../rest/GroupByRequest';\n\nexport class FacetRangeQueryController extends FacetQueryController {\n  public graphGroupByQueriesIndex: number;\n\n  constructor(public facet: FacetRange) {\n    super(facet);\n  }\n\n  protected createBasicGroupByRequest(allowedValues?: string[], addComputedField: boolean = true) {\n    var groupByQuery = super.createBasicGroupByRequest(null, addComputedField);\n    groupByQuery.allowedValues = undefined;\n    if (Utils.isNonEmptyArray(this.facet.options.ranges)) {\n      groupByQuery = this.buildGroupByQueryForPredefinedRanges(groupByQuery);\n    } else {\n      groupByQuery = this.buildGroupByQueryForAutomaticRanges(groupByQuery);\n    }\n    return groupByQuery;\n  }\n\n  protected createGroupByAllowedValues(): string[] {\n    return undefined;\n  }\n\n  private buildGroupByQueryForAutomaticRanges(groupByQuery: IGroupByRequest) {\n    groupByQuery.generateAutomaticRanges = true;\n    return groupByQuery;\n  }\n\n  private buildGroupByQueryForPredefinedRanges(groupByQuery: IGroupByRequest) {\n    groupByQuery.rangeValues = this.facet.options.ranges;\n    groupByQuery.maximumNumberOfValues = this.facet.options.ranges.length;\n    return groupByQuery;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/FacetRangeQueryController.ts\n **/","/// <reference path=\"../ui/FacetSlider/FacetSlider.ts\" />\n\nimport { FacetSlider } from '../ui/FacetSlider/FacetSlider';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../events/QueryEvents';\nimport { QueryBuilder } from '../ui/Base/QueryBuilder';\nimport { IGroupByRequest } from '../rest/GroupByRequest';\nimport { ExpressionBuilder } from '../ui/Base/ExpressionBuilder';\nimport { IRangeValue } from '../rest/RangeValue';\nimport { DateUtils } from '../utils/DateUtils';\nimport { Logger } from '../misc/Logger';\nimport { QueryUtils } from '../utils/QueryUtils';\nimport _ = require('underscore');\n\nexport class FacetSliderQueryController {\n  public graphGroupByQueriesIndex: number;\n  private rangeValuesForGraphToUse: { start: any; end: any }[];\n  public lastGroupByRequestIndex: number;\n\n  constructor(public facet: FacetSlider) {\n    this.facet.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n  }\n\n  public prepareForNewQuery() {\n    this.lastGroupByRequestIndex = undefined;\n  }\n\n  public putGroupByIntoQueryBuilder(queryBuilder: QueryBuilder) {\n    if (this.facet.options.graph) {\n      this.putGroupByForGraphIntoQueryBuilder(queryBuilder);\n    }\n    this.putGroupByForSliderIntoQueryBuilder(queryBuilder);\n  }\n\n  private createBasicGroupByRequest() {\n    let groupByQuery: IGroupByRequest = {\n      field: <string>this.facet.options.field,\n      completeFacetWithStandardValues: true,\n      allowedValues: undefined\n    };\n    return groupByQuery;\n  }\n\n  public computeOurFilterExpression(boundary = [this.facet.startOfSlider, this.facet.endOfSlider]) {\n    let builder = new ExpressionBuilder();\n    if (boundary[0] != undefined && boundary[1] != undefined) {\n      if (this.facet.options.excludeOuterBounds) {\n        this.addFilterExpressionWithOuterBoundsExcluded(boundary[0], boundary[1], builder);\n      } else {\n        this.addFilterExpressionWithOuterBoundsIncluded(boundary[0], boundary[1], builder);\n      }\n    }\n    return builder.build();\n  }\n\n  private handleQuerySuccess(args: IQuerySuccessEventArgs) {\n    if (!this.isAValidRangeResponse(args)) {\n      let logger = new Logger(this);\n      logger.error(`Cannot instantiate FacetSlider for this field : ${this.facet.options.field}. It needs to be configured as a numerical field in the index`);\n      logger.error(`Disabling the FacetSlider`, this.facet);\n      this.facet.disable();\n      return;\n    }\n\n    if (this.facet.options && this.facet.options.graph && this.rangeValuesForGraphToUse == undefined) {\n      this.rangeValuesForGraphToUse = [];\n      let rawValues = args.results.groupByResults[this.graphGroupByQueriesIndex].values;\n      _.each(rawValues, (rawValue) => {\n        let rawSplit = rawValue.value.split('..');\n        this.rangeValuesForGraphToUse.push({\n          start: this.facet.options.dateField ? this.getISOFormat(rawSplit[0].replace('@', ' ')) : parseInt(rawSplit[0], 10),\n          end: this.facet.options.dateField ? this.getISOFormat(rawSplit[1].replace('@', ' ')) : parseInt(rawSplit[1], 10)\n        });\n      });\n    }\n  }\n\n  private isAValidRangeResponse(args: IQuerySuccessEventArgs) {\n    if (this.lastGroupByRequestIndex != undefined && args.results.groupByResults[this.lastGroupByRequestIndex]) {\n      let firstValue = args.results.groupByResults[this.lastGroupByRequestIndex].values[0];\n      if (firstValue && !QueryUtils.isRangeString(firstValue.value)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private addFilterExpressionWithOuterBoundsIncluded(start: any, end: any, builder: ExpressionBuilder) {\n    if (start != this.facet.options.start || end != this.facet.options.end) {\n      if (this.facet.options.dateField) {\n        start = this.getFilterDateFormat(start);\n        end = this.getFilterDateFormat(end);\n      }\n      builder.addFieldExpression(<string>this.facet.options.field, '==', [start + '..' + end]);\n    }\n  }\n\n  private addFilterExpressionWithOuterBoundsExcluded(start: any, end: any, builder: ExpressionBuilder) {\n    let startCompare = this.facet.options.start;\n    let endCompare = this.facet.options.end;\n    let startCompared = start;\n    let endCompared = end;\n    if (this.facet.options.dateField) {\n      startCompared = this.getFilterDateFormat(start);\n      endCompared = this.getFilterDateFormat(end);\n      startCompare = this.getFilterDateFormat(startCompare);\n      endCompare = this.getFilterDateFormat(endCompare);\n    } else {\n      startCompared += '';\n      endCompared += '';\n      startCompare += '';\n      endCompare += '';\n    }\n    if (startCompared != startCompare && endCompared == endCompare) {\n      builder.addFieldExpression(<string>this.facet.options.field, '>=', [startCompared]);\n    } else if (startCompared == startCompare && endCompared != endCompare) {\n      builder.addFieldExpression(<string>this.facet.options.field, '<=', [endCompared]);\n    } else {\n      this.addFilterExpressionWithOuterBoundsIncluded(start, end, builder);\n    }\n  }\n\n  private putGroupByForGraphIntoQueryBuilder(queryBuilder: QueryBuilder) {\n    this.graphGroupByQueriesIndex = queryBuilder.groupByRequests.length;\n    let basicGroupByRequestForGraph = this.createBasicGroupByRequest();\n\n    if (this.facet.isSimpleSliderConfig()) {\n      basicGroupByRequestForGraph.rangeValues = this.createRangeValuesForGraphUsingStartAndEnd();\n      basicGroupByRequestForGraph.generateAutomaticRanges = false;\n    } else {\n      basicGroupByRequestForGraph.generateAutomaticRanges = true;\n    }\n\n    let filter = this.computeOurFilterExpression(this.facet.getSliderBoundaryForQuery());\n    if (filter != undefined) {\n      let queryOverrideObject = queryBuilder.computeCompleteExpressionPartsExcept(filter);\n      basicGroupByRequestForGraph.queryOverride = queryOverrideObject.basic;\n      basicGroupByRequestForGraph.advancedQueryOverride = queryOverrideObject.advanced;\n      basicGroupByRequestForGraph.constantQueryOverride = queryOverrideObject.constant;\n      if (basicGroupByRequestForGraph.queryOverride == undefined) {\n        basicGroupByRequestForGraph.queryOverride = this.facet.options.queryOverride || '@uri';\n      } else {\n        basicGroupByRequestForGraph.queryOverride += (this.facet.options.queryOverride ? ' ' + this.facet.options.queryOverride : '');\n      }\n    } else if (this.facet.options.queryOverride != null) {\n      let completeExpression = queryBuilder.computeCompleteExpression();\n      basicGroupByRequestForGraph.queryOverride = (completeExpression != null ? completeExpression + ' ' : '') + this.facet.options.queryOverride;\n    }\n\n    basicGroupByRequestForGraph.sortCriteria = 'nosort';\n    basicGroupByRequestForGraph.maximumNumberOfValues = this.facet.options.graph.steps;\n    queryBuilder.groupByRequests.push(basicGroupByRequestForGraph);\n  }\n\n  private putGroupByForSliderIntoQueryBuilder(queryBuilder: QueryBuilder) {\n    this.lastGroupByRequestIndex = queryBuilder.groupByRequests.length;\n\n    let maximumNumberOfValues = 1;\n    if (this.facet.hasAGraph()) {\n      maximumNumberOfValues = this.facet.options.graph.steps;\n    }\n\n    let rangeValues = undefined;\n    const { start, end } = this.formatStartAndEnd();\n    if (this.facet.isSimpleSliderConfig()) {\n      rangeValues = [{\n        start: start,\n        end: end,\n        label: 'slider',\n        endInclusive: false\n      }];\n    }\n\n    const basicGroupByRequestForSlider = this.createBasicGroupByRequest();\n    basicGroupByRequestForSlider.maximumNumberOfValues = maximumNumberOfValues;\n    basicGroupByRequestForSlider.queryOverride = this.facet.options.queryOverride || '@uri';\n    basicGroupByRequestForSlider.sortCriteria = 'nosort';\n    basicGroupByRequestForSlider.generateAutomaticRanges = !this.facet.isSimpleSliderConfig();\n    basicGroupByRequestForSlider.rangeValues = rangeValues;\n    queryBuilder.groupByRequests.push(basicGroupByRequestForSlider);\n  }\n\n  private createRangeValuesForGraphUsingStartAndEnd() {\n    const { start, end } = this.formatStartAndEnd();\n    let oneRange: IRangeValue = {\n      start: start,\n      end: end,\n      endInclusive: true,\n      label: 'Slider'\n    };\n\n    if (this.facet.options.graph.steps == undefined) {\n      this.facet.options.graph.steps = 10;\n    }\n    if (this.facet.options.dateField && isNaN(this.facet.options.start)) {\n      this.facet.options.start = new Date(this.facet.options.start).getTime();\n    }\n    if (this.facet.options.dateField && isNaN(this.facet.options.end)) {\n      this.facet.options.end = new Date(this.facet.options.end).getTime();\n    }\n    if (this.rangeValuesForGraphToUse != undefined) {\n      return this.usePrebuiltRange(oneRange);\n    } else {\n      return this.buildRange(oneRange);\n    }\n  }\n\n  private usePrebuiltRange(basicRangeRequest: IRangeValue) {\n    return _.map(this.rangeValuesForGraphToUse, (value) => {\n      return {\n        start: value.start,\n        end: value.end,\n        endInclusive: basicRangeRequest.endInclusive,\n        label: basicRangeRequest.label\n      };\n    });\n  }\n\n  private buildRange(basicRangeRequest: IRangeValue) {\n    let start = this.facet.options.start;\n    let oneStep = (this.facet.options.end - this.facet.options.start) / this.facet.options.graph.steps;\n    return _.map(_.range(0, this.facet.options.graph.steps, 1), (step) => {\n      let newStart = start + (step * oneStep);\n      let newEnd = start + ((step + 1) * oneStep);\n      if (this.facet.options.dateField) {\n        newStart = this.getISOFormat(newStart);\n        newEnd = this.getISOFormat(newEnd);\n      }\n      return {\n        endInclusive: basicRangeRequest.endInclusive,\n        label: basicRangeRequest.label,\n        start: newStart,\n        end: newEnd\n      };\n    });\n  }\n\n  private formatStartAndEnd() {\n    let start = this.facet.options.start;\n    let end = this.facet.options.end;\n    if (this.facet.options.dateField) {\n      start = this.getISOFormat(start);\n      end = this.getISOFormat(end);\n    }\n    return {\n      start: start,\n      end: end\n    };\n  }\n\n  private getISOFormat(value: any) {\n    if (value) {\n      if (!isNaN(value)) {\n        value = Number(value);\n      }\n      let date = new Date(value);\n      if (!DateUtils.isValid(date)) {\n        date = new Date(this.getBrowserCompatibleFormat(value));\n        if (!DateUtils.isValid(date)) {\n          // If we get here, we'll probably get an error further down the line when querying the index anyway ...\n          this.facet.logger.error('Cannot parse this date format.', value, new Date(value));\n          return undefined;\n        }\n      }\n      return date.toISOString();\n    } else {\n      return undefined;\n    }\n  }\n\n  private getFilterDateFormat(rawValue: any) {\n    if (rawValue) {\n      return this.getISOFormat(rawValue).replace('T', '@').replace('.000Z', '').replace(/-/g, '/');\n    } else {\n      return undefined;\n    }\n  }\n\n  private getBrowserCompatibleFormat(value: string) {\n    return value.replace('@', 'T').replace(/\\//g, '-');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/FacetSliderQueryController.ts\n **/","/// <reference path=\"../ui/HierarchicalFacet/HierarchicalFacet.ts\" />\n/// <reference path=\"./FacetQueryController.ts\" />\n\nimport { FacetQueryController } from './FacetQueryController';\nimport { HierarchicalFacet, IValueHierarchy } from '../ui/HierarchicalFacet/HierarchicalFacet';\nimport { FacetSearchParameters } from '../ui/Facet/FacetSearchParameters';\nimport { IIndexFieldValue } from '../rest/FieldValue';\nimport { FacetUtils } from '../ui/Facet/FacetUtils';\nimport _ = require('underscore');\n\nexport class HierarchicalFacetQueryController extends FacetQueryController {\n  constructor(public facet: HierarchicalFacet) {\n    super(facet);\n  }\n\n  public search(params: FacetSearchParameters, oldLength = params.nbResults): Promise<IIndexFieldValue[]> {\n    // Do a client side search, since HierarchicalFacet should normally have all value client side\n    let regex = FacetUtils.getRegexToUseForFacetSearch(this.facet.facetSearch.getValueInInputForFacetSearch(), this.facet.options.facetSearchIgnoreAccents);\n    return new Promise((resolve) => {\n      let match = _.chain(this.facet.getAllValueHierarchy())\n        .toArray()\n        .filter((v: IValueHierarchy) => {\n          return this.facet.getValueCaption(v.facetValue).match(regex) != null;\n        })\n        .first(this.facet.options.numberOfValuesInFacetSearch)\n        .value();\n      resolve(_.map(match, (v: IValueHierarchy) => {\n        return v.facetValue;\n      }));\n    });\n  }\n\n  protected getAllowedValuesFromSelected() {\n    return [];\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/HierarchicalFacetQueryController.ts\n **/","import { Assert } from '../misc/Assert';\nimport { QueryController } from '../controllers/QueryController';\nimport { Model } from '../models/Model';\nimport { InitializationEvents } from '../events/InitializationEvents';\nimport { $$ } from '../utils/Dom';\nimport { HashUtils } from '../utils/HashUtils';\nimport { Defer } from '../misc/Defer';\nimport { RootComponent } from '../ui/Base/RootComponent';\nimport { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\n/**\n * This component is instantiated automatically by the framework on the root if the {@link SearchInterface}.<br/>\n * When the {@link SearchInterface.options.enableHistory} option is set to true, this component is instantiated.<br/>\n * It's only job is to apply changes in the {@link QueryStateModel} to the hash in the URL, and vice versa.<br/>\n * This component does *not* hold the state of the interface, it only represent it in the URL.\n */\nexport class HistoryController extends RootComponent {\n  static ID = 'HistoryController';\n\n  static attributesThatDoNotTriggerQuery = ['quickview'];\n\n  private ignoreNextHashChange = false;\n  private initialHashChange = false;\n  private willUpdateHash: boolean = false;\n  private hashchange: (...args: any[]) => void;\n\n  /**\n   * Create a new history controller\n   * @param element\n   * @param windoh For mock / test purposes.\n   * @param model\n   * @param queryController\n   * @param hashUtilsModule For mock / test purposes.\n   */\n  constructor(element: HTMLElement, public windoh: Window, public model: Model, public queryController: QueryController, private hashUtils: typeof HashUtils = HashUtils) {\n    super(element, HistoryController.ID);\n\n    this.windoh = this.windoh || window;\n    Assert.exists(this.model);\n    Assert.exists(this.queryController);\n\n    $$(this.element).on(InitializationEvents.restoreHistoryState, () => {\n      this.logger.trace('Restore history state. Update model');\n      this.updateModelFromHash();\n    });\n\n    $$(this.element).on(this.model.getEventName(Model.eventTypes.all), () => {\n      this.logger.trace('Query model changed. Update hash');\n      this.updateHashFromModel();\n    });\n    this.hashchange = () => {\n      this.handleHashChange();\n    };\n    this.windoh.addEventListener('hashchange', this.hashchange);\n    $$(this.element).on(InitializationEvents.nuke, () => this.handleNuke());\n  }\n\n  /**\n   * Set the given map of key value in the hash of the URL\n   * @param values\n   */\n  public setHashValues(values: {}) {\n    this.logger.trace('Update history hash');\n\n    let hash = '#' + this.hashUtils.encodeValues(values);\n    const hashHasChanged = this.windoh.location.hash != hash;\n    this.ignoreNextHashChange = hashHasChanged;\n\n    this.logger.trace('ignoreNextHashChange', this.ignoreNextHashChange);\n    this.logger.trace('initialHashChange', this.initialHashChange);\n    this.logger.trace('from', this.windoh.location.hash, 'to', hash);\n\n    if (this.initialHashChange) {\n      this.initialHashChange = false;\n      if (hashHasChanged) {\n        this.windoh.location.replace(hash);\n        this.logger.trace('History hash modified', hash);\n      }\n    } else if (this.ignoreNextHashChange) {\n      this.windoh.location.hash = hash;\n      this.logger.trace('History hash created', hash);\n    }\n  }\n\n  private handleNuke() {\n    this.windoh.removeEventListener('hashchange', this.hashchange);\n  }\n\n  private handleHashChange() {\n    this.logger.trace('History hash changed');\n\n    if (this.ignoreNextHashChange) {\n      this.logger.trace('History hash change ignored');\n      this.ignoreNextHashChange = false;\n      return;\n    }\n\n    let diff = this.updateModelFromHash();\n\n    if (_.difference(diff, HistoryController.attributesThatDoNotTriggerQuery).length > 0) {\n      this.queryController.executeQuery();\n    }\n  }\n\n  private updateHashFromModel() {\n    this.logger.trace('Model -> history hash');\n\n    if (!this.willUpdateHash) {\n      Defer.defer(() => {\n        let attributes = this.model.getAttributes();\n        this.setHashValues(attributes);\n        this.logger.debug('Saving state to hash', attributes);\n        this.willUpdateHash = false;\n      });\n      this.willUpdateHash = true;\n    }\n  }\n\n  private updateModelFromHash() {\n    this.logger.trace('History hash -> model');\n\n    let toSet: { [key: string]: any } = {};\n    let diff: string[] = [];\n    _.each(<_.Dictionary<any>>this.model.attributes, (value, key?, obj?) => {\n      let valToSet = this.getHashValue(key);\n      toSet[key] = valToSet;\n      if (this.model.get(key) != valToSet) {\n        diff.push(key);\n      }\n    });\n    this.initialHashChange = true;\n    this.model.setMultiple(toSet);\n    return diff;\n  }\n\n  private getHashValue(key: string): any {\n    Assert.isNonEmptyString(key);\n    let value;\n    try {\n      value = this.hashUtils.getValue(key, this.hashUtils.getHash(this.windoh));\n    } catch (error) {\n      this.logger.error(`Could not parse parameter ${key} from URI`);\n    }\n\n    if (Utils.isUndefined(value)) {\n      value = this.model.defaultAttributes[key];\n    }\n\n    return value;\n  }\n\n  public debugInfo() {\n    return {\n      'state': this.model.getAttributes()\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/HistoryController.ts\n **/","import { $$ } from '../utils/Dom';\nimport { Assert } from '../misc/Assert';\nimport { Utils } from '../utils/Utils';\nimport { BaseComponent } from '../ui/Base/BaseComponent';\nimport _ = require('underscore');\n\nexport const MODEL_EVENTS = {\n  PREPROCESS: 'preprocess',\n  CHANGE_ONE: 'change:',\n  CHANGE: 'change',\n  RESET: 'reset',\n  ALL: 'all'\n};\n\nexport interface IModelSetOptions {\n  silent?: boolean;\n  customAttribute?: boolean;\n  validateType?: boolean;\n}\n\nexport interface IAttributeChangedEventArg {\n  attribute: string;\n  value: any;\n}\n\nexport interface IAttributesChangedEventArg {\n  attributes: {};\n}\n\nexport interface IModelChangedEventArg {\n  model: Model;\n}\n\n/**\n * A *model* is a key-value store that triggers various JavaScript events when any value associated to one of its key changes.<br/>\n * This class is meant to be extended, one of the most important extension being the {@link QueryStateModel} class.<br/>\n * Components set values in this key-value store and listen to triggered events in order to update themselves accordingly.<br/>\n */\nexport class Model extends BaseComponent {\n  /**\n   * The attributes contained in this model.</br>\n   * Normally, you should not set attributes directly on this property, as this would prevent required events from being triggered.\n   */\n  public attributes: { [key: string]: any };\n  public defaultAttributes: { [key: string]: any };\n  private eventNameSpace;\n\n  /**\n   * The event types that can be triggered:<br/>\n   * • `preprocess`: triggered before a value is set on an attribute. This allows the value to be modified before it is set.<br/>\n   * • `changeOne`: triggered when a single value changes.</br>\n   * • `change`: triggered when one or many values change.</br>\n   * • `reset`: triggered when all attributes are reset to their default values. </br>\n   * • `all`: triggered after the `change` event.</br>\n   * @type {{preprocess: string, changeOne: string, change: string, reset: string, all: string}}\n   */\n  public static eventTypes = {\n    preprocess: 'preprocess',\n    changeOne: 'change:',\n    change: 'change',\n    reset: 'reset',\n    all: 'all'\n  };\n\n  constructor(element: HTMLElement, id: string, attributes: { [key: string]: any }) {\n    super(element, id);\n    this.eventNameSpace = id;\n\n    this.defaultAttributes = Utils.extendDeep(this.defaultAttributes, attributes);\n    this.attributes = attributes;\n    this.logger.debug('Creating model');\n  }\n\n  /**\n   * Sets the value of a single specific attribute.</br>\n   * Note: this method calls the `setMultiple` method.\n   * @param attribute\n   * the specific attribute whose value is to be set.\n   * @param value\n   * the value to set the attribute to.\n   * @param options\n   * the options (see {@link setMultiple}).\n   */\n  public set(attribute: string, value: any, options?: IModelSetOptions) {\n    let toSet: { [key: string]: any } = {};\n    toSet[attribute] = value;\n    this.setMultiple(toSet, options);\n  }\n\n  /**\n   * Gets an object containing all *active* registered attribute key-values.</br>\n   * An attribute is considered active when its value is not in its default state.\n   * @returns {{object}}\n   */\n  public getAttributes() {\n    let attributes: { [key: string]: any } = {};\n    _.each(this.attributes, (attribute, key) => {\n      if (_.isObject(attribute)) {\n        if (!Utils.objectEqual(attribute, this.defaultAttributes[key])) {\n          attributes[key] = attribute;\n        }\n      } else if (attribute != this.defaultAttributes[key]) {\n        attributes[key] = attribute;\n      }\n    });\n    return attributes;\n  }\n\n  /**\n   * Sets the values of one or many attributes.</br>\n   * This method may trigger the following events (in order):</br>\n   * • `preprocess`</br>\n   * • `changeOne`</br>\n   * • `change`</br>\n   * • `all`\n   * @param toSet\n   * the key-value list of attributes with their new intended values.\n   * @param options\n   * if the `customAttribute` option is set to `true`, the method will not validate whether an attribute is registered or not.</br>\n   * If the `validateType` option is set to `true`, the method will ensure that each value type is correct.</br>\n   * If the `silent` option is set to `true`, then the `changeOne`, `change` and `all` events will not be triggered.\n   */\n  public setMultiple(toSet: { [key: string]: any }, options?: IModelSetOptions) {\n    let anythingChanged = false;\n    this.preprocessEvent(toSet);\n    _.each(<_.Dictionary<any>>toSet, (value, attribute?) => {\n      if (!options || !options.customAttribute) {\n        this.checkIfAttributeExists(attribute);\n      }\n      value = this.parseToCorrectType(attribute, value);\n      if (!options || options.validateType) {\n        if (!this.typeIsValid(attribute, value)) {\n          return;\n        }\n      }\n      if (this.checkIfAttributeChanged(attribute, value)) {\n        this.attributes[attribute] = value;\n        anythingChanged = true;\n        if (options == null || !options.silent) {\n          this.attributeHasChangedEvent(attribute);\n        }\n      }\n    });\n    if (anythingChanged && (options == null || !options.silent)) {\n      this.attributesHasChangedEvent();\n      this.anyEvent();\n    }\n  }\n\n  /**\n   * Sets a new default value to a single specific attribute.</br>\n   * Note: specifying a new attribute default value does not set the attribute to that value. This can be done using the {@link setDefault} method.\n   * @param attribute\n   * the specific attribute whose default value is to be changed.\n   * @param value\n   * the new intended default value.\n   * @param options\n   * if the `customAttribute` option is set to `true`, the method will not validate whether the attribute is registered or not.\n   */\n  public setNewDefault(attribute: string, value: any, options?: IModelSetOptions) {\n    if (!options || !options.customAttribute) {\n      this.checkIfAttributeExists(attribute);\n    }\n    this.defaultAttributes[attribute] = value;\n  }\n\n  /**\n   * Sets a single specific attribute to its default value.</br>\n   * Note: this method calls the {@link setMultiple} method without specifying any option.\n   * @param attribute\n   * the specific attribute whose value is to be set to its default value.\n   */\n  public setDefault(attribute: string) {\n    this.set(attribute, this.defaultAttributes[attribute]);\n  }\n\n  /**\n   * Gets the value of a single specific attribute.</br>\n   * If no attribute is specified, the method instead returns an object containing all registered attribute key-values.\n   * @param attribute\n   * the specific attribute whose value should be returned.\n   * @returns {any}\n   */\n  public get(attribute?: string): any {\n    if (attribute == undefined) {\n      return this.attributes;\n    } else {\n      return this.attributes[attribute];\n    }\n  }\n\n  /**\n   * Gets the default value of a single specific attribute.</br>\n   * If no attribute is specified, the method instead returns an object containing all registered attribute key-default values.\n   * @param attribute\n   * the specific attribute whose default value should be returned.\n   * @returns {any}\n   */\n  public getDefault(attribute?: string): any {\n    if (attribute == undefined) {\n      return this.defaultAttributes;\n    } else {\n      return this.defaultAttributes[attribute];\n    }\n  }\n\n  /**\n   * Resets each registered attribute to its default value.</br>\n   * Note: this method calls the {@link setMultiple} method without specifying any options.</br>\n   * After the `setMultiple` call has returned, this method triggers the `reset` event.\n   */\n  public reset() {\n    this.setMultiple(this.defaultAttributes);\n    this.modelWasResetEvent();\n  }\n\n  /**\n   * Registers a new attribute key-value.\n   * @param attribute\n   * the name of the new attribute to register.\n   * @param defaultValue\n   * the newly registered attribute default value.\n   */\n  public registerNewAttribute(attribute: string, defaultValue: any) {\n    this.defaultAttributes[attribute] = defaultValue;\n    this.attributes[attribute] = defaultValue;\n  }\n\n  /**\n   * Gets a string displaying the event namespace followed by the specific event name. The returned string is formatted thus:</br>\n   * `[eventNameSpace]:[eventName]`\n   * @example `getEventName(\"reset\");` could return `\"state:reset\"`.\n   * @param event\n   * the event name.\n   * @returns {string}\n   */\n  public getEventName(event: string) {\n    return this.eventNameSpace + ':' + event;\n  }\n\n  private attributesHasChangedEvent() {\n    $$(this.element).trigger(this.getEventName(Model.eventTypes.change), this.createAttributesChangedArgument());\n  }\n\n  private attributeHasChangedEvent(attr: string) {\n    $$(this.element).trigger(this.getEventName(Model.eventTypes.changeOne) + attr, this.createAttributeChangedArgument(attr));\n  }\n\n  private preprocessEvent(attributes: { [key: string]: any }) {\n    $$(this.element).trigger(this.getEventName(Model.eventTypes.preprocess), attributes);\n  }\n\n  private modelWasResetEvent() {\n    $$(this.element).trigger(this.getEventName(Model.eventTypes.reset), this.createModelChangedArgument());\n  }\n\n  private anyEvent() {\n    $$(this.element).trigger(this.getEventName(Model.eventTypes.all), this.createModelChangedArgument());\n  }\n\n  private createAttributeChangedArgument(attribute: string): IAttributeChangedEventArg {\n    return { attribute: attribute, value: this.attributes[attribute] };\n  }\n\n  private createAttributesChangedArgument(): IAttributesChangedEventArg {\n    return { attributes: this.attributes };\n  }\n\n  private createModelChangedArgument(): IModelChangedEventArg {\n    return { model: this };\n  }\n\n  private checkIfAttributeExists(attribute: string) {\n    Assert.check(_.has(this.attributes, attribute));\n  }\n\n  private typeIsValid(attribute: string, value: any): boolean {\n    if (!Utils.isNullOrUndefined(this.attributes[attribute]) && !Utils.isUndefined(value)) {\n      if (_.isNumber(this.attributes[attribute])) {\n        return this.validateNumber(attribute, value);\n      } else if (_.isBoolean(this.attributes[attribute])) {\n        return this.validateBoolean(attribute, value);\n      } else {\n        return this.validateOther(attribute, value);\n      }\n    }\n    return true;\n  }\n\n  private validateNumber(attribute: string, value: any): boolean {\n    if (!_.isNumber(value) || isNaN(value)) {\n      this.logger.error(`Non-matching type for ${attribute}. Expected number and got ${value}`);\n      return false;\n    }\n    return true;\n  }\n\n  private validateBoolean(attribute: string, value: any) {\n    if (!_.isBoolean(value) && !Utils.parseBooleanIfNotUndefined(value) !== undefined) {\n      this.logger.error(`Non matching type for ${attribute}. Expected boolean and got ${value}`);\n      return false;\n    }\n    return true;\n  }\n\n  private validateOther(attribute: string, value: any) {\n    if (!Utils.isNullOrUndefined(this.defaultAttributes[attribute])) {\n      if (typeof value !== typeof this.defaultAttributes[attribute]) {\n        this.logger.error(`Non-matching type for ${attribute}. Expected ${typeof this.defaultAttributes[attribute]} and got ${value}`);\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private parseToCorrectType(attribute: string, value: any): any {\n    if (_.isNumber(this.attributes[attribute])) {\n      return parseInt(value, 10);\n    } else if (_.isBoolean(this.attributes[attribute])) {\n      if (_.isBoolean(value)) {\n        return value;\n      } else {\n        return Utils.parseBooleanIfNotUndefined(value);\n      }\n    }\n    return value;\n  }\n\n  private checkIfAttributeChanged(attribute: string, newValue: any): boolean {\n    let oldValue = this.attributes[attribute];\n    if (_.isNumber(oldValue) || _.isString(oldValue) || _.isBoolean(oldValue)) {\n      return oldValue !== newValue;\n    }\n    if (_.isArray(oldValue)) {\n      return !Utils.arrayEqual(oldValue, newValue);\n    }\n    if (_.isObject(oldValue)) {\n      return !Utils.objectEqual(oldValue, newValue);\n    }\n    return true;\n  }\n\n  public debugInfo() {\n    return null;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/Model.ts\n **/","import { LocalStorageUtils } from '../utils/LocalStorageUtils';\nimport { Model } from '../models/Model';\nimport { QueryController } from './QueryController';\nimport { Logger } from '../misc/Logger';\nimport { Assert } from '../misc/Assert';\nimport { InitializationEvents } from '../events/InitializationEvents';\nimport { RootComponent } from '../ui/Base/RootComponent';\nimport { $$ } from '../utils/Dom';\nimport _ = require('underscore');\n\n/**\n * This component acts like the {@link HistoryController} excepts that is saves the {@link QueryStateModel} in the local storage.<br/>\n * This will not allow 'back' and 'forward' navigation in the history, like the standard {@link HistoryController} allows. Instead, it load the query state only on page load.<br/>\n * To enable this component, you should set the {@link SearchInterface.options.useLocalStorageForHistory} as well as the {@link SearchInterface.options.enableHistory} options to true.\n */\nexport class LocalStorageHistoryController extends RootComponent {\n  static ID = 'LocalStorageHistoryController';\n\n  public storage: LocalStorageUtils<{ [key: string]: any }>;\n  private omit: string[] = [];\n\n  /**\n   * Create a new LocalStorageHistoryController instance\n   * @param element\n   * @param windoh For mock purpose\n   * @param model\n   * @param queryController\n   */\n  constructor(element: HTMLElement, public windoh: Window, public model: Model, public queryController: QueryController) {\n    super(element, LocalStorageHistoryController.ID);\n    if (!windoh['localStorage']) {\n      new Logger(element).info('No local storage available in current browser. LocalStorageHistoryController cannot initialize itself', this);\n    } else {\n      this.storage = new LocalStorageUtils<{ [key: string]: any }>(LocalStorageHistoryController.ID);\n      Assert.exists(this.model);\n      Assert.exists(this.queryController);\n      $$(this.element).on(InitializationEvents.restoreHistoryState, () => this.updateModelFromLocalStorage());\n      $$(this.element).on(this.model.getEventName(Model.eventTypes.all), () => this.updateLocalStorageFromModel());\n    }\n  }\n\n  /**\n   * Specifies an array of attributes from the query state model that should not be persisted in the local storage\n   * @param attributes\n   */\n  public withoutThoseAttribute(attributes: string[]) {\n    this.omit = attributes;\n  }\n\n  private updateLocalStorageFromModel() {\n    var attributes = _.omit(this.model.getAttributes(), this.omit);\n    this.setStorageValues(attributes);\n    this.logger.debug('Saving state to localstorage', attributes);\n  }\n\n  private updateModelFromLocalStorage() {\n    var toSet: { [key: string]: any } = {};\n    var loadedFromStorage = this.storage.load();\n    _.each(<_.Dictionary<any>>this.model.attributes, (value, key?, obj?) => {\n      var valToSet = loadedFromStorage ? loadedFromStorage[key] : undefined;\n      if (valToSet == undefined) {\n        valToSet = this.model.defaultAttributes[key];\n      }\n      toSet[key] = valToSet;\n    });\n    this.model.setMultiple(toSet);\n  }\n\n  public setStorageValues(values: { [key: string]: any }) {\n    this.storage.save(values);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/controllers/LocalStorageHistoryController.ts\n **/","export { Model } from './models/Model';\nexport { QueryStateModel } from './models/QueryStateModel';\nexport { ComponentOptionsModel } from './models/ComponentOptionsModel';\nexport { ComponentStateModel } from './models/ComponentStateModel';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ModelsModules.ts\n **/","import { Model, IModelSetOptions } from './Model';\nimport { Assert } from '../misc/Assert';\nimport { IStringMap } from '../rest/GenericParam';\nimport { Utils } from '../utils/Utils';\nimport _ = require('underscore');\n\nexport const QUERY_STATE_ATTRIBUTES = {\n  Q: 'q',\n  FIRST: 'first',\n  T: 't',\n  TG: 'tg',\n  SORT: 'sort',\n  LAYOUT: 'layout',\n  HD: 'hd',\n  HQ: 'hq',\n  QUICKVIEW: 'quickview'\n};\n\nexport interface IQueryStateIncludedAttribute {\n  title: string;\n  included: string[];\n}\n\nexport interface IQueryStateExcludedAttribute {\n  title: string;\n  excluded: string[];\n}\n\n/**\n * The QueryStateModel is a key->value store of the state of every component that can affect a query.<br/>\n * Component set values in this key -> value store, and listen to event triggered to react accordingly.<br/>\n * For example, when a query is launched, the searchbox will set the 'q' attribute, the pager will set the 'first' attribute, etc.<br/>\n * At the same time, this class will trigger the associated event when a value is modified.<br/>\n * eg : The user change the content of the searchbox, and submit a query. This will trigger the following events :<br/>\n * -- state:change:q (because the value of 'q' changed)</br>\n * -- state:change (because at least one value changed in the query state)<br/>\n * Component or external code could hook handler on those events : document.addEventListener('state:change:q', handler);<br/>\n * See : {@link Model}, as all the relevant method are exposed in the base class.<br/>\n * Optionally, the state can be persisted to the query string to allow browser history management : See {@link HistoryController}\n */\nexport class QueryStateModel extends Model {\n  static ID = 'state';\n\n  static defaultAttributes = {\n    q: '',\n    first: 0,\n    t: '',\n    hd: '',\n    hq: '',\n    sort: '',\n    layout: 'list',\n    tg: '',\n    quickview: ''\n  };\n\n  static attributesEnum = {\n    q: 'q',\n    first: 'first',\n    t: 't',\n    sort: 'sort',\n    layout: 'layout',\n    hd: 'hd',\n    hq: 'hq',\n    tg: 'tg',\n    quickview: 'quickview'\n  };\n\n  static getFacetId(id: string, include: boolean = true) {\n    return 'f:' + id + (include ? '' : ':not');\n  }\n\n  static getFacetOperator(id: string) {\n    return 'f:' + id + ':operator';\n  }\n\n  static getFacetLookupValue(id: string) {\n    return QueryStateModel.getFacetId(id) + ':lookupvalues';\n  }\n\n  /**\n   * Create a new QueryState\n   * @param element\n   * @param attributes\n   * @param bindings\n   */\n  constructor(element: HTMLElement, attributes?: IStringMap<string>) {\n    let merged = _.extend({}, QueryStateModel.defaultAttributes, attributes);\n    super(element, QueryStateModel.ID, merged);\n  }\n\n  /**\n   * Determine if at least one facet is currently active in the interface (this means that a facet has selected or excluded values)\n   * @returns {boolean}\n   */\n  public atLeastOneFacetIsActive() {\n    return !_.isUndefined(_.find(this.attributes, (value, key: any) => {\n      return key.indexOf('f:') == 0 && Utils.isNonEmptyArray(value);\n    }));\n  }\n\n  public set(attribute: string, value: any, options?: IModelSetOptions) {\n    this.validate(attribute, value);\n    super.set(attribute, value, options);\n  }\n\n  private validate(attribute: string, value: any) {\n    if (attribute == QueryStateModel.attributesEnum.first) {\n      Assert.isNumber(value);\n      Assert.isLargerOrEqualsThan(0, value);\n    }\n  }\n}\n\nexport function setState(model: Model, args: any[]): any {\n  Assert.exists(model);\n\n  if (args.length == 0 || args[0] == undefined) {\n    // No args means return the model\n    return model;\n  } else if (args.length == 1 && Utils.isNonEmptyString(args[0])) {\n    // One string arg means retrieve value from model\n    return model.get(args[0]);\n  } else if (_.isObject(args[0])) {\n    // One dictionary means set multiple values\n    let toSet = args[0];\n    let options = _.extend(<IModelSetOptions>{ customAttribute: true }, <IModelSetOptions>args[1]);\n    return model.setMultiple(toSet, options);\n  } else if (args.length > 1) {\n    // Otherwise we're setting a value\n    let name = <string>args[0];\n    let value = args[1];\n    let options = _.extend(<IModelSetOptions>{ customAttribute: true }, <IModelSetOptions>args[2]);\n    Assert.isNonEmptyString(name);\n    return model.set(name, value, options);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/QueryStateModel.ts\n **/","import { Model } from './Model';\nimport _ = require('underscore');\n\nexport interface IComponentOptionsAttributes {\n  resultLink: any;\n  searchHub: string;\n}\n\nexport class ComponentOptionsModel extends Model {\n  static ID = 'ComponentOptions';\n\n  static defaultAttributes: IComponentOptionsAttributes = {\n    resultLink: undefined,\n    searchHub: undefined\n  };\n\n  static attributesEnum = {\n    resultLink: 'resultLink',\n    searchHub: 'searchHub'\n  };\n\n  constructor(element: HTMLElement, attributes?: IComponentOptionsAttributes) {\n    var merged = _.extend({}, ComponentOptionsModel.defaultAttributes, attributes);\n    super(element, ComponentOptionsModel.ID, merged);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/ComponentOptionsModel.ts\n **/","import { Model } from './Model';\nimport { BaseComponent } from '../ui/Base/BaseComponent';\n\nexport class ComponentStateModel extends Model {\n  static ID = 'ComponentState';\n\n  constructor(element: HTMLElement) {\n    super(element, ComponentStateModel.ID, {});\n  }\n\n  public registerComponent(componentId: string, component: BaseComponent) {\n    var currentAttribute = this.attributes[componentId];\n    if (currentAttribute == undefined) {\n      this.attributes[componentId] = [component];\n    } else {\n      this.attributes[componentId].push(component);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/models/ComponentStateModel.ts\n **/","export * from './ui/Base/RegisteredNamedMethods';\nexport { ComponentOptions, ComponentOptionsType } from './ui/Base/ComponentOptions';\nexport { Component } from './ui/Base/Component';\nexport { BaseComponent } from './ui/Base/BaseComponent';\nexport { RootComponent } from './ui/Base/RootComponent';\nexport { QueryBuilder } from './ui/Base/QueryBuilder';\nexport { ExpressionBuilder } from './ui/Base/ExpressionBuilder';\nexport { IResultsComponentBindings } from './ui/Base/ResultsComponentBindings';\n// Export Initialization under both name, for legacy reason and old code in the wild that\n// reference the old CoveoJQuery module\nexport { Initialization } from './ui/Base/Initialization';\nexport { Initialization as CoveoJQuery } from './ui/Base/Initialization';\nexport { initCoveoJQuery } from './ui/Base/CoveoJQuery';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/UIBaseModules.ts\n **/","import { Initialization } from './Initialization';\nimport { Assert } from '../../misc/Assert';\nimport { QueryController } from '../../controllers/QueryController';\nimport { QueryStateModel, setState } from '../../models/QueryStateModel';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { Analytics } from '../Analytics/Analytics';\nimport { IAnalyticsClient } from '../Analytics/AnalyticsClient';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { $$ } from '../../utils/Dom';\nimport { IAnalyticsActionCause, IAnalyticsDocumentViewMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { IStringMap } from '../../rest/GenericParam';\nimport { BaseComponent } from '../Base/BaseComponent';\nimport { Component } from '../Base/Component';\nimport { IStandaloneSearchInterfaceOptions } from '../SearchInterface/SearchInterface';\nimport { IRecommendationOptions } from '../Recommendation/Recommendation';\nimport _ = require('underscore');\n\n/**\n * Initialize the framework with a basic search interface. Calls {@link Initialization.initSearchInterface}.<br/>\n * If using the jQuery extension, this is called using <code>$('#root').coveo('init');</code>.\n * @param element The root of the interface to initialize.\n * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType : true}}</code>).\n */\nexport function init(element: HTMLElement, options: any = {}) {\n  Initialization.initializeFramework(element, options, () => {\n    Initialization.initSearchInterface(element, options);\n  });\n}\n\nInitialization.registerNamedMethod('init', (element: HTMLElement, options: any = {}) => {\n  init(element, options);\n});\n\n/**\n * Initialize the framework with a standalone search box. Calls {@link Initialize.initStandaloneSearchInterface}.<br/>\n * If using the jQuery extension, this is called using <code>$('#root').coveo('initSearchbox');</code>.\n * @param element The root of the interface to initialize.\n * @param searchPageUri The search page on which to redirect when there is a query.\n * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType : true}}</code>).\n */\nexport function initSearchbox(element: HTMLElement, searchPageUri: string, options: any = {}): void {\n  Assert.isNonEmptyString(searchPageUri);\n  var searchInterfaceOptions = <IStandaloneSearchInterfaceOptions>{};\n  searchInterfaceOptions.searchPageUri = searchPageUri;\n  searchInterfaceOptions.autoTriggerQuery = false;\n  searchInterfaceOptions.hideUntilFirstQuery = false;\n  searchInterfaceOptions.enableHistory = false;\n  options = _.extend({}, options, { StandaloneSearchInterface: searchInterfaceOptions });\n  Initialization.initializeFramework(element, options, () => {\n    Initialization.initStandaloneSearchInterface(element, options);\n  });\n}\n\nInitialization.registerNamedMethod('initSearchbox', (element: HTMLElement, searchPageUri: string, options: any = {}) => {\n  initSearchbox(element, searchPageUri, options);\n});\n\n/**\n * Initialize the framework with a recommendation interface. Calls {@link Initialization.initRecommendationInterface}.<br/>\n * If using the jQuery extension, this is called using <code>$('#root').coveo('initRecommendation');</code>.\n * @param element The root of the interface to initialize.\n * @param mainSearchInterface The search interface to link with the recommendation interface (see {@link Recommendation}).\n * @param userContext The user context to pass with the query generated in the recommendation interface (see {@link Recommendation}).\n * @param options JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType: true}}</code>).\n */\nexport function initRecommendation(element: HTMLElement, mainSearchInterface?: HTMLElement, userContext?: { [name: string]: any }, options: any = {}): void {\n  var recommendationOptions = <IRecommendationOptions>{};\n  recommendationOptions.mainSearchInterface = mainSearchInterface;\n  recommendationOptions.userContext = JSON.stringify(userContext);\n  recommendationOptions.enableHistory = false;\n  options = _.extend({}, options, { Recommendation: recommendationOptions });\n  Initialization.initializeFramework(element, options, () => {\n    Initialization.initRecommendationInterface(element, options);\n  });\n}\n\nInitialization.registerNamedMethod('initRecommendation', (element: HTMLElement, mainSearchInterface: HTMLElement, userContext: any = {}, options: any = {}) => {\n  initRecommendation(element, mainSearchInterface, userContext, options);\n});\n\n\n/**\n * Execute a standard query. Active component in the interface will react to events/ push data in the query / handle the query success or failure as needed.<br/>\n * It triggers a standard query flow for which the standard component will perform their expected behavior.<br/>\n * If you wish to only perform a query on the index to retrieve results (without the component reacting), look into {@link SearchInterface} instead.<br/>\n * Calling this method is the same as calling {@link QueryController.executeQuery}.\n * @param element The root of the interface to initialize.\n */\nexport function executeQuery(element: HTMLElement): Promise<IQueryResults> {\n  Assert.exists(element);\n\n  var queryController = <QueryController>Component.resolveBinding(element, QueryController);\n  Assert.exists(queryController);\n  return queryController.executeQuery();\n}\n\nInitialization.registerNamedMethod('executeQuery', (element: HTMLElement) => {\n  return executeQuery(element);\n});\n\n/**\n * Perform operation on the state ({@link QueryStateModel} of the interface.<br/>\n * Get the complete {@link QueryStateModel} object: <code>Coveo.state(element)</code><br/>.\n * Get an attribute from the {@link QueryStateModel}: <code>Coveo.state(element, 'q')</code> Can be any attribute.<br/>\n * Set an attribute on the {@link QueryStateModel}: <code>Coveo.state(element, 'q', 'foobar')</code>. Can be any attribute.<br/>\n * Set multiple attribute on the {@link QueryStateModel}: <code>Coveo.state(element, {'q' : 'foobar' , sort : 'relevancy'})</code>. Can be any attribute.<br/>\n * If using the jQuery extension, this is called using <code>$('#root').coveo('state');</code>.\n * @param element The root of the interface for which to access the {@link QueryStateModel}.\n * @param args\n * @returns {any}\n */\nexport function state(element: HTMLElement, ...args: any[]): any {\n  Assert.exists(element);\n  var model = <QueryStateModel>Component.resolveBinding(element, QueryStateModel);\n  return setState(model, args);\n}\n\nInitialization.registerNamedMethod('state', (element: HTMLElement, ...args: any[]): any => {\n  if (args.length != 0) {\n    return state.apply(undefined, [element].concat(args));\n  } else {\n    return state.apply(undefined, [element]);\n  }\n});\n\n/**\n * Get the component bound on the given `HTMLElement`.\n * @param element The `HTMLElement` for which to get the component instance.\n * @param componentClass If multiple components are bound to a single `HTMLElement`, you need to specify which components you wish to get.\n * @param noThrow By default, the GET method will throw if there is no component bound, or if there are multiple component and no `componentClass` is specified. This deletes the error if set to true.\n * @returns {Component}\n */\nexport function get(element: HTMLElement, componentClass?, noThrow?: boolean): BaseComponent {\n  Assert.exists(element);\n  return Component.get(element, componentClass, noThrow);\n}\n\nInitialization.registerNamedMethod('get', (element: HTMLElement, componentClass?: any, noThrow?: boolean): BaseComponent => {\n  return get(element, componentClass, noThrow);\n});\n\nexport function result(element: HTMLElement, noThrow?: boolean): IQueryResult {\n  Assert.exists(element);\n  return Component.getResult(element, noThrow);\n}\n\nInitialization.registerNamedMethod('result', (element: HTMLElement, noThrow?: boolean): IQueryResult => {\n  return result(element, noThrow);\n});\n\nfunction getCoveoAnalyticsClient(element: HTMLElement): IAnalyticsClient {\n  var analytics = getCoveoAnalytics(element);\n  if (analytics) {\n    return analytics.client;\n  } else {\n    return undefined;\n  }\n}\n\nfunction getCoveoAnalytics(element: HTMLElement): Analytics {\n  var analyticsElement = $$(element).find('.' + Component.computeCssClassName(Analytics));\n  if (analyticsElement) {\n    return <Analytics>Component.get(analyticsElement);\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Log a custom event on the Coveo Usage Analytics service.\n * @param element The root of the interface for which to log analytics events.\n * @param customEventCause The cause of the event.\n * @param metadata The metadata associated with the event (JSON key value).\n */\nexport function logCustomEvent(element: HTMLElement, customEventCause: IAnalyticsActionCause, metadata: IStringMap<string>) {\n  var client = getCoveoAnalyticsClient(element);\n  if (client) {\n    client.logCustomEvent<any>(customEventCause, metadata, element);\n  }\n}\n\nInitialization.registerNamedMethod('logCustomEvent', (element: HTMLElement, customEventCause: IAnalyticsActionCause, metadata: any) => {\n  logCustomEvent(element, customEventCause, metadata);\n});\n\n/**\n * Log a `SearchEvent` on the Coveo Usage Analytics service.\n * @param element The root of the interface for which to log analytics events.\n * @param searchEventCause The cause of the event.\n * @param metadata The metadata associated with the event (JSON key value).\n */\nexport function logSearchEvent(element: HTMLElement, searchEventCause: IAnalyticsActionCause, metadata: IStringMap<string>) {\n  var client = getCoveoAnalyticsClient(element);\n  if (client) {\n    client.logSearchEvent<any>(searchEventCause, metadata);\n  }\n}\n\nInitialization.registerNamedMethod('logSearchEvent', (element: HTMLElement, searchEventCause: IAnalyticsActionCause, metadata: IStringMap<string>) => {\n  logSearchEvent(element, searchEventCause, metadata);\n});\n\n/**\n * Log a `SearchAsYouTypeEvent` on the Coveo Usage Analytics service.<br/>\n * It is a bit different from a standard search event, as it will wait 5 seconds before sending the final `SearchAsYouType` event.\n * @param element The root of the interface for which to log analytics events.\n * @param searchAsYouTypeEventCause The cause of the event.\n * @param metadata The metadata associated with the event (JSON key value).\n */\nexport function logSearchAsYouTypeEvent(element: HTMLElement, searchAsYouTypeEventCause: IAnalyticsActionCause, metadata: IStringMap<string>) {\n  var client = getCoveoAnalyticsClient(element);\n  if (client) {\n    client.logSearchAsYouType<any>(searchAsYouTypeEventCause, metadata);\n  }\n}\n\nInitialization.registerNamedMethod('logSearchAsYouTypeEvent', (element: HTMLElement, searchAsYouTypeEventCause: IAnalyticsActionCause, metadata: IStringMap<string>) => {\n  logSearchAsYouTypeEvent(element, searchAsYouTypeEventCause, metadata);\n});\n\n/**\n * Log a `ClickEvent` on the Coveo Usage Analytics service.\n * @param element The root of the interface for which to log analytics events.\n * @param clickEventCause The cause of the event.\n * @param metadata The metadata associated with the event (JSON key value).\n * @param result The result that was clicked.\n */\nexport function logClickEvent(element: HTMLElement, clickEventCause: IAnalyticsActionCause, metadata: IStringMap<any>, result: IQueryResult) {\n  var client = getCoveoAnalyticsClient(element);\n  if (client) {\n    client.logClickEvent(clickEventCause, <IAnalyticsDocumentViewMeta>metadata, result, element);\n  }\n}\n\nInitialization.registerNamedMethod('logClickEvent', (element: HTMLElement, clickEventCause: IAnalyticsActionCause, metadata: IStringMap<string>, result: IQueryResult) => {\n  logClickEvent(element, clickEventCause, metadata, result);\n});\n\n/**\n * Pass options to the framework, before it is initialized ({@link init}).<br/>\n * All the options passed with this calls will be merged together on initialization.\n * @param element The root of the interface for which you wish to set options.\n * @param optionsToSet JSON options for the framework (e.g.: <code>{Searchbox : {enableSearchAsYouType: true}}</code>).\n */\nexport function options(element: HTMLElement, optionsToSet: any = {}) {\n  Initialization.registerDefaultOptions(element, optionsToSet);\n}\n\nInitialization.registerNamedMethod('options', (element: HTMLElement, optionsToSet: any = {}) => {\n  options(element, optionsToSet);\n});\n\n/**\n * Patch the given `methodName` on an instance of a component bound to an `HTMLElement` with a new handler.\n * @param element\n * @param methodName\n * @param handler\n */\nexport function patch(element: HTMLElement, methodName: string, handler: (...args: any[]) => any) {\n  Initialization.monkeyPatchComponentMethod(methodName, element, handler);\n}\n\nInitialization.registerNamedMethod('patch', (element?: HTMLElement, methodName?: string, handler?: (...args: any[]) => any) => {\n  patch(element, methodName, handler);\n});\n\nexport function initBox(element: HTMLElement, ...args: any[]) {\n  var type, options: any = {}, injectMarkup;\n  // This means : initBox, no type (no injection) and no options\n  if (args.length == 0) {\n    type = 'Standard';\n    injectMarkup = false;\n  } else if (args.length == 1) { // 1 arg, might be options or type\n    // This mean a type (with injection) and no options\n    if (typeof args[0] == 'string') {\n      type = args[0];\n      injectMarkup = true;\n    } else if (typeof args[0] == 'object') { // This means no type(no injection) and with options\n      type = 'Standard';\n      injectMarkup = false;\n      options = args[0];\n    } else {\n      Assert.fail('Invalid parameters to init a box');\n    }\n  } else if (args.length == 2) { // 2 args means both options and type (with injection);\n    type = args[0];\n    options = args[1];\n    injectMarkup = true;\n  }\n  var merged: any = {};\n  merged[type || 'Container'] = _.extend({}, options.SearchInterface, options[type]);\n  options = _.extend({}, options, merged);\n  Initialization.initializeFramework(element, options, () => {\n    Initialization.initBoxInterface(element, options, type, injectMarkup);\n  });\n}\n\n\nInitialization.registerNamedMethod('initBox', (element?: HTMLElement, ...args: any[]) => {\n  initBox(element, args);\n});\n\nexport function nuke(element: HTMLElement) {\n  $$(element).trigger(InitializationEvents.nuke);\n}\n\nInitialization.registerNamedMethod('nuke', (element: HTMLElement) => {\n  nuke(element);\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/RegisteredNamedMethods.ts\n **/","import { IQueryResult } from '../../rest/QueryResult';\nimport { Logger } from '../../misc/Logger';\nimport { IComponentDefinition, Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { SearchInterface, StandaloneSearchInterface } from '../SearchInterface/SearchInterface';\nimport { QueryController } from '../../controllers/QueryController';\nimport { HashUtils } from '../../utils/HashUtils';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { ComponentStateModel } from '../../models/ComponentStateModel';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { BaseComponent } from '../Base/BaseComponent';\nimport { JQueryUtils } from '../../utils/JQueryutils';\nimport { IJQuery } from './CoveoJQuery';\nimport _ = require('underscore');\n\n/**\n * Represent the initialization parameters required to init a new component.\n */\nexport interface IInitializationParameters {\n  options: any;\n  result?: IQueryResult;\n  bindings: IComponentBindings;\n}\n\n/**\n * The main purpose of this class is to initialize the framework (a.k.a the code executed when calling `Coveo.init`).<br/>\n * It's also in charge or registering the available components, as well as the method that we expost to the global Coveo scope.<br/>\n * For example, the `Coveo.executeQuery` function will be registed in this class by the {@link QueryController}.\n */\nexport class Initialization {\n  private static logger = new Logger('Initialization');\n  private static autoCreateComponents: { [s: string]: any; } = {};\n  private static namedMethods: { [s: string]: any; } = {};\n\n  /**\n   * Register a new set of options for a given element.<br/>\n   * When the element is eventually initialized as a component, those options will be used / merged to create the final option set to use for this component.<br/>\n   * Note that this function should not normally be called directly, but instead using the global `Coveo.options` function\n   * @param element\n   * @param options\n   */\n  public static registerDefaultOptions(element: HTMLElement, options: {}): void {\n    let existing = element['CoveoDefaultOptions'] || {};\n    let updated = Utils.extendDeep(existing, options);\n    element['CoveoDefaultOptions'] = updated;\n  }\n\n  public static resolveDefaultOptions(element: HTMLElement, options: {}): {} {\n    let optionsForThisElement = element['CoveoDefaultOptions'];\n\n    let optionsSoFar: {};\n    if (Utils.exists(optionsForThisElement)) {\n      optionsSoFar = Utils.extendDeep(optionsForThisElement, options);\n    } else {\n      optionsSoFar = options;\n    }\n\n    if (element.parentElement) {\n      return Initialization.resolveDefaultOptions(element.parentElement, optionsSoFar);\n    } else {\n      return optionsSoFar;\n    }\n  }\n\n  /**\n   * Register a new Component to be recognized by the framework.<br/>\n   * This essentially mean that when we call `Coveo.init`, the Initialization class will scan the DOM for known component (which have registed themselves with this call) and create a new component on each element.\n   * @param componentClass\n   */\n  public static registerAutoCreateComponent(componentClass: IComponentDefinition): void {\n    Assert.exists(componentClass);\n    Assert.exists(componentClass.ID);\n    Assert.doesNotExists(Initialization.autoCreateComponents[componentClass.ID]);\n    Assert.doesNotExists(Initialization.namedMethods[componentClass.ID]);\n    Initialization.autoCreateComponents[componentClass.ID] = componentClass;\n  }\n\n  /**\n   * Check if a component is already registed, using it's ID (e.g. : 'Facet').\n   * @param componentClassId\n   * @returns {boolean}\n   */\n  public static isComponentClassIdRegistered(componentClassId: string): boolean {\n    return Utils.exists(Initialization.autoCreateComponents[componentClassId]);\n  }\n\n  /**\n   * Return the list of all known components (the list of ID for each component).\n   * @returns {string[]}\n   */\n  public static getListOfRegisteredComponents() {\n    return _.keys(Initialization.autoCreateComponents);\n  }\n\n  /**\n   * Return the component class definition, using it's ID (e.g. : 'CoveoFacet').\n   * @param name\n   * @returns {IComponentDefinition}\n   */\n  public static getRegisteredComponent(name: string) {\n    return Initialization.autoCreateComponents[name];\n  }\n\n  /**\n   * Initialize the framework. Note that this function should not normally be called directly, but instead using a globally registered function (e.g.: Coveo.init), or {@link Initialization.initSearchInterface} or {@link Initialization.initStandaloneSearchInterface} <br/>\n   * (e.g. : `Coveo.init` or `Coveo.initSearchbox`).\n   * @param element The element on which to initialize the interface.\n   * @param options The options for all components (eg: {Searchbox : {enableSearchAsYouType : true}}).\n   * @param initSearchInterfaceFunction The function to execute to create the {@link SearchInterface} component. Different init call will create different {@link SearchInterface}.\n   */\n  public static initializeFramework(element: HTMLElement, options?: any, initSearchInterfaceFunction?: (...args: any[]) => void) {\n    Assert.exists(element);\n    let alreadyInitialized = Component.get(element, QueryController, true);\n    if (alreadyInitialized) {\n      this.logger.error('This DOM element has already been initialized as a search interface, skipping initialization', element);\n      return;\n    }\n\n    options = Initialization.resolveDefaultOptions(element, options);\n\n    Initialization.performInitFunctionsOption(options, InitializationEvents.beforeInitialization);\n    $$(element).trigger(InitializationEvents.beforeInitialization);\n\n    initSearchInterfaceFunction(element, options);\n    Initialization.initExternalComponents(element, options);\n\n    Initialization.performInitFunctionsOption(options, InitializationEvents.afterComponentsInitialization);\n    $$(element).trigger(InitializationEvents.afterComponentsInitialization);\n\n    $$(element).trigger(InitializationEvents.restoreHistoryState);\n\n    Initialization.performInitFunctionsOption(options, InitializationEvents.afterInitialization);\n    $$(element).trigger(InitializationEvents.afterInitialization);\n\n    let searchInterface = <SearchInterface>Component.get(element, SearchInterface);\n\n\n    // Elements that have the coveo-hide-until-loaded class are hidden by default.\n    // Now that we're loaded (and before the first query returns), we can remove\n    // the class. Also, we add a class that gives the opportunity for an animation\n    // to apply at startup, such as a fade-in that comes in by default.\n    let elemsHidden = $$(element).findAll('.coveo-hide-until-loaded');\n    _.each(elemsHidden, (e: HTMLElement) => {\n      $$(e).removeClass('coveo-hide-until-loaded');\n      $$(e).addClass('coveo-show-after-loaded');\n    });\n\n    if (searchInterface.options.autoTriggerQuery) {\n      Initialization.logFirstQueryCause(searchInterface);\n      let shouldLogInActionHistory = true;\n      // We should not log an action history if the interface is a standalone recommendation component.\n      if (Coveo['Recommendation']) {\n        shouldLogInActionHistory = !(searchInterface instanceof Coveo['Recommendation']);\n      }\n      (<QueryController>Component.get(element, QueryController)).executeQuery({\n        logInActionsHistory: shouldLogInActionHistory,\n        isFirstQuery: true\n      });\n    }\n  }\n\n  /**\n   * Create a new standard search interface. This is the function executed when calling `Coveo.init`.\n   * @param element\n   * @param options\n   */\n  public static initSearchInterface(element: HTMLElement, options: any = {}) {\n    options = Initialization.resolveDefaultOptions(element, options);\n    let searchInterface = new SearchInterface(element, options.SearchInterface, options.Analytics);\n    searchInterface.options.originalOptionsObject = options;\n    let initParameters: IInitializationParameters = { options: options, bindings: searchInterface.getBindings() };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters, ['Recommendation']);\n  }\n\n  /**\n   * Create a new standalone search interface (standalone search box). This is the function executed when calling `Coveo.initSearchbox`.\n   * @param element\n   * @param options\n   */\n  public static initStandaloneSearchInterface(element: HTMLElement, options: any = {}) {\n    options = Initialization.resolveDefaultOptions(element, options);\n\n    // Set trigger query on clear to false for standalone search interface automatically\n    // Take care of not overriding any options that could have been set by external code.\n    if (!options.Querybox) {\n      options.Querybox = {};\n    }\n    if (!options.Omnibox) {\n      options.Omnibox = {};\n    }\n    if (!options.Searchbox) {\n      options.Searchbox = {};\n    }\n    if (!options.Querybox.triggerQueryOnClear || !options.Omnibox.triggerQueryOnClear || !options.Searchbox.triggerOnQueryClear) {\n      options.Querybox.triggerQueryOnClear = false;\n      options.Omnibox.triggerQueryOnClear = false;\n      options.Searchbox.triggerQueryOnClear = false;\n    }\n\n    let searchInterface = new StandaloneSearchInterface(element, options.StandaloneSearchInterface, options.Analytics);\n    searchInterface.options.originalOptionsObject = options;\n    let initParameters: IInitializationParameters = { options: options, bindings: searchInterface.getBindings() };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters);\n  }\n\n  /**\n   * Create a new recommendation search interface. This is the function executed when calling `Coveo.initRecommendation`.\n   * @param element\n   * @param options\n   */\n  public static initRecommendationInterface(element: HTMLElement, options: any = {}) {\n    options = Initialization.resolveDefaultOptions(element, options);\n    // Since a recommendation interface inherits from a search interface, we need to merge those if passed on init\n    let optionsForRecommendation = _.extend({}, options.SearchInterface, options.Recommendation);\n    // If there is a main search interface, modify the loading animation for the recommendation interface to a \"noop\" element\n    // We don't want 2 animation overlapping\n    if (optionsForRecommendation.mainSearchInterface) {\n      optionsForRecommendation.firstLoadingAnimation = $$('span').el;\n    }\n    let recommendation = new window['Coveo']['Recommendation'](element, optionsForRecommendation, options.Analytics);\n    recommendation.options.originalOptionsObject = options;\n    let initParameters: IInitializationParameters = { options: options, bindings: recommendation.getBindings() };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters);\n  }\n\n  /**\n   * Scan the element and all its children for known components. Initialize every known component found.\n   * @param element The element for which to scan it's children.\n   * @param initParameters Needed parameters to initialize all the children components.\n   * @param ignore An optional list of component ID to ignore and skip when scanning for known components.\n   */\n  public static automaticallyCreateComponentsInside(element: HTMLElement, initParameters: IInitializationParameters, ignore?: string[]) {\n    Assert.exists(element);\n\n    let codeToExecute: { (): void }[] = [];\n\n    let htmlElementsToIgnore: HTMLElement[] = [];\n    // Scan for elements to ignore which can be a container component (with other component inside)\n    // When a component is ignored, all it's children component should be ignored too.\n    // Add them to the array of html elements that should be skipped.\n    _.each(ignore, (toIgnore) => {\n      let rootToIgnore = $$(element).find(`.${Component.computeCssClassNameForType(toIgnore)}`);\n      if (rootToIgnore) {\n        let childsElementsToIgnore = $$(rootToIgnore).findAll('*');\n        htmlElementsToIgnore = htmlElementsToIgnore.concat(childsElementsToIgnore);\n      }\n    });\n\n    for (let componentClassId in Initialization.autoCreateComponents) {\n      if (!_.contains(ignore, componentClassId)) {\n        let componentClass = Initialization.autoCreateComponents[componentClassId];\n        let classname = Component.computeCssClassName(componentClass);\n        let elements = $$(element).findAll('.' + classname);\n        // From all the component we found which match the current className, remove those that should be ignored\n        elements = _.difference(elements, htmlElementsToIgnore);\n        if ($$(element).hasClass(classname) && !_.contains(htmlElementsToIgnore, element)) {\n          elements.push(element);\n        }\n        if (elements.length != 0) {\n          // Queue the code that will scan the now resolved selector to after we've\n          // finished evaluating all selectors. This ensures that if a component\n          // constructor adds child components under his tags, those won't get auto-\n          // initialize by this invocation of this method. Components inserting child\n          // components are responsible of invoking this method again if they want\n          // child components to be auto-initialized.\n          //\n          // Explanation: If we don't do that, child components for which selector have\n          // already been evaluated won't be initialized, whereas those that are next\n          // in the list will be.\n          codeToExecute.push(Initialization.createFunctionThatInitializesComponentOnElements(elements, componentClassId, componentClass, initParameters));\n        }\n      }\n    }\n\n    // Now that all selectors are executed, let's really initialize the components.\n    _.each(codeToExecute, (code) => code());\n  }\n\n  /**\n   * Create a new component on the given element.\n   * @param componentClassId The ID of the component to initialize (e.g. : 'CoveoFacet').\n   * @param element The HTMLElement on which to initialize.\n   * @param initParameters Needed parameters to initialize the component.\n   * @returns {Component}\n   */\n  public static createComponentOfThisClassOnElement(componentClassId: string, element: HTMLElement, initParameters?: IInitializationParameters): Component {\n    Assert.isNonEmptyString(componentClassId);\n    Assert.exists(element);\n\n    let componentClass = Initialization.autoCreateComponents[componentClassId];\n    Assert.exists(componentClass);\n\n    let bindings: IComponentBindings = {};\n    let options = {};\n    let result: IQueryResult = undefined;\n\n    if (initParameters != undefined) {\n      _.each(<{ [key: string]: any }>initParameters.bindings, (value, key) => {\n        bindings[key] = value;\n      });\n      options = initParameters.options;\n      result = initParameters.result;\n    }\n\n    Initialization.logger.trace('Creating component of class ' + componentClassId, element, options);\n    return new componentClass(element, options, bindings, result);\n  }\n\n  /**\n   * Register a new globally available method in the Coveo namespace (e.g.: `Coveo.init`).\n   * @param methodName The method name to register.\n   * @param handler The function to execute when the method is called.\n   */\n  public static registerNamedMethod(methodName: string, handler: (element: HTMLElement, ...args: any[]) => any) {\n    Assert.isNonEmptyString(methodName);\n    Assert.doesNotExists(Initialization.autoCreateComponents[methodName]);\n    Assert.doesNotExists(Initialization.namedMethods[methodName]);\n    Assert.exists(handler);\n    Initialization.namedMethods[methodName] = handler;\n  }\n\n  /**\n   * Check if the method is already registed.\n   * @param methodName\n   * @returns {boolean}\n   */\n  public static isNamedMethodRegistered(methodName: string): boolean {\n    return Utils.exists(Initialization.namedMethods[methodName]);\n  }\n\n  /**\n   * 'Monkey patch' (replace the function with a new one) a given method on a component instance.\n   * @param methodName\n   * @param element\n   * @param handler\n   */\n  public static monkeyPatchComponentMethod(methodName: string, element: HTMLElement, handler: (...args: any[]) => any) {\n    Assert.isNonEmptyString(methodName);\n    Assert.exists(handler);\n\n    let componentClass;\n    if (methodName.indexOf('.') > 0) {\n      let splitArg = methodName.split('.');\n      Assert.check(splitArg.length == 2, 'Invalid method name, correct syntax is CoveoComponent.methodName.');\n      componentClass = splitArg[0];\n      methodName = <string>splitArg[1];\n    }\n\n    let boundComponent = Component.get(element, componentClass);\n    Assert.exists(boundComponent);\n    Assert.exists(boundComponent[methodName]);\n\n    let originalMethodName = '__' + methodName;\n    if (!Utils.exists(boundComponent[originalMethodName])) {\n      boundComponent[originalMethodName] = boundComponent[methodName];\n    }\n\n    boundComponent[methodName] = handler;\n  }\n\n  public static initBoxInterface(element: HTMLElement, options: any = {}, type: string = 'Standard', injectMarkup: boolean = true) {\n    options = Initialization.resolveDefaultOptions(element, options);\n    let fromInitTypeToBoxReference = 'Box';\n    if (type != 'Standard') {\n      fromInitTypeToBoxReference += 'For' + type;\n    }\n    let boxRef = Component.getComponentRef(fromInitTypeToBoxReference);\n    if (boxRef) {\n      new Logger(element).info('Initializing box of type ' + fromInitTypeToBoxReference);\n      let injectFunction: () => any = injectMarkup ? boxRef.getInjection : () => {\n      };\n      let box = new boxRef(element, options[fromInitTypeToBoxReference], options.Analytics, injectFunction, options);\n      box.options.originalOptionsObject = options;\n      let initParameters: IInitializationParameters = { options: options, bindings: box.getBindings() };\n      Initialization.automaticallyCreateComponentsInside(element, initParameters);\n    } else {\n      new Logger(element).error('Trying to initialize box of type : ' + fromInitTypeToBoxReference + ' but not found in code (not compiled)!');\n      Assert.fail('Cannot initialize unknown type of box');\n    }\n  }\n\n  public static dispatchNamedMethodCall(methodName: string, element: HTMLElement, args: any[]): any {\n    Assert.isNonEmptyString(methodName);\n    Assert.exists(element);\n\n    let namedMethodHandler: (element: HTMLElement, ...args: any[]) => any = Initialization.namedMethods[methodName];\n    Assert.exists(namedMethodHandler);\n\n    Initialization.logger.trace('Dispatching named method call of ' + methodName, element, args);\n    if (args.length != 0) {\n      return namedMethodHandler.apply(null, [element].concat(args));\n    } else {\n      return namedMethodHandler.apply(null, [element]);\n    }\n\n  }\n\n  public static dispatchNamedMethodCallOrComponentCreation(token: string, element: HTMLElement, args: any[]): any {\n    Assert.isNonEmptyString(token);\n    Assert.exists(element);\n\n    if (Initialization.isNamedMethodRegistered(token)) {\n      return Initialization.dispatchNamedMethodCall(token, element, args);\n    } else if (Initialization.isComponentClassIdRegistered(token)) {\n      return Initialization.createComponentOfThisClassOnElement(token, element, args[0]);\n    } else if (Initialization.isThereASingleComponentBoundToThisElement(element)) {\n      return Initialization.dispatchMethodCallOnBoundComponent(token, element, args);\n    } else {\n      Assert.fail('No method or component named ' + token + ' are registered.');\n    }\n  }\n\n  public static isSearchFromLink(searchInterface: SearchInterface) {\n    return Utils.isNonEmptyString(searchInterface.getBindings().queryStateModel.get('q'));\n  }\n\n  private static isThereASingleComponentBoundToThisElement(element: HTMLElement): boolean {\n    Assert.exists(element);\n    return Utils.exists(Component.get(element));\n  }\n\n  private static dispatchMethodCallOnBoundComponent(methodName: string, element: HTMLElement, args: any[]): any {\n    Assert.isNonEmptyString(methodName);\n    Assert.exists(element);\n\n    let boundComponent = Component.get(element);\n    Assert.exists(boundComponent);\n\n    let method = boundComponent[methodName];\n    if (Utils.exists(method)) {\n      return method.apply(boundComponent, args);\n    } else {\n      Assert.fail('No method named ' + methodName + ' exist on component ' + boundComponent.type);\n    }\n  }\n\n\n  private static logFirstQueryCause(searchInterface: SearchInterface) {\n    let firstQueryCause = HashUtils.getValue('firstQueryCause', HashUtils.getHash());\n    if (firstQueryCause != null) {\n      let meta = HashUtils.getValue('firstQueryMeta', HashUtils.getHash()) || {};\n      searchInterface.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList[firstQueryCause], meta);\n    } else {\n      if (Initialization.isSearchFromLink(searchInterface)) {\n        searchInterface.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchFromLink, {});\n      } else {\n        searchInterface.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.interfaceLoad, {});\n      }\n    }\n  }\n\n  private static performInitFunctionsOption(options, event: string) {\n    if (Utils.exists(options)) {\n      Initialization.performFunctions(options[event]);\n    }\n  }\n\n  private static performFunctions(option) {\n    if (Utils.exists(option)) {\n      _.each(option, (func: () => void) => {\n        if (typeof func == 'function') {\n          func();\n        }\n      });\n    }\n  }\n\n  private static initExternalComponents(element: HTMLElement, options?: any) {\n    if (options && options['externalComponents']) {\n      let searchInterface = <SearchInterface>Component.get(element, SearchInterface);\n      let queryStateModel = <QueryStateModel>Component.get(element, QueryStateModel);\n      let componentStateModel = <ComponentStateModel>Component.get(element, ComponentStateModel);\n      let queryController = <QueryController>Component.get(element, QueryController);\n      let componentOptionsModel = <ComponentOptionsModel>Component.get(element, ComponentOptionsModel);\n      let usageAnalytics = searchInterface.usageAnalytics;\n      Assert.exists(searchInterface);\n      Assert.exists(queryStateModel);\n      Assert.exists(queryController);\n      Assert.exists(componentStateModel);\n      Assert.exists(usageAnalytics);\n      let initParameters: IInitializationParameters = {\n        options: options,\n        bindings: {\n          searchInterface: searchInterface,\n          queryStateModel: queryStateModel,\n          queryController: queryController,\n          usageAnalytics: usageAnalytics,\n          componentStateModel: componentStateModel,\n          componentOptionsModel: componentOptionsModel,\n          root: element\n        }\n      };\n      _.each(options['externalComponents'], (externalComponent: HTMLElement | IJQuery) => {\n        let elementToInstantiate = externalComponent;\n        if (Utils.isHtmlElement(elementToInstantiate)) {\n          Initialization.automaticallyCreateComponentsInside(<HTMLElement>elementToInstantiate, initParameters);\n        } else if (JQueryUtils.isInstanceOfJQuery(elementToInstantiate)) {\n          Initialization.automaticallyCreateComponentsInside(<HTMLElement>((<any>elementToInstantiate).get(0)), initParameters);\n        }\n      });\n    }\n  }\n\n  private static createFunctionThatInitializesComponentOnElements(elements: Element[], componentClassId: string, componentClass: BaseComponent, initParameters: IInitializationParameters) {\n    return () => {\n      _.each(elements, (matchingElement: HTMLElement) => {\n        if (Component.get(matchingElement, componentClassId) == null) {\n          // If options were provided, lookup options for this component class and\n          // also for the element id. Merge them and pass those to the factory method.\n          let optionsToUse = undefined;\n          if (Utils.exists(initParameters.options)) {\n            let optionsForComponentClass = initParameters.options[componentClassId];\n            let optionsForElementId = initParameters.options[matchingElement.id];\n            let initOptions = initParameters.options['initOptions'] ? initParameters.options['initOptions'][componentClassId] : {};\n            optionsToUse = Utils.extendDeep(optionsForElementId, initOptions);\n            optionsToUse = Utils.extendDeep(optionsForComponentClass, optionsToUse);\n          }\n          let initParamToUse = _.extend({}, initParameters, { options: optionsToUse });\n          Initialization.createComponentOfThisClassOnElement(componentClass['ID'], matchingElement, initParamToUse);\n        }\n      });\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/Initialization.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { JQueryUtils } from '../../utils/JQueryutils';\nimport { $$, Dom } from '../../utils/Dom';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { ComponentStateModel } from '../../models/ComponentStateModel';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { QueryController } from '../../controllers/QueryController';\nimport { SearchInterface } from '../../ui/SearchInterface/SearchInterface';\nimport { IAnalyticsClient } from '../../ui/Analytics/AnalyticsClient';\nimport { NoopAnalyticsClient } from '../../ui/Analytics/NoopAnalyticsClient';\nimport { BaseComponent } from './BaseComponent';\nimport { IComponentBindings } from './ComponentBindings';\nimport { DebugEvents } from '../../events/DebugEvents';\nimport _ = require('underscore');\n\n/**\n * Definition for a Component.\n */\nexport interface IComponentDefinition {\n  /**\n   * The static ID that each component need to be identified.<br/>\n   * For example, SearchButton -> static ID : SearchButton -> className : CoveoSearchButton\n   */\n  ID: string;\n  /**\n   * The generated `className` for this component.<br/>\n   * For example, SearchButton -> static ID : SearchButton -> className : CoveoSearchButton\n   */\n  className?: string;\n  /**\n   * Constructor for each component\n   * @param element The HTMLElement on which the component will instantiate.\n   * @param options The available options for the component.\n   * @param bindings The bindings (or environment) for the component.For exemple, the {@link QueryController} or {@link SearchInterface}. Optional, if not provided, the component will resolve those automatically. This has a cost on performance, though, since it has to traverses it's parents to find the correct elements.\n   * @param args Optional arguments, depending on the component type. For example, ResultComponent will receive the result there.\n   */\n  new (element: HTMLElement, options: any, bindings: IComponentBindings, ...args: any[]): Component;\n  /**\n   * The available options for the component.\n   */\n  options?: any;\n  /**\n   * The optional parent of the component, which will be a component itself.\n   */\n  parent?: IComponentDefinition;\n  /**\n   * The optional index fields that the component possess or display.\n   */\n  fields?: string[];\n}\n\n/**\n * The base class for every component in the framework.\n */\nexport class Component extends BaseComponent {\n  /**\n   * Allows the component to bind events and execute them only when it is enabled.\n   * @type {Coveo.ComponentEvents}\n   */\n  public bind = new ComponentEvents(this);\n  /**\n   * A reference to the root HTMLElement (the {@link SearchInterface}).\n   */\n  public root: HTMLElement;\n  /**\n   * Contains the state of the query. Allows to get/set values. Trigger query state event when modified. Each component can listen to those events.\n   */\n  public queryStateModel: QueryStateModel;\n  /**\n   * Contains the state of different component (enabled vs disabled). Allows to get/set values. Trigger component state event when modified. Each component can listen to those events.\n   */\n  public componentStateModel: ComponentStateModel;\n  /**\n   * Contains the singleton that allows to trigger queries.\n   */\n  public queryController: QueryController;\n  /**\n   * A reference to the root of every component, the {@link SearchInterface}.\n   */\n  public searchInterface: SearchInterface;\n  /**\n   * A reference to the {@link Analytics.client}.\n   */\n  public usageAnalytics: IAnalyticsClient;\n  /**\n   * Contains the state of options for differents component. Mainly used by {@link ResultLink}.\n   */\n  public componentOptionsModel: ComponentOptionsModel;\n  public ensureDom: Function;\n  public options?: any;\n\n  /**\n   * Create a new Component. Resolve all {@link IComponentBindings} if not provided.<br/>\n   * Create a new Logger for this component.\n   * Attach the component to the {@link SearchInterface}.<br/>\n   * @param element The HTMLElement on which to create the component. Used to bind data on the element.\n   * @param type The unique identifier for this component. See : {@link IComponentDefinition.ID}. Used to generate the unique Coveo CSS class associated with every component.\n   * @param bindings The environment for every component. Optional, but omitting to provide one will impact performance.\n   */\n  constructor(public element: HTMLElement, public type: string, bindings: IComponentBindings = {}) {\n    super(element, type);\n    this.root = bindings.root || this.resolveRoot();\n    this.queryStateModel = bindings.queryStateModel || this.resolveQueryStateModel();\n    this.componentStateModel = bindings.componentStateModel || this.resolveComponentStateModel();\n    this.queryController = bindings.queryController || this.resolveQueryController();\n    this.searchInterface = bindings.searchInterface || this.resolveSearchInterface();\n    this.usageAnalytics = bindings.usageAnalytics || this.resolveUA();\n    this.componentOptionsModel = bindings.componentOptionsModel || this.resolveComponentOptionsModel();\n    this.ensureDom = _.once(() => this.createDom());\n\n    if (this.searchInterface != null) {\n      this.searchInterface.attachComponent(type, this);\n    }\n\n    this.initDebugInfo();\n  }\n\n  /**\n   * Return the bindings, or environment, for the current component.\n   * @returns {IComponentBindings}\n   */\n  public getBindings(): IComponentBindings {\n    return <IComponentBindings>{\n      root: this.root,\n      queryStateModel: this.queryStateModel,\n      queryController: this.queryController,\n      searchInterface: this.searchInterface,\n      componentStateModel: this.componentStateModel,\n      componentOptionsModel: this.componentOptionsModel,\n      usageAnalytics: this.usageAnalytics\n    };\n  }\n\n  public createDom() {\n    // By default we do nothing\n  }\n\n  public resolveSearchInterface(): SearchInterface {\n    return <SearchInterface>Component.resolveBinding(this.element, SearchInterface);\n  }\n\n  public resolveRoot(): HTMLElement {\n    var resolvedSearchInterface = Component.resolveBinding(this.element, SearchInterface);\n    return resolvedSearchInterface ? resolvedSearchInterface.element : undefined;\n  }\n\n  public resolveQueryController(): QueryController {\n    return <QueryController>Component.resolveBinding(this.element, QueryController);\n  }\n\n  public resolveComponentStateModel(): ComponentStateModel {\n    return <ComponentStateModel>Component.resolveBinding(this.element, ComponentStateModel);\n  }\n\n  public resolveQueryStateModel(): QueryStateModel {\n    return <QueryStateModel>Component.resolveBinding(this.element, QueryStateModel);\n  }\n\n  public resolveComponentOptionsModel(): ComponentOptionsModel {\n    return <ComponentOptionsModel>Component.resolveBinding(this.element, ComponentOptionsModel);\n  }\n\n  public resolveUA(): IAnalyticsClient {\n    var searchInterface = this.resolveSearchInterface();\n    return (searchInterface && searchInterface.usageAnalytics) ? searchInterface.usageAnalytics : new NoopAnalyticsClient();\n  }\n\n  public resolveResult(): IQueryResult {\n    return Component.getResult(this.element);\n  }\n\n  private initDebugInfo() {\n    $$(this.element).on('dblclick', (e: MouseEvent) => {\n      if (e.altKey) {\n        var debugInfo = this.debugInfo();\n        if (debugInfo != null) {\n          $$(this.root).trigger(DebugEvents.showDebugPanel, this.debugInfo());\n        }\n      }\n    });\n  }\n\n  /**\n   * Get the bound component to the given HTMLElement. Throws an assert if the HTMLElement has no component bound, unless using the noThrow argument.<br/>\n   * If there is multiple component bound to the current HTMLElement, you must specify the component class.\n   * @param element HTMLElement for which to get the bound component.\n   * @param componentClass Optional component class. If the HTMLElement has multiple components bound, you must specify which one you are targeting.\n   * @param noThrow Boolean option to tell the method to not throw on error.\n   * @returns {Component}\n   */\n  static get(element: HTMLElement, componentClass?: any, noThrow?: boolean): BaseComponent {\n    Assert.exists(element);\n\n    if (_.isString(componentClass)) {\n      return <Component>element[Component.computeCssClassNameForType(componentClass)];\n    } else if (Utils.exists(componentClass)) {\n      Assert.exists(componentClass.ID);\n      return <Component>element[Component.computeCssClassNameForType(componentClass.ID)];\n    } else {\n      // No class specified, but we support returning the bound component\n      // if there is exactly one.\n      var boundComponents = BaseComponent.getBoundComponentsForElement(element);\n      if (!noThrow) {\n        Assert.check(boundComponents.length <= 1, 'More than one component is bound to this element. You need to specify the component type.');\n      }\n      return boundComponents[0];\n    }\n  }\n\n  static getResult(element: HTMLElement, noThrow: boolean = false): IQueryResult {\n    var resultElement = $$(element).closest('.CoveoResult');\n    Assert.check(noThrow || resultElement != undefined);\n    return resultElement['CoveoResult'];\n  }\n\n  static bindResultToElement(element: HTMLElement, result: IQueryResult) {\n    Assert.exists(element);\n    Assert.exists(result);\n    $$(element).addClass('CoveoResult');\n    element['CoveoResult'] = result;\n    let jQuery = JQueryUtils.getJQuery();\n    if (jQuery) {\n      jQuery(element).data(result);\n    }\n\n  }\n\n  static resolveBinding(element: HTMLElement, componentClass: any): BaseComponent {\n    Assert.exists(element);\n    Assert.exists(componentClass);\n    Assert.exists(componentClass.ID);\n    // first, look down\n    var found;\n    if ($$(element).is('.' + Component.computeCssClassNameForType(componentClass.ID))) {\n      found = element;\n    } else {\n      var findDown = $$(element).findClass(Component.computeCssClassNameForType(componentClass.ID));\n      if (!findDown || findDown.length == 0) {\n        var findUp = $$(element).closest(Component.computeCssClassNameForType(componentClass.ID));\n        if (findUp) {\n          found = findUp;\n        }\n      } else {\n        found = findDown;\n      }\n    }\n    if (found) {\n      return <BaseComponent>found[Component.computeCssClassNameForType(componentClass.ID)];\n    } else {\n      return undefined;\n    }\n  }\n\n\n  static pointElementsToDummyForm(element: HTMLElement) {\n    let inputs = $$(element).is('input') ? [element] : [];\n    inputs = inputs.concat($$(element).findAll('input'));\n    _.each(_.compact(inputs), (input) => {\n      input.setAttribute('form', 'coveo-dummy-form');\n    });\n  }\n}\n\n/**\n * Used by the various Coveo Component to trigger and bind event.<br/>\n * It adds a small logic to execute handler or triggers only when the component is \"enabled\".<br/>\n * A component is disabled by calling {Component.disable}<br/>\n * Typically, a component is disabled when it is not active in the current {Tab}.<br/>\n * It can also be disabled by external code.<br/>\n * The class serves as a way to not execute handler on component that are invisible and inactive in the query.\n */\nexport class ComponentEvents {\n  /**\n   * Create a new `ComponentEvents` for the given {@link Component}.\n   * @param owner The {@link Component} which owns those events handler and trigger.\n   */\n  constructor(public owner: Component) {\n    Assert.exists(owner);\n  }\n\n  /**\n   * Execute the handler for the given event on the given target element.<br/>\n   * Execute only if the component is \"enabled\" (see {@link Component.enable}).\n   * @param el The target on which the event will originate.\n   * @param event The event for which to register an handler.\n   * @param handler The function to execute when the event is triggered.\n   */\n  public on(el: HTMLElement | Window | Document, event: string, handler: Function);\n  public on(el: Dom, event: string, handler: Function);\n  public on(arg: any, event: string, handler: Function) {\n    if (!JQueryUtils.getJQuery() || !JQueryUtils.isInstanceOfJQuery(arg)) {\n      var htmlEl: HTMLElement = arg;\n      $$(htmlEl).on(event, this.wrapToCallIfEnabled(handler));\n    } else {\n      var jq: Dom = arg;\n      jq.on(event, this.wrapToCallIfEnabled(handler));\n    }\n  }\n\n  /**\n   * Execute the handler for the given event on the given target element.<br/>\n   * Execute only if the component is \"enabled\" (see {@link Component.enable}).<br/>\n   * Execute the handler only ONE time.\n   * @param el The target on which the event will originate.\n   * @param event The event for which to register an handler.\n   * @param handler The function to execute when the event is triggered.\n   */\n  public one(el: HTMLElement, event: string, handler: Function);\n  public one(el: Dom, event: string, handler: Function);\n  public one(arg: any, event: string, handler: Function) {\n    if (arg instanceof HTMLElement) {\n      var htmlEl: HTMLElement = arg;\n      $$(htmlEl).one(event, this.wrapToCallIfEnabled(handler));\n    } else {\n      var jq: Dom = arg;\n      jq.one(event, this.wrapToCallIfEnabled(handler));\n    }\n  }\n\n  /**\n   * Bind on the \"root\" of the Component. The root is typically the {@link SearchInterface}.<br/>\n   * Bind an event using native javascript code.\n   * @param event The event for which to register an handler.\n   * @param handler The function to execute when the event is triggered.\n   */\n  public onRootElement<T>(event: string, handler: (args: T) => any) {\n    this.on(this.owner.root, event, handler);\n  }\n\n  /**\n   * Bind on the \"root\" of the Component. The root is typically the {@link SearchInterface}.<br/>\n   * Bind an event using native javascript code.\n   * The handler will execute only ONE time.\n   * @param event The event for which to register an handler.\n   * @param handler The function to execute when the event is triggered.\n   */\n  public oneRootElement<T>(event: string, handler: (args: T) => any) {\n    this.one(this.owner.root, event, handler);\n  }\n\n  /**\n   * Bind an event related specially to the query state model.<br/>\n   * This will build the correct string event and execute the handler only if the component is activated.\n   * @param eventType The event type for which to register an event.\n   * @param attribute The attribute for which to register an event.\n   * @param handler The handler to execute when the query state event is triggered.\n   */\n  public onQueryState<T>(eventType: string, attribute?: string, handler?: (args: T) => any) {\n    this.onRootElement(this.getQueryStateEventName(eventType, attribute), handler);\n  }\n\n  /**\n   * Bind an event related specially to the query state model.<br/>\n   * This will build the correct string event and execute the handler only if the component is activated.<br/>\n   * Will execute only once.\n   * @param eventType The event type for which to register an event.\n   * @param attribute The attribute for which to register an event.\n   * @param handler The handler to execute when the query state event is triggered.\n   */\n  public oneQueryState<T>(eventType: string, attribute?: string, handler?: (args: T) => any) {\n    this.oneRootElement(this.getQueryStateEventName(eventType, attribute), handler);\n  }\n\n  /**\n   * Trigger an event on the target element, with optional arguments.\n   * @param el The target HTMLElement on which to trigger the event.\n   * @param event The event to trigger.\n   * @param args The optional argument to pass to the handlers.\n   */\n  public trigger(el: HTMLElement, event: string, args?: Object);\n  public trigger(el: Dom, event: string, args?: Object);\n  public trigger(arg: any, event: string, args?: Object) {\n    this.wrapToCallIfEnabled(() => {\n      if (arg instanceof HTMLElement) {\n        var htmlEl: HTMLElement = arg;\n        $$(htmlEl).trigger(event, args);\n      } else {\n        var jq: Dom = arg;\n        jq.trigger(event, args);\n      }\n    })(args);\n  }\n\n  /**\n   * Execute the function only if the component is enabled.\n   * @param func The function to execute if the component is enabled.\n   * @returns {function(...[any]): *}\n   */\n  private wrapToCallIfEnabled(func: Function) {\n    return (...args: any[]) => {\n      if (!this.owner.disabled) {\n        if (args && args[0] instanceof CustomEvent) {\n          if (args[0].detail) {\n            args = [args[0].detail];\n          }\n        } else if (args && JQueryUtils.isInstanceOfJqueryEvent(args[0])) {\n          if (args[1] != undefined) {\n            args = [args[1]];\n          } else {\n            args = [];\n          }\n        }\n        return func.apply(this.owner, args);\n      }\n    };\n  }\n\n  private getQueryStateEventName(eventType: string, attribute?: string): string {\n    var evtName;\n    if (eventType && attribute) {\n      evtName = this.owner.queryStateModel.getEventName(eventType + attribute);\n    } else {\n      evtName = this.owner.queryStateModel.getEventName(eventType);\n    }\n    return evtName;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/Component.ts\n **/","import { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { $$ } from '../../utils/Dom';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { Assert } from '../../misc/Assert';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { ComponentStateModel } from '../../models/ComponentStateModel';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { QueryController } from '../../controllers/QueryController';\nimport { Model, IAttributeChangedEventArg } from '../../models/Model';\nimport { QueryEvents, IBuildingQueryEventArgs, INewQueryEventArgs, IQuerySuccessEventArgs, IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { IBeforeRedirectEventArgs, StandaloneSearchInterfaceEvents } from '../../events/StandaloneSearchInterfaceEvents';\nimport { HistoryController } from '../../controllers/HistoryController';\nimport { LocalStorageHistoryController } from '../../controllers/LocalStorageHistoryController';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { IAnalyticsClient } from '../Analytics/AnalyticsClient';\nimport { NoopAnalyticsClient } from '../Analytics/NoopAnalyticsClient';\nimport { Utils } from '../../utils/Utils';\nimport { RootComponent } from '../Base/RootComponent';\nimport { BaseComponent } from '../Base/BaseComponent';\nimport { Debug } from '../Debug/Debug';\nimport { HashUtils } from '../../utils/HashUtils';\nimport * as fastclick from 'fastclick';\nimport jstz = require('jstimezonedetect');\nimport { SentryLogger } from '../../misc/SentryLogger';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { ResponsiveComponents } from '../ResponsiveComponents/ResponsiveComponents';\nimport _ = require('underscore');\n\nexport interface ISearchInterfaceOptions {\n  enableHistory?: boolean;\n  enableAutomaticResponsiveMode?: boolean;\n  useLocalStorageForHistory?: boolean;\n  resultsPerPage?: number;\n  excerptLength?: number;\n  expression?: string;\n  filterField?: IFieldOption;\n  hideUntilFirstQuery?: boolean;\n  firstLoadingAnimation?: HTMLElement;\n  autoTriggerQuery?: boolean;\n  timezone?: string;\n  enableDebugInfo?: boolean;\n  enableCollaborativeRating?: boolean;\n  enableDuplicateFiltering?: boolean;\n\n  pipeline?: string;\n  maximumAge?: number;\n  searchPageUri?: string;\n  initOptions?: any;\n  endpoint?: SearchEndpoint;\n  originalOptionsObject?: any;\n}\n\n/**\n * The SearchInterface component is the root and main component of your Coveo search interface. You should place all\n * other Coveo components inside the SearchInterface component.\n *\n * It is also on the HTMLElement of the SearchInterface component that you call the {@link init} function.\n *\n * It is advisable to specify a unique HTML `id` attribute for the SearchInterface component in order to be able to\n * reference it easily.\n *\n * **Example:**\n *\n * ```html\n * <head>\n *\n * [ ... ]\n *\n * <script>\n *   document.addEventListener('DOMContentLoaded', function() {\n *\n *     [ ... ]\n *     // The init function is called on the SearchInterface element, in this case, the body of the page.\n *     Coveo.init(document.body);\n *\n *     [ ... ]\n *\n *     });\n * </script>\n *\n * [ ... ]\n * </head>\n *\n * <!-- Specifying a unique HTML id attribute for the SearchInterface component is good practice. -->\n * <body id='search' class='CoveoSearchInterface' [ ... other options ... ]>\n *\n *   [ ... ]\n *\n *   <!-- You should place all other Coveo components here, inside the SearchInterface component. -->\n *\n *   [ ... ]\n *\n * </body>\n * ```\n */\nexport class SearchInterface extends RootComponent implements IComponentBindings {\n  static ID = 'SearchInterface';\n\n  /**\n   * The options for the search interface\n   * @componentOptions\n   */\n  static options: ISearchInterfaceOptions = {\n\n    /**\n     * Specifies whether to allow the end user to navigate search history using the **Back** and **Forward** buttons\n     * of the browser.\n     *\n     * If this options is `true`, the SearchInterface component saves the state of the current query in the hash portion\n     * of the URL when the user submits the query.\n     *\n     * **Example:**\n     * > If the `enableHistory` option is `true` and the current query is `foobar`, the SearchInterface component\n     * > saves `q=foobar` in the URL hash when the user submits the query.\n     *\n     * Default value is `false`.\n     */\n    enableHistory: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to enable automatic responsive mode (i.e., automatically placing {@link Facet} and {@link Tab}\n     * components in dropdown menus under the search box when the width of the SearchInterface HTML element reaches or\n     * falls behind a certain pixel threshold).\n     *\n     * You might want to set this option to `false` if automatic responsive mode does not suit the specific design needs\n     * of your implementation.\n     *\n     * **Note:**\n     *\n     * > If this option is `true`, you can also specify whether to enable responsive mode for Facet components (see\n     * > {@link Facet.options.enableResponsiveMode}) and for Tab components (see\n     * > {@link Tab.options.enableResponsiveMode}).\n     * >\n     * > In addition, you can specify the label you wish to display on the dropdown buttons (see\n     * > {@link Facet.options.dropdownHeaderLabel} and {@link Tab.options.dropdownHeaderLabel}).\n     *\n     * Default value is `true`.\n     */\n    enableAutomaticResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to save the interface state in the local storage of the browser.\n     *\n     * You might want to set this option to `true` for reasons specifically important for your implementation.\n     *\n     * Default value is `false`.\n     */\n    useLocalStorageForHistory: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the number of results to display on each page.\n     *\n     * For more advanced features, see the {@link ResultsPerPage} component.\n     *\n     * Default value is `10`. Minimum value is `0`.\n     */\n    resultsPerPage: ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 }),\n\n    /**\n     * Specifies the number of characters to get at query time to create an excerpt of the result.\n     *\n     * This setting is global and cannot be modified on a per-result basis.\n     *\n     * See also the {@link Excerpt} component.\n     *\n     * Default value is `200`. Minimum value is `0`.\n     */\n    excerptLength: ComponentOptions.buildNumberOption({ defaultValue: 200, min: 0 }),\n\n    /**\n     * Specifies an expression to add to each query.\n     *\n     * You might want to use this options to add a global filter to your entire search interface that applies for all\n     * tabs.\n     *\n     * You should not use this option to address security concerns (it is JavaScript, after all).\n     *\n     * **Note:**\n     *\n     * > It also is possible to set this option separately for each {@link Tab} component\n     * > (see {@link Tab.options.expression}).\n     *\n     * Default value is `''`.\n     */\n    expression: ComponentOptions.buildStringOption({ defaultValue: '' }),\n\n    /**\n     * Specifies the name of a field to use as a custom filter when executing the query (also referred to as\n     * \"folding\").\n     *\n     * Setting a value for this option causes the index to return only one result having any particular value inside the\n     * filter field. Any other matching result is \"folded\" inside the childResults member of each JSON query result.\n     *\n     * This feature is typically useful with threaded conversations to include only one top-level result per\n     * conversation. Thus, the field you specify for this option will typically be value unique to each thread that is\n     * shared by all items (e.g., posts, emails, etc) in the thread.\n     *\n     * For more advanced features, see the {@link Folding} component.\n     *\n     * Default value is the empty string (`''`).\n     */\n    filterField: ComponentOptions.buildFieldOption({ defaultValue: '' }),\n\n    /**\n     * Specifies whether to display a loading animation before the first query successfully returns.\n     *\n     * **Note:**\n     *\n     * > If you do not set this options to `false`, the loading animation will still run until the first query\n     * > successfully returns even if the [autoTriggerQuery]{@link SearchInterface.options.autoTriggerQuery} option is\n     * `false`.\n     *\n     * See also the [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option.\n     *\n     * Default value is `true`.\n     */\n    hideUntilFirstQuery: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the animation that you wish to display while your interface is loading.\n     *\n     * You can either specify the CSS selector of an HTML element that matches the default CSS class\n     * (`coveo-first-loading-animation`), or add `-selector` to the markup attribute of this option to specify the CSS\n     * selector of an HTML element that matches any CSS class.\n     *\n     * See also the [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option.\n     *\n     * **Examples:**\n     *\n     * In this first case, the SearchInterface uses the HTML element whose `id` attribute is `MyAnimation` as the\n     * loading animation only if the `class` attribute of this element also matches `coveo-first-loading-animation`.\n     * Default loading animation CSS, which you can customize as you see fit, applies to this HTML element.\n     * ```html\n     * <div class='CoveoSearchInterface' data-first-loading-animation='#MyAnimation'>\n     *   <div id='MyAnimation' class='coveo-first-loading-animation'>\n     *     <!-- ... -->\n     *   </div>\n     *   <!-- ... -->\n     * </div>\n     * ```\n     *\n     * In this second case, the SearchInterface uses the HTML element whose `id` attribute is `MyAnimation` as the\n     * loading animation no matter what CSS class it matches. However, if the `class` attribute of the HTML element does\n     * not match `coveo-first-loading-animation`, no default loading animation CSS applies to this HTML element.\n     * Normally, you should only use `data-first-loading-animation-selector` if you want to completely override the\n     * default loading animation CSS.\n     * ```html\n     * <div class='CoveoSearchInterface' data-first-loading-animation-selector='#MyAnimation'>\n     *   <div id='MyAnimation' class='my-custom-loading-animation-class'>\n     *     <!-- ... -->\n     *   </div>\n     *   <!-- ... -->\n     * </div>\n     * ```\n     *\n     * See [Branding Customization](https://developers.coveo.com/x/EoGfAQ).\n     *\n     * By default, the loading animation is a Coveo CSS animation (which you can customize with CSS).\n     */\n    firstLoadingAnimation: ComponentOptions.buildChildHtmlElementOption({\n      childSelector: '.coveo-first-loading-animation',\n      defaultFunction: () => DomUtils.getBasicLoadingAnimation()\n    }),\n\n    /**\n     * Specifies whether to trigger the first query automatically when the page finishes loading.\n     *\n     *\n     * **Note:**\n     *\n     * > If you set this option to `false` while the\n     * > [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option is `true`, the loading\n     * > animation will still run until the first query successfully returns.\n     *\n     * Default value is `true`.\n     */\n    autoTriggerQuery: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    endpoint: ComponentOptions.buildCustomOption((endpoint) => endpoint != null && endpoint in SearchEndpoint.endpoints ? SearchEndpoint.endpoints[endpoint] : null, { defaultFunction: () => SearchEndpoint.endpoints['default'] }),\n\n    /**\n     * Specifies the timezone in which the search interface is loaded. This allows the index to recognize some special\n     * query syntax.\n     *\n     * This option must have a valid IANA zone info key (AKA the Olson time zone database) as its value.\n     *\n     * **Example:** `America/New_York`.\n     *\n     * By default, the search interface allows a library to try to detect the timezone automatically.\n     */\n    timezone: ComponentOptions.buildStringOption({ defaultFunction: () => jstz.determine().name() }),\n    /**\n     * Specifies whether to enable the feature that allows the end user to ALT + double click any result to open a debug\n     * page with detailed information about all properties and fields for that result.\n     *\n     * Enabling this feature causes no security concern; the entire debug information is always visible to the end user\n     * through the browser developer console or by calling the Coveo API directly.\n     *\n     * Default value is `true`.\n     */\n    enableDebugInfo: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to enable the collaborative rating for the index and to include user ratings on each results\n     * in addition to the normal index ranking.\n     *\n     * If you set this option to `true`, you can leverage it with the {@link ResultRating} component.\n     *\n     * Default value is `false`.\n     */\n    enableCollaborativeRating: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to filter duplicates in the search results.\n     *\n     * Setting this option to `true` forces duplicates to not appear in search results. However, {@link Facet} counts\n     * still include the duplicates, which can be confusing for the end user. This is a limitation of the index.\n     *\n     * **Example:**\n     *\n     * > The end user narrows a query down to a single document that has a duplicate. If the enableDuplicateFiltering\n     * > option is `true`, then only one document appears in the search results while the Facet count is still 2.\n     *\n     * **Note:**\n     *\n     * > It also is possible to set this option separately for each {@link Tab} component\n     * > (see {@link Tab.options.enableDuplicateFiltering}).\n     *\n     * Default value is `false`.\n     */\n    enableDuplicateFiltering: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the name of the query pipeline to use for the queries.\n     *\n     * You can specify a value for this option if your index is in a Coveo Cloud organization in which pipelines have\n     * been created (see [Managing Query Pipelines](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=128)).\n     *\n     * **Note:**\n     *\n     * > It also is possible to set this option separately for each {@link Tab} component\n     * > (see {@link Tab.options.pipeline}).\n     *\n     * Default value is `undefined`, which means that the search interface uses the default pipeline.\n     */\n    pipeline: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the maximum age (in milliseconds) that cached query results can have to still be usable as results\n     * instead of performing a new query on the index. The cache is located in the Coveo Search API (which resides\n     * between the index and the search interface).\n     *\n     * If cached results that are older than the age you specify in this option are available, the framework will not\n     * use these results; it will rather perform a new query on the index.\n     *\n     * On high-volume public web sites, specifying a higher value for this option can greatly improve query response\n     * time at the cost of result freshness.\n     *\n     * **Note:**\n     *\n     * > It also is possible to set this option separately for each {@link Tab} component\n     * > (see {@link Tab.options.maximumAge}).\n     *\n     * Default value is `undefined`, which means that the search interface lets the Coveo Search API determine the\n     * maximum cache age. This is typically equivalent to 30 minutes (see\n     * [Query Parameters - maximumAge](https://developers.coveo.com/x/iwEv#QueryParameters-maximumAge)).\n     */\n    maximumAge: ComponentOptions.buildNumberOption(),\n\n    /**\n     * Specifies the search page you wish to navigate to when instantiating a standalone search box interface.\n     *\n     * Default value is `undefined`, which means that the search interface does not redirect.\n     */\n    searchPageUri: ComponentOptions.buildStringOption()\n  };\n\n  public static SMALL_INTERFACE_CLASS_NAME = 'coveo-small-search-interface';\n\n  private attachedComponents: { [type: string]: BaseComponent[] };\n  private isNewDesignAttribute = false;\n\n  public root: HTMLElement;\n  public queryStateModel: QueryStateModel;\n  public componentStateModel: ComponentStateModel;\n  public queryController: QueryController;\n  public componentOptionsModel: ComponentOptionsModel;\n  public usageAnalytics: IAnalyticsClient;\n  /**\n   * Allows to get and set the different breakpoints for mobile and tablet devices.\n   *\n   * This is useful, among other things, for {@link Facet}, {@link Tab} and {@link ResultList} components.\n   */\n  public responsiveComponents: ResponsiveComponents;\n\n  /**\n   * Creates a new SearchInterface. Initialize various singletons for the interface (e.g., usage analytics, query\n   * controller, state model, etc.). Binds events related to the query. Hides and shows the loading animation, if\n   * activated (see the [hideUntilFirstQuery]{@link SearchInterface.options.hideUntilFirstQuery} option).\n   * @param element The HTMLElement on which to instantiate the component. This cannot be an `HTMLInputElement` for\n   * technical reasons.\n   * @param options The options for the SearchInterface.\n   * @param analyticsOptions The options for the {@link Analytics} component. Since the Analytics component is normally\n   * global, it needs to be passed at initialization of the whole interface.\n   * @param _window The window object for the search interface. Used for unit tests, which can pass a mock. Default is\n   * the global window object.\n   */\n  constructor(public element: HTMLElement, public options?: ISearchInterfaceOptions, public analyticsOptions?, _window = window) {\n    super(element, SearchInterface.ID);\n\n    if (DeviceUtils.isMobileDevice()) {\n      $$(document.body).addClass('coveo-mobile-device');\n    }\n\n    // The definition file for fastclick does not match the way that fast click gets loaded (AMD)\n    if ((<any>fastclick).attach) {\n      (<any>fastclick).attach(element);\n    }\n\n\n    this.options = ComponentOptions.initComponentOptions(element, SearchInterface, options);\n    Assert.exists(element);\n    Assert.exists(this.options);\n\n    if (this.options.hideUntilFirstQuery) {\n      this.showAndHideFirstQueryAnimation();\n    }\n\n    this.root = element;\n    this.queryStateModel = new QueryStateModel(element);\n    this.componentStateModel = new ComponentStateModel(element);\n    this.componentOptionsModel = new ComponentOptionsModel(element);\n    this.usageAnalytics = this.initializeAnalytics();\n    this.queryController = new QueryController(element, this.options, this.usageAnalytics, this);\n    new SentryLogger(this.queryController);\n\n    let eventName = this.queryStateModel.getEventName(Model.eventTypes.preprocess);\n    $$(this.element).on(eventName, (e, args) => this.handlePreprocessQueryStateModel(args));\n    $$(this.element).on(QueryEvents.buildingQuery, (e, args) => this.handleBuildingQuery(args));\n    $$(this.element).on(QueryEvents.querySuccess, (e, args) => this.handleQuerySuccess(args));\n    $$(this.element).on(QueryEvents.queryError, (e, args) => this.handleQueryError(args));\n\n    if (this.options.enableHistory) {\n      if (!this.options.useLocalStorageForHistory) {\n        new HistoryController(element, _window, this.queryStateModel, this.queryController);\n      } else {\n        new LocalStorageHistoryController(element, _window, this.queryStateModel, this.queryController);\n      }\n    } else {\n      $$(this.element).on(InitializationEvents.restoreHistoryState, () => this.queryStateModel.setMultiple(this.queryStateModel.defaultAttributes));\n    }\n\n    let eventNameQuickview = this.queryStateModel.getEventName(Model.eventTypes.changeOne + QueryStateModel.attributesEnum.quickview);\n    $$(this.element).on(eventNameQuickview, (e, args) => this.handleQuickviewChanged(args));\n    // shows the UI, since it's been hidden while loading\n    this.element.style.display = element.style.display || 'block';\n    this.setupDebugInfo();\n    this.isNewDesignAttribute = this.root.getAttribute('data-design') == 'new';\n    this.responsiveComponents = new ResponsiveComponents();\n  }\n\n  /**\n   * Displays the first query animation (see the\n   * [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option).\n   *\n   * By default, this is the Coveo logo with a CSS animation (which can be customized with options or CSS).\n   */\n  public showWaitAnimation() {\n    $$(this.options.firstLoadingAnimation).detach();\n    $$(this.element).addClass('coveo-waiting-for-first-query');\n    this.element.appendChild(this.options.firstLoadingAnimation);\n  }\n\n  /**\n   * Hides the first query animation (see the\n   * [firstLoadingAnimation]{@link SearchInterface.options.firstLoadingAnimation} option).\n   *\n   * By default, this is the Coveo logo with a CSS animation (which can be customized with options or CSS).\n   */\n  public hideWaitAnimation() {\n    $$(this.options.firstLoadingAnimation).detach();\n    $$(this.element).removeClass('coveo-waiting-for-first-query');\n  }\n\n  /**\n   * Attaches a component to the search interface. This allows the search interface to easily list and iterate over its\n   * components.\n   * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n   * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n   * @param component The component instance to attach.\n   */\n  public attachComponent(type: string, component: BaseComponent) {\n    this.getComponents(type).push(component);\n  }\n\n  /**\n   * Detaches a component from the search interface.\n   * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n   * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n   * @param component The component instance to detach.\n   */\n  public detachComponent(type: string, component: BaseComponent) {\n    let components = this.getComponents(type);\n    let index = _.indexOf(components, component);\n    if (index > -1) {\n      components.splice(index, 1);\n    }\n  }\n\n  /**\n   * Returns the bindings, or environment, for the current component.\n   * @returns {IComponentBindings}\n   */\n  public getBindings() {\n    return {\n      root: this.root,\n      queryStateModel: this.queryStateModel,\n      queryController: this.queryController,\n      searchInterface: <SearchInterface>this,\n      componentStateModel: this.componentStateModel,\n      componentOptionsModel: this.componentOptionsModel,\n      usageAnalytics: this.usageAnalytics\n    };\n  }\n\n  /**\n   * Gets all the components of a given type.\n   * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n   * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n   */\n  public getComponents<T>(type: string): T[];\n\n  /**\n   * Gets all the components of a given type.\n   * @param type Normally, the component type is a unique identifier without the `Coveo` prefix (e.g., `CoveoFacet` ->\n   * `Facet`, `CoveoPager` -> `Pager`, `CoveoQuerybox` -> `Querybox`, etc.).\n   */\n  public getComponents(type: string): BaseComponent[] {\n    if (this.attachedComponents == null) {\n      this.attachedComponents = {};\n    }\n    if (!(type in this.attachedComponents)) {\n      this.attachedComponents[type] = [];\n    }\n    return this.attachedComponents[type];\n  }\n\n  /**\n   * Indicates whether the search interface is using the new design.\n   * This changes the rendering of multiple components.\n   */\n  public isNewDesign() {\n    return this.isNewDesignAttribute;\n  }\n\n  protected initializeAnalytics(): IAnalyticsClient {\n    let analyticsRef = BaseComponent.getComponentRef('Analytics');\n    if (analyticsRef) {\n      return analyticsRef.create(this.element, this.analyticsOptions);\n    }\n    return new NoopAnalyticsClient();\n  }\n\n  private setupDebugInfo() {\n    if (this.options.enableDebugInfo) {\n      setTimeout(() => new Debug(this.element, this.queryController));\n    }\n  }\n\n  private showAndHideFirstQueryAnimation() {\n    this.showWaitAnimation();\n    // On first query success or error, wait for call stack to finish, then remove the animation\n    $$(this.element).one(QueryEvents.querySuccess, () => {\n      _.defer(() => this.hideWaitAnimation());\n    });\n    $$(this.element).one(QueryEvents.queryError, () => {\n      _.defer(() => this.hideWaitAnimation());\n    });\n  }\n\n  private handlePreprocessQueryStateModel(args: any) {\n    let tgFromModel = this.queryStateModel.get(QueryStateModel.attributesEnum.tg);\n    let tFromModel = this.queryStateModel.get(QueryStateModel.attributesEnum.t);\n\n    let tg = tgFromModel;\n    let t = tFromModel;\n\n    // if you want to set the tab group\n    if (args.tg !== undefined) {\n      args.tg = this.getTabGroupId(args.tg);\n      if (tg != args.tg) {\n        args.t = args.t || QueryStateModel.defaultAttributes.t;\n        args.sort = args.sort || QueryStateModel.defaultAttributes.sort;\n        tg = args.tg;\n      }\n    }\n\n    if (args.t !== undefined) {\n      args.t = this.getTabId(tg, args.t);\n      if (t != args.t) {\n        args.sort = args.sort || QueryStateModel.defaultAttributes.sort;\n        t = args.t;\n      }\n    }\n\n    if (args.sort !== undefined) {\n      args.sort = this.getSort(t, args.sort);\n    }\n\n    if (args.quickview !== undefined) {\n      args.quickview = this.getQuickview(args.quickview);\n    }\n  }\n\n  private getTabGroupId(tabGroupId: string) {\n    let tabGroupRef = BaseComponent.getComponentRef('TabGroup');\n    if (tabGroupRef) {\n      let tabGroups = this.getComponents<any>(tabGroupRef.ID);\n      // check if the tabgroup is correct\n      if (tabGroupId != QueryStateModel.defaultAttributes.tg && _.any(tabGroups, (tabGroup: any) => !tabGroup.disabled && tabGroupId == tabGroup.options.id)) {\n        return tabGroupId;\n      }\n      // select the first tabGroup\n      if (tabGroups.length > 0) {\n        return tabGroups[0].options.id;\n      }\n    }\n    return QueryStateModel.defaultAttributes.tg;\n  }\n\n  private getTabId(tabGroupId: string, tabId: string) {\n    let tabRef = BaseComponent.getComponentRef('Tab');\n    let tabGroupRef = BaseComponent.getComponentRef('TabGroup');\n    if (tabRef) {\n      let tabs = this.getComponents<any>(tabRef.ID);\n      if (tabGroupRef) {\n        // if has a tabGroup\n        if (tabGroupId != QueryStateModel.defaultAttributes.tg) {\n          let tabGroups = this.getComponents<any>(tabGroupRef.ID);\n          let tabGroup = _.find(tabGroups, (tabGroup: any) => tabGroupId == tabGroup.options.id);\n          // check if the tabgroup contain this tab\n          if (tabId != QueryStateModel.defaultAttributes.t && _.any(tabs, (tab: any) => tabId == tab.options.id && tabGroup.isElementIncludedInTabGroup(tab.element))) {\n            return tabId;\n          }\n          // select the first tab in the tabGroup\n          let tab = _.find(tabs, (tab: any) => tabGroup.isElementIncludedInTabGroup(tab.element));\n          if (tab != null) {\n            return tab.options.id;\n          }\n          return QueryStateModel.defaultAttributes.t;\n        }\n      }\n      // check if the tab is correct\n      if (tabId != QueryStateModel.defaultAttributes.t && _.any(tabs, (tab: any) => tabId == tab.options.id)) {\n        return tabId;\n      }\n      // select the first tab\n      if (tabs.length > 0) {\n        return tabs[0].options.id;\n      }\n    }\n    return QueryStateModel.defaultAttributes.t;\n  }\n\n  private getSort(tabId: string, sortId: string) {\n    let sortRef = BaseComponent.getComponentRef('Sort');\n    if (sortRef) {\n      let sorts = this.getComponents<any>(sortRef.ID);\n      // if has a selected tab\n      let tabRef = BaseComponent.getComponentRef('Tab');\n      if (tabRef) {\n        if (tabId != QueryStateModel.defaultAttributes.t) {\n          let tabs = this.getComponents<any>(tabRef.ID);\n          let tab = _.find(tabs, (tab: any) => tabId == tab.options.id);\n          let sortCriteria = tab.options.sort;\n\n          // check if the tab contain this sort\n          if (sortId != QueryStateModel.defaultAttributes.sort && _.any(sorts, (sort: any) => tab.isElementIncludedInTab(sort.element) && sort.match(sortId))) {\n            return sortId;\n          } else if (sortCriteria != null) {\n            // if not and tab.options.sort is set apply it\n            return sortCriteria.toString();\n          }\n          // select the first sort in the tab\n          let sort = _.find(sorts, (sort: any) => tab.isElementIncludedInTab(sort.element));\n          if (sort != null) {\n            return sort.options.sortCriteria[0].toString();\n          }\n          return QueryStateModel.defaultAttributes.sort;\n        }\n      }\n      // check if the sort is correct\n      if (sortId != QueryStateModel.defaultAttributes.sort && _.any(sorts, (sort: any) => sort.match(sortId))) {\n        return sortId;\n      }\n      // select the first sort\n      if (sorts.length > 0) {\n        return sorts[0].options.sortCriteria[0].toString();\n      }\n    }\n    return QueryStateModel.defaultAttributes.sort;\n  }\n\n  private getQuickview(quickviewId: string) {\n    let quickviewRef = BaseComponent.getComponentRef('Quickview');\n    if (quickviewRef) {\n      let quickviews = this.getComponents<any>(quickviewRef.ID);\n      if (_.any(quickviews, (quickview: any) => quickview.getHashId() == quickviewId)) {\n        return quickviewId;\n      }\n    }\n    return QueryStateModel.defaultAttributes.quickview;\n  }\n\n  private handleQuickviewChanged(args: IAttributeChangedEventArg) {\n    let quickviewRef = BaseComponent.getComponentRef('Quickview');\n    if (quickviewRef) {\n      let quickviews = this.getComponents<any>(quickviewRef.ID);\n      if (args.value != '') {\n        let quickviewsPartition = _.partition(quickviews, (quickview) => quickview.getHashId() == args.value);\n        if (quickviewsPartition[0].length != 0) {\n          _.first(quickviewsPartition[0]).open();\n          _.forEach(_.tail(quickviewsPartition[0]), (quickview) => quickview.close());\n        }\n        _.forEach(quickviewsPartition[1], (quickview) => quickview.close());\n      } else {\n        _.forEach(quickviews, (quickview) => {\n          quickview.close();\n        });\n      }\n    }\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    if (this.options.enableDuplicateFiltering) {\n      data.queryBuilder.enableDuplicateFiltering = true;\n    }\n\n    if (!Utils.isNullOrUndefined(this.options.pipeline)) {\n      data.queryBuilder.pipeline = this.options.pipeline;\n    }\n\n    if (!Utils.isNullOrUndefined(this.options.maximumAge)) {\n      data.queryBuilder.maximumAge = this.options.maximumAge;\n    }\n\n    if (!Utils.isNullOrUndefined(this.options.resultsPerPage)) {\n      data.queryBuilder.numberOfResults = this.options.resultsPerPage;\n    }\n\n    if (!Utils.isNullOrUndefined(this.options.excerptLength)) {\n      data.queryBuilder.excerptLength = this.options.excerptLength;\n    }\n\n    if (Utils.isNonEmptyString(this.options.expression)) {\n      data.queryBuilder.constantExpression.add(this.options.expression);\n    }\n\n    if (Utils.isNonEmptyString(<string>this.options.filterField)) {\n      data.queryBuilder.filterField = <string>this.options.filterField;\n    }\n\n    if (Utils.isNonEmptyString(this.options.timezone)) {\n      data.queryBuilder.timezone = this.options.timezone;\n    }\n\n    data.queryBuilder.enableCollaborativeRating = this.options.enableCollaborativeRating;\n\n    data.queryBuilder.enableDuplicateFiltering = this.options.enableDuplicateFiltering;\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    let noResults = data.results.results.length == 0;\n    this.toggleSectionState('coveo-no-results', noResults);\n    let resultsHeader = $$(this.element).find('.coveo-results-header');\n    if (resultsHeader) {\n      $$(resultsHeader).removeClass('coveo-query-error');\n    }\n  }\n\n  private handleQueryError(data: IQueryErrorEventArgs) {\n    this.toggleSectionState('coveo-no-results');\n    let resultsHeader = $$(this.element).find('.coveo-results-header');\n    if (resultsHeader) {\n      $$(resultsHeader).addClass('coveo-query-error');\n    }\n  }\n\n  private toggleSectionState(cssClass: string, toggle = true) {\n    let facetSection = $$(this.element).find('.coveo-facet-column');\n    let resultsSection = $$(this.element).find('.coveo-results-column');\n    let resultsHeader = $$(this.element).find('.coveo-results-header');\n    let facetSearchs = $$(this.element).findAll('.coveo-facet-search-results');\n\n    if (facetSection) {\n      $$(facetSection).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n    }\n    if (resultsSection) {\n      $$(resultsSection).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n    }\n    if (resultsHeader) {\n      $$(resultsHeader).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n    }\n    if (facetSearchs && facetSearchs.length > 0) {\n      _.each(facetSearchs, (facetSearch) => {\n        $$(facetSearch).toggleClass(cssClass, toggle && !this.queryStateModel.atLeastOneFacetIsActive());\n      });\n    }\n  }\n}\n\n\nexport interface IStandaloneSearchInterfaceOptions extends ISearchInterfaceOptions {\n  redirectIfEmpty?: boolean;\n}\n\nexport class StandaloneSearchInterface extends SearchInterface {\n  static ID = 'StandaloneSearchInterface';\n\n  public static options: IStandaloneSearchInterfaceOptions = {\n    redirectIfEmpty: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  constructor(public element: HTMLElement, public options?: IStandaloneSearchInterfaceOptions, public analyticsOptions?, public _window = window) {\n    super(element, ComponentOptions.initComponentOptions(element, StandaloneSearchInterface, options), analyticsOptions, _window);\n    $$(this.root).on(QueryEvents.newQuery, (e: Event, args: INewQueryEventArgs) => this.handleRedirect(e, args));\n  }\n\n  public handleRedirect(e: Event, data: INewQueryEventArgs) {\n\n    let dataToSendOnBeforeRedirect: IBeforeRedirectEventArgs = {\n      searchPageUri: this.options.searchPageUri,\n      cancel: false\n    };\n\n    $$(this.root).trigger(StandaloneSearchInterfaceEvents.beforeRedirect, dataToSendOnBeforeRedirect);\n\n    if (dataToSendOnBeforeRedirect.cancel) {\n      return;\n    }\n\n    data.cancel = true;\n\n    if (!this.searchboxIsEmpty() || this.options.redirectIfEmpty) {\n      this.redirectToSearchPage(dataToSendOnBeforeRedirect.searchPageUri);\n    }\n  }\n\n  public redirectToSearchPage(searchPage: string) {\n    let stateValues = this.queryStateModel.getAttributes();\n    let uaCausedBy = this.usageAnalytics.getCurrentEventCause();\n\n    if (uaCausedBy != null) {\n      // for legacy reason, searchbox submit were always logged a search from link in an external search box.\n      // transform them if that's what we hit.\n      if (uaCausedBy == analyticsActionCauseList.searchboxSubmit.name) {\n        uaCausedBy = analyticsActionCauseList.searchFromLink.name;\n      }\n      stateValues['firstQueryCause'] = uaCausedBy;\n    }\n    let uaMeta = this.usageAnalytics.getCurrentEventMeta();\n    if (uaMeta != null) {\n      stateValues['firstQueryMeta'] = uaMeta;\n    }\n\n    let link = document.createElement('a');\n    link.href = searchPage;\n    link.href = link.href; // IE11 needs this to correctly fill the properties that are used below.\n\n    let pathname = link.pathname.indexOf('/') == 0 ? link.pathname : '/' + link.pathname; // IE11 does not add a leading slash to this property.\n    let hash = link.hash ? link.hash + '&' : '#';\n\n    // By using a setTimeout, we allow other possible code related to the search box / magic box time to complete.\n    // eg: onblur of the magic box.\n    setTimeout(() => {\n      this._window.location.href = `${link.protocol}//${link.host}${pathname}${link.search}${hash}${HashUtils.encodeValues(stateValues)}`;\n    }, 0);\n  }\n\n  private searchboxIsEmpty(): boolean {\n    return Utils.isEmptyString(this.queryStateModel.get(QueryStateModel.attributesEnum.q));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/SearchInterface/SearchInterface.ts\n **/","import { IFieldDescription } from '../../rest/FieldDescription';\nimport { Assert } from '../../misc/Assert';\nimport { Logger } from '../../misc/Logger';\nimport { Template } from '../Templates/Template';\nimport { $$ } from '../../utils/Dom';\nimport { TemplateCache } from '../Templates/TemplateCache';\nimport { TemplateList } from '../Templates/TemplateList';\nimport { UnderscoreTemplate } from '../Templates/UnderscoreTemplate';\nimport { HtmlTemplate } from '../Templates/HtmlTemplate';\nimport { Utils } from '../../utils/Utils';\nimport { l } from '../../strings/Strings';\nimport _ = require('underscore');\n\n/**\n * Declare a type for options that should contain a field to be used in a query.\n *\n * The only constraint this type has over a basic string is that it should start with \"@\".\n */\nexport interface IFieldOption extends String { };\n\nexport interface IComponentOptionsLoadOption<T> {\n  (element: HTMLElement, name: string, option: IComponentOptionsOption<T>): T;\n}\n\n/**\n * Specify a postProcess function that allows an option to further modify itself once all other options have loaded.\n */\nexport interface IComponentOptionsPostProcessing<T> {\n  /**\n   * Specify a postProcess function that allows an option to further modify itself once all other options have loaded.\n   * @param value\n   * @param options\n   */\n  (value: T, options: any): T;\n}\n\nexport interface IComponentOptionsOption<T> extends IComponentOptions<T> {\n  type?: ComponentOptionsType;\n  load?: IComponentOptionsLoadOption<T>;\n}\n\n/**\n * This represent the possible parameters that can be used to configure an option\n */\nexport interface IComponentOptions<T> {\n  /**\n   * Specify the default value that should be given to the option if it is not specified.\n   */\n  defaultValue?: T;\n  /**\n   * Specify a function which should return the default value that should be given to the option if it is not specified.\n   *\n   * @param element The HTMLElement on which the current option is being parsed.\n   */\n  defaultFunction?: (element: HTMLElement) => T;\n  /**\n   * Specify if the option is \"required\" so that the component can do it's job properly.\n   *\n   * For example, the {@link Facet.options.field} is required, as a facet with no field cannot function.\n   */\n  required?: boolean;\n  /**\n   * Specify a function which can be used to further modify the value for a given option after all other options have been loaded.\n   *\n   * For example, the {@link Facet.options.id} will use this to set the default ID with the same value as the {@link Facet.options.field}.\n   */\n  postProcessing?: IComponentOptionsPostProcessing<T>;\n  /**\n   * Allow to specify a different markup name for an option than the default value.\n   *\n   * Using this is extremely rare, and should be used only for legacy reasons.\n   */\n  attrName?: string;\n  /**\n   * Allow to specify an alias for an option name.\n   *\n   * This can be useful to modify the name of an option without introducing a breaking change.\n   */\n  alias?: string;\n  /**\n   * Specify a section name inside which the option should appear in the interface editor.\n   */\n  section?: string;\n  /**\n   * Specify that an option depend on another option being enabled.\n   *\n   * Mostly useful for the interface editor.\n   */\n  depend?: string;\n  priority?: number;\n  /**\n   * Specify that an option is deprecated.\n   *\n   * This string will be displayed in the console on initialization.\n   *\n   * The message should be as clear as possible as to why this option is deprecated, and how it can be replaced.\n   *\n   * This also mean that the option will not appear in the interface editor.\n   */\n  deprecated?: string;\n  /**\n   * Specify a function which can be used to verify the validity of the option.\n   *\n   * The function should return true if the option is valid, false otherwise.\n   * @param value\n   */\n  validator?: (value: T) => boolean;\n}\n\nexport interface IComponentOptionsNumberOption extends IComponentOptionsOption<number>, IComponentOptionsNumberOptionArgs {\n}\n\n/**\n * This represent the possible parameters that can be used to configure a number option.\n */\nexport interface IComponentOptionsNumberOptionArgs extends IComponentOptions<number> {\n  /**\n   * The minimum value that can be set for this number.\n   */\n  min?: number;\n  /**\n   * The maximum value that can be set for this number.\n   */\n  max?: number;\n  /**\n   * Specify if the value is a floating point number.\n   */\n  float?: boolean;\n}\n\nexport interface IComponentOptionsListOption extends IComponentOptionsOption<string[]>, IComponentOptionsListOptionArgs {\n}\n\n/**\n * The represent the possible parameters that can be used to configure a list option.\n */\nexport interface IComponentOptionsListOptionArgs extends IComponentOptions<string[]> {\n  /**\n   * The separator that should be used for this list. By default, it will be `,`.\n   */\n  separator?: RegExp;\n  /**\n   * The possible list of values for this option.\n   */\n  values?: any;\n}\n\nexport interface IComponentOptionsCustomListOptionArgs<T> extends IComponentOptions<T> {\n  separator?: RegExp;\n  values?: any;\n}\n\nexport interface IComponentOptionsChildHtmlElementOption extends IComponentOptionsOption<HTMLElement>, IComponentOptionsChildHtmlElementOptionArgs {\n}\n\nexport interface IComponentOptionsChildHtmlElementOptionArgs extends IComponentOptions<HTMLElement> {\n  selectorAttr?: string;\n  childSelector?: string;\n}\n\nexport interface IComponentOptionsTemplateOption extends IComponentOptionsOption<Template>, IComponentOptionsTemplateOptionArgs {\n}\nexport interface IComponentOptionsTemplateOptionArgs extends IComponentOptions<Template> {\n  selectorAttr?: string;\n  childSelector?: string;\n  idAttr?: string;\n}\n\nexport interface IComponentOptionsFieldOption extends IComponentOptionsOption<string>, IComponentOptionsFieldOptionArgs {\n}\n\n/**\n * This represent the possible parameters that can be used to configure a field option.\n */\nexport interface IComponentOptionsFieldOptionArgs extends IComponentOptions<string> {\n  groupByField?: boolean;\n  includeInResults?: boolean;\n  sortByField?: boolean;\n  splitGroupByField?: boolean;\n  match?: (field: IFieldDescription) => boolean;\n}\n\nexport interface IComponentOptionsFieldsOption extends IComponentOptionsOption<string[]>, IComponentOptionsFieldsOptionArgs {\n}\n\n/**\n * This represent the possible parameters that can be used to configure a list of fields option.\n */\nexport interface IComponentOptionsFieldsOptionArgs extends IComponentOptions<string[]> {\n  groupByField?: boolean;\n  includeInResults?: boolean;\n  sortByField?: boolean;\n  splitGroupByField?: boolean;\n  match?: (field: IFieldDescription) => boolean;\n}\n\nexport interface IComponentOptionsObjectOption extends IComponentOptionsOption<{ [key: string]: any }>, IComponentOptionsObjectOptionArgs {\n}\nexport interface IComponentOptionsObjectOptionArgs extends IComponentOptions<{ [key: string]: any }> {\n  subOptions: { [key: string]: IComponentOptionsOption<any> };\n}\n\nexport enum ComponentOptionsType {\n  BOOLEAN,\n  NUMBER,\n  STRING,\n  LOCALIZED_STRING,\n  LIST,\n  SELECTOR,\n  CHILD_HTML_ELEMENT,\n  TEMPLATE,\n  FIELD,\n  FIELDS,\n  ICON,\n  COLOR,\n  OBJECT,\n  QUERY,\n  HELPER,\n  LONG_STRING,\n  JSON,\n  JAVASCRIPT,\n  NONE\n}\n\nconst camelCaseToHyphenRegex = /([A-Z])|\\W+(\\w)/g;\nconst fieldsSeperator = /\\s*,\\s*/;\nconst localizer = /([a-zA-Z\\-]+)\\s*:\\s*(([^,]|,\\s*(?!([a-zA-Z\\-]+)\\s*:))+)/g;\n\n/**\n * This static class is used to initialize component options.\n *\n * Typically, each {@link Component} that exposes a set of options will contains a static `options` property,\n *\n * This property will \"build\" the options based on their type.\n */\nexport class ComponentOptions {\n  /**\n   * Build a boolean option.\n   *\n   * A boolean option can be \"true\" or \"false\" in the markup.\n   *\n   * `data-foo=\"true\"` or `data-foo=\"false\"`.\n   * @param optionArgs\n   * @returns {boolean}\n   */\n  static buildBooleanOption(optionArgs?: IComponentOptions<boolean>): boolean {\n    return ComponentOptions.buildOption<boolean>(ComponentOptionsType.BOOLEAN, ComponentOptions.loadBooleanOption, optionArgs);\n  }\n\n  /**\n   * Build a number option.\n   *\n   * A number option can be an integer or a float in the markup.\n   *\n   * `data-foo=\"1\"` or `data-foo=\"1.5\"`.\n   */\n  static buildNumberOption(optionArgs?: IComponentOptionsNumberOptionArgs): number {\n    return ComponentOptions.buildOption<number>(ComponentOptionsType.NUMBER, ComponentOptions.loadNumberOption, optionArgs);\n  }\n\n  /**\n   * Build a string option.\n   *\n   * A string option can be any arbitrary string in the markup.\n   *\n   * `data-foo=\"bar\"`.\n   */\n  static buildStringOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.STRING, ComponentOptions.loadStringOption, optionArgs);\n  }\n\n  /**\n   * Build an icon option.\n   *\n   * Normally, this only means that it will build a string that matches a CSS class for an icon.\n   *\n   * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n   *\n   * `data-foo=\"coveo-sprites-user\"` or `data-foo=\"coveo-sprites-database\"`.\n   */\n  static buildIconOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.ICON, ComponentOptions.loadStringOption, optionArgs);\n  }\n\n  /**\n   * Build a color option.\n   *\n   * Normally, this only means that it will build a string that matches a CSS color.\n   *\n   * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n   *\n   * `data-foo=\"coveo-sprites-user\"` or `data-foo=\"coveo-sprites-database\"`.\n   */\n  static buildColorOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.COLOR, ComponentOptions.loadStringOption, optionArgs);\n  }\n\n  /**\n   * Build a helper option.\n   *\n   * Normally, this only means that it will build a string that matches the name of a template helper.\n   *\n   * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n   *\n   * `data-foo=\"date\"` or `data-foo=\"dateTime\"`.\n   */\n  static buildHelperOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.HELPER, ComponentOptions.loadStringOption, optionArgs);\n  }\n\n  /**\n   * Build a JSON option.\n   *\n   * Normally, this only means that it will build a stringified JSON.\n   *\n   * In the markup, this has no advantage over a plain string. This is mostly useful for the interface editor.\n   *\n   * `data-foo='{\"bar\" : \"baz\"}'`.\n   */\n  static buildJsonOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.JSON, ComponentOptions.loadStringOption, optionArgs);\n  }\n\n  /**\n   * Build a localized string option.\n   *\n   * A localized string option can be any arbitrary string.\n   *\n   * The framework, when parsing the value, will try to load the localization for that word if it is available.\n   *\n   * If it is not available, it will return the non-localized option.\n   *\n   * This should be used for options that will be rendered directly to the end users.\n   *\n   * `data-foo=\"bar\"`.\n   */\n  static buildLocalizedStringOption(optionArgs?: IComponentOptions<string>): string {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.LOCALIZED_STRING, ComponentOptions.loadLocalizedStringOption, optionArgs);\n  }\n\n  /**\n   * Build a field option.\n   *\n   * A field option will validate that the field has a valid name. This means that the string has to start with @.\n   *\n   * `data-foo=\"@bar\"`.\n   */\n  static buildFieldOption(optionArgs?: IComponentOptionsFieldOptionArgs): IFieldOption {\n    return ComponentOptions.buildOption<string>(ComponentOptionsType.FIELD, ComponentOptions.loadFieldOption, optionArgs);\n  }\n\n  /**\n   * Build an array of field option.\n   *\n   * As with all options that expect an array, you should use commas to delimit the different values.\n   *\n   * `data-foo=\"@bar,@baz\"`.\n   */\n  static buildFieldsOption(optionArgs?: IComponentOptionsFieldsOptionArgs): IFieldOption[] {\n    return ComponentOptions.buildOption<string[]>(ComponentOptionsType.FIELDS, ComponentOptions.loadFieldsOption, optionArgs);\n  }\n\n  /**\n   * Build an array of string option.\n   *\n   * As with all options that expect an array, you should use commas to delimit the different values.\n   *\n   * `data-foo=\"bar,baz\"`.\n   */\n  static buildListOption<T>(optionArgs?: IComponentOptionsListOptionArgs): T[] | string[] {\n    return ComponentOptions.buildOption<string[]>(ComponentOptionsType.LIST, ComponentOptions.loadListOption, optionArgs);\n  }\n\n  /**\n   * Build an option that allow to select an HTMLElement.\n   *\n   * The option accept a CSS selector that will allow to find the required HTMLElement.\n   *\n   * It can be a class selector or an ID selector.\n   *\n   * `data-foo-selector=\".bar\" or data-foo-selector=\"#bar\"`.\n   */\n  static buildSelectorOption(optionArgs?: IComponentOptions<HTMLElement>): HTMLElement {\n    return ComponentOptions.buildOption<HTMLElement>(ComponentOptionsType.SELECTOR, ComponentOptions.loadSelectorOption, optionArgs);\n  }\n\n  static buildChildHtmlElementOption(optionArgs?: IComponentOptionsChildHtmlElementOptionArgs): HTMLElement {\n    return ComponentOptions.buildOption<HTMLElement>(ComponentOptionsType.CHILD_HTML_ELEMENT, ComponentOptions.loadChildHtmlElementOption, optionArgs);\n  }\n\n  static buildTemplateOption(optionArgs?: IComponentOptionsTemplateOptionArgs): Template {\n    return ComponentOptions.buildOption<Template>(ComponentOptionsType.TEMPLATE, ComponentOptions.loadTemplateOption, optionArgs);\n  }\n\n  static buildCustomOption<T>(converter: (value: string) => T, optionArgs?: IComponentOptions<T>): T {\n    let loadOption: IComponentOptionsLoadOption<T> = (element: HTMLElement, name: string, option: IComponentOptionsOption<T>) => {\n      let stringvalue = ComponentOptions.loadStringOption(element, name, option);\n      if (!Utils.isNullOrEmptyString(stringvalue)) {\n        return converter(stringvalue);\n      }\n    };\n    return ComponentOptions.buildOption<T>(ComponentOptionsType.STRING, loadOption, optionArgs);\n  }\n\n  static buildCustomListOption<T>(converter: (value: string[]) => T, optionArgs?: IComponentOptionsCustomListOptionArgs<T>): T {\n    let loadOption: IComponentOptionsLoadOption<T> = (element: HTMLElement, name: string, option: any) => {\n      let stringvalue = ComponentOptions.loadListOption(element, name, option);\n      return converter(stringvalue);\n    };\n    return ComponentOptions.buildOption<any>(ComponentOptionsType.LIST, loadOption, optionArgs);\n  }\n\n  static buildObjectOption(optionArgs?: IComponentOptionsObjectOptionArgs): any {\n    let loadOption: IComponentOptionsLoadOption<{\n      [key: string]: any\n    }> = (element: HTMLElement, name: string, option: IComponentOptionsOption<any>) => {\n      let keys = _.keys(optionArgs.subOptions);\n      let scopedOptions: {\n        [name: string]: IComponentOptionsOption<any>\n      } = {};\n      let scopedValues: {\n        [name: string]: any\n      } = {};\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let scopedkey = ComponentOptions.mergeCamelCase(name, key);\n        scopedOptions[scopedkey] = optionArgs.subOptions[key];\n      }\n      ComponentOptions.initOptions(element, scopedOptions, scopedValues);\n      let resultValues: {\n        [name: string]: any\n      } = {};\n      let resultFound = false;\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let scopedkey = ComponentOptions.mergeCamelCase(name, key);\n        if (scopedValues[scopedkey] != null) {\n          resultValues[key] = scopedValues[scopedkey];\n          resultFound = true;\n        }\n      }\n      return resultFound ? resultValues : null;\n    };\n    return ComponentOptions.buildOption<{\n      [key: string]: any\n    }>(ComponentOptionsType.OBJECT, loadOption, optionArgs);\n  }\n\n  static buildOption<T>(type: ComponentOptionsType, load: IComponentOptionsLoadOption<T>, optionArg: IComponentOptions<T> = {}): T {\n    let option: IComponentOptionsOption<T> = <any>optionArg;\n    option.type = type;\n    option.load = load;\n    return <any>option;\n  }\n\n  static attrNameFromName(name: string, optionArgs?: IComponentOptions<any>) {\n    if (optionArgs && optionArgs.attrName) {\n      return optionArgs.attrName;\n    }\n    if (name) {\n      return 'data-' + ComponentOptions.camelCaseToHyphen(name);\n    }\n    return name;\n  }\n\n  static camelCaseToHyphen(name: string) {\n    return name.replace(camelCaseToHyphenRegex, '-$1$2').toLowerCase();\n  }\n\n  static mergeCamelCase(parent: string, name: string) {\n    return parent + name.substr(0, 1).toUpperCase() + name.substr(1);\n  }\n\n  /**\n   * The main function that will load and parse the options for the current given element.\n   *\n   * Every component will call this function in their constructor.\n   * @param element The element on which the options should be parsed\n   * @param component The component class for which the options should be parsed. For example : Searchbox, Facet, etc.\n   * @param values The optional options which should be merged with the options set in the markup.\n   */\n  static initComponentOptions(element: HTMLElement, component: any, values?: any) {\n    return ComponentOptions.initOptions(element, component.options, values, component.ID);\n  }\n\n  static initOptions(element: HTMLElement, options: {\n    [name: string]: IComponentOptionsOption<any>\n  }, values?: any, componentID?: any) {\n    let logger = new Logger(this);\n    if (values == null) {\n      values = {};\n    }\n    let names: string[] = _.keys(options);\n    for (let i = 0; i < names.length; i++) {\n      let name = names[i];\n      let optionDefinition = options[name];\n      let value: any;\n      let loadFromAttribute = optionDefinition.load;\n\n      if (loadFromAttribute != null) {\n        value = loadFromAttribute(element, name, optionDefinition);\n        if (value && optionDefinition.deprecated) {\n          logger.warn(componentID + '.' + name + ' : ' + optionDefinition.deprecated);\n        }\n      }\n\n      if (Utils.isNullOrUndefined(value) && values[name] != undefined) {\n        value = values[name];\n      }\n\n      if (value == null && values[name] == undefined) {\n        if (optionDefinition.defaultValue != null) {\n          if (optionDefinition.type == ComponentOptionsType.LIST) {\n            value = _.extend([], optionDefinition.defaultValue);\n          } else if (optionDefinition.type == ComponentOptionsType.OBJECT) {\n            value = _.extend({}, optionDefinition.defaultValue);\n          } else {\n            value = optionDefinition.defaultValue;\n          }\n        } else if (optionDefinition.defaultFunction != null) {\n          value = optionDefinition.defaultFunction(element);\n        }\n      }\n      if (value != null) {\n        if (optionDefinition.validator) {\n          let isValid = optionDefinition.validator(value);\n          if (!isValid) {\n            logger.warn(`${componentID} .${name} has invalid value :  ${value}`);\n            if (optionDefinition.required) {\n              logger.error(`${componentID} .${name} is required and has an invalid value : ${value}. ***THIS COMPONENT WILL NOT WORK***`);\n            }\n            delete values[name];\n            continue;\n          }\n        }\n        if (optionDefinition.type == ComponentOptionsType.OBJECT && values[name] != null) {\n          values[name] = _.extend(values[name], value);\n        } else if (optionDefinition.type == ComponentOptionsType.LOCALIZED_STRING) {\n          values[name] = l(value);\n        } else {\n          values[name] = value;\n        }\n      }\n    }\n    for (let i = 0; i < names.length; i++) {\n      let name = names[i];\n      let optionDefinition = options[name];\n      if (optionDefinition.postProcessing) {\n        values[name] = optionDefinition.postProcessing(values[name], values);\n      }\n    }\n    return values;\n  }\n\n  static loadStringOption(element: HTMLElement, name: string, option: IComponentOptions<any>): string {\n    return element.getAttribute(ComponentOptions.attrNameFromName(name, option)) || ComponentOptions.getAttributeFromAlias(element, option);\n  }\n\n  static loadFieldOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>): string {\n    let field = ComponentOptions.loadStringOption(element, name, option);\n    Assert.check(!Utils.isNonEmptyString(field) || Utils.isCoveoField(field), field + ' is not a valid field');\n    return field;\n  }\n\n  static loadFieldsOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>): string[] {\n    let fieldsAttr = ComponentOptions.loadStringOption(element, name, option);\n    if (fieldsAttr == null) {\n      return null;\n    }\n    let fields = fieldsAttr.split(fieldsSeperator);\n    _.each(fields, (field: string) => {\n      Assert.check(Utils.isCoveoField(field), field + ' is not a valid field');\n    });\n    return fields;\n  }\n\n  static loadLocalizedStringOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>): string {\n    let attributeValue = ComponentOptions.loadStringOption(element, name, option);\n    let locale: string = String['locale'] || String['defaultLocale'];\n    if (locale != null && attributeValue != null) {\n      let localeParts = locale.toLowerCase().split('-');\n      let locales = _.map(localeParts, (part, i) => localeParts.slice(0, i + 1).join('-'));\n      let localizers = attributeValue.match(localizer);\n      if (localizers != null) {\n        for (let i = 0; i < localizers.length; i++) {\n          let groups = localizer.exec(localizers[i]);\n          if (groups != null) {\n            let lang = groups[1].toLowerCase();\n            if (_.contains(locales, lang)) {\n              return groups[2].replace(/^\\s+|\\s+$/g, '');\n            }\n          }\n        }\n      }\n      return attributeValue != null ? attributeValue.toLocaleString() : null;\n    }\n    return attributeValue;\n  }\n\n  static loadNumberOption(element: HTMLElement, name: string, option: IComponentOptionsNumberOption): number {\n    let attributeValue = ComponentOptions.loadStringOption(element, name, option);\n    if (attributeValue == null) {\n      return null;\n    }\n    let numberValue = option.float === true ? Utils.parseFloatIfNotUndefined(attributeValue) : Utils.parseIntIfNotUndefined(attributeValue);\n    if (option.min != null && option.min > numberValue) {\n      new Logger(element).info(`Value for option ${name} is less than the possible minimum (Value is ${numberValue}, minimum is ${option.min}). It has been forced to it\\'s minimum value.`, option);\n      numberValue = option.min;\n    }\n    if (option.max != null && option.max < numberValue) {\n      new Logger(element).info(`Value for option ${name} is higher than the possible maximum (Value is ${numberValue}, maximum is ${option.max}). It has been forced to it\\'s maximum value.`, option);\n      numberValue = option.max;\n    }\n    return numberValue;\n  }\n\n  static loadBooleanOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>): boolean {\n    return Utils.parseBooleanIfNotUndefined(ComponentOptions.loadStringOption(element, name, option));\n  }\n\n  static loadListOption(element: HTMLElement, name: string, option: IComponentOptionsListOption): string[] {\n    let separator = option.separator || /\\s*,\\s*/;\n    let attributeValue = ComponentOptions.loadStringOption(element, name, option);\n    return Utils.isNonEmptyString(attributeValue) ? attributeValue.split(separator) : null;\n  }\n\n  static loadEnumOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>, _enum: any): number {\n    let enumAsString = ComponentOptions.loadStringOption(element, name, option);\n    return enumAsString != null ? _enum[enumAsString] : null;\n  }\n\n  static loadSelectorOption(element: HTMLElement, name: string, option: IComponentOptionsOption<any>, doc: Document = document): HTMLElement {\n    let attributeValue = ComponentOptions.loadStringOption(element, name, option);\n    return Utils.isNonEmptyString(attributeValue) ? <HTMLElement>doc.querySelector(attributeValue) : null;\n  }\n\n  static loadChildHtmlElementOption(element: HTMLElement, name: string, option: IComponentOptionsChildHtmlElementOption, doc: Document = document): HTMLElement {\n    let htmlElement: HTMLElement;\n    // Attribute: selector\n    let selectorAttr = option.selectorAttr || ComponentOptions.attrNameFromName(name, option) + '-selector';\n    let selector = element.getAttribute(selectorAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n    if (selector != null) {\n      htmlElement = <HTMLElement>doc.body.querySelector(selector);\n    }\n    // Child\n    if (htmlElement == null) {\n      let childSelector = option.childSelector;\n      if (childSelector == null) {\n        childSelector = '.' + name;\n      }\n      htmlElement = ComponentOptions.loadChildHtmlElementFromSelector(element, childSelector);\n    }\n    return htmlElement;\n  }\n\n  static loadChildHtmlElementFromSelector(element: HTMLElement, selector: string): HTMLElement {\n    Assert.isNonEmptyString(selector);\n    if ($$(element).is(selector)) {\n      return element;\n    }\n    return <HTMLElement>$$(element).find(selector);\n  }\n\n  static loadChildrenHtmlElementFromSelector(element: HTMLElement, selector: string): HTMLElement[] {\n    Assert.isNonEmptyString(selector);\n    return $$(element).findAll(selector);\n  }\n\n  static loadTemplateOption(element: HTMLElement, name: string, option: IComponentOptionsTemplateOption, doc: Document = document): Template {\n\n    let template: Template;\n\n    // Attribute: template selector\n    let selectorAttr = option.selectorAttr || ComponentOptions.attrNameFromName(name, option) + '-selector';\n    let selector = element.getAttribute(selectorAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n    if (selector != null) {\n      let templateElement = <HTMLElement>doc.querySelector(selector);\n      if (templateElement != null) {\n        template = ComponentOptions.createResultTemplateFromElement(templateElement);\n      }\n    }\n    // Attribute: template id\n    if (template == null) {\n      let idAttr = option.idAttr || ComponentOptions.attrNameFromName(name, option) + '-id';\n      let id = element.getAttribute(idAttr) || ComponentOptions.getAttributeFromAlias(element, option);\n      if (id != null) {\n        template = ComponentOptions.loadResultTemplateFromId(id);\n      }\n    }\n    // Child\n    if (template == null) {\n      let childSelector = option.childSelector;\n      if (childSelector == null) {\n        childSelector = '.' + name.replace(/([A-Z])/g, '-$1').toLowerCase();\n      }\n      template = ComponentOptions.loadChildrenResultTemplateFromSelector(element, childSelector);\n    }\n    return template;\n  }\n\n  static loadResultTemplateFromId(templateId: string): Template {\n    return Utils.isNonEmptyString(templateId) ? TemplateCache.getTemplate(templateId) : null;\n  }\n\n  static loadChildrenResultTemplateFromSelector(element: HTMLElement, selector: string): Template {\n    let foundElements = ComponentOptions.loadChildrenHtmlElementFromSelector(element, selector);\n    if (foundElements.length > 0) {\n      return new TemplateList(_.compact(_.map(foundElements, (element) => ComponentOptions.createResultTemplateFromElement(element))));\n    }\n    return null;\n  }\n\n  static findParentScrolling(element: HTMLElement, doc: Document = document): HTMLElement {\n    while (<Node>element != doc && element != null) {\n      if (ComponentOptions.isElementScrollable(element)) {\n        if (element.tagName.toLowerCase() !== 'body') {\n          return element;\n        }\n        return <any>window;\n      }\n      element = element.parentElement;\n    }\n    return <any>window;\n  }\n\n  static isElementScrollable(element: HTMLElement) {\n    return $$(element).css('overflow-y') == 'scroll' || element.style.overflowY == 'scroll';\n  }\n\n  static getAttributeFromAlias(element: HTMLElement, option: IComponentOptions<any>) {\n    if (option.alias) {\n      return element.getAttribute(ComponentOptions.attrNameFromName(option.alias));\n    }\n  }\n\n  static createResultTemplateFromElement(element: HTMLElement): Template {\n    Assert.exists(element);\n    let type = element.getAttribute('type');\n    let mimeTypes = 'You must specify the type of template. Valid values are :' +\n      ' ' + UnderscoreTemplate.mimeTypes.toString() +\n      ' ' + HtmlTemplate.mimeTypes.toString();\n    Assert.check(Utils.isNonEmptyString(type), mimeTypes);\n\n    if (_.indexOf(UnderscoreTemplate.mimeTypes, type.toLowerCase()) != -1) {\n      return UnderscoreTemplate.create(element);\n    } else if (_.indexOf(HtmlTemplate.mimeTypes, type.toLowerCase()) != -1) {\n      return new HtmlTemplate(element);\n    } else {\n      Assert.fail('Cannot guess template type from attribute: ' + type + '. Valid values are ' + mimeTypes);\n      return undefined;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/ComponentOptions.ts\n **/","import { Template } from './Template';\nimport { Assert } from '../../misc/Assert';\nimport { UnderscoreTemplate } from './UnderscoreTemplate';\nimport { HtmlTemplate } from './HtmlTemplate';\nimport _ = require('underscore');\n\n/**\n * Holds a reference to all template available in the framework\n */\nexport class TemplateCache {\n  private static templates: { [templateName: string]: Template; } = {};\n  private static templateNames: string[] = [];\n  private static resultListTemplateNames: string[] = [];\n  private static defaultTemplates: { [templateName: string]: Template; } = {};\n\n  public static registerTemplate(name: string, template: Template, publicTemplate?: boolean, defaultTemplate?: boolean, pageTemplate?: boolean);\n  public static registerTemplate(name: string, template: (data: {}) => string, publicTemplate?: boolean, defaultTemplate?: boolean, pageTemplate?: boolean);\n  /**\n   * Register a new template in the framework, which will be available to render any results.\n   * @param name\n   * @param template\n   * @param publicTemplate\n   * @param defaultTemplate\n   * @param pageTemplate\n   */\n  public static registerTemplate(name: string, template: any, publicTemplate: boolean = true, defaultTemplate: boolean = false, resultListTemplate: boolean = false) {\n    Assert.isNonEmptyString(name);\n    Assert.exists(template);\n    if (!(template instanceof Template)) {\n      template = new Template(template);\n    }\n    if (template.name == null) {\n      template.name = name;\n    }\n    TemplateCache.templates[name] = template;\n    if (publicTemplate && !_.contains(TemplateCache.templateNames, name)) {\n      TemplateCache.templateNames.push(name);\n    }\n\n    if (resultListTemplate && !_.contains(TemplateCache.resultListTemplateNames, name)) {\n      TemplateCache.resultListTemplateNames.push(name);\n    }\n\n    if (defaultTemplate) {\n      TemplateCache.defaultTemplates[name] = template;\n    }\n  }\n\n  /**\n   * Remove the given template from the cache.\n   * @param name\n   * @param string\n   */\n  public static unregisterTemplate(name) {\n    Assert.isNonEmptyString(name);\n    if (TemplateCache.templates[name] != undefined) {\n      delete TemplateCache.templates[name];\n    }\n    if (TemplateCache.defaultTemplates[name] != undefined) {\n      delete TemplateCache.defaultTemplates[name];\n    }\n  }\n\n  /**\n   * Return a template by its name/ID.\n   * @param name\n   * @returns {Template}\n   */\n  public static getTemplate(name: string): Template {\n    // In some scenarios, the template we're trying to load might be somewhere in the page\n    // but we could not load it \"normally\" on page load (eg : UI was loaded with require js)\n    // Try a last ditch effort to scan the needed templates.\n    if (!TemplateCache.templates[name]) {\n      TemplateCache.scanAndRegisterTemplates();\n    }\n    Assert.exists(TemplateCache.templates[name]);\n    return TemplateCache.templates[name];\n  }\n\n  /**\n   * Get all templates currently registered in the framework.\n   * @returns {{}}\n   */\n  public static getTemplates(): { [templateName: string]: Template; } {\n    return TemplateCache.templates;\n  }\n\n  /**\n   * Get all templates name currently registered in the framework.\n   * @returns {string[]}\n   */\n  public static getTemplateNames(): string[] {\n    return TemplateCache.templateNames;\n  }\n\n  /**\n   * Get all page templates name currently registered in the framework.\n   * @returns {string[]}\n   */\n  public static getResultListTemplateNames(): string[] {\n    return TemplateCache.resultListTemplateNames;\n  }\n\n  /**\n   * Get all the \"default\" templates in the framework.\n   * @returns {string[]}\n   */\n  public static getDefaultTemplates(): string[] {\n    return _.keys(TemplateCache.defaultTemplates);\n  }\n\n  /**\n   * Get a default template by name.\n   * @param name The name of the queried template\n   */\n  public static getDefaultTemplate(name: string): Template {\n    Assert.exists(TemplateCache.defaultTemplates[name]);\n    return TemplateCache.defaultTemplates[name];\n  }\n\n  static scanAndRegisterTemplates() {\n    // Here we take care not to scan for templates for which the base library\n    // is not available. Case in point: someone was using the JS UI on a page\n    // that was also using Handlebars, but our code was initialized before\n    // the Handlebars library (loaded through AMD).\n    if (UnderscoreTemplate.isLibraryAvailable()) {\n      TemplateCache.scanAndRegisterUnderscoreTemplates();\n    }\n    TemplateCache.scanAndRegisterHtmlTemplates();\n  }\n\n  private static scanAndRegisterUnderscoreTemplates() {\n    _.each(UnderscoreTemplate.mimeTypes, (type) => {\n      let scriptList = document.querySelectorAll(`script[id][type='${type}']`);\n      let i = scriptList.length;\n      let arr: HTMLElement[] = new Array(i);\n      while (i--) {\n        arr[i] = <HTMLElement>scriptList.item(i);\n      }\n      _.each(arr, (elem: HTMLElement) => {\n        let template = new UnderscoreTemplate(elem);\n        TemplateCache.registerTemplate(elem.getAttribute('id'), template);\n      });\n    });\n  }\n\n  private static scanAndRegisterHtmlTemplates() {\n    _.each(HtmlTemplate.mimeTypes, (type) => {\n      let scriptList = document.querySelectorAll(`script[id][type='${type}']`);\n      let i = scriptList.length;\n      let arr: HTMLElement[] = new Array(i);\n      while (i--) {\n        arr[i] = <HTMLElement>scriptList.item(i);\n      }\n\n      _.each(arr, (elem: HTMLElement) => {\n        let template = new HtmlTemplate(elem);\n        TemplateCache.registerTemplate(elem.getAttribute('id'), template);\n      });\n    });\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  TemplateCache.scanAndRegisterTemplates();\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateCache.ts\n **/","import { Logger } from '../../misc/Logger';\nimport { ValidLayout } from '../ResultLayout/ResultLayout';\nimport { $$ } from '../../utils/Dom';\nimport { TemplateConditionEvaluator } from './TemplateConditionEvaluator';\nimport { TemplateFieldsEvaluator } from './TemplateFieldsEvaluator';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ResponsiveComponents } from '../ResponsiveComponents/ResponsiveComponents';\nimport _ = require('underscore');\n\nexport interface ITemplateProperties {\n  condition?: Function;\n  conditionToParse?: string;\n  layout?: ValidLayout;\n  mobile?: boolean;\n  tablet?: boolean;\n  desktop?: boolean;\n  fieldsToMatch?: IFieldsToMatch[];\n}\n\nexport interface IFieldsToMatch {\n  values?: string[];\n  field: string;\n}\n\nexport interface IInstantiateTemplateOptions {\n  currentLayout?: ValidLayout;\n  checkCondition?: boolean;\n  wrapInDiv?: boolean;\n  responsiveComponents?: ResponsiveComponents;\n}\n\nexport class DefaultInstantiateTemplateOptions implements IInstantiateTemplateOptions {\n  public currentLayout: ValidLayout;\n  public checkCondition: boolean;\n  public wrapInDiv: boolean;\n  public responsiveComponents: ResponsiveComponents;\n\n  constructor() {\n    this.currentLayout = null;\n    this.checkCondition = true;\n    this.wrapInDiv = true;\n    this.responsiveComponents = new ResponsiveComponents();\n  }\n\n  get(): IInstantiateTemplateOptions {\n    return {\n      currentLayout: this.currentLayout,\n      checkCondition: this.checkCondition,\n      wrapInDiv: this.wrapInDiv,\n      responsiveComponents: this.responsiveComponents\n    };\n  }\n\n  merge(other: IInstantiateTemplateOptions): IInstantiateTemplateOptions {\n    if (other) {\n      return _.extend(this.get(), other);\n    }\n    return this.get();\n\n  }\n}\n\nexport class Template implements ITemplateProperties {\n\n  private logger: Logger = new Logger(this);\n  public condition: Function;\n  public conditionToParse: string;\n  public fieldsToMatch: IFieldsToMatch[];\n  public mobile: boolean;\n  public tablet: boolean;\n  public desktop: boolean;\n  public fields: string[];\n  public layout: ValidLayout;\n\n  constructor(public dataToString?: (object?: any) => string) {\n  }\n\n  instantiateToString(object: IQueryResult, instantiateOptions: IInstantiateTemplateOptions = new DefaultInstantiateTemplateOptions()): string {\n    if (this.dataToString) {\n      if (instantiateOptions.checkCondition === false) {\n        return this.dataToString(object);\n      }\n\n      // Should not happen but...\n      // Normally, top level call from sub-class will have already created a DefaultInstantiateTemplateOptions\n      // and merged down\n      if (instantiateOptions.responsiveComponents == null) {\n        instantiateOptions.responsiveComponents = new ResponsiveComponents();\n      }\n\n      // Mobile/tablet/desktop checks are only for \"hard\" set value (triple equal)\n      // If it's undefined, we skip those checks, and we assume the template works correctly for any given screen size\n      if (this.mobile === true && !instantiateOptions.responsiveComponents.isSmallScreenWidth()) {\n        this.logger.trace('Template was skipped because it is optimized for small screen width', this);\n        return null;\n      } else if (this.mobile === false && instantiateOptions.responsiveComponents.isSmallScreenWidth()) {\n        this.logger.trace('Template was skipped because it is not optimized for small screen width', this);\n        return null;\n      }\n\n      if (this.tablet === true && !instantiateOptions.responsiveComponents.isMediumScreenWidth()) {\n        this.logger.trace('Template was skipped because it is optimized for medium screen width', this);\n        return null;\n      } else if (this.tablet === false && instantiateOptions.responsiveComponents.isMediumScreenWidth()) {\n        this.logger.trace('Template was skipped because it is not optimized for medium screen width', this);\n        return null;\n      }\n\n      if (this.desktop === true && !instantiateOptions.responsiveComponents.isLargeScreenWidth()) {\n        this.logger.trace('Template was skipped because it is optimized for large screen width', this);\n        return null;\n      } else if (this.desktop === false && instantiateOptions.responsiveComponents.isLargeScreenWidth()) {\n        this.logger.trace('Template was skipped because it is not optimized for large screen width', this);\n        return null;\n      }\n\n      if (this.layout != null && instantiateOptions.currentLayout != null && instantiateOptions.currentLayout !== this.layout) {\n        this.logger.trace('Template was skipped because layout does not match', this, this.layout);\n        return null;\n      }\n\n      this.logger.trace('Evaluating template ...');\n      // Condition (as a function) is eval'ed, first\n      if (this.condition != null && this.condition(object)) {\n        this.logger.trace('Template was loaded because condition was :', this.condition, object);\n        return this.dataToString(object);\n      }\n      // Condition (as a string) is parsed, if available.\n      if (this.conditionToParse != null && TemplateConditionEvaluator.evaluateCondition(this.conditionToParse, object, instantiateOptions.responsiveComponents)) {\n        this.logger.trace('Template was loaded because condition was :', this.conditionToParse, object);\n        return this.dataToString(object);\n      }\n      // fieldsToMatch is yet another fallback that allows to specify if a template should be loaded.\n      if (this.fieldsToMatch != null && TemplateFieldsEvaluator.evaluateFieldsToMatch(this.fieldsToMatch, object)) {\n        this.logger.trace('Template was loaded because condition was :', this.fieldsToMatch, object);\n        return this.dataToString(object);\n      }\n      // If there is no condition at all, this means \"true\"\n      if (this.condition == null && this.conditionToParse == null && this.fieldsToMatch == null) {\n        this.logger.trace('Template was loaded because there was *NO* condition', this.condition, object);\n        return this.dataToString(object);\n      }\n    }\n\n    this.logger.trace('Template was skipped because it did not match any condition', this);\n    return null;\n  }\n\n  instantiateToElement(object: IQueryResult, instantiateTemplateOptions: IInstantiateTemplateOptions = {}): HTMLElement {\n    let merged = new DefaultInstantiateTemplateOptions().merge(instantiateTemplateOptions);\n\n    var html = this.instantiateToString(object, merged);\n    if (html != null) {\n      var element = $$('div', {}, html).el;\n      if (!merged.wrapInDiv && element.children.length === 1) {\n        element = <HTMLElement>element.children.item(0);\n      }\n      if (this.layout) {\n        $$(element).addClass(`coveo-${this.layout}-layout`);\n      }\n      this.logger.trace('Instantiated result template', object, element);\n      element['template'] = this;\n      return element;\n    }\n    return null;\n  }\n\n  toHtmlElement(): HTMLElement {\n    return null;\n  }\n\n  getFields(): string[] {\n    return this.fields || [];\n  }\n\n  getType() {\n    return 'Template';\n  }\n\n  setConditionWithFallback(condition: string) {\n    // In some circumstances (eg: locker service in SF), with strict Content-Security-Policy, eval / new Function are not allowed by the browser.\n    // Try to use the eval method, if possible. Otherwise fallback to a mechanism where we will try to parse/evaluate the condition as a simple string.\n    try {\n      this.condition = new Function('obj', 'with(obj||{}){return ' + condition + '}');\n    } catch (e) {\n      this.conditionToParse = condition;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/Template.ts\n **/","import { IQueryResult } from '../../rest/QueryResult';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { BaseComponent } from '../Base/BaseComponent';\nimport { ResponsiveComponents } from '../ResponsiveComponents/ResponsiveComponents';\nimport _ = require('underscore');\n\nexport class TemplateConditionEvaluator {\n  static getFieldFromString(text: string) {\n    var fields: string[] = _.map(StringUtils.match(text, /(?:(?!\\b@)@([a-z0-9]+(?:\\.[a-z0-9]+)*\\b))|\\braw.([a-z0-9]+)|\\braw\\['([^']+)'\\]|\\braw\\[\"([^\"]+)\"\\]/gi), (field) => {\n      return field[1] || field[2] || field[3] || field[4] || null;\n    });\n\n    _.each(Initialization.getListOfRegisteredComponents(), (componentId: string) => {\n      var componentFields = (<any>Initialization.getRegisteredComponent(componentId)).fields;\n      if (componentFields != null && text.indexOf(BaseComponent.computeCssClassNameForType(componentId)) != -1) {\n        fields = fields.concat(componentFields);\n      }\n    });\n\n    return fields;\n  }\n\n  static evaluateCondition(condition: string, result: IQueryResult, responsiveComponents = new ResponsiveComponents()): Boolean {\n    let templateShouldBeLoaded = true;\n\n    let fieldsInCondition = TemplateConditionEvaluator.getFieldFromString(condition);\n\n    _.each(fieldsInCondition, (fieldInCondition: string) => {\n      let matchingFieldValues = TemplateConditionEvaluator.evaluateMatchingFieldValues(fieldInCondition, condition);\n      let fieldShouldNotBeNull = matchingFieldValues.length != 0 || TemplateConditionEvaluator.evaluateFieldShouldNotBeNull(fieldInCondition, condition);\n\n      if (fieldShouldNotBeNull) {\n        templateShouldBeLoaded = templateShouldBeLoaded && result.raw[fieldInCondition] != null;\n      }\n      if (templateShouldBeLoaded) {\n        _.each(matchingFieldValues, (fieldValue: string) => {\n          templateShouldBeLoaded = templateShouldBeLoaded && result.raw[fieldInCondition].toLowerCase() == fieldValue.toLowerCase();\n        });\n      }\n    });\n\n    if (templateShouldBeLoaded) {\n      if (TemplateConditionEvaluator.evaluateShouldUseSmallScreen(condition)) {\n        templateShouldBeLoaded = templateShouldBeLoaded && responsiveComponents.isSmallScreenWidth();\n      }\n    }\n    return templateShouldBeLoaded;\n  }\n\n  private static evaluateMatchingFieldValues(field: string, condition: string) {\n    let foundForCurrentField = [];\n    // try to get the field value in the format raw.filetype == \"YouTubeVideo\"\n    let firstRegexToGetValue = new RegExp(`raw\\.${field}\\\\s*=+\\\\s*[\"|']([a-zA-Z]+)[\"|']`, 'gi');\n    // try to get the field value in the format raw['filetype'] == \"YouTubeVideo\"\n    let secondRegexToGetValue = new RegExp(`raw\\[[\"|']${field}[\"|']\\]\\\\s*=+\\\\s*[\"|']([a-zA-Z]+)[\"|']`, 'gi');\n\n    let matches = StringUtils.match(condition, firstRegexToGetValue).concat(StringUtils.match(condition, secondRegexToGetValue));\n    matches.forEach((match) => {\n      foundForCurrentField = foundForCurrentField.concat(match[1]);\n    });\n    return _.unique(foundForCurrentField);\n  }\n\n  private static evaluateFieldShouldNotBeNull(field: string, condition: string): boolean {\n    let firstRegexToMatchNonNull = new RegExp(`raw\\.${field}\\\\s*!=\\\\s*(?=null|undefined)`, 'gi');\n    let secondRegexToMatchNonNull = new RegExp(`raw\\[[\"|']${field}[\"|']\\]\\\\s*!=\\\\s*(?=null|undefined)`, 'gi');\n    return condition.match(firstRegexToMatchNonNull) != null || condition.match(secondRegexToMatchNonNull) != null;\n  }\n\n  private static evaluateShouldUseSmallScreen(condition: string) {\n    return condition.match(/Coveo\\.DeviceUtils\\.isSmallScreenWidth/gi);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateConditionEvaluator.ts\n **/","import { IQueryResult } from '../../rest/QueryResult';\nimport { IFieldsToMatch } from './Template';\nimport _ = require('underscore');\n\nexport class TemplateFieldsEvaluator {\n\n  public static evaluateFieldsToMatch(toMatches: IFieldsToMatch[], result: IQueryResult): boolean {\n    let templateShouldBeLoaded = true;\n    _.each(toMatches, (toMatch: IFieldsToMatch) => {\n      let matchAtLeastOnce = false;\n      if (!toMatch.values) {\n        matchAtLeastOnce = result.raw[toMatch.field] != null;\n      } else {\n        _.each(toMatch.values, (value) => {\n          if (!matchAtLeastOnce) {\n            matchAtLeastOnce = result.raw[toMatch.field] && result.raw[toMatch.field].toLowerCase() == value.toLowerCase();\n          }\n        });\n      }\n      templateShouldBeLoaded = templateShouldBeLoaded && matchAtLeastOnce;\n    });\n    return templateShouldBeLoaded;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateFieldsEvaluator.ts\n **/","import { Template } from './Template';\nimport { ITemplateHelperFunction } from './TemplateHelpers';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { Logger } from '../../misc/Logger';\nimport { TemplateFromAScriptTag, ITemplateFromStringProperties } from './TemplateFromAScriptTag';\nimport { DefaultResultTemplate } from './DefaultResultTemplate';\nimport _ = require('underscore');\n\n_.templateSettings = {\n  evaluate: /(?:<%|{{)([\\s\\S]+?)(?:%>|}})/g,\n  interpolate: /(?:<%|{{)=([\\s\\S]+?)(?:%>|}})/g,\n  escape: /(?:<%|{{)-([\\s\\S]+?)(?:%>|}})/g\n};\n\nexport class UnderscoreTemplate extends Template {\n  private template: (data: any) => string;\n  private templateFromAScriptTag: TemplateFromAScriptTag;\n  public static templateHelpers: { [templateName: string]: ITemplateHelperFunction; } = {};\n\n\n  public static mimeTypes = [\n    'text/underscore',\n    'text/underscore-template',\n    'text/x-underscore',\n    'text/x-underscore-template'\n  ];\n\n  constructor(public element: HTMLElement) {\n    super();\n    Assert.exists(element);\n    var templateString = element.innerHTML;\n    try {\n      this.template = _.template(templateString);\n    } catch (e) {\n      new Logger(this).error('Cannot instantiate underscore template. Might be caused by strict Content-Security-Policy. Will fallback on a default template...', e);\n    }\n    this.templateFromAScriptTag = new TemplateFromAScriptTag(this, this.element);\n    this.dataToString = (object) => {\n      var extended = _.extend({}, object, UnderscoreTemplate.templateHelpers);\n      if (this.template) {\n        return this.template(extended);\n      } else {\n        return new DefaultResultTemplate().getFallbackTemplate();\n      }\n\n    };\n  }\n\n  toHtmlElement(): HTMLElement {\n    let script = this.templateFromAScriptTag.toHtmlElement();\n    script.setAttribute('type', _.first(UnderscoreTemplate.mimeTypes));\n    return script;\n  }\n\n  getType() {\n    return 'UnderscoreTemplate';\n  }\n\n  getFields() {\n    return this.fields;\n  }\n\n  static registerTemplateHelper(helperName: string, helper: ITemplateHelperFunction) {\n    UnderscoreTemplate.templateHelpers[helperName] = helper;\n  }\n\n  static isLibraryAvailable(): boolean {\n    return Utils.exists(window['_']);\n  }\n\n  static fromString(template: string, properties: ITemplateFromStringProperties): UnderscoreTemplate {\n    let script = TemplateFromAScriptTag.fromString(template, properties);\n    script.setAttribute('type', UnderscoreTemplate.mimeTypes[0]);\n\n    return new UnderscoreTemplate(script);\n  }\n\n  static create(element: HTMLElement): UnderscoreTemplate {\n    Assert.exists(element);\n    return new UnderscoreTemplate(element);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/UnderscoreTemplate.ts\n **/","import { Template, IFieldsToMatch } from './Template';\nimport { Utils } from '../../utils/Utils';\nimport { TemplateConditionEvaluator } from './TemplateConditionEvaluator';\nimport { ComponentOptions, IComponentOptionsFieldsOption } from '../Base/ComponentOptions';\nimport { ValidLayout } from '../ResultLayout/ResultLayout';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface ITemplateFromStringProperties {\n  condition?: string;\n  layout?: ValidLayout;\n  mobile?: boolean;\n  tablet?: boolean;\n  desktop?: boolean;\n  fieldsToMatch?: IFieldsToMatch[];\n}\n\nexport class TemplateFromAScriptTag {\n  constructor(public template: Template, public scriptTag: HTMLElement) {\n    let condition = scriptTag.getAttribute('data-condition');\n    if (condition != null) {\n      // Allows to add quotes in data-condition on the templates\n      condition = condition.toString().replace(/&quot;/g, '\"');\n      template.setConditionWithFallback(condition);\n    } else {\n      let parsedFieldsAttributes = this.parseFieldsAttributes();\n      if (parsedFieldsAttributes && Utils.isNonEmptyArray(parsedFieldsAttributes)) {\n        this.template.fieldsToMatch = parsedFieldsAttributes;\n      }\n    }\n\n    this.template.layout = this.parseLayout();\n    this.template.mobile = this.parseScreenSize('data-mobile');\n    this.template.tablet = this.parseScreenSize('data-tablet');\n    this.template.desktop = this.parseScreenSize('data-desktop');\n    this.template.fields = TemplateConditionEvaluator.getFieldFromString(`${scriptTag.innerHTML} ${condition ? condition : ''}`);\n\n    var additionalFields = ComponentOptions.loadFieldsOption(scriptTag, 'fields', <IComponentOptionsFieldsOption>{ includeInResults: true });\n    if (additionalFields != null) {\n      // remove the @\n      this.template.fields = this.template.fields.concat(_.map(additionalFields, (field) => field.substr(1)));\n    }\n    this.template.fields = this.template.fields.concat(_.map(this.template.fieldsToMatch, (toMatch: IFieldsToMatch) => {\n      return toMatch.field;\n    }));\n  }\n\n  toHtmlElement(): HTMLElement {\n    var script = $$('code');\n    let condition = $$(this.scriptTag).getAttribute('data-condition');\n    if (condition) {\n      script.setAttribute('data-condition', condition);\n    }\n    script.setHtml(this.scriptTag.innerHTML);\n    return script.el;\n  }\n\n  parseFieldsAttributes(): IFieldsToMatch[] {\n    let dataSet = this.scriptTag.dataset;\n    return _.chain(dataSet)\n      .map((value, key: string) => {\n        let match = key.match(/field([a-z0-9]*)/i);\n        if (match) {\n          let values;\n          if (value != null && value != 'null' && value != '') {\n            values = value.split(',');\n          }\n          return {\n            field: match[1].toLowerCase(),\n            values: values\n          };\n        } else {\n          return undefined;\n        }\n      })\n      .compact()\n      .value();\n  }\n\n  parseScreenSize(attribute: string) {\n    return Utils.parseBooleanIfNotUndefined(this.scriptTag.getAttribute(attribute));\n  }\n\n  parseLayout(): ValidLayout {\n    const layout = this.scriptTag.getAttribute('data-layout');\n    return <ValidLayout>layout;\n  }\n\n  static fromString(template: string, properties: ITemplateFromStringProperties = {}): HTMLElement {\n    var script = document.createElement('code');\n    script.innerHTML = template;\n    if (properties.condition != null) {\n      script.setAttribute('data-condition', properties.condition);\n    }\n    if (properties.layout != null) {\n      script.setAttribute('data-layout', properties.layout);\n    } else {\n      script.setAttribute('data-layout', 'list');\n    }\n    if (properties.mobile != null) {\n      script.setAttribute('data-mobile', properties.mobile.toString());\n    }\n    if (properties.tablet != null) {\n      script.setAttribute('data-tablet', properties.tablet.toString());\n    }\n    if (properties.desktop != null) {\n      script.setAttribute('data-desktop', properties.desktop.toString());\n    }\n    if (properties.fieldsToMatch != null) {\n      _.each(properties.fieldsToMatch, (fieldToMatch: IFieldsToMatch) => {\n        if (fieldToMatch.values) {\n          script.setAttribute(`data-field-${fieldToMatch.field.toLowerCase()}`, fieldToMatch.values.join(','));\n        } else {\n          script.setAttribute(`data-field-${fieldToMatch.field.toLowerCase()}`, null);\n        }\n\n      });\n    }\n    return script;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateFromAScriptTag.ts\n **/","import {\n  Template, IInstantiateTemplateOptions,\n  DefaultInstantiateTemplateOptions\n} from './Template';\nimport { UnderscoreTemplate } from './UnderscoreTemplate';\nimport { TemplateCache } from './TemplateCache';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\n/*\n * This renders the appropriate result template, found in TemplateCache,\n * according to its condition.\n *\n * For example, a result with a filetype of `YoutubeVideo` will get rendered\n * with the `YoutubeVideo` template, because the latter is registered with a\n * `condition` of `raw.filetype == 'YoutubeVideo'`.\n */\nexport class DefaultResultTemplate extends Template {\n\n  constructor() {\n    super();\n  }\n\n  instantiateToString(queryResult: IQueryResult, instantiateOptions: IInstantiateTemplateOptions = {}): string {\n    Assert.exists(queryResult);\n    let merged = new DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n    queryResult = _.extend({}, queryResult, UnderscoreTemplate.templateHelpers);\n\n    // Put templates with conditions first\n    let templates = _.chain(TemplateCache.getDefaultTemplates())\n      .map(name => TemplateCache.getTemplate(name))\n      .sortBy(template => template.condition == null)\n      .sortBy(template => template.fieldsToMatch == null)\n      .value();\n\n    // For the DefaultResultTemplate, we want to display card only in mobile\n    // The default list template are not adapted to mobile.\n    if (merged.responsiveComponents.isSmallScreenWidth()) {\n      templates = _.filter(templates, (tmpl) => tmpl.layout == 'card');\n      merged.currentLayout = 'card';\n      this.layout = 'card';\n    } else {\n      this.layout = merged.currentLayout;\n    }\n\n    for (let i = 0; i < templates.length; i++) {\n      var result = templates[i].instantiateToString(queryResult, merged);\n      if (result != null) {\n        return result;\n      }\n    }\n\n    return this.getFallbackTemplate();\n  }\n\n  getFields() {\n    var defaultTemplates = _.map(TemplateCache.getDefaultTemplates(), (name) => TemplateCache.getTemplate(name));\n    return _.flatten(_.map(defaultTemplates, (template: Template) => template.getFields()));\n  }\n\n  getType() {\n    return 'DefaultResultTemplate';\n  }\n\n  getFallbackTemplate(): string {\n    let titleContainer = $$('div', {\n      className: 'coveo-title'\n    });\n\n    let resultLink = $$('a', {\n      className: 'CoveoResultLink'\n    });\n\n    titleContainer.append(resultLink.el);\n\n    let excerpt = $$('div', {\n      className: 'CoveoExcerpt'\n    });\n\n    let resultContainer = $$('div');\n    resultContainer.append(titleContainer.el);\n    resultContainer.append(excerpt.el);\n    return resultContainer.el.outerHTML;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/DefaultResultTemplate.ts\n **/","import { Template } from './Template';\nimport { Assert } from '../../misc/Assert';\nimport { TemplateFromAScriptTag, ITemplateFromStringProperties } from './TemplateFromAScriptTag';\nimport _ = require('underscore');\n\nexport class HtmlTemplate extends Template {\n\n  public static mimeTypes = [\n    'text/html',\n    'text/HTML'\n  ];\n\n  private templateFromAScriptTag: TemplateFromAScriptTag;\n\n  constructor(public element: HTMLElement) {\n    super(() => element.innerHTML);\n    this.templateFromAScriptTag = new TemplateFromAScriptTag(this, this.element);\n  }\n\n  toHtmlElement(): HTMLElement {\n    let script = this.templateFromAScriptTag.toHtmlElement();\n    // We don't set the type attribute for 2 reasons:\n    // 1) LockerService doesn't like when we set it.\n    // 2) The HTML Template is the default one.\n\n    return script;\n  }\n\n  getType() {\n    return 'HtmlTemplate';\n  }\n\n  getFields(): string[] {\n    return this.fields;\n  }\n\n  static create(element: HTMLElement): HtmlTemplate {\n    Assert.exists(element);\n    return new HtmlTemplate(element);\n  }\n\n  static fromString(template: string, properties: ITemplateFromStringProperties): HtmlTemplate {\n    let script = TemplateFromAScriptTag.fromString(template, properties);\n\n    // We don't set the type attribute for 2 reasons:\n    // 1) LockerService doesn't like when we set it.\n    // 2) The HTML Template is the default one.\n    return new HtmlTemplate(script);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/HtmlTemplate.ts\n **/","import { Template, IInstantiateTemplateOptions, DefaultInstantiateTemplateOptions } from './Template';\nimport { DefaultResultTemplate } from './DefaultResultTemplate';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport _ = require('underscore');\n\nexport class TemplateList extends Template {\n\n  constructor(public templates: Template[]) {\n    super();\n  }\n\n  instantiateToString(object: IQueryResult, instantiateOptions: IInstantiateTemplateOptions = {}): string {\n    let merged = new DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n\n    for (var i = 0; i < this.templates.length; i++) {\n      var result = this.templates[i].instantiateToString(object, merged);\n      if (result != null) {\n        return result;\n      }\n    }\n    return new DefaultResultTemplate().instantiateToString(object, instantiateOptions);\n  }\n\n  instantiateToElement(object: IQueryResult, instantiateOptions: IInstantiateTemplateOptions = {}): HTMLElement {\n    let merged = new DefaultInstantiateTemplateOptions().merge(instantiateOptions);\n    for (var i = 0; i < this.templates.length; i++) {\n      var element = this.templates[i].instantiateToElement(object, merged);\n      if (element != null) {\n        return element;\n      }\n    }\n    return new DefaultResultTemplate().instantiateToElement(object, merged);\n  }\n\n  getFields() {\n    return _.reduce(this.templates, (fields: string[], template: Template) => fields.concat(template.getFields()), []);\n  }\n\n  getType() {\n    return 'TemplateList';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateList.ts\n **/","import { IAnalyticsClient } from './AnalyticsClient';\nimport { IAnalyticsActionCause } from './AnalyticsActionListMeta';\nimport { IAPIAnalyticsEventResponse } from '../../rest/APIAnalyticsEventResponse';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ITopQueries } from '../../rest/TopQueries';\nimport { IStringMap } from '../../rest/GenericParam';\n\nexport class NoopAnalyticsClient implements IAnalyticsClient {\n  public isContextual: boolean = false;\n\n  private currentEventCause: string;\n  private currentEventMeta: IStringMap<any>;\n\n  isActivated() {\n    return false;\n  }\n\n  getCurrentEventCause(): string {\n    return this.currentEventCause;\n  }\n\n  getCurrentEventMeta(): IStringMap<any> {\n    return this.currentEventMeta;\n  }\n\n  logSearchEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    this.setNoopCauseAndMeta(actionCause.name, meta);\n  }\n\n  logSearchAsYouType<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    this.setNoopCauseAndMeta(actionCause.name, meta);\n  }\n\n  logClickEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta, result?: IQueryResult, element?: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    this.setNoopCauseAndMeta(actionCause.name, meta);\n    return Promise.resolve(null);\n  }\n\n  logCustomEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta, element?: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    this.setNoopCauseAndMeta(actionCause.name, meta);\n    return Promise.resolve(null);\n  }\n\n  getTopQueries(params: ITopQueries): Promise<string[]> {\n    return new Promise((resolve, reject) => {\n      resolve([]);\n    });\n  }\n\n  getCurrentVisitIdPromise(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      resolve(null);\n    });\n  }\n\n  getCurrentVisitId(): string {\n    return null;\n  }\n\n  sendAllPendingEvents() {\n  }\n\n  cancelAllPendingEvents() {\n  }\n\n  warnAboutSearchEvent() {\n  }\n\n  getPendingSearchEvent() {\n    return null;\n  }\n\n  setOriginContext(originContext: string) {\n  }\n\n  private setNoopCauseAndMeta(cause: string, meta: IStringMap<any>) {\n    this.currentEventCause = cause;\n    this.currentEventMeta = meta;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/NoopAnalyticsClient.ts\n **/","import { ComponentOptions } from '../Base/ComponentOptions';\nimport { LocalStorageUtils } from '../../utils/LocalStorageUtils';\nimport { IFieldDescription } from '../../rest/FieldDescription';\nimport { IBuildingQueryEventArgs, IQuerySuccessEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { ResultListEvents, IDisplayedNewResultEventArgs } from '../../events/ResultListEvents';\nimport { DebugEvents } from '../../events/DebugEvents';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { $$, Dom } from '../../utils/Dom';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { Template } from '../Templates/Template';\nimport { RootComponent } from '../Base/RootComponent';\nimport { QueryController } from '../../controllers/QueryController';\nimport { BaseComponent } from '../Base/BaseComponent';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport Globalize = require('globalize');\nimport { KEYBOARD } from '../../utils/KeyboardUtils';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { IStringMap } from '../../rest/GenericParam';\nimport _ = require('underscore');\n\nexport interface IDebugOptions {\n  enableDebug?: boolean;\n}\n\nexport class Debug extends RootComponent {\n  static ID = 'Debug';\n  static options: IDebugOptions = {\n    enableDebug: ComponentOptions.buildBooleanOption({ defaultValue: false })\n  };\n\n  static customOrder = ['error', 'queryDuration', 'result', 'fields', 'rankingInfo', 'template', 'query', 'results', 'state'];\n\n  static durationKeys = ['indexDuration', 'proxyDuration', 'clientDuration', 'duration'];\n  static maxDepth = 10;\n\n  public localStorageDebug: LocalStorageUtils<string[]>;\n  public collapsedSections: string[];\n\n  private debug = false;\n  private highlightRecommendation = false;\n  private fields: { [field: string]: IFieldDescription };\n\n  private stackDebug: any;\n  private boundEscapeKey: (evt: Event, arg?: any) => void;\n\n  constructor(public element: HTMLElement, public queryController: QueryController, public options?: IDebugOptions, public modalBox = ModalBox) {\n    super(element, Debug.ID);\n    this.options = ComponentOptions.initComponentOptions(element, Debug, options);\n    $$(this.element).on(QueryEvents.buildingQuery, (e, args: IBuildingQueryEventArgs) => {\n      args.queryBuilder.enableDebug = this.debug || args.queryBuilder.enableDebug;\n    });\n    $$(this.element).on(ResultListEvents.newResultDisplayed, (e, args: IDisplayedNewResultEventArgs) => this.handleNewResultDisplayed(args));\n    $$(this.element).on(DebugEvents.showDebugPanel, (e, args) => {\n      this.handleShowDebugPanel(args);\n    });\n    $$(this.element).on(InitializationEvents.nuke, () => {\n      this.unbindEscapeEvent();\n    });\n\n    this.localStorageDebug = new LocalStorageUtils<string[]>('DebugPanel');\n    this.collapsedSections = this.localStorageDebug.load() || [];\n  }\n\n  public buildFieldsSection(result: IQueryResult) {\n    return this.fetchFields()\n      .then((fieldDescriptions: IStringMap<IFieldDescription>) => {\n        let fields = {};\n        _.each(result.raw, (value: any, key: string) => {\n          let fieldDescription = fieldDescriptions['@' + key];\n          if (fieldDescription == null && key.match(/^sys/)) {\n            fieldDescription = fieldDescriptions['@' + key.substr(3)];\n          }\n          if (fieldDescription == null) {\n            fields['@' + key] = value;\n          } else if (fieldDescription.fieldType == 'Date') {\n            fields['@' + key] = new Date(value);\n          } else if (fieldDescription.splitGroupByField && _.isString(value)) {\n            fields['@' + key] = value.split(/\\s*;\\s*/);\n          } else {\n            fields['@' + key] = value;\n          }\n        });\n        return fields;\n      });\n  }\n\n  public parseRankingInfo(value: string) {\n    let rankingInfo = {};\n    if (value) {\n      let documentWeights = /Document weights:\\n((?:.)*?)\\n+/g.exec(value);\n      let termsWeight = /Terms weights:\\n((?:.|\\n)*)\\n+/g.exec(value);\n      let totalWeight = /Total weight: ([0-9]+)/g.exec(value);\n\n      if (documentWeights && documentWeights[1]) {\n        rankingInfo['Document weights'] = this.parseWeights(documentWeights[1]);\n      }\n\n      if (totalWeight && totalWeight[1]) {\n        rankingInfo['Total weight'] = Number(totalWeight[1]);\n      }\n\n      if (termsWeight && termsWeight[1]) {\n        let terms = StringUtils.match(termsWeight[1], /((?:[^:]+: [0-9]+, [0-9]+; )+)\\n((?:\\w+: [0-9]+; )+)/g);\n        rankingInfo['Terms weights'] = _.object(_.map(terms, (term) => {\n          let words = _.object(_.map(StringUtils.match(term[1], /([^:]+): ([0-9]+), ([0-9]+); /g), (word) => {\n            return [\n              word[1],\n              {\n                Correlation: Number(word[2]),\n                'TF-IDF': Number(word[3]),\n              }\n            ];\n          }));\n          let weights = this.parseWeights(term[2]);\n          return [\n            _.keys(words).join(', '),\n            {\n              terms: words,\n              Weights: weights\n            }];\n        }));\n      }\n    }\n\n    return rankingInfo;\n  }\n\n  public buildStackPanel(stackDebug: any, results?: IQueryResults): { body: HTMLElement; json: any; } {\n    let body = Dom.createElement('div', { className: 'coveo-debug' });\n\n    let keys: any[][] = _.pairs(_.keys(stackDebug));\n\n    keys = keys.sort((a: any[], b: any[]) => {\n      let indexA = _.indexOf(Debug.customOrder, a[1]);\n      let indexB = _.indexOf(Debug.customOrder, b[1]);\n      if (indexA != -1 && indexB != -1) {\n        return indexA - indexB;\n      }\n      if (indexA != -1) {\n        return -1;\n      }\n      if (indexB != -1) {\n        return 1;\n      }\n      return a[0] - b[0];\n    });\n\n    let json = {};\n\n    _.forEach(keys, (key: string[]) => {\n      let section = this.buildSection(key[1]);\n      let build = this.buildStackPanelSection(stackDebug[key[1]], results);\n      section.container.appendChild(build.section);\n      if (build.json != null) {\n        json[key[1]] = build.json;\n      }\n      body.appendChild(section.dom);\n    });\n\n    return { body: body, json: json };\n  }\n\n  public debugInfo() {\n    return null;\n  }\n\n  private showDebugPanel(builder: (results?: IQueryResults) => { body: HTMLElement; json: any; }) {\n    let build = builder();\n\n    let modalbox = this.modalBox.open(build.body, {\n      title: '',\n      className: 'coveo-debug',\n      titleClose: true,\n      overlayClose: true,\n      validation: () => {\n        this.unbindEscapeEvent();\n        return true;\n      }\n    });\n    this.bindEscapeEvent();\n\n    let title = $$(modalbox.wrapper).find('.coveo-title');\n    let search = this.buildSearchBox(build.body);\n    let downloadLink = $$('a', { download: 'debug.json', 'href': this.downloadHref(build.json) }, 'Download');\n    let bodyBuilder = (results?: IQueryResults) => {\n      let build = builder(results);\n      downloadLink.el.setAttribute('href', this.downloadHref(build.json));\n      return build.body;\n    };\n    title.appendChild(this.buildEnabledHighlightRecommendation());\n    title.appendChild(this.buildEnableDebugCheckbox(build.body, search, bodyBuilder));\n    title.appendChild(search);\n    title.appendChild(downloadLink.el);\n  }\n\n  private handleEscapeEvent(e: KeyboardEvent) {\n    if (e.keyCode == KEYBOARD.ESCAPE) {\n      if (this.modalBox) {\n        this.modalBox.close();\n      }\n    }\n  }\n\n  private bindEscapeEvent() {\n    this.boundEscapeKey = this.handleEscapeEvent.bind(this);\n    $$(document.body).on('keyup', this.boundEscapeKey);\n  }\n\n  private unbindEscapeEvent() {\n    if (this.boundEscapeKey) {\n      $$(document.body).off('keyup', this.boundEscapeKey);\n    }\n    this.boundEscapeKey = null;\n  }\n\n  private handleShowDebugPanel(info: any) {\n    if (this.stackDebug == null) {\n      setTimeout(() => {\n        let stackDebug = this.stackDebug;\n        this.showDebugPanel((results?: IQueryResults) => this.buildStackPanel(stackDebug, results));\n        this.stackDebug = null;\n      });\n      this.stackDebug = {};\n    }\n    _.extend(this.stackDebug, info);\n  }\n\n  private handleNewResultDisplayed(args: IDisplayedNewResultEventArgs) {\n    if (args.item != null) {\n      if (this.highlightRecommendation && args.result.isRecommendation) {\n        $$(args.item).addClass('coveo-is-recommendation');\n      }\n      $$(args.item).on('dblclick', (e: MouseEvent) => {\n        this.handleResultDoubleClick(e, args);\n      });\n    }\n  }\n\n  private handleResultDoubleClick(e: MouseEvent, args: IDisplayedNewResultEventArgs) {\n    if (e.altKey) {\n      let index = args.result.index;\n      let findResult = (results?: IQueryResults) => results != null ? _.find(results.results, (result: IQueryResult) => result.index == index) : args.result;\n      let template = args.item['template'];\n\n      let debugPanel = {\n        result: findResult,\n        fields: (results?: IQueryResults) => this.buildFieldsSection(findResult(results)),\n        rankingInfo: (results?: IQueryResults) => this.buildRankingInfoSection(findResult(results)),\n        template: this.templateToJson(template),\n      };\n      this.handleShowDebugPanel(debugPanel);\n    }\n  }\n\n  private downloadHref(info: any) {\n    return 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(info));\n  }\n\n  private buildStackPanelSection(value: any, results: IQueryResults): { section: HTMLElement; json?: any; } {\n    if (value instanceof HTMLElement) {\n      return { section: value };\n    } else if (_.isFunction(value)) {\n      return this.buildStackPanelSection(value(results), results);\n    }\n    let json = this.toJson(value);\n    return { section: this.buildProperty(json), json: json };\n  }\n\n  private buildSearchBox(body: HTMLElement) {\n    let dom = Dom.createElement('div', { className: 'coveo-debug-search' }, '<input type=\\'text\\'/>');\n    dom.onclick = (e) => {\n      e.stopPropagation();\n    };\n    let lastSearch = '';\n    let input = dom.querySelector('input') as HTMLInputElement;\n    input.setAttribute('placeholder', 'Search in debug');\n    input.onkeyup = (e) => {\n      if (e == null || e.keyCode == 13) {\n        let value = input.value.toLowerCase();\n        if (lastSearch != value) {\n          lastSearch = value;\n          this.search(value, body);\n        }\n      }\n    };\n    input.onchange = () => {\n      let value = input.value.toLowerCase();\n      if (lastSearch != value) {\n        lastSearch = value;\n        this.search(value, body);\n      }\n    };\n    return dom;\n  }\n\n  private search(value: string, body: HTMLElement) {\n    if (_.isEmpty(value)) {\n      $$(body).findAll('.coveo-search-match, .coveo-search-submatch').forEach((el) => {\n        $$(el).removeClass('coveo-search-match, coveo-search-submatch');\n      });\n      $$(body).removeClass('coveo-searching');\n    } else {\n      $$(body).addClass('coveo-searching-loading');\n      setTimeout(() => {\n        let rootProperties = $$(body).findAll('.coveo-section .coveo-section-container > .coveo-property');\n        _.each(rootProperties, (element: HTMLElement) => {\n          this.findInProperty(element, value);\n        });\n        $$(body).addClass('coveo-searching');\n        $$(body).removeClass('coveo-searching-loading');\n      });\n    }\n  }\n\n  private findInProperty(element: HTMLElement, value: string): boolean {\n    let jElement = $$(element);\n    let match = element['label'].indexOf(value) != -1;\n    if (match) {\n      this.highlightSearch(element['labelDom'], value);\n    } else {\n      this.removeHighlightSearch(element['labelDom']);\n    }\n    if (jElement.hasClass('coveo-property-object')) {\n      jElement.toggleClass('coveo-search-match', match);\n      let children = element['buildKeys']();\n      let submatch = false;\n      _.each(children, (child: HTMLElement) => {\n        submatch = this.findInProperty(child, value) || submatch;\n      });\n      jElement.toggleClass('coveo-search-submatch', submatch);\n      return match || submatch;\n    } else {\n      if (element['values'].indexOf(value) != -1) {\n        this.highlightSearch(element['valueDom'], value);\n        match = true;\n      } else {\n        this.removeHighlightSearch(element['valueDom']);\n      }\n      jElement.toggleClass('coveo-search-match', match);\n    }\n    return match;\n  }\n\n  private buildEnableDebugCheckbox(body: HTMLElement, search: HTMLElement, bodyBuilder: (results: IQueryResults) => HTMLElement) {\n    let dom = Dom.createElement('div', { className: 'coveo-enabled-debug' }, '<label>Enable query debug <input type=\\'checkbox\\'/></label>');\n    $$(dom).on('click', (e) => {\n      e.stopPropagation();\n    });\n    let checkbox = $$(dom).find('input');\n    if (this.debug) {\n      checkbox.setAttribute('checked', 'checked');\n    }\n    checkbox.onchange = () => {\n      this.debug = !this.debug;\n      $$(this.element).one([QueryEvents.querySuccess, QueryEvents.queryError], (e: Event, args: IQuerySuccessEventArgs) => {\n        $$(body).removeClass('coveo-debug-loading');\n        $$(body).empty();\n        $$(bodyBuilder(args.results)).children().forEach((child) => {\n          body.appendChild(child);\n        });\n      });\n      this.queryController.executeQuery({ closeModalBox: false });\n      $$(body).addClass('coveo-debug-loading');\n      let input = search.querySelector('input') as HTMLInputElement;\n      input.value = '';\n      input.onkeyup(null);\n    };\n    return dom;\n  }\n\n  private buildEnabledHighlightRecommendation() {\n    let dom = Dom.createElement('div', { className: 'coveo-enabled-highlight-recommendation' }, '<label>Highlight recommendation <input type=\\'checkbox\\'/></label>');\n    dom.onclick = (e) => {\n      e.stopPropagation();\n    };\n    let checkbox = $$(dom).find('input');\n    if (this.highlightRecommendation) {\n      checkbox.setAttribute('checked', 'checked');\n    }\n    checkbox.onchange = () => {\n      this.highlightRecommendation = !this.highlightRecommendation;\n      this.queryController.executeQuery({ closeModalBox: false });\n    };\n    return dom;\n  }\n\n  private buildSection(id: string) {\n    let dom = Dom.createElement('div', { className: 'coveo-section coveo-' + id + '-section' });\n    let header = Dom.createElement('div', { className: 'coveo-section-header' });\n    $$(header).text(id);\n    dom.appendChild(header);\n\n    let container = Dom.createElement('div', { className: 'coveo-section-container' });\n    dom.appendChild(container);\n\n    if (_.contains(this.collapsedSections, id)) {\n      $$(dom).addClass('coveo-debug-collapsed');\n    }\n\n    header.onclick = () => {\n      $$(dom).toggleClass('coveo-debug-collapsed');\n      if (_.contains(this.collapsedSections, id)) {\n        this.collapsedSections = _.without(this.collapsedSections, id);\n      } else {\n        this.collapsedSections.push(id);\n      }\n      this.localStorageDebug.save(this.collapsedSections);\n    };\n\n    return {\n      dom: dom,\n      header: header,\n      container: container\n    };\n  }\n\n  private fetchFields(): Promise<{ [field: string]: IFieldDescription }> {\n    if (this.fields == null) {\n      return this.queryController.getEndpoint().listFields().then((fields: IFieldDescription[]) => {\n        this.fields = {};\n        fields.forEach((field) => {\n          this.fields[field.name] = field;\n        });\n        return this.fields;\n      });\n    } else {\n      return Promise.resolve(this.fields);\n    }\n  }\n\n  private buildRankingInfoSection(result: IQueryResult) {\n    return result.rankingInfo && this.parseRankingInfo(result.rankingInfo);\n  }\n\n  private parseWeights(value: string) {\n    let listOfWeight = value.match(/(\\w+(?:\\s\\w+)*): ([-0-9]+)/g);\n    return _.object(_.map(listOfWeight, (weight) => {\n      let weightGroup = weight.match(/^(\\w+(?:\\s\\w+)*): ([-0-9]+)$/);\n      return [weightGroup[1], Number(weightGroup[2])];\n    }));\n  }\n\n  private buildProperty(value: any, label?: string): HTMLElement {\n    if (value instanceof Promise) {\n      return this.buildPromise(value, label);\n    } else if ((_.isArray(value) || (_.isObject(value))) && !_.isString(value)) {\n      return this.buildObjectProperty(value, label);\n    } else {\n      return this.buildBasicProperty(value, label);\n    }\n  }\n\n  private buildPromise(promise: Promise<any>, label?: string): HTMLElement {\n    let dom: HTMLElement = document.createElement('div');\n    dom.className = 'coveo-property coveo-property-promise';\n    promise.then((value) => {\n      let resolvedDom = this.buildProperty(value, label);\n      $$(dom).replaceWith(resolvedDom);\n    });\n    return dom;\n  }\n\n  private buildObjectProperty(object: any, label?: string): HTMLElement {\n    let dom: HTMLElement = document.createElement('div');\n    dom.className = 'coveo-property coveo-property-object';\n\n    let valueContainer: HTMLElement = document.createElement('div');\n    valueContainer.className = 'coveo-property-value';\n\n    let keys = _.keys(object);\n    if (!_.isArray(object)) {\n      keys.sort();\n    }\n\n    let children: HTMLElement[];\n    let buildKeys = () => {\n      if (children == null) {\n        children = [];\n        _.each(keys, (key: string) => {\n          let property = this.buildProperty(object[key], key);\n          if (property != null) {\n            children.push(property);\n            valueContainer.appendChild(property);\n          }\n        });\n      }\n      return children;\n    };\n    dom['buildKeys'] = buildKeys;\n\n    if (label != null) {\n      let labelDom = document.createElement('div');\n      labelDom.className = 'coveo-property-label';\n      labelDom.appendChild(document.createTextNode(label));\n      dom['labelDom'] = labelDom;\n\n      dom.appendChild(labelDom);\n      if (keys.length != 0) {\n        dom.className += ' coveo-collapsible';\n        labelDom.onclick = () => {\n          buildKeys();\n          let className = dom.className.split(/\\s+/);\n          if (_.contains(className, 'coveo-expanded')) {\n            className = _.without(className, 'coveo-expanded');\n          } else {\n            className.push('coveo-expanded');\n          }\n          dom.className = className.join(' ');\n        };\n      }\n    } else {\n      buildKeys();\n    }\n    if (keys.length == 0) {\n      let className = _.without(dom.className.split(/\\s+/), 'coveo-property-object');\n      className.push('coveo-property-basic');\n      dom.className = className.join(' ');\n      if (_.isArray(object)) {\n        valueContainer.innerHTML = '[]';\n      } else {\n        valueContainer.innerHTML = '{}';\n      }\n      dom['values'] = '';\n    }\n    dom['label'] = label != null ? label.toLowerCase() : '';\n    dom.appendChild(valueContainer);\n    return dom;\n  }\n\n  private buildBasicProperty(value: string, label?: string): HTMLElement {\n    let dom: HTMLElement = document.createElement('div');\n    dom.className = 'coveo-property coveo-property-basic';\n\n    if (label != null) {\n      let labelDom = document.createElement('div');\n      labelDom.className = 'coveo-property-label';\n      labelDom.appendChild(document.createTextNode(label));\n      dom.appendChild(labelDom);\n      dom['labelDom'] = labelDom;\n    }\n    let stringValue = value != null ? value.toString() : String(value);\n    if (value != null && value['ref'] != null) {\n      value = value['ref'];\n    }\n    let valueDom = document.createElement('div');\n    valueDom.appendChild(document.createTextNode(stringValue));\n    valueDom.ondblclick = () => {\n      this.selectElementText(valueDom);\n    };\n    dom.appendChild(valueDom);\n    dom['valueDom'] = valueDom;\n\n    let className: string[] = ['coveo-property-value'];\n    if (_.isString(value)) {\n      className.push('coveo-property-value-string');\n    }\n    if (_.isNull(value) || _.isUndefined(value)) {\n      className.push('coveo-property-value-null');\n    }\n    if (_.isNumber(value)) {\n      className.push('coveo-property-value-number');\n    }\n    if (_.isBoolean(value)) {\n      className.push('coveo-property-value-boolean');\n    }\n    if (_.isDate(value)) {\n      className.push('coveo-property-value-date');\n    }\n    if (_.isObject(value)) {\n      className.push('coveo-property-value-object');\n    }\n    if (_.isArray(value)) {\n      className.push('coveo-property-value-array');\n    }\n    valueDom.className = className.join(' ');\n\n    dom['label'] = label != null ? label.toLowerCase() : '';\n    dom['values'] = stringValue.toLowerCase();\n    return dom;\n  }\n\n  private toJson(value: any, depth = 0, done: any[] = []) {\n    if (value instanceof BaseComponent || value instanceof SearchEndpoint) {\n      return this.componentToJson(value, depth);\n    }\n    if (value instanceof HTMLElement) {\n      return this.htmlToJson(value);\n    }\n    if (value instanceof Template) {\n      return this.templateToJson(value);\n    }\n    if (value instanceof Promise) {\n      return value.then((value) => {\n        return this.toJson(value, depth, done);\n      });\n    }\n    if (value == window) {\n      return this.toJsonRef(value);\n    }\n    if (_.isArray(value) || _.isObject(value)) {\n      if (_.contains(done, value)) {\n        return this.toJsonRef(value, '< RECURSIVE >');\n      } else if (depth >= Debug.maxDepth) {\n        return this.toJsonRef(value);\n      } else if (_.isArray(value)) {\n        return _.map(value, (subValue, key) => this.toJson(subValue, depth + 1, done.concat([value])));\n      } else if (_.isDate(value)) {\n        return this.toJsonRef(value, Globalize.format(value, 'F'));\n      } else {\n        let result = {};\n        _.each(value, (subValue, key) => {\n          result[key] = this.toJson(subValue, depth + 1, done.concat([value]));\n        });\n        result['ref'];\n        return result;\n      }\n    }\n    return value;\n  }\n\n  private toJsonRef(value: any, stringValue?: String): String {\n    stringValue = new String(stringValue || value);\n    stringValue['ref'] = value;\n    return stringValue;\n  }\n\n  private componentToJson(value: BaseComponent | SearchEndpoint, depth = 0): any {\n    let options = _.keys(value['options']);\n    if (options.length > 0) {\n      return this.toJson(value['options'], depth);\n    } else {\n      return this.toJsonRef(value['options'], new String('No options'));\n    }\n  }\n\n  private htmlToJson(value: HTMLElement): any {\n    if (value == null) {\n      return undefined;\n    }\n    return {\n      tagName: value.tagName,\n      id: value.id,\n      classList: value.className.split(/\\s+/)\n    };\n  }\n\n  private templateToJson(template: Template) {\n    if (template == null) {\n      return null;\n    }\n    let element: HTMLElement = template['element'];\n    let templateObject: any = {\n      type: template.getType(),\n    };\n    if (element != null) {\n      templateObject.id = element.id;\n      templateObject.condition = element.attributes['data-condition'];\n      templateObject.content = element.innerText;\n    }\n    return templateObject;\n  }\n\n  private selectElementText(el: HTMLElement) {\n    if (window.getSelection && document.createRange) {\n      let selection = window.getSelection();\n      let range = document.createRange();\n      range.selectNodeContents(el);\n      selection.removeAllRanges();\n      selection.addRange(range);\n    } else if ('createTextRange' in document.body) {\n      let textRange = document.body['createTextRange']();\n      textRange.moveToElementText(el);\n      textRange.select();\n    }\n  }\n\n  private highlightSearch(element: HTMLElement, search: string) {\n    if (element != null) {\n      let match = element.innerText.split(new RegExp('(?=' + StringUtils.regexEncode(search) + ')', 'gi'));\n      element.innerHTML = '';\n      match.forEach((value) => {\n        let regex = new RegExp('(' + StringUtils.regexEncode(search) + ')', 'i');\n        let group = value.match(regex);\n        let span: HTMLSpanElement;\n        if (group != null) {\n          span = Dom.createElement('span', { className: 'coveo-debug-highlight' });\n          span.appendChild(document.createTextNode(group[1]));\n          element.appendChild(span);\n          span = Dom.createElement('span');\n          span.appendChild(document.createTextNode(value.substr(group[1].length)));\n          element.appendChild(span);\n        } else {\n          span = Dom.createElement('span');\n          span.appendChild(document.createTextNode(value));\n          element.appendChild(span);\n        }\n      });\n    }\n  }\n\n  private removeHighlightSearch(element: HTMLElement) {\n    if (element != null) {\n      element.innerHTML = element.innerText;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Debug/Debug.ts\n **/",";(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(function() {\n\t\t\treturn FastClick;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/fastclick/lib/fastclick.js\n ** module id = 123\n ** module chunks = 0 1\n **/","(function (root) {/*global exports, Intl*/\n/**\n * This script gives you the zone info key representing your device's time zone setting.\n *\n * @name jsTimezoneDetect\n * @version 1.0.6\n * @author Jon Nylander\n * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt\n *\n * For usage and examples, visit:\n * http://pellepim.bitbucket.org/jstz/\n *\n * Copyright (c) Jon Nylander\n */\n\n\n/**\n * Namespace to hold all the code for timezone detection.\n */\nvar jstz = (function () {\n    'use strict';\n    var HEMISPHERE_SOUTH = 's',\n\n        consts = {\n            DAY: 86400000,\n            HOUR: 3600000,\n            MINUTE: 60000,\n            SECOND: 1000,\n            BASELINE_YEAR: 2014,\n            MAX_SCORE: 864000000, // 10 days\n            AMBIGUITIES: {\n                'America/Denver':       ['America/Mazatlan'],\n                'Europe/London':        ['Africa/Casablanca'],\n                'America/Chicago':      ['America/Mexico_City'],\n                'America/Asuncion':     ['America/Campo_Grande', 'America/Santiago'],\n                'America/Montevideo':   ['America/Sao_Paulo', 'America/Santiago'],\n                // Europe/Minsk should not be in this list... but Windows.\n                'Asia/Beirut':          ['Asia/Amman', 'Asia/Jerusalem', 'Europe/Helsinki', 'Asia/Damascus', 'Africa/Cairo', 'Asia/Gaza', 'Europe/Minsk'],\n                'Pacific/Auckland':     ['Pacific/Fiji'],\n                'America/Los_Angeles':  ['America/Santa_Isabel'],\n                'America/New_York':     ['America/Havana'],\n                'America/Halifax':      ['America/Goose_Bay'],\n                'America/Godthab':      ['America/Miquelon'],\n                'Asia/Dubai':           ['Asia/Yerevan'],\n                'Asia/Jakarta':         ['Asia/Krasnoyarsk'],\n                'Asia/Shanghai':        ['Asia/Irkutsk', 'Australia/Perth'],\n                'Australia/Sydney':     ['Australia/Lord_Howe'],\n                'Asia/Tokyo':           ['Asia/Yakutsk'],\n                'Asia/Dhaka':           ['Asia/Omsk'],\n                // In the real world Yerevan is not ambigous for Baku... but Windows.\n                'Asia/Baku':            ['Asia/Yerevan'],\n                'Australia/Brisbane':   ['Asia/Vladivostok'],\n                'Pacific/Noumea':       ['Asia/Vladivostok'],\n                'Pacific/Majuro':       ['Asia/Kamchatka', 'Pacific/Fiji'],\n                'Pacific/Tongatapu':    ['Pacific/Apia'],\n                'Asia/Baghdad':         ['Europe/Minsk', 'Europe/Moscow'],\n                'Asia/Karachi':         ['Asia/Yekaterinburg'],\n                'Africa/Johannesburg':  ['Asia/Gaza', 'Africa/Cairo']\n            }\n        },\n\n        /**\n         * Gets the offset in minutes from UTC for a certain date.\n         * @param {Date} date\n         * @returns {Number}\n         */\n        get_date_offset = function get_date_offset(date) {\n            var offset = -date.getTimezoneOffset();\n            return (offset !== null ? offset : 0);\n        },\n\n        /**\n         * This function does some basic calculations to create information about\n         * the user's timezone. It uses REFERENCE_YEAR as a solid year for which\n         * the script has been tested rather than depend on the year set by the\n         * client device.\n         *\n         * Returns a key that can be used to do lookups in jstz.olson.timezones.\n         * eg: \"720,1,2\".\n         *\n         * @returns {String}\n         */\n        lookup_key = function lookup_key() {\n            var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)),\n                june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)),\n                diff = january_offset - june_offset;\n\n            if (diff < 0) {\n                return january_offset + \",1\";\n            } else if (diff > 0) {\n                return june_offset + \",1,\" + HEMISPHERE_SOUTH;\n            }\n\n            return january_offset + \",0\";\n        },\n\n\n        /**\n         * Tries to get the time zone key directly from the operating system for those\n         * environments that support the ECMAScript Internationalization API.\n         */\n        get_from_internationalization_api = function get_from_internationalization_api() {\n            var format, timezone;\n            if (typeof Intl === \"undefined\" || typeof Intl.DateTimeFormat === \"undefined\") {\n                return;\n            }\n\n            format = Intl.DateTimeFormat();\n\n            if (typeof format === \"undefined\" || typeof format.resolvedOptions === \"undefined\") {\n                return;\n            }\n\n            timezone = format.resolvedOptions().timeZone;\n\n            if (timezone && (timezone.indexOf(\"/\") > -1 || timezone === 'UTC')) {\n                return timezone;\n            }\n\n        },\n\n        /**\n         * Starting point for getting all the DST rules for a specific year\n         * for the current timezone (as described by the client system).\n         *\n         * Returns an object with start and end attributes, or false if no\n         * DST rules were found for the year.\n         *\n         * @param year\n         * @returns {Object} || {Boolean}\n         */\n        dst_dates = function dst_dates(year) {\n            var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime();\n            var yearend = new Date(year, 12, 31, 23, 59, 59).getTime();\n            var current = yearstart;\n            var offset = (new Date(current)).getTimezoneOffset();\n            var dst_start = null;\n            var dst_end = null;\n\n            while (current < yearend - 86400000) {\n                var dateToCheck = new Date(current);\n                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\n                if (dateToCheckOffset !== offset) {\n                    if (dateToCheckOffset < offset) {\n                        dst_start = dateToCheck;\n                    }\n                    if (dateToCheckOffset > offset) {\n                        dst_end = dateToCheck;\n                    }\n                    offset = dateToCheckOffset;\n                }\n\n                current += 86400000;\n            }\n\n            if (dst_start && dst_end) {\n                return {\n                    s: find_dst_fold(dst_start).getTime(),\n                    e: find_dst_fold(dst_end).getTime()\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Probably completely unnecessary function that recursively finds the\n         * exact (to the second) time when a DST rule was changed.\n         *\n         * @param a_date - The candidate Date.\n         * @param padding - integer specifying the padding to allow around the candidate\n         *                  date for finding the fold.\n         * @param iterator - integer specifying how many milliseconds to iterate while\n         *                   searching for the fold.\n         *\n         * @returns {Date}\n         */\n        find_dst_fold = function find_dst_fold(a_date, padding, iterator) {\n            if (typeof padding === 'undefined') {\n                padding = consts.DAY;\n                iterator = consts.HOUR;\n            }\n\n            var date_start = new Date(a_date.getTime() - padding).getTime();\n            var date_end = a_date.getTime() + padding;\n            var offset = new Date(date_start).getTimezoneOffset();\n\n            var current = date_start;\n\n            var dst_change = null;\n            while (current < date_end - iterator) {\n                var dateToCheck = new Date(current);\n                var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n\n                if (dateToCheckOffset !== offset) {\n                    dst_change = dateToCheck;\n                    break;\n                }\n                current += iterator;\n            }\n\n            if (padding === consts.DAY) {\n                return find_dst_fold(dst_change, consts.HOUR, consts.MINUTE);\n            }\n\n            if (padding === consts.HOUR) {\n                return find_dst_fold(dst_change, consts.MINUTE, consts.SECOND);\n            }\n\n            return dst_change;\n        },\n\n        windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) {\n            if (score !== 'N/A') {\n                return score;\n            }\n            if (preliminary_timezone === 'Asia/Beirut') {\n                if (sample.name === 'Africa/Cairo') {\n                    if (rule_list[6].s === 1398376800000 && rule_list[6].e === 1411678800000) {\n                        return 0;\n                    }\n                }\n                if (sample.name === 'Asia/Jerusalem') {\n                    if (rule_list[6].s === 1395964800000 && rule_list[6].e === 1411858800000) {\n                        return 0;\n                }\n            }\n            } else if (preliminary_timezone === 'America/Santiago') {\n                if (sample.name === 'America/Asuncion') {\n                    if (rule_list[6].s === 1412481600000 && rule_list[6].e === 1397358000000) {\n                        return 0;\n                    }\n                }\n                if (sample.name === 'America/Campo_Grande') {\n                    if (rule_list[6].s === 1413691200000 && rule_list[6].e === 1392519600000) {\n                        return 0;\n                    }\n                }\n            } else if (preliminary_timezone === 'America/Montevideo') {\n                if (sample.name === 'America/Sao_Paulo') {\n                    if (rule_list[6].s === 1413687600000 && rule_list[6].e === 1392516000000) {\n                        return 0;\n                    }\n                }\n            } else if (preliminary_timezone === 'Pacific/Auckland') {\n                if (sample.name === 'Pacific/Fiji') {\n                    if (rule_list[6].s === 1414245600000 && rule_list[6].e === 1396101600000) {\n                        return 0;\n                    }\n                }\n            }\n\n            return score;\n        },\n\n        /**\n         * Takes the DST rules for the current timezone, and proceeds to find matches\n         * in the jstz.olson.dst_rules.zones array.\n         *\n         * Compares samples to the current timezone on a scoring basis.\n         *\n         * Candidates are ruled immediately if either the candidate or the current zone\n         * has a DST rule where the other does not.\n         *\n         * Candidates are ruled out immediately if the current zone has a rule that is\n         * outside the DST scope of the candidate.\n         *\n         * Candidates are included for scoring if the current zones rules fall within the\n         * span of the samples rules.\n         *\n         * Low score is best, the score is calculated by summing up the differences in DST\n         * rules and if the consts.MAX_SCORE is overreached the candidate is ruled out.\n         *\n         * Yah follow? :)\n         *\n         * @param rule_list\n         * @param preliminary_timezone\n         * @returns {*}\n         */\n        best_dst_match = function best_dst_match(rule_list, preliminary_timezone) {\n            var score_sample = function score_sample(sample) {\n                var score = 0;\n\n                for (var j = 0; j < rule_list.length; j++) {\n\n                    // Both sample and current time zone report DST during the year.\n                    if (!!sample.rules[j] && !!rule_list[j]) {\n\n                        // The current time zone's DST rules are inside the sample's. Include.\n                        if (rule_list[j].s >= sample.rules[j].s && rule_list[j].e <= sample.rules[j].e) {\n                            score = 0;\n                            score += Math.abs(rule_list[j].s - sample.rules[j].s);\n                            score += Math.abs(sample.rules[j].e - rule_list[j].e);\n\n                        // The current time zone's DST rules are outside the sample's. Discard.\n                        } else {\n                            score = 'N/A';\n                            break;\n                        }\n\n                        // The max score has been reached. Discard.\n                        if (score > consts.MAX_SCORE) {\n                            score = 'N/A';\n                            break;\n                        }\n                    }\n                }\n\n                score = windows7_adaptations(rule_list, preliminary_timezone, score, sample);\n\n                return score;\n            };\n            var scoreboard = {};\n            var dst_zones = jstz.olson.dst_rules.zones;\n            var dst_zones_length = dst_zones.length;\n            var ambiguities = consts.AMBIGUITIES[preliminary_timezone];\n\n            for (var i = 0; i < dst_zones_length; i++) {\n                var sample = dst_zones[i];\n                var score = score_sample(dst_zones[i]);\n\n                if (score !== 'N/A') {\n                    scoreboard[sample.name] = score;\n                }\n            }\n\n            for (var tz in scoreboard) {\n                if (scoreboard.hasOwnProperty(tz)) {\n                    for (var j = 0; j < ambiguities.length; j++) {\n                        if (ambiguities[j] === tz) {\n                            return tz;\n                        }\n                    }\n                }\n            }\n\n            return preliminary_timezone;\n        },\n\n        /**\n         * Takes the preliminary_timezone as detected by lookup_key().\n         *\n         * Builds up the current timezones DST rules for the years defined\n         * in the jstz.olson.dst_rules.years array.\n         *\n         * If there are no DST occurences for those years, immediately returns\n         * the preliminary timezone. Otherwise proceeds and tries to solve\n         * ambiguities.\n         *\n         * @param preliminary_timezone\n         * @returns {String} timezone_name\n         */\n        get_by_dst = function get_by_dst(preliminary_timezone) {\n            var get_rules = function get_rules() {\n                var rule_list = [];\n                for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) {\n                    var year_rules = dst_dates(jstz.olson.dst_rules.years[i]);\n                    rule_list.push(year_rules);\n                }\n                return rule_list;\n            };\n            var check_has_dst = function check_has_dst(rules) {\n                for (var i = 0; i < rules.length; i++) {\n                    if (rules[i] !== false) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n            var rules = get_rules();\n            var has_dst = check_has_dst(rules);\n\n            if (has_dst) {\n                return best_dst_match(rules, preliminary_timezone);\n            }\n\n            return preliminary_timezone;\n        },\n\n        /**\n         * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.\n         *\n         * Returns an object with one function \".name()\"\n         *\n         * @returns Object\n         */\n        determine = function determine() {\n            var preliminary_tz = get_from_internationalization_api();\n\n            if (!preliminary_tz) {\n                preliminary_tz = jstz.olson.timezones[lookup_key()];\n\n                if (typeof consts.AMBIGUITIES[preliminary_tz] !== 'undefined') {\n                    preliminary_tz = get_by_dst(preliminary_tz);\n                }\n            }\n\n            return {\n                name: function () {\n                    return preliminary_tz;\n                }\n            };\n        };\n\n    return {\n        determine: determine\n    };\n}());\n\n\njstz.olson = jstz.olson || {};\n\n/**\n * The keys in this dictionary are comma separated as such:\n *\n * First the offset compared to UTC time in minutes.\n *\n * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it\n * does.\n *\n * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,\n * only interesting for timezones with DST.\n *\n * The mapped arrays is used for constructing the jstz.TimeZone object from within\n * jstz.determine();\n */\njstz.olson.timezones = {\n    '-720,0': 'Etc/GMT+12',\n    '-660,0': 'Pacific/Pago_Pago',\n    '-660,1,s': 'Pacific/Apia', // Why? Because windows... cry!\n    '-600,1': 'America/Adak',\n    '-600,0': 'Pacific/Honolulu',\n    '-570,0': 'Pacific/Marquesas',\n    '-540,0': 'Pacific/Gambier',\n    '-540,1': 'America/Anchorage',\n    '-480,1': 'America/Los_Angeles',\n    '-480,0': 'Pacific/Pitcairn',\n    '-420,0': 'America/Phoenix',\n    '-420,1': 'America/Denver',\n    '-360,0': 'America/Guatemala',\n    '-360,1': 'America/Chicago',\n    '-360,1,s': 'Pacific/Easter',\n    '-300,0': 'America/Bogota',\n    '-300,1': 'America/New_York',\n    '-270,0': 'America/Caracas',\n    '-240,1': 'America/Halifax',\n    '-240,0': 'America/Santo_Domingo',\n    '-240,1,s': 'America/Asuncion',\n    '-210,1': 'America/St_Johns',\n    '-180,1': 'America/Godthab',\n    '-180,0': 'America/Argentina/Buenos_Aires',\n    '-180,1,s': 'America/Montevideo',\n    '-120,0': 'America/Noronha',\n    '-120,1': 'America/Noronha',\n    '-60,1': 'Atlantic/Azores',\n    '-60,0': 'Atlantic/Cape_Verde',\n    '0,0': 'UTC',\n    '0,1': 'Europe/London',\n    '60,1': 'Europe/Berlin',\n    '60,0': 'Africa/Lagos',\n    '60,1,s': 'Africa/Windhoek',\n    '120,1': 'Asia/Beirut',\n    '120,0': 'Africa/Johannesburg',\n    '180,0': 'Asia/Baghdad',\n    '180,1': 'Europe/Moscow',\n    '210,1': 'Asia/Tehran',\n    '240,0': 'Asia/Dubai',\n    '240,1': 'Asia/Baku',\n    '270,0': 'Asia/Kabul',\n    '300,1': 'Asia/Yekaterinburg',\n    '300,0': 'Asia/Karachi',\n    '330,0': 'Asia/Kolkata',\n    '345,0': 'Asia/Kathmandu',\n    '360,0': 'Asia/Dhaka',\n    '360,1': 'Asia/Omsk',\n    '390,0': 'Asia/Rangoon',\n    '420,1': 'Asia/Krasnoyarsk',\n    '420,0': 'Asia/Jakarta',\n    '480,0': 'Asia/Shanghai',\n    '480,1': 'Asia/Irkutsk',\n    '525,0': 'Australia/Eucla',\n    '525,1,s': 'Australia/Eucla',\n    '540,1': 'Asia/Yakutsk',\n    '540,0': 'Asia/Tokyo',\n    '570,0': 'Australia/Darwin',\n    '570,1,s': 'Australia/Adelaide',\n    '600,0': 'Australia/Brisbane',\n    '600,1': 'Asia/Vladivostok',\n    '600,1,s': 'Australia/Sydney',\n    '630,1,s': 'Australia/Lord_Howe',\n    '660,1': 'Asia/Kamchatka',\n    '660,0': 'Pacific/Noumea',\n    '690,0': 'Pacific/Norfolk',\n    '720,1,s': 'Pacific/Auckland',\n    '720,0': 'Pacific/Majuro',\n    '765,1,s': 'Pacific/Chatham',\n    '780,0': 'Pacific/Tongatapu',\n    '780,1,s': 'Pacific/Apia',\n    '840,0': 'Pacific/Kiritimati'\n};\n\n/* Build time: 2015-11-02 13:01:00Z Build by invoking python utilities/dst.py generate */\njstz.olson.dst_rules = {\n    \"years\": [\n        2008,\n        2009,\n        2010,\n        2011,\n        2012,\n        2013,\n        2014\n    ],\n    \"zones\": [\n        {\n            \"name\": \"Africa/Cairo\",\n            \"rules\": [\n                {\n                    \"e\": 1219957200000,\n                    \"s\": 1209074400000\n                },\n                {\n                    \"e\": 1250802000000,\n                    \"s\": 1240524000000\n                },\n                {\n                    \"e\": 1285880400000,\n                    \"s\": 1284069600000\n                },\n                false,\n                false,\n                false,\n                {\n                    \"e\": 1411678800000,\n                    \"s\": 1406844000000\n                }\n            ]\n        },\n        {\n            \"name\": \"Africa/Casablanca\",\n            \"rules\": [\n                {\n                    \"e\": 1220223600000,\n                    \"s\": 1212278400000\n                },\n                {\n                    \"e\": 1250809200000,\n                    \"s\": 1243814400000\n                },\n                {\n                    \"e\": 1281222000000,\n                    \"s\": 1272758400000\n                },\n                {\n                    \"e\": 1312066800000,\n                    \"s\": 1301788800000\n                },\n                {\n                    \"e\": 1348970400000,\n                    \"s\": 1345428000000\n                },\n                {\n                    \"e\": 1382839200000,\n                    \"s\": 1376100000000\n                },\n                {\n                    \"e\": 1414288800000,\n                    \"s\": 1406944800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Asuncion\",\n            \"rules\": [\n                {\n                    \"e\": 1205031600000,\n                    \"s\": 1224388800000\n                },\n                {\n                    \"e\": 1236481200000,\n                    \"s\": 1255838400000\n                },\n                {\n                    \"e\": 1270954800000,\n                    \"s\": 1286078400000\n                },\n                {\n                    \"e\": 1302404400000,\n                    \"s\": 1317528000000\n                },\n                {\n                    \"e\": 1333854000000,\n                    \"s\": 1349582400000\n                },\n                {\n                    \"e\": 1364094000000,\n                    \"s\": 1381032000000\n                },\n                {\n                    \"e\": 1395543600000,\n                    \"s\": 1412481600000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Campo_Grande\",\n            \"rules\": [\n                {\n                    \"e\": 1203217200000,\n                    \"s\": 1224388800000\n                },\n                {\n                    \"e\": 1234666800000,\n                    \"s\": 1255838400000\n                },\n                {\n                    \"e\": 1266721200000,\n                    \"s\": 1287288000000\n                },\n                {\n                    \"e\": 1298170800000,\n                    \"s\": 1318737600000\n                },\n                {\n                    \"e\": 1330225200000,\n                    \"s\": 1350792000000\n                },\n                {\n                    \"e\": 1361070000000,\n                    \"s\": 1382241600000\n                },\n                {\n                    \"e\": 1392519600000,\n                    \"s\": 1413691200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Goose_Bay\",\n            \"rules\": [\n                {\n                    \"e\": 1225594860000,\n                    \"s\": 1205035260000\n                },\n                {\n                    \"e\": 1257044460000,\n                    \"s\": 1236484860000\n                },\n                {\n                    \"e\": 1289098860000,\n                    \"s\": 1268539260000\n                },\n                {\n                    \"e\": 1320555600000,\n                    \"s\": 1299988860000\n                },\n                {\n                    \"e\": 1352005200000,\n                    \"s\": 1331445600000\n                },\n                {\n                    \"e\": 1383454800000,\n                    \"s\": 1362895200000\n                },\n                {\n                    \"e\": 1414904400000,\n                    \"s\": 1394344800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Havana\",\n            \"rules\": [\n                {\n                    \"e\": 1224997200000,\n                    \"s\": 1205643600000\n                },\n                {\n                    \"e\": 1256446800000,\n                    \"s\": 1236488400000\n                },\n                {\n                    \"e\": 1288501200000,\n                    \"s\": 1268542800000\n                },\n                {\n                    \"e\": 1321160400000,\n                    \"s\": 1300597200000\n                },\n                {\n                    \"e\": 1352005200000,\n                    \"s\": 1333256400000\n                },\n                {\n                    \"e\": 1383454800000,\n                    \"s\": 1362891600000\n                },\n                {\n                    \"e\": 1414904400000,\n                    \"s\": 1394341200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Mazatlan\",\n            \"rules\": [\n                {\n                    \"e\": 1225008000000,\n                    \"s\": 1207472400000\n                },\n                {\n                    \"e\": 1256457600000,\n                    \"s\": 1238922000000\n                },\n                {\n                    \"e\": 1288512000000,\n                    \"s\": 1270371600000\n                },\n                {\n                    \"e\": 1319961600000,\n                    \"s\": 1301821200000\n                },\n                {\n                    \"e\": 1351411200000,\n                    \"s\": 1333270800000\n                },\n                {\n                    \"e\": 1382860800000,\n                    \"s\": 1365325200000\n                },\n                {\n                    \"e\": 1414310400000,\n                    \"s\": 1396774800000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Mexico_City\",\n            \"rules\": [\n                {\n                    \"e\": 1225004400000,\n                    \"s\": 1207468800000\n                },\n                {\n                    \"e\": 1256454000000,\n                    \"s\": 1238918400000\n                },\n                {\n                    \"e\": 1288508400000,\n                    \"s\": 1270368000000\n                },\n                {\n                    \"e\": 1319958000000,\n                    \"s\": 1301817600000\n                },\n                {\n                    \"e\": 1351407600000,\n                    \"s\": 1333267200000\n                },\n                {\n                    \"e\": 1382857200000,\n                    \"s\": 1365321600000\n                },\n                {\n                    \"e\": 1414306800000,\n                    \"s\": 1396771200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Miquelon\",\n            \"rules\": [\n                {\n                    \"e\": 1225598400000,\n                    \"s\": 1205038800000\n                },\n                {\n                    \"e\": 1257048000000,\n                    \"s\": 1236488400000\n                },\n                {\n                    \"e\": 1289102400000,\n                    \"s\": 1268542800000\n                },\n                {\n                    \"e\": 1320552000000,\n                    \"s\": 1299992400000\n                },\n                {\n                    \"e\": 1352001600000,\n                    \"s\": 1331442000000\n                },\n                {\n                    \"e\": 1383451200000,\n                    \"s\": 1362891600000\n                },\n                {\n                    \"e\": 1414900800000,\n                    \"s\": 1394341200000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Santa_Isabel\",\n            \"rules\": [\n                {\n                    \"e\": 1225011600000,\n                    \"s\": 1207476000000\n                },\n                {\n                    \"e\": 1256461200000,\n                    \"s\": 1238925600000\n                },\n                {\n                    \"e\": 1288515600000,\n                    \"s\": 1270375200000\n                },\n                {\n                    \"e\": 1319965200000,\n                    \"s\": 1301824800000\n                },\n                {\n                    \"e\": 1351414800000,\n                    \"s\": 1333274400000\n                },\n                {\n                    \"e\": 1382864400000,\n                    \"s\": 1365328800000\n                },\n                {\n                    \"e\": 1414314000000,\n                    \"s\": 1396778400000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Santiago\",\n            \"rules\": [\n                {\n                    \"e\": 1206846000000,\n                    \"s\": 1223784000000\n                },\n                {\n                    \"e\": 1237086000000,\n                    \"s\": 1255233600000\n                },\n                {\n                    \"e\": 1270350000000,\n                    \"s\": 1286683200000\n                },\n                {\n                    \"e\": 1304823600000,\n                    \"s\": 1313899200000\n                },\n                {\n                    \"e\": 1335668400000,\n                    \"s\": 1346558400000\n                },\n                {\n                    \"e\": 1367118000000,\n                    \"s\": 1378612800000\n                },\n                {\n                    \"e\": 1398567600000,\n                    \"s\": 1410062400000\n                }\n            ]\n        },\n        {\n            \"name\": \"America/Sao_Paulo\",\n            \"rules\": [\n                {\n                    \"e\": 1203213600000,\n                    \"s\": 1224385200000\n                },\n                {\n                    \"e\": 1234663200000,\n                    \"s\": 1255834800000\n                },\n                {\n                    \"e\": 1266717600000,\n                    \"s\": 1287284400000\n                },\n                {\n                    \"e\": 1298167200000,\n                    \"s\": 1318734000000\n                },\n                {\n                    \"e\": 1330221600000,\n                    \"s\": 1350788400000\n                },\n                {\n                    \"e\": 1361066400000,\n                    \"s\": 1382238000000\n                },\n                {\n                    \"e\": 1392516000000,\n                    \"s\": 1413687600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Amman\",\n            \"rules\": [\n                {\n                    \"e\": 1225404000000,\n                    \"s\": 1206655200000\n                },\n                {\n                    \"e\": 1256853600000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1288303200000,\n                    \"s\": 1269554400000\n                },\n                {\n                    \"e\": 1319752800000,\n                    \"s\": 1301608800000\n                },\n                false,\n                false,\n                {\n                    \"e\": 1414706400000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Damascus\",\n            \"rules\": [\n                {\n                    \"e\": 1225486800000,\n                    \"s\": 1207260000000\n                },\n                {\n                    \"e\": 1256850000000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1288299600000,\n                    \"s\": 1270159200000\n                },\n                {\n                    \"e\": 1319749200000,\n                    \"s\": 1301608800000\n                },\n                {\n                    \"e\": 1351198800000,\n                    \"s\": 1333058400000\n                },\n                {\n                    \"e\": 1382648400000,\n                    \"s\": 1364508000000\n                },\n                {\n                    \"e\": 1414702800000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Dubai\",\n            \"rules\": [\n                false,\n                false,\n                false,\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Gaza\",\n            \"rules\": [\n                {\n                    \"e\": 1219957200000,\n                    \"s\": 1206655200000\n                },\n                {\n                    \"e\": 1252015200000,\n                    \"s\": 1238104800000\n                },\n                {\n                    \"e\": 1281474000000,\n                    \"s\": 1269640860000\n                },\n                {\n                    \"e\": 1312146000000,\n                    \"s\": 1301608860000\n                },\n                {\n                    \"e\": 1348178400000,\n                    \"s\": 1333058400000\n                },\n                {\n                    \"e\": 1380229200000,\n                    \"s\": 1364508000000\n                },\n                {\n                    \"e\": 1414098000000,\n                    \"s\": 1395957600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Irkutsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224957600000,\n                    \"s\": 1206813600000\n                },\n                {\n                    \"e\": 1256407200000,\n                    \"s\": 1238263200000\n                },\n                {\n                    \"e\": 1288461600000,\n                    \"s\": 1269712800000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Jerusalem\",\n            \"rules\": [\n                {\n                    \"e\": 1223161200000,\n                    \"s\": 1206662400000\n                },\n                {\n                    \"e\": 1254006000000,\n                    \"s\": 1238112000000\n                },\n                {\n                    \"e\": 1284246000000,\n                    \"s\": 1269561600000\n                },\n                {\n                    \"e\": 1317510000000,\n                    \"s\": 1301616000000\n                },\n                {\n                    \"e\": 1348354800000,\n                    \"s\": 1333065600000\n                },\n                {\n                    \"e\": 1382828400000,\n                    \"s\": 1364515200000\n                },\n                {\n                    \"e\": 1414278000000,\n                    \"s\": 1395964800000\n                }\n            ]\n        },\n        {\n            \"name\": \"Asia/Kamchatka\",\n            \"rules\": [\n                {\n                    \"e\": 1224943200000,\n                    \"s\": 1206799200000\n                },\n                {\n                    \"e\": 1256392800000,\n                    \"s\": 1238248800000\n                },\n                {\n                    \"e\": 1288450800000,\n                    \"s\": 1269698400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Krasnoyarsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224961200000,\n                    \"s\": 1206817200000\n                },\n                {\n                    \"e\": 1256410800000,\n                    \"s\": 1238266800000\n                },\n                {\n                    \"e\": 1288465200000,\n                    \"s\": 1269716400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Omsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224964800000,\n                    \"s\": 1206820800000\n                },\n                {\n                    \"e\": 1256414400000,\n                    \"s\": 1238270400000\n                },\n                {\n                    \"e\": 1288468800000,\n                    \"s\": 1269720000000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Vladivostok\",\n            \"rules\": [\n                {\n                    \"e\": 1224950400000,\n                    \"s\": 1206806400000\n                },\n                {\n                    \"e\": 1256400000000,\n                    \"s\": 1238256000000\n                },\n                {\n                    \"e\": 1288454400000,\n                    \"s\": 1269705600000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yakutsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224954000000,\n                    \"s\": 1206810000000\n                },\n                {\n                    \"e\": 1256403600000,\n                    \"s\": 1238259600000\n                },\n                {\n                    \"e\": 1288458000000,\n                    \"s\": 1269709200000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yekaterinburg\",\n            \"rules\": [\n                {\n                    \"e\": 1224968400000,\n                    \"s\": 1206824400000\n                },\n                {\n                    \"e\": 1256418000000,\n                    \"s\": 1238274000000\n                },\n                {\n                    \"e\": 1288472400000,\n                    \"s\": 1269723600000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Asia/Yerevan\",\n            \"rules\": [\n                {\n                    \"e\": 1224972000000,\n                    \"s\": 1206828000000\n                },\n                {\n                    \"e\": 1256421600000,\n                    \"s\": 1238277600000\n                },\n                {\n                    \"e\": 1288476000000,\n                    \"s\": 1269727200000\n                },\n                {\n                    \"e\": 1319925600000,\n                    \"s\": 1301176800000\n                },\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Australia/Lord_Howe\",\n            \"rules\": [\n                {\n                    \"e\": 1207407600000,\n                    \"s\": 1223134200000\n                },\n                {\n                    \"e\": 1238857200000,\n                    \"s\": 1254583800000\n                },\n                {\n                    \"e\": 1270306800000,\n                    \"s\": 1286033400000\n                },\n                {\n                    \"e\": 1301756400000,\n                    \"s\": 1317483000000\n                },\n                {\n                    \"e\": 1333206000000,\n                    \"s\": 1349537400000\n                },\n                {\n                    \"e\": 1365260400000,\n                    \"s\": 1380987000000\n                },\n                {\n                    \"e\": 1396710000000,\n                    \"s\": 1412436600000\n                }\n            ]\n        },\n        {\n            \"name\": \"Australia/Perth\",\n            \"rules\": [\n                {\n                    \"e\": 1206813600000,\n                    \"s\": 1224957600000\n                },\n                false,\n                false,\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Europe/Helsinki\",\n            \"rules\": [\n                {\n                    \"e\": 1224982800000,\n                    \"s\": 1206838800000\n                },\n                {\n                    \"e\": 1256432400000,\n                    \"s\": 1238288400000\n                },\n                {\n                    \"e\": 1288486800000,\n                    \"s\": 1269738000000\n                },\n                {\n                    \"e\": 1319936400000,\n                    \"s\": 1301187600000\n                },\n                {\n                    \"e\": 1351386000000,\n                    \"s\": 1332637200000\n                },\n                {\n                    \"e\": 1382835600000,\n                    \"s\": 1364691600000\n                },\n                {\n                    \"e\": 1414285200000,\n                    \"s\": 1396141200000\n                }\n            ]\n        },\n        {\n            \"name\": \"Europe/Minsk\",\n            \"rules\": [\n                {\n                    \"e\": 1224979200000,\n                    \"s\": 1206835200000\n                },\n                {\n                    \"e\": 1256428800000,\n                    \"s\": 1238284800000\n                },\n                {\n                    \"e\": 1288483200000,\n                    \"s\": 1269734400000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Europe/Moscow\",\n            \"rules\": [\n                {\n                    \"e\": 1224975600000,\n                    \"s\": 1206831600000\n                },\n                {\n                    \"e\": 1256425200000,\n                    \"s\": 1238281200000\n                },\n                {\n                    \"e\": 1288479600000,\n                    \"s\": 1269730800000\n                },\n                false,\n                false,\n                false,\n                false\n            ]\n        },\n        {\n            \"name\": \"Pacific/Apia\",\n            \"rules\": [\n                false,\n                false,\n                false,\n                {\n                    \"e\": 1301752800000,\n                    \"s\": 1316872800000\n                },\n                {\n                    \"e\": 1333202400000,\n                    \"s\": 1348927200000\n                },\n                {\n                    \"e\": 1365256800000,\n                    \"s\": 1380376800000\n                },\n                {\n                    \"e\": 1396706400000,\n                    \"s\": 1411826400000\n                }\n            ]\n        },\n        {\n            \"name\": \"Pacific/Fiji\",\n            \"rules\": [\n                false,\n                false,\n                {\n                    \"e\": 1269698400000,\n                    \"s\": 1287842400000\n                },\n                {\n                    \"e\": 1327154400000,\n                    \"s\": 1319292000000\n                },\n                {\n                    \"e\": 1358604000000,\n                    \"s\": 1350741600000\n                },\n                {\n                    \"e\": 1390050000000,\n                    \"s\": 1382796000000\n                },\n                {\n                    \"e\": 1421503200000,\n                    \"s\": 1414850400000\n                }\n            ]\n        },\n        {\n            \"name\": \"Europe/London\",\n            \"rules\": [\n                {\n                    \"e\": 1224982800000,\n                    \"s\": 1206838800000\n                },\n                {\n                    \"e\": 1256432400000,\n                    \"s\": 1238288400000\n                },\n                {\n                    \"e\": 1288486800000,\n                    \"s\": 1269738000000\n                },\n                {\n                    \"e\": 1319936400000,\n                    \"s\": 1301187600000\n                },\n                {\n                    \"e\": 1351386000000,\n                    \"s\": 1332637200000\n                },\n                {\n                    \"e\": 1382835600000,\n                    \"s\": 1364691600000\n                },\n                {\n                    \"e\": 1414285200000,\n                    \"s\": 1396141200000\n                }\n            ]\n        }\n    ]\n};\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = jstz;\n} else if ((typeof define !== 'undefined' && define !== null) && (define.amd != null)) {\n    define([], function() {\n        return jstz;\n    });\n} else {\n    if (typeof root === 'undefined') {\n        window.jstz = jstz;\n    } else {\n        root.jstz = jstz;\n    }\n}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jstimezonedetect/dist/jstz.js\n ** module id = 124\n ** module chunks = 0 1\n **/","module.exports = __webpack_amd_options__;\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-options.js\n ** module id = 125\n ** module chunks = 0 1\n **/","import { QueryController } from '../controllers/QueryController';\nimport { Logger } from './Logger';\nimport { ISentryLog } from '../rest/SentryLog';\nimport { DeviceUtils } from '../utils/DeviceUtils';\nimport _ = require('underscore');\n\nexport class SentryLogger {\n  private logger: Logger;\n\n  constructor(private queryController: QueryController, private windoh: Window = window) {\n    this.logger = new Logger(this);\n    this.bindErrorHandler();\n  }\n\n  private bindErrorHandler() {\n    // take care of not overriding any existing onerror handler that might be already present in the page.\n    let oldHandler = this.windoh.onerror;\n    if (_.isFunction(oldHandler)) {\n      this.windoh.onerror = (...args: any[]) => {\n        oldHandler.apply(oldHandler, args);\n        this.handleError.apply(this, args);\n      };\n    } else {\n      this.windoh.onerror = this.handleError.bind(this);\n    }\n  }\n\n  private handleError(message: string, filename?: string, lineno?: number, colno?: number, error?: Error) {\n    // try not to log irrelevant errors ...\n    if (!filename.toLowerCase().match(/coveo/) || this.windoh.location.host.toLowerCase().match(/localhost/)) {\n      return;\n    }\n\n    let errorInfo = {\n      message: message,\n      filename: filename,\n      line: lineno,\n      column: colno,\n      error: error.toString(),\n      errorStack: error['stack'], // Not all browser will return this,\n      device: DeviceUtils.getDeviceName()\n    };\n\n    let sentryLog: ISentryLog = {\n      level: 'DEBUG',\n      title: this.windoh.location.href,\n      message: JSON.stringify(errorInfo)\n    };\n\n    this.queryController.getEndpoint().logError(sentryLog);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/misc/SentryLogger.ts\n **/","/**\n * The IAnalyticsActionCause interface describes the cause of an event for the analytics service.\n *\n * See the {@link Analytics} component\n */\nexport interface IAnalyticsActionCause {\n\n  /**\n   * Specifies the name of the event. While you can actually set this property to any arbitrary string value, its value\n   * should uniquely identify the precise action that triggers the event. Thus, each individual event should have its\n   * own unique `name` value.\n   *\n   * Example: `searchBoxSubmit`, `resultSort`, etc.\n   */\n  name: string;\n\n  /**\n   * Specifies the type of the event. While you can actually set this property to any arbitrary string value, it should\n   * describe the general category of the event. Thus, more than one event can have the same `type` value, which makes\n   * it possible to group events with identical types when doing reporting.\n   *\n   * Example: All search box related events could have `searchbox` as their `type` value.\n   */\n  type: string;\n  metaMap?: { [name: string]: number };\n}\n\nexport interface IAnalyticsNoMeta {\n}\n\nexport interface IAnalyticsInterfaceChange {\n  interfaceChangeTo: string;\n}\n\nexport interface IAnalyticsContextAddMeta {\n  contextName: string;\n}\n\nexport interface IAnalyticsContextRemoveMeta {\n  contextName: string;\n}\n\nexport interface IAnalyticsResultsSortMeta {\n  resultsSortBy: string;\n}\n\n/**\n * The IAnalyticsDocumentViewMeta describes the expected metadata when logging a click event / document view.\n *\n * See also the {@link Analytics} component, and more specifically the {@link Analytics.logClickEvent} method.\n */\nexport interface IAnalyticsDocumentViewMeta {\n\n  /**\n   * The URL of the clicked document.\n   */\n  documentURL?: string;\n\n  /**\n   * The title of the clicked document.\n   */\n  documentTitle?: string;\n\n  /**\n   * The author of the clicked document.\n   */\n  author: string;\n}\n\nexport interface IAnalyticsOmniboxFacetMeta {\n  facetId: string;\n  facetTitle: string;\n  facetValue?: string;\n  suggestions: string;\n  suggestionRanking: number;\n  query: string;\n}\n\nexport interface IAnalyticsFacetMeta {\n  facetId: string;\n  facetValue?: string;\n  facetTitle: string;\n}\n\nexport interface IAnalyticsQueryErrorMeta {\n  query: string;\n  aq: string;\n  cq: string;\n  dq: string;\n  errorType: string;\n  errorMessage: string;\n}\n\nexport interface IAnalyticsTopSuggestionMeta {\n  suggestionRanking: number;\n  partialQueries: string;\n  suggestions: string;\n  partialQuery: string;\n}\n\nexport interface IAnalyticsOmniboxSuggestionMeta {\n  suggestionRanking: number;\n  partialQueries: string;\n  suggestions: string;\n  partialQuery: string;\n}\n\nexport interface IAnalyticsFacetSliderChangeMeta {\n  facetId: string;\n  facetRangeStart: any;\n  facetRangeEnd: any;\n}\n\nexport interface IAnalyticsFacetGraphSelectedMeta extends IAnalyticsFacetSliderChangeMeta {\n}\n\nexport interface IAnalyticsFacetOperatorMeta extends IAnalyticsFacetMeta {\n  facetOperatorBefore: string;\n  facetOperatorAfter: string;\n}\n\nexport interface IAnalyticsPreferencesChangeMeta {\n  preferenceName: string;\n  preferenceType: string;\n}\n\nexport interface IAnalyticsCustomFiltersChangeMeta {\n  customFilterName: string;\n  customFilterType: string;\n  customFilterExpression: string;\n}\n\nexport interface IAnalyticsCaseAttachMeta {\n  resultUriHash: string;\n  articleID: string;\n  caseID: string;\n  author: string;\n}\n\nexport interface IAnalyticsCaseContextAddMeta {\n  caseID: string;\n}\n\nexport interface IAnalyticsCaseContextRemoveMeta {\n  caseID: string;\n}\n\nexport interface IAnalyticsCaseDetachMeta extends IAnalyticsCaseAttachMeta {\n}\n\nexport interface IAnalyticsCaseCreationInputChangeMeta {\n  inputTitle: string;\n  input: string;\n  value: string;\n}\n\nexport interface IAnalyticsCaseCreationDeflectionMeta {\n  hasClicks: boolean;\n  values: { [field: string]: string };\n}\n\nexport interface IAnalyticsPagerMeta {\n  pagerNumber: number;\n}\n\nexport interface IAnalyticsResultsPerPageMeta {\n  currentResultsPerPage: number;\n}\n\nexport interface IAnalyticsTriggerNotify {\n  notification: string;\n}\n\nexport interface IAnalyticsTriggerRedirect {\n  redirectedTo: string;\n}\n\nexport interface IAnalyticsTriggerQuery {\n  query: string;\n}\n\nexport interface IAnalyticsTriggerExecute {\n  executed: string;\n}\n\nexport interface IAnalyticsSearchAlertsMeta {\n  subscription: string;\n}\n\nexport interface IAnalyticsSearchAlertsUpdateMeta extends IAnalyticsSearchAlertsMeta {\n  frequency: string;\n}\n\nexport interface IAnalyticsSearchAlertsFollowDocumentMeta extends IAnalyticsDocumentViewMeta {\n  documentSource: string;\n  documentLanguage: string;\n  contentIDKey: string;\n  contentIDValue: string;\n}\n\nexport interface IAnalyticsResultsLayoutChange {\n  resultsLayoutChangeTo: string;\n}\n\nexport var analyticsActionCauseList = {\n  interfaceLoad: <IAnalyticsActionCause>{\n    name: 'interfaceLoad',\n    type: 'interface'\n  },\n  interfaceChange: <IAnalyticsActionCause>{\n    name: 'interfaceChange',\n    type: 'interface',\n    metaMap: { interfaceChangeTo: 1 }\n  },\n  contextRemove: <IAnalyticsActionCause>{\n    name: 'contextRemove',\n    type: 'misc',\n    metaMap: { contextName: 1 }\n  },\n  didyoumeanAutomatic: <IAnalyticsActionCause>{\n    name: 'didyoumeanAutomatic',\n    type: 'misc'\n  },\n  didyoumeanClick: <IAnalyticsActionCause>{\n    name: 'didyoumeanClick',\n    type: 'misc'\n  },\n  resultsSort: <IAnalyticsActionCause>{\n    name: 'resultsSort',\n    type: 'misc',\n    metaMap: { resultsSortBy: 1 }\n  },\n  searchboxSubmit: <IAnalyticsActionCause>{\n    name: 'searchboxSubmit',\n    type: 'search box'\n  },\n  searchboxClear: <IAnalyticsActionCause>{\n    name: 'searchboxClear',\n    type: 'search box'\n  },\n  searchboxAsYouType: <IAnalyticsActionCause>{\n    name: 'searchboxAsYouType',\n    type: 'search box'\n  },\n  breadcrumbFacet: <IAnalyticsActionCause>{\n    name: 'breadcrumbFacet',\n    type: 'breadcrumb',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  breadcrumbResetAll: <IAnalyticsActionCause>{\n    name: 'breadcrumbResetAll',\n    type: 'breadcrumb',\n  },\n  documentTag: <IAnalyticsActionCause>{\n    name: 'documentTag',\n    type: 'document',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  documentField: <IAnalyticsActionCause>{\n    name: 'documentField',\n    type: 'document',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  documentQuickview: <IAnalyticsActionCause>{\n    name: 'documentQuickview',\n    type: 'document',\n    metaMap: { documentTitle: 1, documentURL: 2 }\n  },\n  documentOpen: <IAnalyticsActionCause>{\n    name: 'documentOpen',\n    type: 'document',\n    metaMap: { documentTitle: 1, documentURL: 2 }\n  },\n  omniboxFacetSelect: <IAnalyticsActionCause>{\n    name: 'omniboxFacetSelect',\n    type: 'omnibox',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  omniboxFacetExclude: <IAnalyticsActionCause>{\n    name: 'omniboxFacetExclude',\n    type: 'omnibox',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  omniboxFacetDeselect: <IAnalyticsActionCause>{\n    name: 'omniboxFacetDeselect',\n    type: 'omnibox',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  omniboxFacetUnexclude: <IAnalyticsActionCause>{\n    name: 'omniboxFacetUnexclude',\n    type: 'omnibox',\n    metaMap: { faceId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  omniboxAnalytics: <IAnalyticsActionCause>{\n    name: 'omniboxAnalytics',\n    type: 'omnibox',\n    metaMap: {\n      partialQuery: 1,\n      suggestionRanking: 2,\n      partialQueries: 3,\n      suggestions: 4\n    }\n  },\n  omniboxFromLink: <IAnalyticsActionCause>{\n    name: 'omniboxFromLink',\n    type: 'omnibox',\n    metaMap: {\n      partialQuery: 1,\n      suggestionRanking: 2,\n      partialQueries: 3,\n      suggestions: 4\n    }\n  },\n  omniboxField: <IAnalyticsActionCause>{\n    name: 'omniboxField',\n    type: 'omnibox'\n  },\n  facetClearAll: <IAnalyticsActionCause>{\n    name: 'facetClearAll',\n    type: 'facet',\n    metaMap: { facetId: 1 }\n  },\n  facetSearch: <IAnalyticsActionCause>{\n    name: 'facetSearch',\n    type: 'facet',\n    metaMap: { facetId: 1 }\n  },\n  facetToggle: <IAnalyticsActionCause>{\n    name: 'facetToggle',\n    type: 'facet',\n    metaMap: { facetId: 1, facetOperatorBefore: 2, facetOperatorAfter: 3 }\n  },\n  facetRangeSlider: <IAnalyticsActionCause>{\n    name: 'facetRangeSlider',\n    type: 'facet',\n    metaMap: { facetId: 1, facetRangeStart: 2, facetRangeEnd: 3 }\n  },\n  facetRangeGraph: <IAnalyticsActionCause>{\n    name: 'facetRangeGraph',\n    type: 'facet',\n    metaMap: { facetId: 1, facetRangeStart: 2, facetRangeEnd: 3 }\n  },\n  facetSelect: <IAnalyticsActionCause>{\n    name: 'facetSelect',\n    type: 'facet',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  facetSelectAll: <IAnalyticsActionCause>{\n    name: 'facetSelectAll',\n    type: 'facet',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  facetDeselect: <IAnalyticsActionCause>{\n    name: 'facetDeselect',\n    type: 'facet',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  facetExclude: <IAnalyticsActionCause>{\n    name: 'facetExclude',\n    type: 'facet',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  facetUnexclude: <IAnalyticsActionCause>{\n    name: 'facetUnexclude',\n    type: 'facet',\n    metaMap: { facetId: 1, facetValue: 2, facetTitle: 3 }\n  },\n  errorBack: <IAnalyticsActionCause>{\n    name: 'errorBack',\n    type: 'errors'\n  },\n  errorClearQuery: <IAnalyticsActionCause>{\n    name: 'errorClearQuery',\n    type: 'errors'\n  },\n  errorRetry: <IAnalyticsActionCause>{\n    name: 'errorRetry',\n    type: 'errors'\n  },\n  noResultsBack: <IAnalyticsActionCause>{\n    name: 'noResultsBack',\n    type: 'noResults'\n  },\n  expandToFullUI: <IAnalyticsActionCause>{\n    name: 'expandToFullUI',\n    type: 'interface'\n  },\n  caseCreationInputChange: <IAnalyticsActionCause>{\n    name: 'inputChange',\n    type: 'caseCreation'\n  },\n  caseCreationSubmitButton: <IAnalyticsActionCause>{\n    name: 'submitButton',\n    type: 'caseCreation'\n  },\n  caseCreationCancelButton: <IAnalyticsActionCause>{\n    name: 'cancelButton',\n    type: 'caseCreation'\n  },\n  caseCreationUnloadPage: <IAnalyticsActionCause>{\n    name: 'unloadPage',\n    type: 'caseCreation'\n  },\n  casecontextAdd: <IAnalyticsActionCause>{\n    name: 'casecontextAdd',\n    type: 'casecontext',\n    metaMap: { caseID: 5 }\n  },\n  casecontextRemove: <IAnalyticsActionCause>{\n    name: 'casecontextRemove',\n    type: 'casecontext',\n    metaMap: { caseID: 5 }\n  },\n  preferencesChange: <IAnalyticsActionCause>{\n    name: 'preferencesChange',\n    type: 'preferences',\n    metaMap: { preferenceName: 1, preferenceType: 2 }\n  },\n  getUserHistory: <IAnalyticsActionCause>{\n    name: 'getUserHistory',\n    type: 'userHistory'\n  },\n  userActionDocumentClick: <IAnalyticsActionCause>{\n    name: 'userActionDocumentClick',\n    type: 'userHistory'\n  },\n  caseAttach: <IAnalyticsActionCause>{\n    name: 'caseAttach',\n    type: 'case',\n    metaMap: { documentTitle: 1, resultUriHash: 3, articleID: 4, caseID: 5 }\n  },\n  caseDetach: <IAnalyticsActionCause>{\n    name: 'caseDetach',\n    type: 'case',\n    metaMap: { documentTitle: 1, resultUriHash: 3, articleID: 4, caseID: 5 }\n  },\n  customfiltersChange: <IAnalyticsActionCause>{\n    name: 'customfiltersChange',\n    type: 'customfilters',\n    metaMap: { customFilterName: 1, customFilterType: 2, customFilterExpression: 3 }\n  },\n  pagerNumber: <IAnalyticsActionCause>{\n    name: 'pagerNumber',\n    type: 'getMoreResults',\n    metaMap: { 'pagerNumber': 1 }\n  },\n  pagerNext: <IAnalyticsActionCause>{\n    name: 'pagerNext',\n    type: 'getMoreResults',\n    metaMap: { 'pagerNumber': 1 }\n  },\n  pagerPrevious: <IAnalyticsActionCause>{\n    name: 'pagerPrevious',\n    type: 'getMoreResults',\n    metaMap: { 'pagerNumber': 1 }\n  },\n  pagerScrolling: <IAnalyticsActionCause>{\n    name: 'pagerScrolling',\n    type: 'getMoreResults'\n  },\n  pagerResize: <IAnalyticsActionCause>{\n    name: 'pagerResize',\n    type: 'getMoreResults'\n  },\n  searchFromLink: <IAnalyticsActionCause>{\n    name: 'searchFromLink',\n    type: 'interface'\n  },\n  triggerNotify: <IAnalyticsActionCause>{\n    name: 'notify',\n    type: 'queryPipelineTriggers'\n  },\n  triggerExecute: <IAnalyticsActionCause>{\n    name: 'execute',\n    type: 'queryPipelineTriggers'\n  },\n  triggerQuery: <IAnalyticsActionCause>{\n    name: 'query',\n    type: 'queryPipelineTriggers'\n  },\n  triggerRedirect: <IAnalyticsActionCause>{\n    name: 'redirect',\n    type: 'queryPipelineTriggers'\n  },\n  queryError: <IAnalyticsActionCause>{\n    name: 'query',\n    type: 'errors',\n    metaMap: { 'query': 1, 'aq': 2, 'cq': 3, 'dq': 4, 'errorType': 5, 'errorMessage': 6 }\n  },\n  exportToExcel: <IAnalyticsActionCause>{\n    name: 'exportToExcel',\n    type: 'misc'\n  },\n  recommendation: <IAnalyticsActionCause>{\n    name: 'recommendation',\n    type: 'recommendation'\n  },\n  recommendationInterfaceLoad: <IAnalyticsActionCause>{\n    name: 'recommendationInterfaceLoad',\n    type: 'recommendation'\n  },\n  recommendationOpen: <IAnalyticsActionCause>{\n    name: 'recommendationOpen',\n    type: 'recommendation'\n  },\n  advancedSearch: <IAnalyticsActionCause>{\n    name: 'advancedSearch',\n    type: 'advancedSearch'\n  },\n  searchAlertsFollowDocument: <IAnalyticsActionCause>{\n    name: 'followDocument',\n    type: 'searchAlerts'\n  },\n  searchAlertsFollowQuery: <IAnalyticsActionCause>{\n    name: 'followQuery',\n    type: 'searchAlerts'\n  },\n  searchAlertsUpdateSubscription: <IAnalyticsActionCause>{\n    name: 'updateSubscription',\n    type: 'searchAlerts'\n  },\n  searchAlertsDeleteSubscription: <IAnalyticsActionCause>{\n    name: 'deleteSubscription',\n    type: 'searchAlerts'\n  },\n  searchAlertsUnfollowDocument: <IAnalyticsActionCause>{\n    name: 'unfollowDocument',\n    type: 'searchAlerts'\n  },\n  searchAlertsUnfollowQuery: <IAnalyticsActionCause>{\n    name: 'unfollowQuery',\n    type: 'searchAlerts'\n  },\n  resultsLayoutChange: <IAnalyticsActionCause>{\n    name: 'changeResultsLayout',\n    type: 'resultsLayout'\n  }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/AnalyticsActionListMeta.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IAnalyticsClient } from './AnalyticsClient';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { AnalyticsEndpoint } from '../../rest/AnalyticsEndpoint';\nimport { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IBuildingQueryEventArgs, IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { $$ } from '../../utils/Dom';\nimport { Model, IAttributeChangedEventArg } from '../../models/Model';\nimport { IAnalyticsActionCause, IAnalyticsDocumentViewMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { NoopAnalyticsClient } from '../Analytics/NoopAnalyticsClient';\nimport { LiveAnalyticsClient } from './LiveAnalyticsClient';\nimport { MultiAnalyticsClient } from './MultiAnalyticsClient';\nimport { IAnalyticsQueryErrorMeta, analyticsActionCauseList } from './AnalyticsActionListMeta';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { Recommendation } from '../Recommendation/Recommendation';\nimport { RecommendationAnalyticsClient } from './RecommendationAnalyticsClient';\nimport _ = require('underscore');\n\nexport interface IAnalyticsOptions {\n  user?: string;\n  userDisplayName?: string;\n  token?: string;\n  endpoint?: string;\n  anonymous?: boolean;\n  searchHub?: string;\n  splitTestRunName?: string;\n  splitTestRunVersion?: string;\n  sendToCloud?: boolean;\n  organization?: string;\n}\n\n/**\n * The Analytics component logs user actions performed in the search interface and sends them to a REST web service\n * exposed through the Coveo Cloud Platform.\n *\n * You can use analytics data to evaluate how users are interacting with your search interface, improve relevance and\n * produce analytics dashboards within the Coveo Cloud Platform.\n *\n * See [Step 7 - Usage Analytics](https://developers.coveo.com/x/EYskAg) of the Getting Started with the JavaScript\n * Search Framework V1 tutorial for an introduction to usage analytics.\n *\n * See also [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ) for more advanced use cases.\n */\nexport class Analytics extends Component {\n  static ID = 'Analytics';\n  // NOTE: The default values for some of those options (`organization`, `endpoint`, `searchHub`) can be\n  // overridden by generated code when using hosted search pages.\n\n  /**\n   * Options for the component\n   * @componentOptions\n   */\n  static options: IAnalyticsOptions = {\n\n    /**\n     * Specifies the name of the user for the usage analytics logs.\n     *\n     * Default value is `undefined`\n     */\n    user: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the user display name for the usage analytics logs.\n     *\n     * Default value is `undefined`\n     */\n    userDisplayName: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the token to use to access the usage analytics endpoint.\n     *\n     * Default value is `undefined`, and the component uses the search token.\n     */\n    token: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the URL of the usage analytics logger to cover exceptional cases in which this location could differ\n     * from the default Coveo Cloud Usage Analytics endpoint (https://usageanalytics.coveo.com).\n     *\n     * Default value is `https://usageanalytics.coveo.com`.\n     */\n    endpoint: ComponentOptions.buildStringOption({ defaultValue: AnalyticsEndpoint.DEFAULT_ANALYTICS_URI }),\n\n    /**\n     * Specifies whether to convert search user identities to unique hash when logging analytics data, so that\n     * analytics reviewers and managers will not be able to clearly identify which user is performing which query.\n     *\n     * When this option is `true`, the Coveo Usage Analytics Platform can still properly differentiate sessions\n     * made by anonymous users from sessions made by users authenticated in some way on the site containing the search\n     * page.\n     *\n     * Default value is `false`.\n     */\n    anonymous: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Sets the Search Hub dimension on the search events.\n     *\n     * The Search Hub dimension is typically a name that refers to a specific search page. For example, you could use\n     * the `CommunitySite` value to refer to a search page on a company's public community site.\n     *\n     * Default value is `default`.\n     */\n    searchHub: ComponentOptions.buildStringOption({ defaultValue: 'default' }),\n\n    /**\n     * Specifies the name of the split test run that the search page is part of.\n     *\n     * You can use this dimension to perform A/B testing using different search page layouts and features inside the\n     * Coveo Query pipeline.\n     *\n     * Default value is `undefined` and no split test run name is reported to the Coveo Usage Analytics Platform.\n     */\n    splitTestRunName: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the version name for the page when a split test run is active.\n     *\n     * When reporting on A/B testing analytics data, this value specifies the test run version name that was\n     * presented to the user.\n     *\n     * Default value is `undefined`\n     */\n    splitTestRunVersion: ComponentOptions.buildStringOption(),\n    sendToCloud: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the organization bound to the access token. This is necessary when using an access token, because a\n     * single access token can be associated to more than one organization.\n     *\n     * Default value is `undefined`, and the value of this parameter will fallback to the organization used for the\n     * search endpoint.\n     */\n    organization: ComponentOptions.buildStringOption()\n  };\n\n  /**\n   * A reference to the `analyticsClient`, which performs the heavy duty part of logging the actual events on the\n   * service.\n   */\n  public client: IAnalyticsClient;\n\n  /**\n   * Creates a new Analytics component. Creates the {@link IAnalyticsClient}.\n   * @param element The HTMLElement on which the component will be instantiated.\n   * @param options The options for the Analytics component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IAnalyticsOptions = {}, public bindings?: IComponentBindings) {\n    super(element, Analytics.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Analytics, options);\n\n    this.retrieveInfoFromDefaultSearchEndpoint();\n    this.initializeAnalyticsClient();\n    Assert.exists(this.client);\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (data: IBuildingQueryEventArgs) => this.handleBuildingQuery(data));\n    this.bind.onRootElement(QueryEvents.queryError, (data: IQueryErrorEventArgs) => this.handleQueryError(data));\n\n    // Analytics component is a bit special: It can be higher in the dom tree than the search interface\n    // Need to resolve down to find the componentOptionsModel if we need to.\n    if (!this.componentOptionsModel) {\n      let cmpOptionElement = $$(element).find('.' + Component.computeCssClassName(ComponentOptionsModel));\n      if (cmpOptionElement) {\n        this.componentOptionsModel = cmpOptionElement[Component.computeCssClassName(ComponentOptionsModel)];\n      }\n    }\n\n    if (this.componentOptionsModel) {\n      this.componentOptionsModel.set(ComponentOptionsModel.attributesEnum.searchHub, this.options.searchHub);\n      let event = this.componentOptionsModel.getEventName(Model.eventTypes.changeOne + ComponentOptionsModel.attributesEnum.searchHub);\n      this.bind.onRootElement(event, (args: IAttributeChangedEventArg) => this.handleSearchHubChanged(args));\n    }\n  }\n\n  /**\n   * Logs a Search event on the service, using an [AnalyticsActionCause]({@link IAnalyticsActionCause}) and a meta\n   * object.\n   *\n   * Note that the search event is only sent to the service when the query successfully returns, not immediately after\n   * calling this method. Therefore, it is important to call this method before executing the query. Otherwise the\n   * service will log no Search event and you will get a warning message in the console.\n   *\n   * See [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ).\n   *\n   * @param actionCause Describes the cause of the event.\n   * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n   * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n   * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n   * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n   * ( `{}` ).\n   */\n  public logSearchEvent<T>(actionCause: IAnalyticsActionCause, meta: T) {\n    this.client.logSearchEvent<T>(actionCause, meta);\n  }\n\n  /**\n   * Logs a SearchAsYouType event on the service, using an {@link IAnalyticsActionCause} and a meta object.\n   *\n   * This method is very similar to the {@link logSearchEvent} method, except that logSearchAsYouType is, by definition,\n   * more frequently called.\n   *\n   * The `PendingSearchAsYouTypeEvent` takes care of logging only the \"relevant\" last event: an event that occurs after\n   * 5 seconds elapse without any event being logged, or an event that occurs after another part of the interface\n   * triggers a search event. This avoids logging every single partial query, which would make the reporting very\n   * confusing.\n   *\n   * It is important to call this method before executing the query. Otherwise the service will log no SearchAsYouType\n   * event and you will get a warning message in the console.\n   *\n   * See [Sending Custom Analytics Events](https://developers.coveo.com/x/KoGfAQ).\n   *\n   * @param actionCause Describes the cause of the event.\n   * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n   * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n   * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n   * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n   * ( `{}` ).\n   */\n  public logSearchAsYouType<T>(actionCause: IAnalyticsActionCause, meta: T) {\n    this.client.logSearchAsYouType(actionCause, meta);\n  }\n\n  /**\n   * Logs a Custom event on the service. You can use custom events to create custom reports, or to track events\n   * that are not queries or document views.\n   *\n   * @param actionCause Describes the cause of the event.\n   * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n   * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n   * API automatically converts white spaces to underscores and uppercase characters to lowercase characters in key\n   * names. Each value must be a simple string. If you do not need to log metadata, you can simply pass an empty JSON\n   * ( `{}` ).\n   * @param element The HTMLElement that the user has interacted with for this custom event.\n   */\n  public logCustomEvent<T>(actionCause: IAnalyticsActionCause, meta: T, element: HTMLElement = this.element) {\n    this.client.logCustomEvent(actionCause, meta, element);\n  }\n\n  /**\n   * Logs a Click event. You can understand click events as document views (e.g., clicking on a {@link ResultLink} or\n   * opening a {@link Quickview}).\n   *\n   * This event is logged immediately on the service.\n   *\n   * @param actionCause Describes the cause of the event.\n   * @param meta The metadata which you want to use to create custom dimensions. Metadata can contain as many key-value\n   * pairs as you need. Each key must contain only alphanumeric characters and underscores. The Coveo Usage Analytics\n   * API automatically converts uppercase characters to lowercase characters in key names. Each value must be a simple\n   * string. You do not have to pass an {@link IAnalyticsDocumentViewMeta} as meta when logging a custom Click event.\n   * You can actually send any arbitrary meta. If you do not need to log metadata, you can simply pass an empty JSON\n   * ( `{}` ).\n   * @param result The result that the user has clicked.\n   * @param element The HTMLElement that the user has clicked in the interface.\n   */\n  public logClickEvent(actionCause: IAnalyticsActionCause, meta: IAnalyticsDocumentViewMeta, result: IQueryResult, element: HTMLElement = this.element) {\n    this.client.logClickEvent(actionCause, meta, result, element);\n  }\n\n  /**\n   * Sets the Origin Context dimension on the analytic events.\n   *\n   * You can use this dimension to specify the context of your application.\n   * Suggested values are \"Search\", \"InternalSearch\" and \"CommunitySearch\"\n   *\n   * Default value is `Search`.\n   *\n   * @param originContext The origin context value\n   */\n  public setOriginContext(originContext: string) {\n    this.client.setOriginContext(originContext);\n  }\n\n  protected initializeAnalyticsEndpoint(): AnalyticsEndpoint {\n    return new AnalyticsEndpoint({\n      token: this.options.token,\n      serviceUrl: this.options.endpoint,\n      organization: this.options.organization\n    });\n  }\n\n  private initializeAnalyticsClient() {\n    if (Utils.isNonEmptyString(this.options.endpoint)) {\n      let endpoint = this.initializeAnalyticsEndpoint();\n      let elementToInitializeClient: HTMLElement;\n      if (this.root && this.element) {\n        if (this.root.contains(this.element)) {\n          elementToInitializeClient = this.root;\n        } else {\n          elementToInitializeClient = this.element;\n        }\n\n      }\n\n      let isRecommendation = $$(this.root).hasClass(Component.computeCssClassName(Recommendation));\n      this.instantiateAnalyticsClient(endpoint, elementToInitializeClient, isRecommendation);\n\n    } else {\n      this.client = new NoopAnalyticsClient();\n    }\n  }\n\n  private instantiateAnalyticsClient(endpoint: AnalyticsEndpoint, elementToInitializeClient: HTMLElement, isRecommendation: boolean) {\n    if (isRecommendation) {\n      this.client = new RecommendationAnalyticsClient(endpoint, elementToInitializeClient,\n        this.options.user,\n        this.options.userDisplayName,\n        this.options.anonymous,\n        this.options.splitTestRunName,\n        this.options.splitTestRunVersion,\n        this.options.searchHub,\n        this.options.sendToCloud,\n        this.getBindings());\n    } else {\n      this.client = new LiveAnalyticsClient(endpoint, elementToInitializeClient,\n        this.options.user,\n        this.options.userDisplayName,\n        this.options.anonymous,\n        this.options.splitTestRunName,\n        this.options.splitTestRunVersion,\n        this.options.searchHub,\n        this.options.sendToCloud);\n    }\n  }\n\n  private retrieveInfoFromDefaultSearchEndpoint() {\n    let defaultEndpoint = SearchEndpoint.endpoints['default'];\n    if (this.options.token == null && defaultEndpoint) {\n      this.options.token = defaultEndpoint.options.accessToken;\n    }\n\n    if (!this.options.organization && defaultEndpoint) {\n      this.options.organization = defaultEndpoint.options.queryStringArguments['workgroup'];\n    }\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n\n    data.queryBuilder.searchHub = this.options.searchHub;\n  }\n\n  private handleSearchHubChanged(data: IAttributeChangedEventArg) {\n    this.options.searchHub = data.value;\n  }\n\n  private handleQueryError(data: IQueryErrorEventArgs) {\n    Assert.exists(data);\n\n    this.client.logCustomEvent<IAnalyticsQueryErrorMeta>(analyticsActionCauseList.queryError, {\n      query: data.query.q,\n      aq: data.query.aq,\n      cq: data.query.cq,\n      dq: data.query.dq,\n      errorType: data.error.type,\n      errorMessage: data.error.message\n    }, this.element);\n  }\n\n  public static create(element: HTMLElement, options: IAnalyticsOptions, bindings: IComponentBindings): IAnalyticsClient {\n    let selector = Component.computeSelectorForType(Analytics.ID);\n    let found: HTMLElement[] = [];\n    found = found.concat($$(element).findAll(selector));\n    if (!(Component.get(element, SearchInterface) instanceof Recommendation)) {\n      found = this.ignoreElementsInsideRecommendationInterface(found);\n    }\n    found.push($$(element).closest(Component.computeCssClassName(Analytics)));\n    if ($$(element).is(selector)) {\n      found.push(element);\n    }\n    found = _.compact(found);\n\n    if (found.length == 1) {\n      return Analytics.getClient(found[0], options, bindings);\n    } else if (found.length > 1) {\n      return new MultiAnalyticsClient(_.map(found, (el) => Analytics.getClient(el, options, bindings)));\n    } else {\n      return new NoopAnalyticsClient();\n    }\n  }\n\n  private static ignoreElementsInsideRecommendationInterface(found: HTMLElement[]): HTMLElement[] {\n    return _.filter(found, (element) => {\n      return $$(element).closest(Component.computeCssClassName(Recommendation)) === undefined;\n    });\n  }\n\n  private static getClient(element: HTMLElement, options: IAnalyticsOptions, bindings: IComponentBindings): IAnalyticsClient {\n    // This check if an element is already initialized as an analytics component.\n    // If that's the case, return the client on that element.\n    // Otherwise, init and return.\n    let foundOnElement = Component.get(element, Analytics, true);\n    if (foundOnElement instanceof Analytics) {\n      return (<Analytics>foundOnElement).client;\n    } else {\n      return new Analytics(element, options, bindings).client;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/Analytics.ts\n **/","import { IAnalyticsClient } from './AnalyticsClient';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { PendingSearchEvent } from './PendingSearchEvent';\nimport { PendingSearchAsYouTypeSearchEvent } from './PendingSearchAsYouTypeSearchEvent';\nimport { AnalyticsEndpoint } from '../../rest/AnalyticsEndpoint';\nimport { Assert } from '../../misc/Assert';\nimport { Logger } from '../../misc/Logger';\nimport { IAnalyticsActionCause, analyticsActionCauseList } from './AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ITopQueries } from '../../rest/TopQueries';\nimport { IChangeableAnalyticsMetaObject, IChangeableAnalyticsDataObject, IChangeAnalyticsCustomDataEventArgs } from '../../events/AnalyticsEvents';\nimport { Defer } from '../../misc/Defer';\nimport { $$ } from '../../utils/Dom';\nimport { AnalyticsEvents, IAnalyticsCustomEventArgs } from '../../events/AnalyticsEvents';\nimport { APIAnalyticsBuilder } from '../../rest/APIAnalyticsBuilder';\nimport { IAnalyticsEvent } from '../../rest/AnalyticsEvent';\nimport { IAPIAnalyticsEventResponse } from '../../rest/APIAnalyticsEventResponse';\nimport { ISearchEvent } from '../../rest/SearchEvent';\nimport { IClickEvent } from '../../rest/ClickEvent';\nimport { ICustomEvent } from '../../rest/CustomEvent';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Component } from '../Base/Component';\nimport { version } from '../../misc/Version';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport _ = require('underscore');\n\nexport class LiveAnalyticsClient implements IAnalyticsClient {\n  public isContextual: boolean = false;\n  public originContext: string = 'Search';\n\n  private language = <string>String['locale'];\n  private device = DeviceUtils.getDeviceName();\n  private mobile = DeviceUtils.isMobileDevice();\n  private pendingSearchEvent: PendingSearchEvent;\n  private pendingSearchAsYouTypeSearchEvent: PendingSearchAsYouTypeSearchEvent;\n  private logger: Logger;\n\n  constructor(public endpoint: AnalyticsEndpoint,\n    public rootElement: HTMLElement,\n    public userId: string,\n    public userDisplayName: string,\n    public anonymous: boolean,\n    public splitTestRunName: string,\n    public splitTestRunVersion: string,\n    public originLevel1: string,\n    public sendToCloud: boolean) {\n\n    Assert.exists(endpoint);\n    Assert.exists(rootElement);\n    Assert.isNonEmptyString(this.language);\n    Assert.isNonEmptyString(this.device);\n    Assert.isNonEmptyString(this.originLevel1);\n    this.logger = new Logger(this);\n  }\n\n  public isActivated(): boolean {\n    return true;\n  }\n\n  public getCurrentVisitId(): string {\n    return this.endpoint.getCurrentVisitId();\n  }\n\n  public getCurrentVisitIdPromise(): Promise<string> {\n    return this.endpoint.getCurrentVisitIdPromise();\n  }\n\n  public getCurrentEventCause() {\n    if (this.pendingSearchEvent != null) {\n      return this.pendingSearchEvent.getEventCause();\n    }\n    if (this.pendingSearchAsYouTypeSearchEvent != null) {\n      return this.pendingSearchAsYouTypeSearchEvent.getEventCause();\n    }\n    return null;\n  }\n\n  public getCurrentEventMeta() {\n    if (this.pendingSearchEvent != null) {\n      return this.pendingSearchEvent.getEventMeta();\n    }\n    if (this.pendingSearchAsYouTypeSearchEvent != null) {\n      return this.pendingSearchAsYouTypeSearchEvent.getEventMeta();\n    }\n    return null;\n  }\n\n  public logSearchEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    var metaObject = this.buildMetaObject(meta);\n    this.pushSearchEvent(actionCause, metaObject);\n  }\n\n  public logSearchAsYouType<TMeta>(actionCause: IAnalyticsActionCause, meta?: TMeta) {\n    var metaObject = this.buildMetaObject(meta);\n    this.pushSearchAsYouTypeEvent(actionCause, metaObject);\n  }\n\n  public logClickEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta, result: IQueryResult, element: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    let metaObject = this.buildMetaObject(meta, result);\n    return this.pushClickEvent(actionCause, metaObject, result, element);\n  }\n\n  public logCustomEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta, element: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    var metaObject = this.buildMetaObject(meta);\n    return this.pushCustomEvent(actionCause, metaObject, element);\n  }\n\n  public getTopQueries(params: ITopQueries): Promise<string[]> {\n    return this.endpoint.getTopQueries(params);\n  }\n\n  public sendAllPendingEvents() {\n    if (this.pendingSearchAsYouTypeSearchEvent) {\n      this.pendingSearchAsYouTypeSearchEvent.sendRightNow();\n    }\n  }\n\n  public cancelAllPendingEvents() {\n    if (this.pendingSearchAsYouTypeSearchEvent) {\n      this.pendingSearchAsYouTypeSearchEvent.cancel();\n      this.pendingSearchAsYouTypeSearchEvent = null;\n    }\n    if (this.pendingSearchEvent) {\n      this.pendingSearchEvent.cancel();\n      this.pendingSearchEvent = null;\n    }\n  }\n\n  public getPendingSearchEvent(): PendingSearchEvent {\n    if (this.pendingSearchEvent) {\n      return this.pendingSearchEvent;\n    } else if (this.pendingSearchAsYouTypeSearchEvent) {\n      return this.pendingSearchAsYouTypeSearchEvent;\n    }\n    return null;\n  }\n\n  public warnAboutSearchEvent() {\n    if (_.isUndefined(this.pendingSearchEvent) && _.isUndefined(this.pendingSearchAsYouTypeSearchEvent)) {\n      this.logger.warn('A search was triggered, but no analytics event was logged. If you wish to have consistent analytics data, consider logging a search event using the methods provided by the framework', 'https://developers.coveo.com/x/TwA5');\n      if (window['console'] && console.trace) {\n        console.trace();\n      }\n    }\n  }\n\n  public setOriginContext(originContext: string) {\n    this.originContext = originContext;\n  }\n\n  private pushCustomEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject, element?: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    var customEvent = this.buildCustomEvent(actionCause, metaObject, element);\n    this.triggerChangeAnalyticsCustomData('CustomEvent', metaObject, customEvent);\n    this.checkToSendAnyPendingSearchAsYouType(actionCause);\n    $$(this.rootElement).trigger(AnalyticsEvents.customEvent, <IAnalyticsCustomEventArgs>{ customEvent: APIAnalyticsBuilder.convertCustomEventToAPI(customEvent) });\n    return this.sendToCloud ? this.endpoint.sendCustomEvent(customEvent) : Promise.resolve(null);\n  }\n\n  private pushSearchEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject) {\n    Assert.exists(actionCause);\n    if (this.pendingSearchEvent && this.pendingSearchEvent.getEventCause() !== actionCause.name) {\n      this.pendingSearchEvent.stopRecording();\n      this.pendingSearchEvent = null;\n    }\n    this.checkToSendAnyPendingSearchAsYouType(actionCause);\n\n    if (!this.pendingSearchEvent) {\n      var searchEvent = this.buildSearchEvent(actionCause, metaObject);\n      this.triggerChangeAnalyticsCustomData('SearchEvent', metaObject, searchEvent);\n      var pendingSearchEvent = this.pendingSearchEvent = new PendingSearchEvent(this.rootElement, this.endpoint, searchEvent, this.sendToCloud);\n\n      Defer.defer(() => {\n        // At this point all `duringQuery` events should have been fired, so we can forget\n        // about the pending search event. It will finish processing automatically when\n        // all the deferred that were caught terminate.\n        this.pendingSearchEvent = undefined;\n        pendingSearchEvent.stopRecording();\n      });\n    }\n  }\n\n  private checkToSendAnyPendingSearchAsYouType(actionCause: IAnalyticsActionCause) {\n    if (this.eventIsNotRelatedToSearchbox(actionCause.name)) {\n      this.sendAllPendingEvents();\n    } else {\n      this.cancelAnyPendingSearchAsYouTypeEvent();\n    }\n  }\n\n  private pushSearchAsYouTypeEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject) {\n    this.cancelAnyPendingSearchAsYouTypeEvent();\n    var searchEvent = this.buildSearchEvent(actionCause, metaObject);\n    this.triggerChangeAnalyticsCustomData('SearchEvent', metaObject, searchEvent);\n    this.pendingSearchAsYouTypeSearchEvent = new PendingSearchAsYouTypeSearchEvent(this.rootElement, this.endpoint, searchEvent, this.sendToCloud);\n  }\n\n  private pushClickEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject, result: IQueryResult, element: HTMLElement): Promise<IAPIAnalyticsEventResponse> {\n    var event = this.buildClickEvent(actionCause, metaObject, result, element);\n    this.checkToSendAnyPendingSearchAsYouType(actionCause);\n    this.triggerChangeAnalyticsCustomData('ClickEvent', metaObject, event, { resultData: result });\n    Assert.isNonEmptyString(event.searchQueryUid);\n    Assert.isNonEmptyString(event.collectionName);\n    Assert.isNonEmptyString(event.sourceName);\n    Assert.isNumber(event.documentPosition);\n\n    $$(this.rootElement).trigger(AnalyticsEvents.documentViewEvent, {\n      documentViewEvent: APIAnalyticsBuilder.convertDocumentViewToAPI(event)\n    });\n    return this.sendToCloud ? this.endpoint.sendDocumentViewEvent(event) : Promise.resolve(null);\n  }\n\n  private buildAnalyticsEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject): IAnalyticsEvent {\n    return {\n      actionCause: actionCause.name,\n      actionType: actionCause.type,\n      username: this.userId,\n      userDisplayName: this.userDisplayName,\n      anonymous: this.anonymous,\n      device: this.device,\n      mobile: this.mobile,\n      language: this.language,\n      responseTime: undefined,\n      originLevel1: this.originLevel1,\n      originLevel2: this.getOriginLevel2(this.rootElement),\n      originLevel3: document.referrer,\n      originContext: this.originContext,\n      customData: _.keys(metaObject).length > 0 ? metaObject : undefined,\n      userAgent: navigator.userAgent\n    };\n  }\n\n  private buildSearchEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject): ISearchEvent {\n    return this.merge<ISearchEvent>(this.buildAnalyticsEvent(actionCause, metaObject), {\n      searchQueryUid: undefined,\n      pipeline: undefined,\n      splitTestRunName: this.splitTestRunName,\n      splitTestRunVersion: this.splitTestRunVersion,\n      queryText: undefined,\n      advancedQuery: undefined,\n      results: undefined,\n      resultsPerPage: undefined,\n      pageNumber: undefined,\n      didYouMean: undefined,\n      facets: undefined,\n      contextual: this.isContextual\n    });\n  }\n\n  private buildClickEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject, result: IQueryResult, element: HTMLElement): IClickEvent {\n    return this.merge<IClickEvent>(this.buildAnalyticsEvent(actionCause, metaObject), {\n      searchQueryUid: result.queryUid,\n      queryPipeline: result.pipeline,\n      splitTestRunName: this.splitTestRunName || result.splitTestRun,\n      splitTestRunVersion: this.splitTestRunVersion || (result.splitTestRun != undefined ? result.pipeline : undefined),\n      documentUri: result.uri,\n      documentUriHash: QueryUtils.getUriHash(result),\n      documentUrl: result.clickUri,\n      documentTitle: result.title,\n      documentCategory: QueryUtils.getObjectType(result),\n      originLevel2: this.getOriginLevel2(element),\n      collectionName: QueryUtils.getCollection(result),\n      sourceName: QueryUtils.getSource(result),\n      documentPosition: result.index + 1,\n      responseTime: 0,\n      viewMethod: actionCause.name,\n      rankingModifier: result.rankingModifier\n    });\n  }\n\n  private buildCustomEvent(actionCause: IAnalyticsActionCause, metaObject: IChangeableAnalyticsMetaObject, element: HTMLElement): ICustomEvent {\n    return this.merge<ICustomEvent>(this.buildAnalyticsEvent(actionCause, metaObject), {\n      eventType: actionCause.type,\n      eventValue: actionCause.name,\n      originLevel2: this.getOriginLevel2(element),\n      responseTime: 0\n    });\n  }\n\n  protected getOriginLevel2(element: HTMLElement): string {\n    return this.resolveActiveTabFromElement(element) || 'default';\n  }\n\n  private buildMetaObject<TMeta>(meta: TMeta, result?: IQueryResult): IChangeableAnalyticsMetaObject {\n    let modifiedMeta: IChangeableAnalyticsMetaObject = _.extend({}, meta);\n    modifiedMeta['JSUIVersion'] = version.lib + ';' + version.product;\n\n    if (result) {\n      let uniqueId = QueryUtils.getPermanentId(result);\n      modifiedMeta['contentIDKey'] = uniqueId.fieldUsed;\n      modifiedMeta['contentIDValue'] = uniqueId.fieldValue;\n    }\n\n    return modifiedMeta;\n  }\n\n  private cancelAnyPendingSearchAsYouTypeEvent() {\n    if (this.pendingSearchAsYouTypeSearchEvent) {\n      this.pendingSearchAsYouTypeSearchEvent.cancel();\n      this.pendingSearchAsYouTypeSearchEvent = undefined;\n    }\n  }\n\n  private resolveActiveTabFromElement(element: HTMLElement): string {\n    Assert.exists(element);\n    var queryStateModel = this.resolveQueryStateModel(element);\n    return (queryStateModel && <string>queryStateModel.get(QueryStateModel.attributesEnum.t));\n  }\n\n  private resolveQueryStateModel(rootElement: HTMLElement): QueryStateModel {\n    return <QueryStateModel>Component.resolveBinding(rootElement, QueryStateModel);\n  }\n\n  private eventIsNotRelatedToSearchbox(event: string) {\n    return event !== analyticsActionCauseList.searchboxSubmit.name && event !== analyticsActionCauseList.searchboxClear.name;\n  }\n\n  private triggerChangeAnalyticsCustomData(type: string, metaObject: IChangeableAnalyticsMetaObject, event: IAnalyticsEvent, data?: any) {\n    // This is for backward compatibility. Before the analytics were using either numbered\n    // metas in `metaDataAsNumber` of later on named metas in `metaDataAsString`. Thus we still\n    // provide those properties in a deprecated way. Below we are moving any data that put\n    // in them to the root.\n    (<any>metaObject)['metaDataAsString'] = {};\n    (<any>metaObject)['metaDataAsNumber'] = {};\n\n    var changeableAnalyticsDataObject: IChangeableAnalyticsDataObject = {\n      language: event.language,\n      originLevel1: event.originLevel1,\n      originLevel2: event.originLevel2,\n      originLevel3: event.originLevel3,\n      metaObject: metaObject\n    };\n\n\n    var args: IChangeAnalyticsCustomDataEventArgs = _.extend({}, {\n      type: type,\n      actionType: event.actionType,\n      actionCause: event.actionCause\n    }, changeableAnalyticsDataObject, data);\n    $$(this.rootElement).trigger(AnalyticsEvents.changeAnalyticsCustomData, args);\n\n    event.language = args.language;\n    event.originLevel1 = args.originLevel1;\n    event.originLevel2 = args.originLevel2;\n    event.originLevel3 = args.originLevel3;\n    event.customData = metaObject;\n\n    // This is for backward compatibility. Before the analytics were using either numbered\n    // metas in `metaDataAsNumber` of later on named metas in `metaDataAsString`. We are now putting\n    // them all at the root, and if I encounter the older properties I move them to the top\n    // level after issuing a warning.\n\n    var metaDataAsString = event.customData['metaDataAsString'];\n    if (_.keys(metaDataAsString).length > 0) {\n      this.logger.warn('Using deprecated \\'metaDataAsString\\' key to log custom analytics data. Custom meta should now be put at the root of the object.');\n      _.extend(event.customData, metaDataAsString);\n    }\n    delete event.customData['metaDataAsString'];\n\n    var metaDataAsNumber = event.customData['metaDataAsNumber'];\n    if (_.keys(metaDataAsNumber).length > 0) {\n      this.logger.warn('Using deprecated \\'metaDataAsNumber\\' key to log custom analytics data. Custom meta should now be put at the root of the object.');\n      _.extend(event.customData, metaDataAsNumber);\n    }\n    delete event.customData['metaDataAsNumber'];\n  }\n\n  private merge<T extends IAnalyticsEvent>(first: IAnalyticsEvent, second: any): T {\n    return _.extend({}, first, second);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/LiveAnalyticsClient.ts\n **/","import { IDuringQueryEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { IQuery } from '../../rest/Query';\nimport { ISearchEvent } from '../../rest/SearchEvent';\nimport { AnalyticsEndpoint } from '../../rest/AnalyticsEndpoint';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { Component } from '../Base/Component';\nimport { QueryController } from '../../controllers/QueryController';\nimport { Defer } from '../../misc/Defer';\nimport { APIAnalyticsBuilder } from '../../rest/APIAnalyticsBuilder';\nimport { IAnalyticsSearchEventsArgs, AnalyticsEvents } from '../../events/AnalyticsEvents';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport _ = require('underscore');\n\nexport class PendingSearchEvent {\n  private handler: (evt: Event, arg: IDuringQueryEventArgs) => void;\n  private searchPromises: Promise<IQueryResults>[] = [];\n  private results: IQueryResults[] = [];\n  protected cancelled = false;\n  protected finished = false;\n  protected searchEvents: ISearchEvent[] = [];\n\n  constructor(public root: HTMLElement, public endpoint: AnalyticsEndpoint, public templateSearchEvent: ISearchEvent, public sendToCloud: boolean) {\n    Assert.exists(root);\n    Assert.exists(endpoint);\n    Assert.exists(templateSearchEvent);\n\n    this.handler = (evt: Event, arg: IDuringQueryEventArgs) => {\n      this.handleDuringQuery(evt, arg);\n    };\n    $$(root).on(QueryEvents.duringQuery, this.handler);\n  }\n\n  public getEventCause() {\n    return this.templateSearchEvent.actionCause;\n  }\n\n  public getEventMeta() {\n    return this.templateSearchEvent.customData;\n  }\n\n  public cancel() {\n    this.stopRecording();\n    this.cancelled = true;\n  }\n\n  protected handleDuringQuery(evt: Event, args: IDuringQueryEventArgs, queryBoxContentToUse?: string) {\n    Assert.check(!this.finished);\n    Assert.check(!this.cancelled);\n\n    // When synchronizing multiple search interfaces under a single search event\n    // (think Salesforce boxes), we need to collect all search events and send them\n    // in one single batch. So we gather all events until we idle out and then we\n    // monitor those before sending the data.\n\n    this.searchPromises.push(args.promise);\n\n    const eventTarget = <HTMLElement>evt.target;\n    const searchInterface = <SearchInterface>Component.get(eventTarget, SearchInterface);\n    Assert.exists(searchInterface);\n    // We try to grab ahead of time the content of the search box before the query returns\n    // This is because it's possible that the content of the search box gets modified when the query returns (for example : DidYouMean)\n    if (!queryBoxContentToUse) {\n      queryBoxContentToUse = searchInterface.queryStateModel.get(QueryStateModel.attributesEnum.q);\n    }\n    const queryController = Component.get(eventTarget, QueryController);\n    Assert.exists(queryController);\n\n    args.promise.then((queryResults: IQueryResults) => {\n      Assert.exists(queryResults);\n      Assert.check(!this.finished);\n      if (queryResults._reusedSearchUid !== true || this.templateSearchEvent.actionCause == analyticsActionCauseList.recommendation.name) {\n        const searchEvent = <ISearchEvent>_.extend({}, this.templateSearchEvent);\n        this.fillSearchEvent(searchEvent, searchInterface, args.query, queryResults, queryBoxContentToUse);\n        this.searchEvents.push(searchEvent);\n        this.results.push(queryResults);\n        return queryResults;\n      }\n    }).finally(() => {\n      const index = _.indexOf(this.searchPromises, args.promise);\n      this.searchPromises.splice(index, 1);\n      if (this.searchPromises.length == 0) {\n        this.flush();\n      }\n    });\n  }\n\n  public stopRecording() {\n    if (this.handler) {\n      $$(this.root).off(QueryEvents.duringQuery, this.handler);\n      $$(this.root).off(QueryEvents.duringFetchMoreQuery, this.handler);\n      this.handler = null;\n    }\n  }\n\n  private flush() {\n    if (!this.cancelled) {\n      this.stopRecording();\n      this.finished = true;\n      Assert.check(this.searchEvents.length == this.results.length);\n\n      Defer.defer(() => {\n        if (this.sendToCloud) {\n          this.endpoint.sendSearchEvents(this.searchEvents);\n        }\n        const apiSearchEvents = _.map(this.searchEvents, (searchEvent: ISearchEvent) => {\n          return APIAnalyticsBuilder.convertSearchEventToAPI(searchEvent);\n        });\n        $$(this.root).trigger(AnalyticsEvents.searchEvent, <IAnalyticsSearchEventsArgs>{ searchEvents: apiSearchEvents });\n      });\n    }\n  }\n\n  private fillSearchEvent(searchEvent: ISearchEvent, searchInterface: SearchInterface, query: IQuery, queryResults: IQueryResults, queryBoxContentToUse?: string) {\n    Assert.exists(searchEvent);\n    Assert.exists(searchInterface);\n    Assert.exists(query);\n    Assert.exists(queryResults);\n\n    const currentQuery = <string>searchInterface.queryStateModel.get(QueryStateModel.attributesEnum.q);\n    searchEvent.queryPipeline = queryResults.pipeline;\n    searchEvent.splitTestRunName = searchEvent.splitTestRunName || queryResults.splitTestRun;\n    searchEvent.splitTestRunVersion = searchEvent.splitTestRunVersion || (queryResults.splitTestRun != undefined ? queryResults.pipeline : undefined);\n    searchEvent.originLevel2 = searchEvent.originLevel2 || searchInterface.queryStateModel.get('t') || 'default';\n    searchEvent.queryText = queryBoxContentToUse || currentQuery || query.q || ''; // do not log the query sent to the server if possible; it may contain added syntax depending on options\n    searchEvent.advancedQuery = query.aq || '';\n    searchEvent.didYouMean = query.enableDidYouMean;\n    searchEvent.numberOfResults = queryResults.totalCount;\n    searchEvent.responseTime = queryResults.duration;\n    searchEvent.pageNumber = (query.firstResult / query.numberOfResults);\n    searchEvent.resultsPerPage = query.numberOfResults;\n    searchEvent.searchQueryUid = queryResults.searchUid;\n    searchEvent.queryPipeline = queryResults.pipeline;\n\n    // The context_${key} format is important for the Analytics backend\n    // This is what they use to recognize a custom data that will be used internally by other coveo's service.\n    // In this case, Reveal will be the consumer of this information.\n    if (query.context != undefined) {\n      _.each(query.context, (value: string, key: string) => {\n        searchEvent.customData[`context_${key}`] = value;\n      });\n    }\n\n    // The refinedKeywords field is important for Reveal in order to learn properly on query\n    // made based on the long query.\n    if (queryResults.refinedKeywords != undefined && queryResults.refinedKeywords.length != 0) {\n      searchEvent.customData['refinedKeywords'] = queryResults.refinedKeywords;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/PendingSearchEvent.ts\n **/","import { ISearchEvent } from './SearchEvent';\nimport { IAPISearchEvent } from './APISearchEvent';\nimport { IClickEvent } from './ClickEvent';\nimport { IAPIDocumentViewEvent } from './APIDocumentViewEvent';\nimport { IAPICustomEvent } from './APICustomEvent';\nimport { ICustomEvent } from './CustomEvent';\n\nexport class APIAnalyticsBuilder {\n  public static convertSearchEventToAPI(searchEvent: ISearchEvent) {\n    var apiSearchEvent: IAPISearchEvent = {\n      advancedQuery: searchEvent.advancedQuery,\n      customMetadatas: searchEvent.customData,\n      device: searchEvent.device,\n      didYouMean: searchEvent.didYouMean,\n      language: searchEvent.language,\n      pageNumber: searchEvent.pageNumber,\n      queryText: searchEvent.queryText,\n      responseTime: searchEvent.responseTime,\n      numberOfResults: searchEvent.numberOfResults,\n      resultsPerPage: searchEvent.resultsPerPage,\n      searchHub: searchEvent.originLevel1,\n      searchInterface: searchEvent.originLevel2,\n      searchQueryUid: searchEvent.searchQueryUid,\n      type: searchEvent.actionType,\n      actionCause: searchEvent.actionCause,\n      queryPipeline: searchEvent.queryPipeline,\n      splitTestRunName: searchEvent.splitTestRunName,\n      splitTestRunVersion: searchEvent.splitTestRunVersion\n    };\n    return apiSearchEvent;\n  }\n\n  public static convertDocumentViewToAPI(documentView: IClickEvent): IAPIDocumentViewEvent {\n    var apiDocumentView: IAPIDocumentViewEvent = {\n      collectionName: documentView.collectionName,\n      device: documentView.device,\n      documentPosition: documentView.documentPosition,\n      title: documentView.documentTitle,\n      documentUrl: documentView.documentUrl,\n      documentUri: documentView.documentUri,\n      documentUriHash: documentView.documentUriHash,\n      language: documentView.language,\n      responseTime: documentView.responseTime,\n      searchHub: documentView.originLevel1,\n      searchInterface: documentView.originLevel2,\n      searchQueryUid: documentView.searchQueryUid,\n      sourceName: documentView.sourceName,\n      viewMethod: documentView.viewMethod,\n      customMetadatas: documentView.customData,\n      actionCause: documentView.actionCause,\n      queryPipeline: documentView.queryPipeline,\n      splitTestRunName: documentView.splitTestRunName,\n      splitTestRunVersion: documentView.splitTestRunVersion\n    };\n    return apiDocumentView;\n  }\n\n  public static convertCustomEventToAPI(customEvent: ICustomEvent): IAPICustomEvent {\n\n    var apiCustomEvent: IAPICustomEvent = {\n      actionCause: customEvent.actionCause,\n      actionType: customEvent.actionType,\n      device: customEvent.device,\n      language: customEvent.language,\n      responseTime: customEvent.responseTime,\n      searchHub: customEvent.originLevel1,\n      searchInterface: customEvent.originLevel2,\n      customMetadatas: customEvent.customData\n    };\n    return apiCustomEvent;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/APIAnalyticsBuilder.ts\n **/","import { PendingSearchEvent } from './PendingSearchEvent';\nimport { AnalyticsEndpoint } from '../../rest/AnalyticsEndpoint';\nimport { $$ } from '../../utils/Dom';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { ISearchEvent } from '../../rest/SearchEvent';\nimport { IDuringQueryEventArgs } from '../../events/QueryEvents';\nimport { IAnalyticsActionCause } from './AnalyticsActionListMeta';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { Component } from '../Base/Component';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport _ = require('underscore');\n\nexport class PendingSearchAsYouTypeSearchEvent extends PendingSearchEvent {\n  public delayBeforeSending = 5000;\n  public beforeResolve: Promise<PendingSearchAsYouTypeSearchEvent>;\n  private beforeUnloadHandler: (...args: any[]) => void;\n  private armBatchDelay = 50;\n  private toSendRightNow: () => void;\n\n  constructor(public root: HTMLElement, public endpoint: AnalyticsEndpoint, public templateSearchEvent: ISearchEvent, public sendToCloud) {\n    super(root, endpoint, templateSearchEvent, sendToCloud);\n    this.beforeUnloadHandler = () => {\n      this.onWindowUnload();\n    };\n    window.addEventListener('beforeunload', this.beforeUnloadHandler);\n    $$(root).on(InitializationEvents.nuke, () => this.handleNuke());\n  }\n\n  protected handleDuringQuery(e: Event, args: IDuringQueryEventArgs) {\n    var event = _.clone(e);\n    // We need to \"snapshot\" the current query before the delay is applied\n    // Otherwise, this means that after 5 second, the original query is possibly modified\n    // For example, DidYouMean would be wrong in that case.\n    const eventTarget: HTMLElement = <HTMLElement>e.target;\n    const searchInterface = <SearchInterface>Component.get(eventTarget, SearchInterface);\n    const currentQueryBeforeDelay = searchInterface.queryStateModel.get(QueryStateModel.attributesEnum.q);\n    this.beforeResolve = new Promise((resolve) => {\n      this.toSendRightNow = () => {\n        if (!this.isCancelledOrFinished()) {\n          resolve(this);\n          super.handleDuringQuery(event, args, currentQueryBeforeDelay);\n        }\n      };\n      _.delay(() => {\n        this.toSendRightNow();\n      }, this.delayBeforeSending);\n    });\n  }\n\n  public sendRightNow() {\n    if (this.toSendRightNow) {\n      this.toSendRightNow();\n    }\n  }\n\n  public modifyCustomData(key: string, newData: any) {\n    _.each(this.searchEvents, (searchEvent: ISearchEvent) => {\n      searchEvent.customData[key] = newData;\n    });\n    if (!this.templateSearchEvent.customData) {\n      this.templateSearchEvent.customData = {};\n    }\n    this.templateSearchEvent.customData[key] = newData;\n  }\n\n  public modifyEventCause(newCause: IAnalyticsActionCause) {\n    _.each(this.searchEvents, (searchEvent: ISearchEvent) => {\n      searchEvent.actionCause = newCause.name;\n      searchEvent.actionType = newCause.type;\n    });\n    this.templateSearchEvent.actionCause = newCause.name;\n    this.templateSearchEvent.actionType = newCause.type;\n  }\n\n  public stopRecording() {\n    super.stopRecording();\n    if (this.beforeUnloadHandler) {\n      window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n      this.beforeUnloadHandler = undefined;\n    }\n  }\n\n  private handleNuke() {\n    window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n  }\n\n  private onWindowUnload() {\n    if (!this.isCancelledOrFinished()) {\n      this.armBatchDelay = 0;\n      this.sendRightNow();\n    }\n  }\n\n  private isCancelledOrFinished() {\n    if (!this.cancelled) {\n      if (this.finished) {\n        this.cancel();\n        return true;\n      } else {\n        return false;\n      }\n    } else {\n      return true;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/PendingSearchAsYouTypeSearchEvent.ts\n **/","import { IAnalyticsClient } from './AnalyticsClient';\nimport { PendingSearchEvent } from './PendingSearchEvent';\nimport { IAnalyticsActionCause, IAnalyticsDocumentViewMeta } from './AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ITopQueries } from '../../rest/TopQueries';\nimport { IAPIAnalyticsEventResponse } from '../../rest/APIAnalyticsEventResponse';\nimport _ = require('underscore');\n\nexport class MultiAnalyticsClient implements IAnalyticsClient {\n  public isContextual = false;\n\n  constructor(private analyticsClients: IAnalyticsClient[] = []) {\n  }\n\n  public isActivated(): boolean {\n    return _.some(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.isActivated());\n  }\n\n  public getCurrentEventCause(): string {\n    return _.find(_.map(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.getCurrentEventCause()), (currentEventCause: string) => currentEventCause != null);\n  }\n\n  public getCurrentEventMeta(): { [key: string]: any } {\n    return _.find(_.map(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.getCurrentEventMeta()), (currentEventMeta: { [key: string]: any }) => currentEventMeta != null);\n  }\n\n  public logSearchEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.logSearchEvent<TMeta>(actionCause, meta));\n  }\n\n  public logSearchAsYouType<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.logSearchEvent<TMeta>(actionCause, meta));\n  }\n\n  public logClickEvent(actionCause: IAnalyticsActionCause, meta?: IAnalyticsDocumentViewMeta, result?: IQueryResult, element?: HTMLElement): Promise<IAPIAnalyticsEventResponse[]> {\n    return Promise.all(_.map(this.analyticsClients, (analyticsClient: IAnalyticsClient) => {\n      return analyticsClient.logClickEvent(actionCause, meta, result, element);\n    }));\n  }\n\n  public logCustomEvent<TMeta>(actionCause: IAnalyticsActionCause, meta?: TMeta, element?: HTMLElement): Promise<IAPIAnalyticsEventResponse[]> {\n    return Promise.all(_.map(this.analyticsClients, (analyticsClient: IAnalyticsClient) => {\n      return analyticsClient.logCustomEvent<TMeta>(actionCause, meta, element);\n    }));\n  }\n\n  public getTopQueries(params: ITopQueries): Promise<string[]> {\n    return Promise.all(_.map(this.analyticsClients, (client) => {\n      return client.getTopQueries(params);\n    }))\n      .then((values: string[][]) => {\n        return this.mergeTopQueries(values, params.pageSize);\n      });\n  }\n\n  public getCurrentVisitIdPromise(): Promise<string> {\n    return _.first(this.analyticsClients).getCurrentVisitIdPromise();\n  }\n\n  public getCurrentVisitId(): string {\n    return _.first(this.analyticsClients).getCurrentVisitId();\n  }\n\n  public sendAllPendingEvents(): void {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.sendAllPendingEvents());\n  }\n\n  public warnAboutSearchEvent(): void {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.warnAboutSearchEvent());\n  }\n\n  public cancelAllPendingEvents(): void {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.cancelAllPendingEvents());\n  }\n\n  public getPendingSearchEvent(): PendingSearchEvent {\n    return _.first(this.analyticsClients).getPendingSearchEvent();\n  }\n\n  public setOriginContext(originContext: string) {\n    _.each(this.analyticsClients, (analyticsClient: IAnalyticsClient) => analyticsClient.setOriginContext(originContext));\n  }\n\n  private mergeTopQueries(values: string[][], pageSize: number = 5) {\n    return _.chain(values)\n      .flatten()\n      .first(pageSize)\n      .value();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/MultiAnalyticsClient.ts\n **/","import { SearchInterface, ISearchInterfaceOptions } from '../SearchInterface/SearchInterface';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { QueryEvents, IQuerySuccessEventArgs, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { OmniboxEvents } from '../../events/OmniboxEvents';\nimport { ResultListEvents } from '../../events/ResultListEvents';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { PreferencesPanelEvents } from '../../events/PreferencesPanelEvents';\nimport { AnalyticsEvents } from '../../events/AnalyticsEvents';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { BreadcrumbEvents } from '../../events/BreadcrumbEvents';\nimport { QuickviewEvents } from '../../events/QuickviewEvents';\nimport { QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { Model, MODEL_EVENTS } from '../../models/Model';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport { INoResultsEventArgs } from '../../events/QueryEvents';\nimport { IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ResponsiveRecommendation } from '../ResponsiveComponents/ResponsiveRecommendation';\nimport { history } from 'coveo.analytics';\nimport { get } from '../Base/RegisteredNamedMethods';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport _ = require('underscore');\nimport HistoryQueryElement = CoveoAnalytics.HistoryQueryElement;\n\nexport interface IRecommendationOptions extends ISearchInterfaceOptions {\n  mainSearchInterface?: HTMLElement;\n  userContext?: string;\n  id?: string;\n  optionsToUse?: string[];\n  sendActionsHistory?: boolean;\n  hideIfNoResults?: boolean;\n  enableResponsiveMode?: boolean;\n  responsiveBreakpoint?: number;\n  dropdownHeaderLabel?: string;\n}\n\n/**\n * The Recommendation component is a {@link SearchInterface} that displays recommendations typically based on user\n * history.\n *\n * This component usually listens to the main SearchInterface. When the main SearchInterface generates a query, the\n * Recommendation component generates another query to get the recommendations at the same time.\n *\n * To get history-based recommendations, you will likely want to include the `pageview` script in your page (see\n * [coveo.analytics.js](https://github.com/coveo/coveo.analytics.js)). However, including this script is not mandatory.\n * For instance, you could use the Recommendation component without the Coveo Machine Learning service to create a\n * simple \"recommended people\" interface.\n *\n * It is possible to include this component inside another SearchInterface, but it is also possible to instantiate it as\n * a \"standalone\" search interface, without even instantiating a main SearchInterface component. In any case, a\n * Recommendation component always acts as a full-fledged search interface. Therefore, you can include any component\n * inside the Recommendation component (Searchbox, Facet, Sort, etc.), just as you would inside the main SearchInterface\n * component.\n */\nexport class Recommendation extends SearchInterface implements IComponentBindings {\n  static ID = 'Recommendation';\n  private static NEXT_ID = 1;\n\n  /**\n   * The options for the recommendation component\n   * @componentOptions\n   */\n  static options: IRecommendationOptions = {\n\n    /**\n     * Specifies the main {@link SearchInterface} to listen to.\n     */\n    mainSearchInterface: ComponentOptions.buildSelectorOption(),\n\n    /**\n     * Specifies the user context to send to Coveo usage analytics.\n     * The component sends this information with the query alongside the user history to get the recommendations.\n     */\n    userContext: ComponentOptions.buildJsonOption(),\n\n    /**\n     * Specifies the ID of the interface.\n     * The usage analytics use the interface ID to know which recommendation interface was selected.\n     *\n     * Default value is `Recommendation` for the first one and `Recommendation_{number}`, where {number} depends on the\n     * number of Recommendation interfaces with default IDs in the page for the others.\n     */\n    id: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies which options from the main {@link QueryBuilder} to use in the triggered query.\n     *\n     * Possible values are:\n     * - `expression`\n     * - `advancedExpression`\n     * - `constantExpression`\n     * - `disjunctionExpression`\n     *\n     * **Example:**\n     *\n     * Adding the expression (`q`) and the advanced expression (`aq`) parts of the main query in the triggered query:\n     *\n     * `data-options-to-use=\"expression,advancedExpression\"`\n     *\n     * Default value is `expression`.\n     */\n    optionsToUse: ComponentOptions.buildListOption<'expression' | 'advancedExpression' | 'constantExpression' | 'disjunctionExpression'>({ defaultValue: ['expression'] }),\n\n    /**\n     * Specifies whether to send the actions history along with the triggered query.\n     *\n     * Setting this option to `false` makes it impossible for this component to get Coveo Machine Learning\n     * recommendations.\n     *\n     * However, setting this option to `false` can be useful to display side results in a search page.\n     *\n     * Default value is `true`.\n     */\n    sendActionsHistory: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to hide the Recommendations component if no result or recommendation is available.\n     *\n     * Default value is `false`.\n     */\n    hideIfNoResults: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    autoTriggerQuery: ComponentOptions.buildBooleanOption({\n      postProcessing: (value: boolean, options: IRecommendationOptions) => {\n        if (options.mainSearchInterface) {\n          return false;\n        }\n        return value;\n      }\n    }),\n\n    /**\n     * Specifies whether to enable *responsive mode* for Recommendation components. Setting this options to `false` on\n     * any Recommendation component in a search interface disables responsive mode for all other Recommendation\n     * components in the search interface.\n     *\n     * Responsive mode displays all Recommendation components under a single dropdown button whenever the width of the\n     * HTML element which the search interface is bound to reaches or falls behind a certain threshold (see\n     * {@link Recommendation.options.responsiveBreakpoint}).\n     *\n     * See also {@link Recommendation.options.dropdownHeaderLabel}.\n     *\n     * Default value is `true`.\n     */\n    enableResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link Recommendation.options.enableResponsiveMode} is `true` for all Recommendation components, specifies the\n     * width threshold (in pixels) of the search interface at which Recommendation components go in responsive mode.\n     *\n     * Recommendation components go in responsive mode when the width of the search interface is equal to or lower than\n     * this value.\n     *\n     * The `search interface` corresponds to the HTML element with the class `CoveoSearchInterface`.\n     *\n     * If more than one Recommendation component in the search interface specifies a value for this option, then the\n     * framework uses the last occurrence of the option.\n     *\n     * Default value is `1000`.\n     */\n    responsiveBreakpoint: ComponentOptions.buildNumberOption({ defaultValue: 1000 }),\n\n    /**\n     * If {@link Recommendation.options.enableResponsiveMode} is `true` for all Recommendation components, specifies the\n     * label of the dropdown button that allows to display the Recommendation components when in responsive mode.\n     *\n     * If more than one Recommendation component in the search interface specifies a value for this option, then the\n     * framework uses the first occurrence of the option.\n     *\n     * Default value is `Recommendations`.\n     */\n    dropdownHeaderLabel: ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Recommendations' })\n  };\n\n  // These are used by the analytics client for recommendation\n  // so that clicks event inside the recommendation component can be modified and attached to the main search interface.\n  public mainQuerySearchUID: string;\n  public mainQueryPipeline: string;\n  public historyStore: CoveoAnalytics.HistoryStore;\n\n  private mainInterfaceQuery: IQuerySuccessEventArgs;\n  private displayStyle: string;\n\n  /**\n   * Creates a new Recommendation component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Recommendation component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time)\n   * @param _window\n   */\n  constructor(public element: HTMLElement, public options: IRecommendationOptions = {}, public analyticsOptions = {}, _window = window) {\n    super(element, ComponentOptions.initComponentOptions(element, Recommendation, options), analyticsOptions, _window);\n    if (!this.options.id) {\n      this.generateDefaultId();\n    }\n\n    // This is done to allow the component to be included in another search interface without triggering the parent events.\n    this.preventEventPropagation();\n\n    if (this.options.mainSearchInterface) {\n      this.bindToMainSearchInterface();\n    }\n\n    $$(this.element).on(QueryEvents.buildingQuery, (e: Event, args: IBuildingQueryEventArgs) => this.handleRecommendationBuildingQuery(args));\n    $$(this.element).on(QueryEvents.querySuccess, (e: Event, args: IQuerySuccessEventArgs) => this.handleRecommendationQuerySuccess(args));\n    $$(this.element).on(QueryEvents.noResults, (e: Event, args: INoResultsEventArgs) => this.handleRecommendationNoResults());\n    $$(this.element).on(QueryEvents.queryError, (e: Event, args: IQueryErrorEventArgs) => this.handleRecommendationQueryError());\n\n\n    this.historyStore = new history.HistoryStore();\n    if (!this.options.mainSearchInterface) {\n      // When the recommendation component is \"standalone\", we add additional safeguard against bad config.\n      this.ensureCurrentPageViewExistsInStore();\n    }\n    ResponsiveRecommendation.init(this.root, this, options);\n    if (this.options.hideIfNoResults) {\n      this.hide();\n    }\n  }\n\n  public getId(): string {\n    return this.options.id;\n  }\n\n  public enable() {\n    super.enable();\n    this.show();\n  }\n\n  public disable() {\n    super.disable();\n    this.hide();\n  }\n\n  public hide(): void {\n    if (!this.displayStyle) {\n      this.displayStyle = this.element.style.display;\n    }\n    $$(this.element).hide();\n  }\n\n  public show(): void {\n    if (!this.displayStyle) {\n      this.displayStyle = this.element.style.display;\n    }\n    this.element.style.display = this.displayStyle;\n  }\n\n  private ensureCurrentPageViewExistsInStore() {\n    // It's not 100% sure that the element will actually be added in the store.\n    // It's possible that an external script configured by the end user to log the page view already did that.\n    // So we *could* end up with duplicate values in the store :\n    // We rely on the fact that the coveo.analytics lib has defensive code against consecutive page view that are identical.\n    // This is mainly done if the recommendation component is being initialized before the page view could be logged correctly by the coveo.analytics externa lib.\n    const historyElement = {\n      name: 'PageView',\n      value: document.location.toString(),\n      time: JSON.stringify(new Date()),\n      title: document.title\n    };\n    this.historyStore.addElement(historyElement);\n  }\n\n  private bindToMainSearchInterface() {\n    this.bindComponentOptionsModelToMainSearchInterface();\n    this.bindQueryEventsToMainSearchInterface();\n  }\n\n  private bindComponentOptionsModelToMainSearchInterface() {\n    // Try to fetch the componentOptions from the main search interface.\n    // Since we do not know which interface is init first (recommendation or full search interface)\n    // add a mechanism that waits for the full search interface to be correctly initialized\n    // then, set the needed values on the component options model.\n    let searchInterfaceComponent = <SearchInterface>get(this.options.mainSearchInterface, SearchInterface);\n    let alreadyInitialized = searchInterfaceComponent != null;\n\n    let onceInitialized = () => {\n      let mainSearchInterfaceOptionsModel = <ComponentOptionsModel>searchInterfaceComponent.getBindings().componentOptionsModel;\n      this.componentOptionsModel.setMultiple(mainSearchInterfaceOptionsModel.getAttributes());\n      $$(this.options.mainSearchInterface).on(this.componentOptionsModel.getEventName(MODEL_EVENTS.ALL), () => {\n        this.componentOptionsModel.setMultiple(mainSearchInterfaceOptionsModel.getAttributes());\n      });\n    };\n\n    if (alreadyInitialized) {\n      onceInitialized();\n    } else {\n      $$(this.options.mainSearchInterface).on(InitializationEvents.afterComponentsInitialization, () => {\n        searchInterfaceComponent = <SearchInterface>get(this.options.mainSearchInterface, SearchInterface);\n        onceInitialized();\n      });\n    }\n  }\n\n  private bindQueryEventsToMainSearchInterface() {\n    // Whenever a query sucessfully returns on the full search interface, refresh the recommendation component.\n    $$(this.options.mainSearchInterface).on(QueryEvents.querySuccess, (e: Event, args: IQuerySuccessEventArgs) => {\n      this.mainInterfaceQuery = args;\n      this.mainQuerySearchUID = args.results.searchUid;\n      this.mainQueryPipeline = args.results.pipeline;\n      this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.recommendation, {});\n      this.queryController.executeQuery();\n    });\n  }\n\n  private handleRecommendationBuildingQuery(data: IBuildingQueryEventArgs) {\n    if (!this.disabled) {\n      this.modifyQueryForRecommendation(data);\n      this.addRecommendationInfoInQuery(data);\n    }\n\n  }\n\n  private handleRecommendationQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (!this.disabled) {\n      if (this.options.hideIfNoResults) {\n        if (data.results.totalCount === 0) {\n          this.hide();\n        } else {\n          this.show();\n        }\n      }\n    }\n  }\n\n  private handleRecommendationNoResults() {\n    if (!this.disabled) {\n      if (this.options.hideIfNoResults) {\n        this.hide();\n      }\n    }\n  }\n\n  private handleRecommendationQueryError() {\n    if (!this.disabled) {\n      this.hide();\n    }\n  }\n\n  private modifyQueryForRecommendation(data: IBuildingQueryEventArgs) {\n    if (this.mainInterfaceQuery) {\n      Utils.copyObjectAttributes(data.queryBuilder, this.mainInterfaceQuery.queryBuilder, this.options.optionsToUse);\n    }\n  }\n\n  private addRecommendationInfoInQuery(data: IBuildingQueryEventArgs) {\n    if (!_.isEmpty(this.options.userContext)) {\n      data.queryBuilder.addContext(JSON.parse(this.options.userContext));\n    }\n    if (this.options.sendActionsHistory) {\n      data.queryBuilder.actionsHistory = this.getHistory();\n    }\n\n    data.queryBuilder.recommendation = this.options.id;\n  }\n\n  private getHistory(): string {\n    let historyFromStore = this.historyStore.getHistory();\n    if (historyFromStore == null) {\n      historyFromStore = [];\n    }\n    return JSON.stringify(historyFromStore);\n  }\n\n  private preventEventPropagation() {\n    this.preventEventPropagationOn(QueryEvents);\n    this.preventEventPropagationOn(OmniboxEvents);\n    this.preventEventPropagationOn(ResultListEvents);\n    this.preventEventPropagationOn(SettingsEvents);\n    this.preventEventPropagationOn(PreferencesPanelEvents);\n    this.preventEventPropagationOn(AnalyticsEvents);\n    this.preventEventPropagationOn(BreadcrumbEvents);\n    this.preventEventPropagationOn(QuickviewEvents);\n    this.preventEventPropagationOn(InitializationEvents);\n    this.preventEventPropagationOn(this.getAllModelEvents());\n  }\n\n  private preventEventPropagationOn(eventType, eventName = (event: string) => { return event; }) {\n    for (let event in eventType) {\n      $$(this.root).on(eventName(event), (e: Event) => e.stopPropagation());\n    }\n  }\n\n  private getAllModelEvents() {\n    let events = {};\n    _.each(_.values(Model.eventTypes), (event) => {\n      _.each(_.values(QUERY_STATE_ATTRIBUTES), (attribute) => {\n        let eventName = this.getBindings().queryStateModel.getEventName(event + attribute);\n        events[eventName] = eventName;\n      });\n    });\n    return events;\n  }\n\n  private generateDefaultId() {\n    let id = 'Recommendation';\n    if (Recommendation.NEXT_ID !== 1) {\n      this.logger.warn('Generating another recommendation default id', 'Consider configuring a human friendly / meaningful id for this interface');\n      id = id + '_' + Recommendation.NEXT_ID;\n    }\n    Recommendation.NEXT_ID++;\n    this.options.id = id;\n  }\n}\n\n// We do not register the Recommendation component since it is done with .coveo('initRecommendation')\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Recommendation/Recommendation.ts\n **/","export interface IQuickviewLoadedEventArgs {\n  duration: number;\n}\n\nexport class QuickviewEvents {\n  public static quickviewLoaded = 'quickviewLoaded';\n  public static openQuickview = 'openQuickview';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/QuickviewEvents.ts\n **/","import { ResponsiveComponentsManager, IResponsiveComponent, IResponsiveComponentOptions } from './ResponsiveComponentsManager';\nimport { ResponsiveComponentsUtils } from './ResponsiveComponentsUtils';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { Utils } from '../../utils/Utils';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Logger } from '../../misc/Logger';\nimport { Recommendation } from '../Recommendation/Recommendation';\nimport { RecommendationDropdownContent } from './ResponsiveDropdown/RecommendationDropdownContent';\nimport { ResponsiveDropdownHeader } from './ResponsiveDropdown/ResponsiveDropdownHeader';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\nimport { l } from '../../strings/Strings';\nimport { FacetSlider } from '../FacetSlider/FacetSlider';\nimport { Facet } from '../Facet/Facet';\nimport { Component } from '../Base/Component';\nimport { get } from '../Base/RegisteredNamedMethods';\nimport { QueryEvents, IQuerySuccessEventArgs, INoResultsEventArgs } from '../../events/QueryEvents';\nimport _ = require('underscore');\n\nexport class ResponsiveRecommendation implements IResponsiveComponent {\n\n  public static DROPDOWN_CONTAINER_CSS_CLASS_NAME: string = 'coveo-recommendation-dropdown-container';\n  public static RESPONSIVE_BREAKPOINT = 1000;\n\n  public recommendationRoot: Dom;\n  private breakpoint: number;\n  private dropdown: ResponsiveDropdown;\n  private logger: Logger;\n  private facetSliders: FacetSlider[];\n  private facets: Facet[];\n  private dropdownContainer: Dom;\n  private dropdownHeaderLabel: string;\n\n  public static init(root: HTMLElement, component, options: IResponsiveComponentOptions) {\n    let logger = new Logger('ResponsiveRecommendation');\n    let coveoRoot = this.findParentRootOfRecommendationComponent(root);\n    if (!coveoRoot) {\n      logger.info('Recommendation component has no parent interface. Disabling responsive mode for this component.');\n      return;\n    }\n    if (!$$(coveoRoot).find('.coveo-results-column')) {\n      logger.info('Cannot find element with class coveo-results-column. Disabling responsive mode for this component.');\n      return;\n    }\n\n    ResponsiveComponentsManager.register(ResponsiveRecommendation, $$(coveoRoot), Recommendation.ID, component, options);\n  }\n\n  private static findParentRootOfRecommendationComponent(root: HTMLElement): Dom {\n    let coveoRoot = $$(root).parents(Component.computeCssClassName(SearchInterface));\n    if (coveoRoot[0]) {\n      return $$(coveoRoot[0]);\n    }\n    return null;\n  }\n\n  constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, public responsiveDropdown?: ResponsiveDropdown) {\n    this.recommendationRoot = this.getRecommendationRoot();\n    this.dropdownHeaderLabel = options.dropdownHeaderLabel;\n    this.breakpoint = this.defineResponsiveBreakpoint(options);\n    this.logger = new Logger(this);\n    this.dropdown = this.buildDropdown(responsiveDropdown);\n    this.facets = this.getFacets();\n    this.facetSliders = this.getFacetSliders();\n    this.registerOnOpenHandler();\n    this.registerOnCloseHandler();\n    this.registerQueryEvents();\n    this.dropdownContainer = $$('div', { className: ResponsiveRecommendation.DROPDOWN_CONTAINER_CSS_CLASS_NAME });\n  }\n\n  public handleResizeEvent(): void {\n    if (this.needSmallMode() && !ResponsiveComponentsUtils.isSmallRecommendationActivated(this.coveoRoot)) {\n      this.changeToSmallMode();\n    } else if (!this.needSmallMode() && ResponsiveComponentsUtils.isSmallRecommendationActivated(this.coveoRoot)) {\n      this.changeToLargeMode();\n    }\n\n    if (this.dropdown.isOpened) {\n      this.dropdown.dropdownContent.positionDropdown();\n    }\n  }\n\n  public needDropdownWrapper(): boolean {\n    return this.needSmallMode();\n  }\n\n  private needSmallMode(): boolean {\n    return this.coveoRoot.width() <= this.breakpoint;\n  }\n\n  private changeToSmallMode() {\n    this.dropdown.close();\n    $$(this.coveoRoot.find(`.${ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS}`)).el.appendChild(this.dropdown.dropdownHeader.element.el);\n    this.disableFacetPreservePosition();\n    ResponsiveComponentsUtils.activateSmallRecommendation(this.coveoRoot);\n    ResponsiveComponentsUtils.activateSmallRecommendation(this.recommendationRoot);\n  }\n\n  private changeToLargeMode() {\n    this.enableFacetPreservePosition();\n    this.dropdown.cleanUp();\n    ResponsiveComponentsUtils.deactivateSmallRecommendation(this.coveoRoot);\n    ResponsiveComponentsUtils.deactivateSmallRecommendation(this.recommendationRoot);\n  }\n\n  private buildDropdown(responsiveDropdown?: ResponsiveDropdown): ResponsiveDropdown {\n    let dropdownContent = this.buildDropdownContent();\n    let dropdownHeader = this.buildDropdownHeader();\n    let dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n    dropdown.disablePopupBackground();\n    return dropdown;\n  }\n\n  private buildDropdownHeader(): ResponsiveDropdownHeader {\n    let dropdownHeaderElement = $$('a');\n    let content = $$('p');\n    content.text(l(this.dropdownHeaderLabel));\n    dropdownHeaderElement.el.appendChild(content.el);\n    let dropdownHeader = new ResponsiveDropdownHeader('recommendation', dropdownHeaderElement);\n    return dropdownHeader;\n  }\n\n  private buildDropdownContent(): RecommendationDropdownContent {\n    let dropdownContentElement: Dom;\n    let recommendationColumn = this.coveoRoot.find('.coveo-recommendation-column');\n    if (recommendationColumn) {\n      dropdownContentElement = $$(recommendationColumn);\n    } else {\n      dropdownContentElement = $$(this.coveoRoot.find('.' + Component.computeCssClassName(Recommendation)));\n    }\n\n    let dropdownContent = new RecommendationDropdownContent('recommendation', dropdownContentElement, this.coveoRoot);\n    return dropdownContent;\n  }\n\n  private defineResponsiveBreakpoint(options: IResponsiveComponentOptions): number {\n    let breakpoint;\n    if (Utils.isNullOrUndefined(options.responsiveBreakpoint)) {\n      breakpoint = ResponsiveRecommendation.RESPONSIVE_BREAKPOINT;\n    } else {\n      breakpoint = options.responsiveBreakpoint;\n    }\n    return breakpoint;\n  }\n\n  private getFacetSliders(): FacetSlider[] {\n    let facetSliders = [];\n    _.each(this.coveoRoot.findAll('.' + Component.computeCssClassName(FacetSlider)), facetSliderElement => {\n      let facetSlider = Component.get(facetSliderElement, FacetSlider);\n      if (facetSlider instanceof FacetSlider) {\n        facetSliders.push(facetSlider);\n      }\n    });\n    return facetSliders;\n  }\n\n  private getFacets(): Facet[] {\n    let facets = [];\n    _.each(this.coveoRoot.findAll('.' + Component.computeCssClassName(Facet)), facetElement => {\n      let facet = Component.get(facetElement, Facet);\n      if (facet instanceof Facet) {\n        facets.push(facet);\n      }\n    });\n    return facets;\n  }\n\n  private dismissFacetSearches(): void {\n    _.each(this.facets, facet => {\n      if (facet.facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n        facet.facetSearch.completelyDismissSearch();\n      }\n    });\n  }\n\n  private enableFacetPreservePosition(): void {\n    _.each(this.facets, facet => facet.options.preservePosition = true);\n  }\n\n  private disableFacetPreservePosition(): void {\n    _.each(this.facets, facet => facet.options.preservePosition = false);\n  }\n\n  private drawFacetSliderGraphs(): void {\n    _.each(this.facetSliders, facetSlider => facetSlider.drawDelayedGraphData());\n  }\n\n  private registerOnOpenHandler(): void {\n    this.dropdown.registerOnOpenHandler(this.drawFacetSliderGraphs, this);\n  }\n\n  private registerOnCloseHandler(): void {\n    this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n  }\n\n  private getRecommendationRoot(): Dom {\n    return $$(this.coveoRoot.find('.' + Component.computeCssClassName(Recommendation)));\n  }\n\n  private registerQueryEvents() {\n    let recommendationInstance = <Recommendation>get(this.recommendationRoot.el, SearchInterface);\n    if (recommendationInstance && recommendationInstance.options.hideIfNoResults) {\n      this.coveoRoot.on(QueryEvents.querySuccess, (e: Event, data: IQuerySuccessEventArgs) => this.handleRecommnendationQuerySucess(data));\n      this.coveoRoot.on(QueryEvents.noResults, (e: Event, data: INoResultsEventArgs) => this.handleRecommendationNoResults());\n    }\n    this.coveoRoot.on(QueryEvents.queryError, () => this.handleRecommendationQueryError());\n  }\n\n  private handleRecommnendationQuerySucess(data: IQuerySuccessEventArgs) {\n    if (data.results.totalCount === 0) {\n      this.dropdown.close();\n      this.dropdown.dropdownHeader.hide();\n    } else {\n      this.dropdown.dropdownHeader.show();\n    }\n  }\n\n  private handleRecommendationNoResults() {\n    this.dropdown.close();\n    this.dropdown.dropdownHeader.hide();\n  }\n\n  private handleRecommendationQueryError() {\n    this.dropdown.close();\n    this.dropdown.dropdownHeader.hide();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveRecommendation.ts\n **/","import { $$, Dom } from '../../utils/Dom';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { Component } from '../Base/Component';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResponsiveComponentsUtils } from './ResponsiveComponentsUtils';\nimport { Utils } from '../../utils/Utils';\nimport { Facet } from '../Facet/Facet';\nimport { Tab } from '../Tab/Tab';\nimport { ResponsiveFacets } from './ResponsiveFacets';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { Logger } from '../../misc/Logger';\nimport _ = require('underscore');\nimport { DeviceUtils } from '../../Index';\n\nexport interface IResponsiveComponentOptions {\n  enableResponsiveMode?: boolean;\n  responsiveBreakpoint?: number;\n  dropdownHeaderLabel?: string;\n}\n\nexport interface IResponsiveComponentConstructor {\n  new (root: Dom, ID: string, options: IResponsiveComponentOptions): IResponsiveComponent;\n}\n\nexport interface IResponsiveComponent {\n  ID: string;\n  handleResizeEvent(): void;\n  needDropdownWrapper?(): boolean;\n  registerComponent?(accept: Component): boolean;\n}\n\ninterface IComponentInitialization {\n  responsiveComponentsManager: ResponsiveComponentsManager;\n  arguments: [IResponsiveComponentConstructor, Dom, string, Component, IResponsiveComponentOptions];\n}\n\nexport class ResponsiveComponentsManager {\n\n  public static DROPDOWN_HEADER_WRAPPER_CSS_CLASS = 'coveo-dropdown-header-wrapper';\n  public static RESIZE_DEBOUNCE_DELAY = 200;\n\n  private static componentManagers: ResponsiveComponentsManager[] = [];\n  private static remainingComponentInitializations: number = 0;\n  private static componentInitializations: IComponentInitialization[] = [];\n\n  public resizeListener;\n\n  private disabledComponents: string[] = [];\n  private coveoRoot: Dom;\n  private responsiveComponents: IResponsiveComponent[] = [];\n  private searchBoxElement: HTMLElement;\n  private dropdownHeadersWrapper: Dom;\n  private searchInterface: SearchInterface;\n  private logger: Logger;\n\n  // Register takes a class and will instantiate it after framework initialization has completed.\n  public static register(responsiveComponentConstructor: IResponsiveComponentConstructor, root: Dom, ID: string, component: Component, options: IResponsiveComponentOptions): void {\n    root.on(InitializationEvents.afterInitialization, () => {\n      if (this.shouldEnableResponsiveMode(root)) {\n        let responsiveComponentsManager = _.find(this.componentManagers, (componentManager) => root.el == componentManager.coveoRoot.el);\n        if (!responsiveComponentsManager) {\n          responsiveComponentsManager = new ResponsiveComponentsManager(root);\n          this.componentManagers.push(responsiveComponentsManager);\n        }\n\n        if (!Utils.isNullOrUndefined(options.enableResponsiveMode) && !options.enableResponsiveMode) {\n          responsiveComponentsManager.disableComponent(ID);\n          return;\n        }\n\n        this.componentInitializations.push({\n          responsiveComponentsManager: responsiveComponentsManager,\n          arguments: [responsiveComponentConstructor, root, ID, component, options]\n        });\n      }\n\n      this.remainingComponentInitializations--;\n      if (this.remainingComponentInitializations == 0) {\n        this.instantiateResponsiveComponents(); // necessary to verify if all components are disabled before they are initialized.\n        if (root.width() == 0) {\n          let logger = new Logger('ResponsiveComponentsManager');\n          logger.info(`Search interface width is 0, cannot dispatch resize events to responsive components. Will try again after first\n          query success.`);\n          root.one(QueryEvents.querySuccess, () => {\n            this.resizeAllComponentsManager();\n          });\n        } else {\n          this.resizeAllComponentsManager();\n        }\n      }\n    });\n    this.remainingComponentInitializations++;\n  }\n\n  private static shouldEnableResponsiveMode(root: Dom): boolean {\n    let searchInterface = <SearchInterface>Component.get(root.el, SearchInterface, true);\n    return searchInterface instanceof SearchInterface && searchInterface.options.enableAutomaticResponsiveMode && searchInterface.isNewDesign();\n  }\n\n  private static instantiateResponsiveComponents() {\n    _.each(this.componentInitializations, componentInitialization => {\n      let responsiveComponentsManager = componentInitialization.responsiveComponentsManager;\n      responsiveComponentsManager.register.apply(responsiveComponentsManager, componentInitialization.arguments);\n    });\n  }\n\n  private static resizeAllComponentsManager(): void {\n    _.each(this.componentManagers, componentManager => {\n      componentManager.resizeListener();\n    });\n  }\n\n  constructor(root: Dom) {\n    this.coveoRoot = root;\n    this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);\n    this.dropdownHeadersWrapper = $$('div', { className: ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS });\n    this.searchBoxElement = this.getSearchBoxElement();\n    this.logger = new Logger(this);\n    this.resizeListener = _.debounce(() => {\n      if (this.coveoRoot.width() != 0) {\n        this.addDropdownHeaderWrapperIfNeeded();\n        if (this.shouldSwitchToSmallMode()) {\n          this.coveoRoot.addClass('coveo-small-interface');\n        } else if (!this.shouldSwitchToSmallMode()) {\n          this.coveoRoot.removeClass('coveo-small-interface');\n        }\n        _.each(this.responsiveComponents, responsiveComponent => {\n          responsiveComponent.handleResizeEvent();\n        });\n      } else {\n        this.logger.warn(`The width of the search interface is 0, cannot dispatch resize events to responsive components. This means that the tabs will not\n        automatically fit in the tab section. Also, the facet and recommendation component will not hide in a menu. Could the search\n        interface display property be none? Could its visibility property be set to hidden? Also, if either of these scenarios happen during\n        loading, it could be the cause of this issue.`);\n      }\n    }, ResponsiveComponentsManager.RESIZE_DEBOUNCE_DELAY);\n    if (!DeviceUtils.isMobileDevice()) {\n      window.addEventListener('resize', this.resizeListener);\n    }\n\n    this.bindNukeEvents();\n  }\n\n  public register(responsiveComponentConstructor: IResponsiveComponentConstructor, root: Dom, ID: string, component: Component, options: IResponsiveComponentOptions): void {\n    if (this.isDisabled(ID)) {\n      return;\n    }\n\n    if (!this.isActivated(ID)) {\n      let responsiveComponent = new responsiveComponentConstructor(root, ID, options);\n\n      if (this.isTabs(ID)) {\n        this.responsiveComponents.push(responsiveComponent);\n      } else {\n        // Tabs need to be rendered last, so any dropdown header(eg: facet) is already there when the responsive tabs check for overflow.\n        this.responsiveComponents.unshift(responsiveComponent);\n      }\n    }\n    _.each(this.responsiveComponents, (responsiveComponent: IResponsiveComponent) => {\n      if (responsiveComponent.registerComponent != null) {\n        responsiveComponent.registerComponent(component);\n      }\n    });\n  }\n\n  public disableComponent(ID: string) {\n    this.disabledComponents.push(ID);\n  }\n\n  private isDisabled(ID: string) {\n    return _.indexOf(this.disabledComponents, ID) != -1;\n  }\n\n  private shouldSwitchToSmallMode(): boolean {\n    let aComponentNeedsTabSection = this.needDropdownWrapper();\n    let reachedBreakpoint = this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getMediumScreenWidth();\n    return aComponentNeedsTabSection || reachedBreakpoint;\n  }\n\n  private needDropdownWrapper(): boolean {\n    for (let i = 0; i < this.responsiveComponents.length; i++) {\n      let responsiveComponent = this.responsiveComponents[i];\n      if (responsiveComponent.needDropdownWrapper && responsiveComponent.needDropdownWrapper()) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private addDropdownHeaderWrapperIfNeeded(): void {\n    if (this.needDropdownWrapper()) {\n      let tabSection = $$(this.coveoRoot).find('.coveo-tab-section');\n      if (this.searchBoxElement) {\n        this.dropdownHeadersWrapper.insertAfter(this.searchBoxElement);\n      } else if (tabSection) {\n        this.dropdownHeadersWrapper.insertAfter(tabSection);\n      } else {\n        this.coveoRoot.prepend(this.dropdownHeadersWrapper.el);\n      }\n    }\n  }\n\n  private isTabs(ID: string): boolean {\n    return ID == Tab.ID;\n  }\n\n  private isActivated(ID: string): boolean {\n    return _.find(this.responsiveComponents, current => current.ID == ID) != undefined;\n  }\n\n  private getSearchBoxElement(): HTMLElement {\n    let searchBoxElement = this.coveoRoot.find('.coveo-search-section');\n    if (searchBoxElement) {\n      return <HTMLElement>searchBoxElement;\n    } else {\n      return <HTMLElement>this.coveoRoot.find('.CoveoSearchbox');\n    }\n  }\n\n  private bindNukeEvents(): void {\n    $$(this.coveoRoot).on(InitializationEvents.nuke, () => {\n      window.removeEventListener('resize', this.resizeListener);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveComponentsManager.ts\n **/","import { ResponsiveTabs } from '../ResponsiveComponents/ResponsiveTabs.ts';\nimport { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { MODEL_EVENTS, IAttributeChangedEventArg } from '../../models/Model';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { QueryStateModel, QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { analyticsActionCauseList, IAnalyticsInterfaceChange } from '../Analytics/AnalyticsActionListMeta';\nimport { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { Initialization } from '../Base/Initialization';\nimport { Utils } from '../../utils/Utils';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport _ = require('underscore');\n\nexport interface ITabOptions {\n  expression?: string;\n  constant?: boolean;\n  id?: string;\n  icon?: string;\n  caption?: string;\n  sort?: string;\n  layout?: string;\n  endpoint?: SearchEndpoint;\n  enableDuplicateFiltering?: boolean;\n  pipeline?: string;\n  maximumAge?: number;\n  enableResponsiveMode?: boolean;\n  dropdownHeaderLabel?: string;\n}\n\n/**\n * The Tab component renders a bar that allows the end user to select a specific search interface.\n *\n * This component attaches itself to a `div` element. It is in charge of adding an advanced expression to the outgoing\n * query in order to refine the results.\n *\n * The Tab component can also hide and show different parts of the UI. For each individual component in the UI, you can\n * specify whether you wish to include or exclude that component when the user selects a certain Tab.\n *\n * **Including and Excluding Other HTML Components:**\n *\n * You can hide or show a specific HTML component based on the currently selected Tab by adding one of the following\n * attributes to its tag:\n *\n * - `<div data-tab=\"foobar\">`: Only include this element in the Tab with `foobar` as its `data-id`.\n * - `<div data-tab-not=\"foobar\">`: Do not include this element in the Tab with `foobar` as its `data-id`.\n * - `<div data-tab=\"foobar,somethingelse\">`: Only include this element in the Tab with `foobar` as its `data-id` and in\n * the Tab with `somethingelse` as its `data-id`.\n *\n * **Setting a New Endpoint for a Tab:**\n *\n * A Tab can use a custom endpoint when performing a query. Of course, you need to make sure that the endpoint exists in\n * the array of Coveo.SearchEndpoint.endpoints (see {@link SearchEndpoint.endpoints}).\n *\n * ```\n * Coveo.SearchEndpoint.endpoints[\"specialEndpoint\"] = new Coveo.SearchEndpoint({\n *     restUri : 'https://somewhere.com/rest/search'\n * })\n *\n * [ ... ]\n *\n * <div class='CoveoTab' data-endpoint='specialEndpoint'></div>\n *\n * ```\n */\nexport class Tab extends Component {\n  static ID = 'Tab';\n\n  /**\n   * The options for a Tab\n   * @componentOptions\n   */\n  static options: ITabOptions = {\n\n    /**\n     * Specifies a unique ID for the Tab.\n     *\n     * Specifying a value for this option is necessary for this component to work.\n     */\n    id: ComponentOptions.buildStringOption({ required: true }),\n\n    /**\n     * Specifies the caption of the Tab.\n     *\n     * Specifying a value for this option is necessary for this component to work.\n     */\n    caption: ComponentOptions.buildLocalizedStringOption({ required: true }),\n\n    /**\n     * Specifies an icon to use for the Tab.\n     *\n     * @deprecated This options is mostly kept for legacy reasons. If possible, you should avoid using it.\n     */\n    icon: ComponentOptions.buildIconOption(),\n\n    /**\n     * Specifies an advanced expression or filter that the Tab should add to any outgoing query.\n     *\n     * **Example:**\n     *\n     * `@objecttype==Message`\n     *\n     * Default value is `undefined` and the Tab applies no additional expression or filter to the query.\n     */\n    expression: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the {@link SearchEndpoint} to point to when performing queries from within the Tab.\n     *\n     * By default, the Tab uses the \"default\" endpoint.\n     */\n    endpoint: ComponentOptions.buildCustomOption((endpoint) => endpoint != null ? SearchEndpoint.endpoints[endpoint] : null),\n\n    /**\n     * Specifies the default sort criteria to use when selecting the Tab. A {@link Sort} component with the same\n     * parameter needs to be present in the search interface in order for this option to function properly.\n     *\n     * **Examples:**\n     *\n     * - `data-sort='relevancy'`\n     * - `data-sort='date descending'`\n     *\n     * Default value is `undefined` and the normal {@link Sort} component behavior applies.\n     */\n    sort: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the default layout to display when the user selects the Tab (see {@link ResultList.options.layout} and\n     * {@link ResultLayout}).\n     *\n     * See the {@link ValidLayout} type for the list of possible values.\n     *\n     * If not specified, it will default to 'list'.\n     *\n     * See also [Result Layouts](https://developers.coveo.com/x/yQUvAg).\n     *\n     * Default value is `undefined` and the component selects the first available layout.\n     */\n    layout: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies whether to include the {@link Tab.options.expression} in the constant part of the query.\n     *\n     * The index specially optimizes the constant part of the query to execute faster. However, you must be careful not\n     * to include dynamic query expressions, otherwise the cache will lose its efficiency.\n     *\n     * Default value is `true`.\n     */\n    constant: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to filter duplicates in the search results when the user selects the Tab.\n     *\n     * Setting this option to `true` forces duplicates to not appear in the search results. However, {@link Facet}\n     * counts still include duplicates, which can be confusing for the end user. This is a limitation of the index.\n     *\n     * **Example:**\n     *\n     * > The end user narrows a query down to one document that has a duplicate. If this options is `true` and the user\n     * > selects the Tab, only one document appears in the search results while the Facet count is still 2.\n     *\n     * **Note:**\n     *\n     * > It is also possible to enable duplicate filtering for the entire {@link SearchInterface} rather than for a\n     * > single Tab (see {@link SearchInterface.options.enableDuplicateFiltering}).\n     *\n     * Default value is `false`.\n     */\n    enableDuplicateFiltering: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the name of the query pipeline to use for the queries when the Tab is selected.\n     *\n     * You can specify a value for this option if your index is in a Coveo Cloud organization in which pipelines have\n     * been created (see [Managing Query Pipelines](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=128)).\n     *\n     * Default value is `undefined`, which means that pipeline selection conditions defined in the Coveo Cloud\n     * organization apply.\n     */\n    pipeline: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the maximum age (in milliseconds) that cached query results can have to still be usable as results\n     * instead of performing a new query on the index from within the Tab. The cache is located in the Coveo Search API\n     * (which resides between the index and the search interface).\n     *\n     * If cached results that are older than the age you specify in this option are available, a new query will be\n     * performed on the index anyhow.\n     *\n     * On high-volume public web sites, specifying a higher value for this option can greatly improve query response\n     * time at the cost of result freshness.\n     *\n     * **Note:**\n     *\n     * > It is also possible to set a maximum cache age for the entire {@link SearchInterface} rather than for a single\n     * > Tab (see {@link SearchInterface.options.maximumAge}).\n     *\n     * Default value is `undefined` and the Coveo Search API determines the maximum cache age. This is typically\n     * equivalent to 30 minutes (see [Query Parameters - maximumAge](https://developers.coveo.com/display/SearchREST/Query+Parameters#QueryParameters-maximumAge)).\n     */\n    maximumAge: ComponentOptions.buildNumberOption(),\n\n    /**\n     * Specifies whether to enable responsive mode for tabs. Responsive mode makes overflowing tabs disappear, instead\n     * making them available using a dropdown button. Responsive tabs are enabled either when tabs overflow or when the\n     * width of the search interface becomes too small.\n     *\n     * Disabling responsive mode for one Tab also disables it for all tabs. Therefore, you only need to set this option\n     * to `false` on one Tab to disable responsive mode.\n     *\n     * Default value is `true`.\n     */\n    enableResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the label of the button that allows to show the hidden tabs when in responsive mode.\n     *\n     * If more than one Tab in the search interface specifies a value for this option, then the framework uses the first\n     * occurrence of the option.\n     *\n     * The default value is `\"More\"`.\n     */\n    dropdownHeaderLabel: ComponentOptions.buildLocalizedStringOption()\n\n  };\n\n  private isFirstQuery = true;\n\n  /**\n   * Creates a new Tab. Binds on buildingQuery event as well as an event on click of the element.\n   * @param element The HTMLElement on which to instantiate the component. Normally a `div`.\n   * @param options The options for the Tab component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ITabOptions, bindings?: IComponentBindings) {\n    super(element, Tab.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Tab, options);\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.T, (args: IAttributeChangedEventArg) => this.handleQueryStateChanged(args));\n    const clickAction = () => this.handleClick();\n    this.bind.on(element, 'click', clickAction);\n    this.bind.on(element, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clickAction));\n    this.render();\n    ResponsiveTabs.init(this.root, this, this.options);\n  }\n\n  /**\n   * Selects the current Tab.\n   *\n   * Also logs the `interfaceChange` event in the usage analytics with the new current {@link Tab.options.id} as metada\n   * and triggers a new query.\n   */\n  public select() {\n    if (!this.disabled) {\n      let currentLayout = this.queryStateModel.get(QUERY_STATE_ATTRIBUTES.LAYOUT);\n      this.queryStateModel.setMultiple({\n        t: this.options.id,\n        sort: this.options.sort || QueryStateModel.defaultAttributes.sort,\n        layout: this.options.layout || currentLayout || QueryStateModel.defaultAttributes.layout\n      });\n      this.usageAnalytics.logSearchEvent<IAnalyticsInterfaceChange>(analyticsActionCauseList.interfaceChange, { interfaceChangeTo: this.options.id });\n      this.queryController.executeQuery();\n    }\n  }\n\n  /**\n   * Indicates whether the HTMLElement argument is included in the Tab. *Included* elements are shown when the Tab is\n   * selected, whereas *excluded* elements are not.\n   * @param element The HTMLElement to verify.\n   * @returns {boolean} `true` if the HTMLElement is included in the Tab; `false` if it is excluded.\n   */\n  public isElementIncludedInTab(element: HTMLElement): boolean {\n    Assert.exists(element);\n\n    var includedTabs = this.splitListOfTabs(element.getAttribute('data-tab'));\n    var excludedTabs = this.splitListOfTabs(element.getAttribute('data-tab-not'));\n    Assert.check(!(includedTabs.length != 0 && excludedTabs.length != 0), 'You cannot both explicitly include and exclude an element from tabs.');\n\n    return (includedTabs.length != 0 && _.indexOf(includedTabs, this.options.id) != -1) ||\n      (excludedTabs.length != 0 && _.indexOf(excludedTabs, this.options.id) == -1) ||\n      (includedTabs.length == 0 && excludedTabs.length == 0);\n  }\n\n  private handleClick() {\n    this.select();\n  }\n\n  private render() {\n    var icon = this.options.icon;\n    if (Utils.isNonEmptyString(icon)) {\n      var iconSpan = $$('span').el;\n      $$(iconSpan).addClass(['coveo-icon', icon]);\n      this.element.insertBefore(iconSpan, this.element.firstChild);\n    }\n\n    var caption = this.options.caption;\n    if (Utils.isNonEmptyString(caption)) {\n      var captionP = document.createElement('p');\n      $$(captionP).text(caption);\n      this.element.appendChild(captionP);\n    }\n    this.element.setAttribute('tabindex', '0');\n  }\n\n  protected handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    this.isFirstQuery = false;\n    if (!this.disabled && this.isSelected()) {\n      data.queryBuilder.tab = this.options.id;\n\n      if (Utils.isNonEmptyString(this.options.expression)) {\n        if (this.options.constant) {\n          data.queryBuilder.constantExpression.add(this.options.expression);\n        } else {\n          data.queryBuilder.advancedExpression.add(this.options.expression);\n        }\n      }\n\n      if (this.options.enableDuplicateFiltering) {\n        data.queryBuilder.enableDuplicateFiltering = true;\n      }\n\n      if (this.options.pipeline != null) {\n        data.queryBuilder.pipeline = this.options.pipeline;\n      }\n\n      if (this.options.maximumAge != null) {\n        data.queryBuilder.maximumAge = this.options.maximumAge;\n      }\n    }\n  }\n\n  private handleQueryStateChanged(data: IAttributeChangedEventArg) {\n    Assert.exists(data);\n    if (!this.disabled && this.isSelected()) {\n      $$(this.element).addClass('coveo-selected');\n      this.queryController.setEndpoint(this.options.endpoint);\n      this.showAndHideAppropriateElements();\n    } else {\n      $$(this.element).removeClass('coveo-selected');\n    }\n  }\n\n  protected isSelected(): boolean {\n    var activeTab = this.queryStateModel.get(QueryStateModel.attributesEnum.t);\n    return activeTab == this.options.id;\n  }\n\n  private showAndHideAppropriateElements() {\n    var showElements = [];\n    var hideElements = [];\n\n    _.each($$(this.root).findAll('[data-tab],[data-tab-not]'), (element) => {\n      if (this.isElementIncludedInTab(element)) {\n        this.toggleAllComponentsUnder(element, true);\n        showElements.push(element);\n      } else {\n        this.toggleAllComponentsUnder(element, false);\n        hideElements.push(element);\n      }\n    });\n\n    $$(this.root).one(QueryEvents.querySuccess, () => {\n      _.each(showElements, (elem) => $$(elem).removeClass('coveo-tab-disabled'));\n      _.each(hideElements, (elem) => $$(elem).addClass('coveo-tab-disabled'));\n    });\n  }\n\n  private splitListOfTabs(value: string): string[] {\n    if (Utils.exists(value)) {\n      return _.map(value.split(','), (tab) => Utils.trim(tab));\n    } else {\n      return [];\n    }\n  }\n\n  private toggleAllComponentsUnder(element: HTMLElement, enable: boolean) {\n    Assert.exists(element);\n\n    var togglePossibleComponent = (possibleComponent: HTMLElement) => {\n      var possibleCmp = Component.get(possibleComponent, undefined, true);\n      if (possibleCmp) {\n        if (enable) {\n          possibleCmp.enable();\n        } else {\n          possibleCmp.disable();\n        }\n      }\n    };\n\n    togglePossibleComponent(element);\n    _.each($$(element).findAll('*'), (el) => {\n      togglePossibleComponent(el);\n    });\n  }\n\n  public enable() {\n    super.enable();\n    this.element.style.display = '';\n  }\n\n  public disable() {\n    super.disable();\n    this.element.style.display = 'none';\n  }\n}\n\nInitialization.registerAutoCreateComponent(Tab);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Tab/Tab.ts\n **/","import { $$, Dom } from '../../utils/Dom';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { PopupUtils, HorizontalAlignment, VerticalAlignment } from '../../utils/PopupUtils';\nimport { EventsUtils } from '../../utils/EventsUtils';\nimport { Utils } from '../../utils/Utils';\nimport { Logger } from '../../misc/Logger';\nimport { Component } from '../Base/Component';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { Tab } from '../Tab/Tab';\nimport { IResponsiveComponent, ResponsiveComponentsManager, IResponsiveComponentOptions } from './ResponsiveComponentsManager';\nimport { ResponsiveComponentsUtils } from './ResponsiveComponentsUtils';\nimport { l } from '../../strings/Strings';\nimport { ResponsiveComponents } from './ResponsiveComponents';\nimport _ = require('underscore');\n\nexport class ResponsiveTabs implements IResponsiveComponent {\n\n  private static DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'More';\n  private static logger: Logger;\n\n  private dropdownHeader: Dom;\n  private dropdownContent: Dom;\n  private tabSection: Dom;\n  private previousSibling: Dom;\n  private parent: Dom;\n  private searchBoxElement: HTMLElement;\n  private documentClickListener: EventListener;\n  private searchInterface: SearchInterface;\n  private dropdownHeaderLabel: string;\n\n  constructor(private coveoRoot: Dom, public ID: string) {\n    this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n    this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);\n    this.searchBoxElement = this.getSearchBoxElement();\n    this.dropdownContent = this.buildDropdownContent();\n    this.dropdownHeader = this.buildDropdownHeader();\n    this.bindDropdownContentEvents();\n    this.bindDropdownHeaderEvents();\n    this.tabSection = $$(<HTMLElement>this.coveoRoot.find('.coveo-tab-section'));\n    this.manageTabSwapping();\n    this.saveTabsPosition();\n    this.bindNukeEvents();\n  }\n\n  public static init(root: HTMLElement, component: Component, options: IResponsiveComponentOptions) {\n    this.logger = new Logger('ResponsiveTabs');\n    if (!$$(root).find('.coveo-tab-section')) {\n      this.logger.info('No element with class coveo-tab-section. Responsive tabs cannot be enabled.');\n      return;\n    }\n    ResponsiveComponentsManager.register(ResponsiveTabs, $$(root), Tab.ID, component, options);\n  }\n\n  public handleResizeEvent(): void {\n    if (this.needSmallMode() && !ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n      this.changeToSmallMode();\n    } else if (!this.needSmallMode() && ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n      this.changeToLargeMode();\n    }\n\n    let tabs = this.getTabsInTabSection();\n    if (this.shouldAddTabsToDropdown()) {\n      this.addTabsToDropdown(tabs);\n    } else if (this.shouldRemoveTabsFromDropdown()) {\n      this.removeTabsFromDropdown(tabs);\n    }\n\n    if (this.dropdownHeader.hasClass('coveo-dropdown-header-active')) {\n      this.positionPopup();\n    }\n  };\n\n  private needSmallMode(): boolean {\n    let mediumWidth = this.searchInterface ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : new ResponsiveComponents().getMediumScreenWidth();\n    if (this.coveoRoot.width() <= mediumWidth) {\n      return true;\n    } else if (!ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot)) {\n      return this.isOverflowing(this.tabSection.el);\n    } else {\n      return this.isLargeFormatOverflowing();\n    }\n  }\n\n  private changeToSmallMode(): void {\n    ResponsiveComponentsUtils.activateSmallTabs(this.coveoRoot);\n  }\n\n  private changeToLargeMode(): void {\n    this.emptyDropdown();\n    this.cleanUpDropdown();\n    ResponsiveComponentsUtils.deactivateSmallTabs(this.coveoRoot);\n  }\n\n  private shouldAddTabsToDropdown(): boolean {\n    return this.isOverflowing(this.tabSection.el) && ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot);\n  }\n\n  private addTabsToDropdown(tabs: HTMLElement[]): void {\n    let currentTab;\n    if (!this.tabSection.find('.coveo-tab-dropdown-header')) {\n      let facetDropdownHeader = this.tabSection.find('.coveo-facet-dropdown-header');\n      if (facetDropdownHeader) {\n        this.dropdownHeader.insertBefore(facetDropdownHeader);\n      } else {\n        this.tabSection.el.appendChild(this.dropdownHeader.el);\n      }\n    }\n    for (let i = tabs.length - 1; i >= 0; i--) {\n      currentTab = tabs[i];\n\n      if ($$(currentTab).hasClass('coveo-selected') && i > 0) {\n        currentTab = tabs[--i];\n      }\n\n      this.addToDropdown(currentTab);\n\n      if (!this.isOverflowing(this.tabSection.el)) {\n        break;\n      }\n    }\n  }\n\n  private shouldRemoveTabsFromDropdown(): boolean {\n    return !this.isOverflowing(this.tabSection.el) && ResponsiveComponentsUtils.isSmallTabsActivated(this.coveoRoot) && !this.isDropdownEmpty();\n  }\n\n  private removeTabsFromDropdown(tabs: HTMLElement[]) {\n    let dropdownTabs = this.dropdownContent.findAll('.coveo-tab-dropdown');\n    let lastTabInSection: HTMLElement, current: HTMLElement;\n    if (tabs) {\n      lastTabInSection = tabs.pop();\n    }\n\n    while (!this.isOverflowing(this.tabSection.el) && !this.isDropdownEmpty()) {\n      current = dropdownTabs.shift();\n      this.removeFromDropdown(current);\n      this.fromDropdownToTabSection($$(current), lastTabInSection);\n      lastTabInSection = _.clone(current);\n    }\n\n    if (this.isOverflowing(this.tabSection.el)) {\n      let tabs = this.getTabsInTabSection();\n      this.addToDropdown(tabs.pop());\n    }\n\n    if (this.isDropdownEmpty()) {\n      this.cleanUpDropdown();\n    }\n  }\n\n  private emptyDropdown(): void {\n    if (!this.isDropdownEmpty()) {\n      let dropdownTabs = this.dropdownContent.findAll('.coveo-tab-dropdown');\n      let tabs = this.getTabsInTabSection();\n      let lastTabInSection: HTMLElement;\n      if (tabs) {\n        lastTabInSection = tabs.pop();\n      }\n      while (!this.isDropdownEmpty()) {\n        let current = dropdownTabs.shift();\n        this.removeFromDropdown(current);\n        $$(current).insertBefore(this.dropdownHeader.el);\n        this.fromDropdownToTabSection($$(current), lastTabInSection);\n        lastTabInSection = _.clone(current);\n      }\n    }\n  }\n\n  private isLargeFormatOverflowing(): boolean {\n    let virtualTabSection = $$(<HTMLElement>this.tabSection.el.cloneNode(true));\n\n    let dropdownHeader = virtualTabSection.find('.coveo-tab-dropdown-header');\n    if (dropdownHeader) {\n      virtualTabSection.el.removeChild(dropdownHeader);\n    }\n\n    virtualTabSection.el.style.position = 'absolute';\n    virtualTabSection.el.style.visibility = 'hidden';\n\n    if (!this.isDropdownEmpty()) {\n      _.each(this.dropdownContent.findAll('.CoveoTab'), tab => {\n        virtualTabSection.el.appendChild(tab.cloneNode(true));\n      });\n    }\n    virtualTabSection.insertBefore(this.tabSection.el);\n\n    ResponsiveComponentsUtils.deactivateSmallTabs(this.coveoRoot);\n    let isOverflowing = this.isOverflowing(virtualTabSection.el);\n    ResponsiveComponentsUtils.activateSmallTabs(this.coveoRoot);\n\n\n    virtualTabSection.detach();\n    return isOverflowing;\n  }\n\n  private isOverflowing(el: HTMLElement) {\n    return el.clientWidth < el.scrollWidth;\n  }\n\n  private buildDropdownHeader(): Dom {\n    let dropdownHeader = $$('a', { className: 'coveo-dropdown-header coveo-tab-dropdown-header' });\n    let content = $$('p');\n    content.text(this.dropdownHeaderLabel);\n    content.el.appendChild($$('span', { className: 'coveo-sprites-more-tabs' }).el);\n    dropdownHeader.el.appendChild(content.el);\n    return dropdownHeader;\n  }\n\n  private bindDropdownHeaderEvents() {\n    this.dropdownHeader.on('click', () => {\n      if (!this.dropdownHeader.hasClass('coveo-dropdown-header-active')) {\n        this.positionPopup();\n        this.dropdownHeader.addClass('coveo-dropdown-header-active');\n      } else {\n        this.closeDropdown();\n      }\n    });\n  }\n\n  private buildDropdownContent() {\n    let dropdownContent = $$('div', { className: 'coveo-tab-list-container ' + SearchInterface.SMALL_INTERFACE_CLASS_NAME });\n    let contentList = $$('ol', { className: 'coveo-tab-list' });\n    dropdownContent.el.appendChild(contentList.el);\n    return dropdownContent;\n  }\n\n  private bindDropdownContentEvents() {\n    this.documentClickListener = event => {\n      if (Utils.isHtmlElement(event.target)) {\n        let eventTarget = $$(<HTMLElement>event.target);\n        if (!eventTarget.closest('coveo-tab-list-container') && !eventTarget.closest('coveo-tab-dropdown-header') && !eventTarget.closest('coveo-tab-dropdown')) {\n          this.closeDropdown();\n        }\n      }\n    };\n    $$(document.documentElement).on('click', this.documentClickListener);\n  }\n\n  private closeDropdown(): void {\n    this.dropdownContent.detach();\n    this.dropdownHeader.removeClass('coveo-dropdown-header-active');\n  }\n\n  private addToDropdown(el: HTMLElement) {\n    if (this.dropdownContent) {\n      $$(el).addClass('coveo-tab-dropdown');\n      let list = this.dropdownContent.find('ol');\n      let listElement = $$('li');\n      listElement.el.appendChild(el);\n      $$(<HTMLElement>list).prepend(listElement.el);\n    }\n  }\n\n  private removeFromDropdown(el: HTMLElement) {\n    if (this.dropdownContent) {\n      $$(el).removeClass('coveo-tab-dropdown');\n      $$(el.parentElement).detach();\n    }\n  }\n\n  private cleanUpDropdown() {\n    this.dropdownHeader.removeClass('coveo-dropdown-header-active');\n    this.dropdownHeader.detach();\n    this.dropdownContent.detach();\n  }\n\n  private isDropdownEmpty(): boolean {\n    if (this.dropdownContent) {\n      let tabs = this.dropdownContent.findAll('.CoveoTab');\n      return tabs.length == 0;\n    }\n    return false;\n  }\n\n  private manageTabSwapping() {\n    _.each(this.coveoRoot.findAll('.' + Component.computeCssClassNameForType(this.ID)), tabElement => {\n      let tab = $$(tabElement);\n      let fadeOutFadeIn = (event) => {\n        let tabsInSection = this.getTabsInTabSection();\n        let lastTabInSection = tabsInSection.pop();\n        let lastTabSectionSibling = lastTabInSection.previousSibling;\n        if (event.propertyName == 'opacity') {\n          if (tab.el.style.opacity == '0') {\n\n            $$(lastTabInSection).addClass('coveo-tab-dropdown');\n            tab.replaceWith(lastTabInSection);\n            tab.removeClass('coveo-tab-dropdown');\n\n            this.fromDropdownToTabSection(tab, <HTMLElement>lastTabSectionSibling);\n\n            // Because of the DOM manipulation, sometimes the animation will not trigger. Accessing the computed styles makes sure\n            // the animation will happen.\n            window.getComputedStyle(tab.el).opacity;\n            window.getComputedStyle(lastTabInSection).opacity;\n\n            tab.el.style.opacity = lastTabInSection.style.opacity = '1';\n          } else if (tab.el.style.opacity == '1') {\n            this.closeDropdown();\n            EventsUtils.removePrefixedEvent(tab.el, 'TransitionEnd', fadeOutFadeIn);\n            this.handleResizeEvent();\n          }\n        }\n      };\n\n      tab.on('click', () => {\n        if (tab.hasClass('coveo-tab-dropdown')) {\n          let tabsInSection = this.getTabsInTabSection();\n          let lastTabInSection = tabsInSection.pop();\n          if (lastTabInSection) {\n            EventsUtils.addPrefixedEvent(tab.el, 'TransitionEnd', fadeOutFadeIn);\n            tab.el.style.opacity = lastTabInSection.style.opacity = '0';\n          }\n        }\n      });\n    });\n  }\n\n  private getSearchBoxElement(): HTMLElement {\n    let searchBoxElement = this.coveoRoot.find('.coveo-search-section');\n    if (searchBoxElement) {\n      return <HTMLElement>searchBoxElement;\n    } else {\n      return <HTMLElement>this.coveoRoot.find('.CoveoSearchbox');\n    }\n  }\n\n  private saveTabsPosition() {\n    this.previousSibling = this.tabSection.el.previousSibling ? $$(<HTMLElement>this.tabSection.el.previousSibling) : null;\n    this.parent = $$(this.tabSection.el.parentElement);\n  }\n\n  private bindNukeEvents() {\n    $$(this.coveoRoot).on(InitializationEvents.nuke, () => {\n      $$(document.documentElement).off('click', this.documentClickListener);\n    });\n  }\n\n  private positionPopup() {\n    PopupUtils.positionPopup(this.dropdownContent.el, this.dropdownHeader.el, this.coveoRoot.el,\n      { horizontal: HorizontalAlignment.INNERRIGHT, vertical: VerticalAlignment.BOTTOM }, this.coveoRoot.el);\n  }\n\n  private getTabsInTabSection(): HTMLElement[] {\n    let tabsInSection = [];\n    _.each(this.tabSection.el.children, childElement => {\n      if (Utils.isHtmlElement(childElement)) {\n        let child = $$(<HTMLElement>childElement);\n        if (!child.hasClass('coveo-tab-dropdown') && child.hasClass(Component.computeCssClassNameForType(this.ID))) {\n          tabsInSection.push(child.el);\n        }\n      }\n    });\n    return tabsInSection;\n  }\n\n  private fromDropdownToTabSection(tab: Dom, lastTabInTabSection: HTMLElement) {\n    if (lastTabInTabSection) {\n      tab.insertAfter(<HTMLElement>lastTabInTabSection);\n    } else {\n      this.tabSection.prepend(tab.el);\n    }\n  }\n\n  private getDropdownHeaderLabel() {\n    let dropdownHeaderLabel: string;\n    _.each($$(this.coveoRoot.find('.coveo-tab-section')).findAll('.' + Component.computeCssClassName(Tab)), tabElement => {\n      let tab = <Tab>Component.get(tabElement, Tab);\n      if (!dropdownHeaderLabel && tab.options.dropdownHeaderLabel) {\n        dropdownHeaderLabel = tab.options.dropdownHeaderLabel;\n      }\n    });\n\n    if (!dropdownHeaderLabel) {\n      dropdownHeaderLabel = l(ResponsiveTabs.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n    }\n\n    return dropdownHeaderLabel;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveTabs.ts\n **/","import _ = require('underscore');\n\nexport class EventsUtils {\n  private static prefixes = ['webkit', 'moz', 'MS', 'o', ''];\n\n  // eventName must be in PascalCase\n  public static addPrefixedEvent(element: HTMLElement, pascalCaseEventName: string, callback) {\n    _.each(this.prefixes, prefix => {\n      if (prefix == '') {\n        pascalCaseEventName = pascalCaseEventName.toLowerCase();\n      }\n      element.addEventListener(prefix + pascalCaseEventName, callback, false);\n    });\n  }\n\n  // eventName must be in PascalCase\n  public static removePrefixedEvent(element: HTMLElement, pascalCaseEventName: string, callback) {\n    _.each(this.prefixes, prefix => {\n      if (prefix == '') {\n        pascalCaseEventName = pascalCaseEventName.toLowerCase();\n      }\n      element.removeEventListener(prefix + pascalCaseEventName, callback, false);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/EventsUtils.ts\n **/","import { Dom } from '../../utils/Dom';\n\nexport class ResponsiveComponentsUtils {\n\n  private static smallTabsClassName: string = 'coveo-small-tabs';\n  private static smallFacetClassName: string = 'coveo-small-facets';\n  private static smallRecommendationClassName: string = 'coveo-small-recommendation';\n\n  static shouldDrawFacetSlider(root: Dom): boolean {\n    return !this.isSmallFacetActivated(root) && !this.isSmallRecommendationActivated(root);\n  }\n\n  static isSmallTabsActivated(root: Dom): boolean {\n    return root.hasClass(this.smallTabsClassName);\n  }\n\n  static isSmallFacetActivated(root: Dom): boolean {\n    return root.hasClass(this.smallFacetClassName);\n  }\n\n  static isSmallRecommendationActivated(root: Dom): boolean {\n    return root.hasClass(this.smallRecommendationClassName);\n  }\n\n  static activateSmallTabs(root: Dom): void {\n    root.addClass(this.smallTabsClassName);\n  }\n\n  static deactivateSmallTabs(root: Dom): void {\n    root.removeClass(this.smallTabsClassName);\n  }\n\n  static activateSmallFacet(root: Dom): void {\n    root.addClass(this.smallFacetClassName);\n  }\n\n  static deactivateSmallFacet(root: Dom): void {\n    root.removeClass(this.smallFacetClassName);\n  }\n\n  static activateSmallRecommendation(root: Dom): void {\n    root.addClass(this.smallRecommendationClassName);\n  }\n\n  static deactivateSmallRecommendation(root: Dom): void {\n    root.removeClass(this.smallRecommendationClassName);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveComponentsUtils.ts\n **/","import { IResponsiveDropdownContent, ResponsiveDropdownContent } from './ResponsiveDropdownContent';\nimport { $$, Dom } from '../../../utils/Dom';\n\nexport class RecommendationDropdownContent implements IResponsiveDropdownContent {\n\n  public static OPENED_DROPDOWN_CSS_CLASS_NAME = 'coveo-open-dropdown-content';\n\n  private cssClassName: string;\n\n  constructor(componentName: string, public element: Dom, private coveoRoot: Dom) {\n    this.cssClassName = `coveo-${componentName}-dropdown-content`;\n    this.element.addClass(this.cssClassName);\n    this.element.addClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n  }\n\n  public positionDropdown() {\n    this.element.el.style.display = '';\n\n    let dropdownContentWrapper = this.coveoRoot.find('.coveo-results-column');\n    $$(dropdownContentWrapper).prepend(this.element.el);\n    this.element.addClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n    this.element.addClass(this.cssClassName);\n\n    // forces the browser to reflow the element, so that the transition is applied.\n    window.getComputedStyle(this.element.el).maxHeight;\n\n    this.element.addClass(RecommendationDropdownContent.OPENED_DROPDOWN_CSS_CLASS_NAME);\n  }\n\n  public hideDropdown() {\n    this.element.addClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n    this.element.addClass(this.cssClassName);\n\n    this.element.removeClass(RecommendationDropdownContent.OPENED_DROPDOWN_CSS_CLASS_NAME);\n  }\n\n  public cleanUp() {\n    this.element.removeClass(this.cssClassName);\n    this.element.removeClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveDropdown/RecommendationDropdownContent.ts\n **/","import { $$, Dom } from '../../../utils/Dom';\nimport { PopupUtils, HorizontalAlignment, VerticalAlignment } from '../../../utils/PopupUtils';\nimport { ResponsiveComponentsManager } from '../ResponsiveComponentsManager';\n\nexport interface IResponsiveDropdownContent {\n  element: Dom;\n\n  positionDropdown(): void;\n  hideDropdown(): void;\n  cleanUp(): void;\n}\n\nexport class ResponsiveDropdownContent implements IResponsiveDropdownContent {\n  public static DEFAULT_CSS_CLASS_NAME = 'coveo-dropdown-content';\n\n  private coveoRoot: Dom;\n  private cssClassName: string;\n\n  private widthRatio: number;\n  private minWidth: number;\n\n  constructor(componentName: string, public element: Dom, coveoRoot: Dom, minWidth: number, widthRatio: number) {\n    this.cssClassName = `coveo-${componentName}-dropdown-content`;\n    this.coveoRoot = coveoRoot;\n    this.widthRatio = widthRatio;\n    this.minWidth = minWidth;\n  }\n\n  public positionDropdown() {\n    this.element.addClass(this.cssClassName);\n    this.element.addClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n    this.element.el.style.display = '';\n\n    let width = this.widthRatio * this.coveoRoot.width();\n    if (width <= this.minWidth) {\n      width = this.minWidth;\n    }\n    this.element.el.style.width = width.toString() + 'px';\n\n    PopupUtils.positionPopup(this.element.el, $$(this.coveoRoot.find(`.${ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS}`)).el, this.coveoRoot.el,\n      { horizontal: HorizontalAlignment.INNERRIGHT, vertical: VerticalAlignment.BOTTOM, verticalOffset: 15 }, this.coveoRoot.el);\n  }\n\n  public hideDropdown() {\n    this.element.el.style.display = 'none';\n    this.element.removeClass(this.cssClassName);\n    this.element.removeClass(ResponsiveDropdownContent.DEFAULT_CSS_CLASS_NAME);\n  }\n\n  public cleanUp() {\n    this.element.el.removeAttribute('style');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownContent.ts\n **/","import { Dom, $$ } from '../../../utils/Dom';\n\nexport class ResponsiveDropdownHeader {\n\n  public static DEFAULT_CSS_CLASS_NAME = 'coveo-dropdown-header';\n  public static ACTIVE_HEADER_CSS_CLASS_NAME: string = 'coveo-dropdown-header-active';\n\n  constructor(componentName: string, public element: Dom) {\n    this.element.addClass(`coveo-${componentName}-dropdown-header`);\n    this.element.addClass(ResponsiveDropdownHeader.DEFAULT_CSS_CLASS_NAME);\n  }\n\n  public open() {\n    this.element.addClass(ResponsiveDropdownHeader.ACTIVE_HEADER_CSS_CLASS_NAME);\n  }\n\n  public close() {\n    this.element.removeClass(ResponsiveDropdownHeader.ACTIVE_HEADER_CSS_CLASS_NAME);\n  }\n\n  public cleanUp() {\n    this.element.detach();\n  }\n\n  public hide() {\n    $$(this.element).addClass('coveo-hidden');\n  }\n\n  public show() {\n    $$(this.element).removeClass('coveo-hidden');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdownHeader.ts\n **/","import { ResponsiveDropdownHeader } from './ResponsiveDropdownHeader';\nimport { IResponsiveDropdownContent } from './ResponsiveDropdownContent';\nimport { $$, Dom } from '../../../utils/Dom';\nimport { EventsUtils } from '../../../utils/EventsUtils';\nimport _ = require('underscore');\n\ntype HandlerCall = { handler: Function, context: any };\n\nexport class ResponsiveDropdown {\n\n  public static TRANSPARENT_BACKGROUND_OPACITY: string = '0.9';\n  public static DROPDOWN_BACKGROUND_CSS_CLASS_NAME: string = 'coveo-dropdown-background';\n\n  public isOpened: boolean = false;\n\n  private onOpenHandlers: HandlerCall[] = [];\n  private onCloseHandlers: HandlerCall[] = [];\n  private popupBackground: Dom;\n  private popupBackgroundIsEnabled: boolean = true;\n  private previousSibling: Dom;\n  private parent: Dom;\n\n  constructor(public dropdownContent: IResponsiveDropdownContent, public dropdownHeader: ResponsiveDropdownHeader, public coveoRoot: Dom) {\n    this.popupBackground = this.buildPopupBackground();\n    this.bindOnClickDropdownHeaderEvent();\n    this.saveContentPosition();\n  }\n\n  public registerOnOpenHandler(handler: Function, context) {\n    this.onOpenHandlers.push({ handler: handler, context: context });\n  }\n\n  public registerOnCloseHandler(handler: Function, context) {\n    this.onCloseHandlers.push({ handler: handler, context: context });\n  }\n\n  public cleanUp() {\n    this.close();\n    this.dropdownHeader.cleanUp();\n    this.dropdownContent.cleanUp();\n    this.restoreContentPosition();\n  }\n\n  public open() {\n    this.isOpened = true;\n    this.dropdownHeader.open();\n    this.dropdownContent.positionDropdown();\n    _.each(this.onOpenHandlers, handlerCall => {\n      handlerCall.handler.apply(handlerCall.context);\n    });\n    this.showPopupBackground();\n  }\n\n  public close() {\n    this.isOpened = false;\n    _.each(this.onCloseHandlers, handlerCall => {\n      handlerCall.handler.apply(handlerCall.context);\n    });\n\n    this.dropdownHeader.close();\n    this.dropdownContent.hideDropdown();\n\n    this.hidePopupBackground();\n  }\n\n  public disablePopupBackground() {\n    this.popupBackgroundIsEnabled = false;\n  }\n\n  private bindOnClickDropdownHeaderEvent() {\n    this.dropdownHeader.element.on('click', () => {\n      if (this.isOpened) {\n        this.close();\n      } else {\n        this.open();\n      }\n    });\n  }\n\n  private showPopupBackground() {\n    if (this.popupBackgroundIsEnabled) {\n      this.coveoRoot.el.appendChild(this.popupBackground.el);\n      window.getComputedStyle(this.popupBackground.el).opacity;\n      this.popupBackground.el.style.opacity = ResponsiveDropdown.TRANSPARENT_BACKGROUND_OPACITY;\n    }\n  }\n\n  private hidePopupBackground() {\n    if (this.popupBackgroundIsEnabled) {\n      // forces the browser to reflow the element, so that the transition is applied.\n      window.getComputedStyle(this.popupBackground.el).opacity;\n      this.popupBackground.el.style.opacity = '0';\n    }\n  }\n\n  private buildPopupBackground(): Dom {\n    let popupBackground = $$('div', { className: ResponsiveDropdown.DROPDOWN_BACKGROUND_CSS_CLASS_NAME });\n    EventsUtils.addPrefixedEvent(popupBackground.el, 'TransitionEnd', () => {\n      if (popupBackground.el.style.opacity == '0') {\n        popupBackground.detach();\n      }\n    });\n    popupBackground.on('click', () => this.close());\n    return popupBackground;\n  }\n\n  private saveContentPosition() {\n    let dropdownContentPreviousSibling = this.dropdownContent.element.el.previousSibling;\n    let dropdownContentParent = this.dropdownContent.element.el.parentElement;\n    this.previousSibling = dropdownContentPreviousSibling ? $$(<HTMLElement>dropdownContentPreviousSibling) : null;\n    this.parent = $$(dropdownContentParent);\n  }\n\n  private restoreContentPosition() {\n    if (this.previousSibling) {\n      this.dropdownContent.element.insertAfter(this.previousSibling.el);\n    } else {\n      this.parent.prepend(this.dropdownContent.element.el);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveDropdown/ResponsiveDropdown.ts\n **/","/// <reference path=\"../Facet/FacetHeader.ts\" />\n/// <reference path=\"../../controllers/FacetSliderQueryController.ts\" />\n\nimport { ISliderOptions, Slider, IEndSlideEventArgs, IDuringSlideEventArgs, ISliderGraphData } from '../Misc/Slider';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { ResponsiveFacets } from '../ResponsiveComponents/ResponsiveFacets';\nimport { FacetHeader } from '../Facet/FacetHeader';\nimport { l } from '../../strings/Strings';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { FacetSliderQueryController } from '../../controllers/FacetSliderQueryController';\nimport { QueryEvents, IQuerySuccessEventArgs, IBuildingQueryEventArgs, IDoneBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { BreadcrumbEvents, IPopulateBreadcrumbEventArgs, IBreadcrumbItem } from '../../events/BreadcrumbEvents';\nimport { IAttributeChangedEventArg, Model } from '../../models/Model';\nimport { $$ } from '../../utils/Dom';\nimport { analyticsActionCauseList, IAnalyticsFacetMeta, IAnalyticsFacetSliderChangeMeta, IAnalyticsFacetGraphSelectedMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { SliderEvents, IGraphValueSelectedArgs } from '../../events/SliderEvents';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { ResponsiveComponentsUtils } from '../ResponsiveComponents/ResponsiveComponentsUtils';\nimport { Initialization } from '../Base/Initialization';\nimport d3 = require('d3');\nimport { SearchAlertsEvents, ISearchAlertsPopulateMessageEventArgs } from '../../events/SearchAlertEvents';\nimport _ = require('underscore');\n\nimport { IGroupByResult } from '../../rest/GroupByResult';\nexport interface IFacetSliderOptions extends ISliderOptions {\n  dateField?: boolean;\n  queryOverride?: string;\n  id?: string;\n  field?: IFieldOption;\n  title?: string;\n  enableResponsiveMode?: boolean;\n  responsiveBreakpoint?: number;\n  dropdownHeaderLabel?: string;\n}\n\n/**\n * The FacetSlider component creates a facet containing a slider widget that allows the end user to filter results based\n * on a range of numerical values, rather than a \"classic\" multi-select {@link Facet} with a label and a count for each\n * value.\n *\n * Note that this component does not inherit from the Facet component, and thus does not offer the same configuration\n * options. Also, some of the FacetSlider options cannot be set as a HTML attributes on the component and must rather be\n * configured in the {@link init} call of the search interface.\n *\n * **Examples:**\n *\n * Specifying the FacetSlider configuration using a JSON inside the init call. Note that the JSON follows the\n * FacetSlider options:\n *\n * ```javascript\n * // You can call the init script using \"pure\" JavaScript:\n * Coveo.init(document.querySelector('#search'), {\n *    FacetSlider: {\n *      field: \"@size\",\n *      start: 1000,\n *      end: 5000,\n *      rangeSlider: true,\n *      graph: {\n *        steps: 10\n *      }\n *    }\n * })\n *\n * // Or you can call the init script using the jQuery extension:\n * $('#search').coveo('init', {\n *    FacetSlider: {\n *      field: \"@size\",\n *      start: 1000,\n *      end: 5000,\n *      rangeSlider: true,\n *      graph: {\n *        steps: 10\n *      }\n *    }\n * })\n * ```\n *\n * Specifying the same FacetSlider configuration by setting the corresponding HTML attributes directly in the markup:\n *\n * ```html\n * <div class='CoveoFacetSlider' data-field='@size' data-start='1000' data-end='5000' data-range-slider='true' data-graph-steps='10'></div>\n * ```\n */\nexport class FacetSlider extends Component {\n\n  /**\n   * The component options\n   * @componentOptions\n   */\n  static options: IFacetSliderOptions = {\n\n    /**\n     * Specifies the title to display on top of the FacetSlider component.\n     *\n     * Default value is the localized string for `\"NoTitle\"`.\n     */\n    title: ComponentOptions.buildLocalizedStringOption({ defaultValue: l('NoTitle') }),\n\n    /**\n     * Specifies whether the field for which you are requesting a range is a date field. This allows the FacetSlider to\n     * correctly build the outgoing [GroupByRequest]{@link IGroupByRequest} and render itself properly.\n     *\n     * Default value is `false`.\n     */\n    dateField: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the index field whose values the FacetSlider should use.\n     *\n     * This requires the given field to be configured correctly in the index as a Facet field (see\n     * [Adding Fields to a Source](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=137)).\n     *\n     * Specifying a value for this option is required for the FacetSlider component to work.\n     */\n    field: ComponentOptions.buildFieldOption({ groupByField: true, required: true }),\n\n    /**\n     * Specifies a unique identifier for the FacetSlider. Among other things, this identifier serves the purpose of\n     * saving the facet state in the URL hash.\n     *\n     * If you have two facets with the same field on the same page, you should specify a unique id value for at least\n     * one of those two facets. This id must be unique in the page.\n     *\n     * Default value is the {@link FacetSlider.options.field} option value.\n     */\n    id: ComponentOptions.buildStringOption({\n      postProcessing: (value, options: IFacetSliderOptions) => value || <string>options.field\n    }),\n\n    /**\n     * Specifies the format to use to display values if they are dates.\n     *\n     * Default value is `\"MMM dd, yyyy\"`.\n     */\n    dateFormat: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the query to filter automatic minimum and maximum range of the slider.\n     *\n     * This is especially useful for date ranges where the index may contain values which are not set, and thus the\n     * automatic range returns values from the year 1400 (earliest date from the boost C++ library).\n     *\n     * This option can be useful to do something like `queryOverride : @date>2000/01/01` or some arbitrary date which\n     * will filter out unwanted values.\n     */\n    queryOverride: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the starting boundary of the slider.\n     *\n     * Date values are rounded to the nearest year when {@link FacetSlider.options.dateField} is `true`.\n     *\n     * Default value is the lowest available field value in the index.\n     */\n    start: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the ending boundary of the slider.\n     *\n     * Date values are rounded to the nearest year when {@link FacetSlider.options.dateField} is `true`.\n     *\n     * Default value is the highest available field value in the index.\n     */\n    end: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies whether to exclude the outer bounds of the slider in the generated query when they are not active.\n     *\n     * Default value is `false`.\n     */\n    excludeOuterBounds: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the number of decimal places to round the displayed numerical values to.\n     *\n     * Default (and minimum) value is `0`.\n     */\n    rounded: ComponentOptions.buildNumberOption({ min: 0 }),\n\n    /**\n     * Specifies the number of steps to split the slider into.\n     *\n     * For example, if your range is [ 0 , 100 ] and you specify 10 steps, then the end user can move the slider only to\n     * the values [ 0, 10, 20, 30 ... , 100 ].\n     *\n     * For performance reasons, the maximum value for option is 1\n     *\n     * Default value is `undefined`, and the slider allows all values. Minimum value is `2`.\n     */\n    steps: ComponentOptions.buildNumberOption({ min: 2 }),\n\n    /**\n     * Specifies whether you want a slider with two buttons instead of a slider with a single button.\n     *\n     * By default, only one button appears in the slider.\n     */\n    rangeSlider: ComponentOptions.buildBooleanOption(),\n\n    /**\n     * Specifies the caption options to use to display the field values.\n     *\n     * Available options are:\n     * - enable (`data-display-as-value-enable`): boolean; specifies whether to display the caption as a value. Default\n     * value is `true`.\n     * - unitSign (`data-display-as-value-unit-sign`): string; specifies the unit sign for this value (e.g., `\"$\"`).\n     * Default value is `undefined`.\n     * - separator (`data-display-as-value-separator`): string; specifies the character(s) to use as a separator in the\n     * caption. Default value is `\"-\"`.\n     */\n    displayAsValue: ComponentOptions.buildObjectOption({\n      subOptions: {\n        enable: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n        unitSign: ComponentOptions.buildStringOption(),\n        separator: ComponentOptions.buildStringOption({ defaultValue: '-' })\n      }\n    }),\n\n    /**\n     * Specifies the percentage caption options to use to display the field values.\n     *\n     * Available options are:\n     * - enable (`data-display-as-percent-enable`): boolean; specifies whether to display the caption as a percentage.\n     * Default value is `false`.\n     * separator (`data-display-as-percent-separator`): string; specifies the character(s) to use as a separator in the\n     * caption. Default value is `\"-\"`.\n     */\n    displayAsPercent: ComponentOptions.buildObjectOption({\n      subOptions: {\n        enable: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n        separator: ComponentOptions.buildStringOption({ defaultValue: '-' })\n      }\n    }),\n\n    /**\n     * Specifies whether to display a small graph on top of the slider.\n     *\n     * Available options are:\n     * - steps (`data-graph-steps`): number; specifies the number of steps/columns to display in your graph. Default\n     * value is `10`. Minimum value is `2`.\n     */\n    graph: ComponentOptions.buildObjectOption({\n      subOptions: {\n        steps: ComponentOptions.buildNumberOption({ min: 2 }),\n        animationDuration: ComponentOptions.buildNumberOption({ min: 0 }),\n        margin: ComponentOptions.buildObjectOption({\n          subOptions: {\n            top: ComponentOptions.buildNumberOption({ min: 0 }),\n            bottom: ComponentOptions.buildNumberOption({ min: 0 }),\n            left: ComponentOptions.buildNumberOption({ min: 0 }),\n            right: ComponentOptions.buildNumberOption({ min: 0 })\n          }\n        })\n      }\n    }),\n\n    /**\n     * Specifies a function to generate the steps for the FacetSlider (see {@link FacetSlider.options.steps}. This\n     * function receives the FacetSlider boundaries (see {@link FacetSlider.options.start} and\n     * {@link FacetSlider.options.end}) and must return an array of numbers (the steps).\n     *\n     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * // You can call the init script using \"pure\" JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    FacetSlider: {\n     *      field: \"@size\",\n     *      getSteps: function(start, end) {\n     *        return [0,2,4,6,8,10];\n     *      }\n     *    }\n     * })\n     *\n     * // Or you can call the init script using the jQuery extension:\n     * $('#search').coveo('init', {\n     *    FacetSlider: {\n     *        field: \"@size\",\n     *        getSteps: function(start, end) {\n     *            return [0,2,4,6,8,10];\n     *        }\n     *    }\n     * })\n     * ```\n     */\n    getSteps: ComponentOptions.buildCustomOption<(start: number, end: number) => number[]>(() => {\n      return null;\n    }),\n\n    /**\n     * Specifies a function to generate the caption for the FacetSlider. Receives the current slider values\n     * (number[]) and must return the caption (string).\n     *\n     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * // You can call the init script using \"pure\" JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    FacetSlider: {\n     *      field: \"@size\",\n     *      valueCaption: function(values) {\n     *        return values[0] + \" hello\" + \", \" + values[1] + \" world\";\n     *      }\n     *    }\n     * })\n     *\n     * // Or you can call the init script using the jQuery extension:\n     * $('#search').coveo('init', {\n     *    FacetSlider: {\n     *      field: \"@size\",\n     *      valueCaption: function(values) {\n     *        return values[0] + \" hello\" + \", \" + values[1] + \" world\";\n     *      }\n     *    }\n     * })\n     * ```\n     */\n    valueCaption: ComponentOptions.buildCustomOption<(values: number[]) => string>(() => {\n      return null;\n\n    }),\n\n    /**\n     * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any {@link Facet} or\n     * {@link FacetSlider} in a search interface disables responsive mode for all other facets in the search interface.\n     *\n     * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n     * the search interface is bound to reaches or falls behind a certain threshold (see\n     * {@link SearchInterface.responsiveComponents}).\n     *\n     * See also {@link FacetSlider.options.dropdownHeaderLabel}.\n     *\n     * Default value is `true`.\n     */\n    enableResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    /**\n     * Specifies the label of the button that allows to show the facets when in responsive mode. If it is specified more than once, the\n     * first occurence of the option will be used.\n     * The default value is \"Filters\".\n     */\n    dropdownHeaderLabel: ComponentOptions.buildLocalizedStringOption()\n  };\n\n  static ID = 'FacetSlider';\n  public static DEBOUNCED_RESIZE_DELAY = 250;\n\n  public startOfSlider: number;\n  public endOfSlider: number;\n  public initialStartOfSlider: number;\n  public initialEndOfSlider: number;\n  public facetQueryController: FacetSliderQueryController;\n  public facetHeader: FacetHeader;\n  public onResize: EventListener;\n\n  private rangeQueryStateAttribute: string;\n  private isEmpty = false;\n  private rangeFromUrlState: number[];\n  private delayedGraphData: ISliderGraphData[];\n\n  /**\n   * Creates a new FacetSlider component. Binds multiple query events as well.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FacetSlider component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param slider\n   */\n  constructor(public element: HTMLElement, public options: IFacetSliderOptions, bindings?: IComponentBindings, private slider?: Slider) {\n    super(element, FacetSlider.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, FacetSlider, options);\n\n    ResponsiveFacets.init(this.root, this, this.options);\n\n    if (this.options.excludeOuterBounds == null) {\n      this.options.excludeOuterBounds = false;\n    }\n\n    if (this.options.start) {\n      this.options.start = this.options.dateField ? <any>new Date(this.options.start.replace(/-/g, '/')).getTime() : <any>Number(this.options.start);\n    }\n\n    if (this.options.end) {\n      this.options.end = this.options.dateField ? <any>new Date(this.options.end.replace(/-/g, '/')).getTime() : <any>Number(this.options.end);\n    }\n\n    if (this.hasAGraph() && typeof d3 == 'undefined') {\n      this.options.graph = undefined;\n      this.logger.info('Cannot find the required dependencies d3.js. Cannot add graphic to your facet range', this);\n    }\n\n    this.facetQueryController = new FacetSliderQueryController(this);\n    this.initQueryStateEvents();\n    this.bind.onRootElement(QueryEvents.newQuery, () => this.handleNewQuery());\n    this.bind.onRootElement(QueryEvents.noResults, () => this.handleNoresults());\n    this.bind.onRootElement(QueryEvents.deferredQuerySuccess, (args: IQuerySuccessEventArgs) => this.handleDeferredQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.doneBuildingQuery, (args: IDoneBuildingQueryEventArgs) => this.handleDoneBuildingQuery(args));\n    this.bind.onRootElement(BreadcrumbEvents.populateBreadcrumb, (args: IPopulateBreadcrumbEventArgs) => this.handlePopulateBreadcrumb(args));\n    this.bind.onRootElement(SearchAlertsEvents.searchAlertsPopulateMessage, (args: ISearchAlertsPopulateMessageEventArgs) => this.handlePopulateSearchAlerts(args));\n    this.bind.onRootElement(BreadcrumbEvents.clearBreadcrumb, () => this.reset());\n\n    this.onResize = _.debounce(() => {\n      if (ResponsiveComponentsUtils.shouldDrawFacetSlider($$(this.root)) && this.slider && !this.isEmpty) {\n        this.slider.drawGraph();\n      }\n    }, FacetSlider.DEBOUNCED_RESIZE_DELAY);\n    window.addEventListener('resize', this.onResize);\n    // This is used inside SF integration\n    this.bind.onRootElement('onPopupOpen', this.onResize);\n    $$(this.root).on(InitializationEvents.nuke, this.handleNuke);\n  }\n\n  public createDom() {\n    this.facetHeader = new FacetHeader({\n      field: <string>this.options.field,\n      facetElement: this.element,\n      title: this.options.title,\n      enableClearElement: true,\n      enableCollapseElement: true,\n      isNewDesign: this.getBindings().searchInterface.isNewDesign(),\n      facetSlider: this\n    });\n    this.element.appendChild(this.facetHeader.build());\n  }\n\n  public disable() {\n    super.disable();\n    $$(this.element).addClass('coveo-disabled-empty');\n  }\n\n  /**\n   * Resets the FacetSlider (meaning that you need to set the range value as inactive).\n   */\n  public reset() {\n    if (this.slider) {\n      this.slider.initializeState();\n      this.updateQueryState();\n      this.updateAppearanceDependingOnState();\n    }\n  }\n\n  /**\n   * Gets the current selection in the FacetSlider.\n   *\n   * **Note:**\n   * > This method returns an array of number for selected date values. These numbers represent a number of milliseconds\n   * > before or after January 1, 1970. Therefore, you can use these numbers to instantiate standard JavaScript Date\n   * > objects.\n   *\n   * @returns {any} An array of number containing the first and last selected values, if possible. An array containing\n   * two `undefined` values otherwise.\n   */\n  public getSelectedValues(): number[] {\n    if (this.startOfSlider != undefined && this.endOfSlider != undefined) {\n      return [this.startOfSlider, this.endOfSlider];\n    } else {\n      return [undefined, undefined];\n    }\n  }\n\n  /**\n   * Sets the selected values in the slider.\n   *\n   * **Note:**\n   * > You must set date values with numbers representing a number of milliseconds before or after January 1, 1970. You\n   * > can easily extract such numbers from standard JavaScript Date objects.\n   *\n   * @param values [start, end] An array containing the first and last values to select in the slider.\n   */\n  public setSelectedValues(values: number[]): void {\n    this.setupSliderIfNeeded(undefined);\n    this.startOfSlider = values[0];\n    this.endOfSlider = values[1];\n    this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n    this.updateAppearanceDependingOnState();\n  }\n\n  /**\n   * Indicates whether the FacetSlider is active. An active FacetSlider outputs an expression in the query when a search\n   * is performed.\n   * @returns {boolean} `true` if the FacetSlider is active; `false` otherwise.\n   */\n  public isActive(): boolean {\n    return !isNaN(this.startOfSlider)\n      && !isNaN(this.endOfSlider)\n      && !isNaN(this.initialStartOfSlider)\n      && !isNaN(this.initialEndOfSlider)\n      && (this.startOfSlider != this.initialStartOfSlider || this.endOfSlider != this.initialEndOfSlider);\n  }\n\n  public getSliderBoundaryForQuery(): number[] {\n    let needToReturnABoundary = false;\n    if (!this.slider) {\n      needToReturnABoundary = true;\n    } else if (this.slider && this.isActive()) {\n      needToReturnABoundary = true;\n    }\n    if (needToReturnABoundary) {\n      return this.generateBoundary();\n    } else {\n      return undefined;\n    }\n  }\n\n  // There is delayed graph data if at the time the facet slider tried to draw, the facet was hidden in the\n  // facet dropdown. This method will draw delayed graph data if it exists.\n  public drawDelayedGraphData() {\n    if (this.delayedGraphData != undefined && !this.isEmpty) {\n      this.slider.drawGraph(this.delayedGraphData);\n    }\n  }\n\n  public isSimpleSliderConfig() {\n    return this.options.start != null && this.options.end != null;\n  }\n\n  public hasAGraph() {\n    return this.options.graph != undefined;\n  }\n\n  private handleNoresults(): void {\n    this.isEmpty = true;\n    this.updateAppearanceDependingOnState();\n  }\n\n  private handleNewQuery(): void {\n    this.isEmpty = false;\n  }\n\n  private handleRangeQueryStateChanged(args: IAttributeChangedEventArg): void {\n    this.setupSliderIfNeeded(args);\n    this.startOfSlider = args.value[0] == undefined ? this.startOfSlider : args.value[0];\n    this.endOfSlider = args.value[1] == undefined ? this.endOfSlider : args.value[1];\n    this.setSelectedValues([this.startOfSlider, this.endOfSlider]);\n  }\n\n  private handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs): void {\n    let populateBreadcrumb = () => {\n      if (this.isActive()) {\n        args.breadcrumbs.push(<IBreadcrumbItem>{\n          element: this.buildBreadcrumbFacetSlider()\n        });\n      }\n    };\n    if (this.slider) {\n      populateBreadcrumb();\n    } else {\n      $$(this.root).one(QueryEvents.deferredQuerySuccess, () => {\n        populateBreadcrumb();\n        $$(this.root).trigger(BreadcrumbEvents.redrawBreadcrumb);\n      });\n    }\n  }\n\n  private handlePopulateSearchAlerts(args: ISearchAlertsPopulateMessageEventArgs) {\n    if (this.isActive()) {\n      args.text.push($$(this.buildBreadcrumbFacetSlider()).text());\n    }\n  }\n\n  private buildBreadcrumbFacetSlider(): HTMLElement {\n    let elem = $$('div', {\n      className: 'coveo-facet-slider-breadcrumb'\n    }).el;\n\n    let title = $$('span', {\n      className: 'coveo-facet-slider-breadcrumb-title'\n    });\n    title.text(this.options.title + ': ');\n    elem.appendChild(title.el);\n\n    let values = $$('span', {\n      className: 'coveo-facet-slider-breadcrumb-values'\n    });\n    elem.appendChild(values.el);\n\n    let value = $$('span', {\n      className: 'coveo-facet-slider-breadcrumb-value'\n    });\n    value.text(this.slider.getCaption());\n    values.el.appendChild(value.el);\n\n    let clear = $$('span', {\n      className: 'coveo-facet-slider-breadcrumb-clear'\n    });\n    value.el.appendChild(clear.el);\n\n    value.on('click', () => {\n      this.reset();\n      this.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.facetClearAll, {\n        facetId: this.options.id,\n        facetTitle: this.options.title\n      });\n      this.queryController.executeQuery();\n    });\n    return elem;\n  }\n\n  private initSlider() {\n    this.buildSlider();\n    this.slider.initializeState([this.startOfSlider, this.endOfSlider]);\n    this.updateAppearanceDependingOnState();\n  }\n\n  private initQueryStateEvents() {\n    this.rangeQueryStateAttribute = QueryStateModel.getFacetId(this.options.id) + ':range';\n    this.queryStateModel.registerNewAttribute(this.rangeQueryStateAttribute, [undefined, undefined]);\n    let eventName = this.queryStateModel.getEventName(Model.eventTypes.changeOne + this.rangeQueryStateAttribute);\n    this.bind.onRootElement(eventName, (args: IAttributeChangedEventArg) => {\n      this.slider ? this.handleRangeQueryStateChanged(args) : this.setRangeStateSliderStillNotCreated(args);\n    });\n  }\n\n  private setRangeStateSliderStillNotCreated(args: IAttributeChangedEventArg) {\n    this.rangeFromUrlState = this.copyValues(args.value);\n  }\n\n  private buildSlider() {\n    let sliderContainer = $$('div', {\n      className: 'coveo-facet-values coveo-slider-container'\n    }).el;\n\n    if (this.hasAGraph()) {\n      $$(sliderContainer).addClass('coveo-with-graph');\n    }\n    let sliderDiv = $$('div').el;\n\n    this.slider = this.slider ? this.slider : new Slider(sliderDiv, _.extend({}, this.options, { dateField: this.options.dateField }), this.root);\n    $$(sliderDiv).on(SliderEvents.endSlide, (e: MouseEvent, args: IEndSlideEventArgs) => {\n      this.handleEndSlide(args);\n    });\n    $$(sliderDiv).on(SliderEvents.duringSlide, (e: MouseEvent, args: IDuringSlideEventArgs) => {\n      this.handleDuringSlide(args);\n    });\n    if (this.hasAGraph()) {\n      $$(sliderDiv).on(SliderEvents.graphValueSelected, (e: MouseEvent, args: IGraphValueSelectedArgs) => {\n        this.handleGraphValueSelected(args);\n      });\n    }\n    sliderContainer.appendChild(sliderDiv);\n    this.element.appendChild(sliderContainer);\n    this.updateAppearanceDependingOnState();\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.queryBuilder);\n    let boundary = this.getSliderBoundaryForQuery();\n    if (boundary != undefined) {\n      this.facetQueryController.prepareForNewQuery();\n      let expression = this.facetQueryController.computeOurFilterExpression(boundary);\n      if (Utils.isNonEmptyString(expression)) {\n        this.logger.trace('Putting filter in query', expression);\n        data.queryBuilder.advancedExpression.add(expression);\n      }\n    }\n  }\n\n  private handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {\n    let queryBuilder = data.queryBuilder;\n    this.facetQueryController.putGroupByIntoQueryBuilder(queryBuilder);\n  }\n\n  private handleDeferredQuerySuccess(data: IQuerySuccessEventArgs) {\n    this.ensureDom();\n    this.setupSliderIfNeeded(data);\n    let groupByResults = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n    this.isEmpty = this.isFacetEmpty(groupByResults, data);\n    this.updateAppearanceDependingOnState();\n    if (this.hasAGraph()) {\n      this.renderToSliderGraph(data);\n    }\n  }\n\n  private handleEndSlide(args: IEndSlideEventArgs) {\n    let values = args.slider.getValues();\n    this.startOfSlider = values[0];\n    this.endOfSlider = values[1];\n    if (this.updateQueryState(values)) {\n      this.updateAppearanceDependingOnState();\n      this.usageAnalytics.logSearchEvent<IAnalyticsFacetSliderChangeMeta>(analyticsActionCauseList.facetRangeSlider, {\n        facetId: this.options.id,\n        facetRangeStart: this.startOfSlider.toString(),\n        facetRangeEnd: this.endOfSlider.toString()\n      });\n      this.queryController.executeQuery();\n    }\n  }\n\n  private handleDuringSlide(args: IDuringSlideEventArgs) {\n    let values = args.slider.getValues();\n    this.startOfSlider = values[0];\n    this.endOfSlider = values[1];\n    this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n    this.updateAppearanceDependingOnState(true);\n  }\n\n  private handleGraphValueSelected(args: IGraphValueSelectedArgs) {\n    if ((this.options.rangeSlider && this.startOfSlider != args.start) || this.endOfSlider != args.end) {\n      if (this.options.rangeSlider) {\n        this.startOfSlider = args.start;\n      }\n      this.endOfSlider = args.end;\n      this.slider.setValues([this.startOfSlider, this.endOfSlider]);\n      this.updateQueryState();\n      this.usageAnalytics.logSearchEvent<IAnalyticsFacetGraphSelectedMeta>(analyticsActionCauseList.facetRangeGraph, {\n        facetId: this.options.id,\n        facetRangeStart: this.startOfSlider.toString(),\n        facetRangeEnd: this.endOfSlider.toString()\n      });\n      this.queryController.executeQuery();\n    }\n  }\n\n  private updateQueryState(values = this.slider.getValues(), silent = false) {\n    let copyOfValues = this.copyValues(values);\n    let start = values[0] + 0.0;\n    let end = values[1] + 0.0;\n    let model: number[] = this.queryStateModel.get(this.rangeQueryStateAttribute);\n    if (model == null || copyOfValues[0] != model[0] || copyOfValues[1] != model[1]) {\n      copyOfValues[0] = start;\n      copyOfValues[1] = end;\n      this.queryStateModel.set(this.rangeQueryStateAttribute, copyOfValues, { silent: silent });\n      return true;\n    }\n    return false;\n  }\n\n  private copyValues(values: number[]) {\n    // Creating a copy of the values prevents an unwanted automatic update of the state while sliding\n    // That's the cleanest way I found to copy that array correctly\n    let copyOfValues = [];\n    copyOfValues[0] = Number(values[0]) + 0.0;\n    copyOfValues[1] = Number(values[1]) + 0.0;\n    return copyOfValues;\n  }\n\n  private renderToSliderGraph(data: IQuerySuccessEventArgs) {\n    let rawGroupByResults = data.results.groupByResults[this.facetQueryController.graphGroupByQueriesIndex];\n    let graphData: ISliderGraphData[];\n    let totalGraphResults = 0;\n    if (rawGroupByResults) {\n      graphData = _.map(rawGroupByResults.values, (value) => {\n        totalGraphResults += value.numberOfResults;\n        let start: any = value.value.split('..')[0];\n        let end: any = value.value.split('..')[1];\n        if (!this.options.dateField) {\n          start = Number(start);\n          end = Number(end);\n        } else {\n          start = new Date(start.split('@')[0]).getTime();\n          end = new Date(end.split('@')[0]).getTime();\n        }\n        let y = value.numberOfResults;\n        return {\n          start: start,\n          y: y,\n          end: end,\n          isDate: this.options.dateField\n        };\n      });\n    }\n    if (totalGraphResults == 0) {\n      this.isEmpty = true;\n      this.updateAppearanceDependingOnState();\n    } else if (graphData != undefined && !this.isDropdownHidden()) {\n      this.slider.drawGraph(graphData);\n    } else if (graphData != undefined && this.isDropdownHidden()) {\n      this.delayedGraphData = graphData;\n    }\n  }\n\n  private isDropdownHidden() {\n    let facetDropdown = this.root.querySelector('.coveo-facet-column');\n    if (facetDropdown) {\n      return $$(<HTMLElement>facetDropdown).css('display') == 'none';\n    }\n    if ($$(this.root).hasClass('CoveoRecommendation')) {\n      let recommendationDropdown = $$(this.root).parents('.coveo-recommendation-column')[0] || this.root;\n      return $$(<HTMLElement>recommendationDropdown).css('display') == 'none';\n    }\n\n    return false;\n  }\n\n  private generateBoundary(): number[] {\n    if (!this.slider) {\n      // If the slider is not initialized, the only boundary we can get is from the state.\n      return this.generateBoundaryFromState();\n    } else {\n      // Else, try to get one from the slider itself. If we cant, try to return one from the state.\n      let boundary = this.generateBoundaryFromSlider();\n      if (boundary[0] == undefined && boundary[1] == undefined) {\n        return this.generateBoundaryFromState();\n      } else {\n        return boundary;\n      }\n    }\n  }\n\n  private generateBoundaryFromSlider() {\n    let start, end;\n    if (this.startOfSlider != undefined) {\n      start = this.startOfSlider;\n    }\n    if (this.endOfSlider != undefined) {\n      end = this.endOfSlider;\n    }\n    return [start, end];\n  }\n\n  private generateBoundaryFromState() {\n    let start, end;\n    let startFromState = this.queryStateModel.get(this.rangeQueryStateAttribute)[0];\n    if (startFromState != undefined) {\n      start = startFromState;\n    }\n    let endFromState = this.queryStateModel.get(this.rangeQueryStateAttribute)[1];\n    if (endFromState != undefined) {\n      end = endFromState;\n    }\n    if (start != this.queryStateModel.getDefault(this.rangeQueryStateAttribute)[0] || end != this.queryStateModel.getDefault(this.rangeQueryStateAttribute)[1]) {\n      return [start, end];\n    } else {\n      return [undefined, undefined];\n    }\n  }\n\n  private setupSliderIfNeeded(data: any) {\n    this.ensureDom();\n    if (Utils.isNullOrUndefined(this.slider)) {\n      if (!this.alreadySetBoundary()) {\n        this.trySetSliderBoundaryFromOptions();\n      }\n      if (!this.alreadySetBoundary() && data != undefined) {\n        this.trySetSliderBoundaryFromQueryResult(data);\n      }\n      this.trySetSliderBoundaryFromState();\n      this.setupSliderStateVariables();\n      let isInError = this.verifySetup();\n      if (isInError) {\n        this.logger.warn('Unable to initialize slider with current values', this);\n      } else {\n        this.initSlider();\n        this.updateQueryState();\n      }\n    }\n  }\n\n  private verifySetup() {\n    let isInError = 0;\n    isInError += this.initialStartOfSlider == undefined ? 1 : 0;\n    isInError += isNaN(this.initialStartOfSlider) ? 1 : 0;\n    isInError += this.initialEndOfSlider == undefined ? 1 : 0;\n    isInError += isNaN(this.initialEndOfSlider) ? 1 : 0;\n    return isInError;\n  }\n\n  private setupSliderStateVariables() {\n    if (isNaN(this.initialStartOfSlider) || isNaN(this.initialEndOfSlider)) {\n      this.logger.warn('Cannnot initialize slider with those values : start: ' + this.initialStartOfSlider + ' end: ' + this.initialEndOfSlider);\n    } else {\n      this.initialStartOfSlider = Number(this.initialStartOfSlider);\n      this.initialEndOfSlider = Number(this.initialEndOfSlider);\n      this.startOfSlider = this.startOfSlider != undefined ? Number(this.startOfSlider) : this.initialStartOfSlider;\n      this.endOfSlider = this.endOfSlider != undefined ? Number(this.endOfSlider) : this.initialEndOfSlider;\n      this.options.start = this.initialStartOfSlider;\n      this.options.end = this.initialEndOfSlider;\n      this.queryStateModel.setNewDefault(this.rangeQueryStateAttribute, [this.initialStartOfSlider, this.initialEndOfSlider]);\n    }\n  }\n\n  private alreadySetBoundary() {\n    return this.startOfSlider != undefined && this.endOfSlider != undefined;\n  }\n\n  private trySetSliderBoundaryFromOptions() {\n    if (!Utils.isNullOrUndefined(this.options.start)) {\n      this.setupInitialSliderStateStart(this.options.start);\n    }\n    if (!Utils.isNullOrUndefined(this.options.end)) {\n      this.setupInitialSliderStateEnd(this.options.end);\n    }\n  }\n\n  private trySetSliderBoundaryFromState() {\n    let stateValues = this.rangeFromUrlState || this.queryStateModel.get(this.rangeQueryStateAttribute);\n    if (stateValues && stateValues[0] != undefined && stateValues[1] != undefined) {\n      stateValues[0] = Number(stateValues[0]);\n      stateValues[1] = Number(stateValues[1]);\n      this.setupInitialSliderStateStart(stateValues[0]);\n      this.setupInitialSliderStateEnd(stateValues[1]);\n      this.startOfSlider = stateValues[0];\n      this.endOfSlider = stateValues[1];\n    }\n  }\n\n  private trySetSliderBoundaryFromQueryResult(data: IQuerySuccessEventArgs) {\n    let groupByResults = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n    if (groupByResults && groupByResults.values.length > 0) {\n      this.setupInitialSliderStateStart(groupByResults.values[0].value.split('..')[0]);\n      this.setupInitialSliderStateEnd(groupByResults.values[groupByResults.values.length - 1].value.split('..')[1]);\n    }\n  }\n\n  private setupInitialSliderStateStart(value: any) {\n    if (this.initialStartOfSlider == undefined) {\n      this.initialStartOfSlider = value;\n      if (this.options.dateField && isNaN(value)) {\n        this.initialStartOfSlider = new Date(value.replace('@', ' ')).getTime();\n      }\n    }\n  }\n\n  private setupInitialSliderStateEnd(value: any) {\n    if (this.initialEndOfSlider == undefined) {\n      this.initialEndOfSlider = value;\n      if (this.options.dateField && isNaN((value))) {\n        this.initialEndOfSlider = new Date(value.replace('@', ' ')).getTime();\n      }\n    }\n  }\n\n  private updateAppearanceDependingOnState(sliding = false) {\n    if (this.isEmpty && !this.isActive() && !sliding) {\n      $$(this.element).addClass('coveo-disabled-empty');\n    } else {\n      $$(this.element).removeClass('coveo-disabled-empty');\n      $$(this.facetHeader.eraserElement).toggle(this.isActive());\n    }\n    if (!this.isActive() && !sliding) {\n      $$(this.element).addClass('coveo-disabled');\n    } else {\n      $$(this.element).removeClass('coveo-disabled');\n    }\n\n    if (this.isActive() && this.slider) {\n      this.slider.onMoving();\n    }\n  }\n\n  private handleNuke() {\n    window.removeEventListener('resize', this.onResize);\n  }\n\n  private isFacetEmpty(groupByResults: IGroupByResult, data: IQuerySuccessEventArgs) {\n    return groupByResults == null || groupByResults.values[0] == null || groupByResults.values[0].numberOfResults == 0 || data.results.results.length == 0;\n  }\n}\n\nInitialization.registerAutoCreateComponent(FacetSlider);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FacetSlider/FacetSlider.ts\n **/","import { $$ } from '../../utils/Dom';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { SliderEvents, IGraphValueSelectedArgs } from '../../events/SliderEvents';\nimport { Utils } from '../../utils/Utils';\nimport d3Scale = require('d3-scale');\nimport d3 = require('d3');\nimport Globalize = require('globalize');\nimport _ = require('underscore');\nimport { Logger } from '../../misc/Logger';\n\nexport interface IStartSlideEventArgs {\n  slider: Slider;\n  button: SliderButton;\n}\n\nexport interface IDuringSlideEventArgs {\n  slider: Slider;\n  button: SliderButton;\n}\n\nexport interface IEndSlideEventArgs {\n  slider: Slider;\n  button: SliderButton;\n}\n\nexport interface ISliderGraphData {\n  start: any;\n  y: number;\n  end: any;\n  isDate?: boolean;\n}\n\nexport interface ISliderOptions {\n  start?: any;\n  end?: any;\n  excludeOuterBounds?: boolean;\n  steps?: number;\n  getSteps?: (start: number, end: number) => number[];\n  rangeSlider?: boolean;\n  displayAsValue?: {\n    enable?: boolean;\n    unitSign?: string;\n    separator?: string;\n  };\n  displayAsPercent?: {\n    enable?: boolean;\n    separator?: string;\n  };\n  valueCaption?: (values: number[]) => string;\n  percentCaption?: (percent: number[]) => string;\n  dateFormat?: string;\n  document?: Document;\n  graph?: {\n    steps?: number;\n    animationDuration?: number;\n    margin?: {\n      top?: number;\n      bottom?: number;\n      left?: number;\n      right?: number;\n    }\n  };\n  dateField?: boolean;\n  rounded?: number;\n}\n\nexport const MAX_NUMBER_OF_STEPS = 100;\n\nexport class Slider {\n  public steps: number[] = [];\n  public currentValues: number[];\n  private sliderButton: SliderButton;\n  private sliderRange: SliderRange;\n  private sliderLine: SliderLine;\n  private sliderCaption: SliderCaption;\n  private sliderGraph: SliderGraph;\n\n  constructor(public element: HTMLElement, public options: ISliderOptions, public root: HTMLElement) {\n    if (this.options.dateField) {\n      this.options.start = new Date(this.options.start).getTime();\n      this.options.end = new Date(this.options.end).getTime();\n    }\n\n    if (this.options.rounded == undefined) {\n      this.options.rounded = 0;\n    }\n\n    if (this.options.steps || this.options.getSteps) {\n      this.buildSteps();\n    }\n\n    if (this.options.graph) {\n      this.sliderGraph = new SliderGraph(this);\n    }\n\n    this.sliderLine = new SliderLine(this);\n    _.each(this.sliderLine.build(), (e: HTMLElement) => {\n      this.element.appendChild(e);\n    });\n\n    if (this.options.rangeSlider) {\n      this.sliderRange = new SliderRange(this);\n      _.each(this.sliderRange.build(), (e: HTMLElement) => {\n        this.element.appendChild(e);\n      });\n    } else {\n      this.sliderButton = new SliderButton(this, 1);\n      const btnEl = this.sliderButton.build();\n      $$(btnEl).addClass('coveo-no-range-button');\n      this.element.appendChild(btnEl);\n      this.sliderLine.setActiveWidth(this.sliderButton);\n    }\n\n    this.sliderCaption = new SliderCaption(this);\n    this.element.appendChild(this.sliderCaption.build());\n  }\n\n  public onMoving() {\n    if (this.options.rangeSlider) {\n      this.sliderRange.setBoundary();\n      this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n    } else {\n      this.setButtonBoundary();\n      this.sliderLine.setActiveWidth(this.sliderButton);\n    }\n    if (this.options.graph) {\n      this.sliderGraph.draw();\n    }\n    this.displayCaption();\n  }\n\n  public initializeState(values: number[] = [this.options.start, this.options.end]) {\n    this.currentValues = values;\n    if (this.options.rangeSlider) {\n      this.sliderRange.initializeSliderRangeState(values);\n      this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n    } else {\n      if (values == undefined) {\n        this.sliderButton.toEnd();\n      } else {\n        this.sliderButton.setValue(values[1]);\n      }\n      this.setButtonBoundary();\n      this.sliderLine.setActiveWidth(this.sliderButton);\n    }\n    this.displayCaption();\n  }\n\n  public getPosition() {\n    if (this.options.rangeSlider) {\n      return this.sliderRange.getPosition();\n    } else {\n      return [0, this.sliderButton.getPosition()];\n    }\n  }\n\n  public getPercentPosition() {\n    if (this.options.rangeSlider) {\n      return this.sliderRange.getPercentPosition();\n    } else {\n      return [0, this.sliderButton.getPercent()];\n    }\n  }\n\n  public getValues() {\n    if (this.currentValues != undefined) {\n      return this.currentValues;\n    } else {\n      if (this.options.rangeSlider) {\n        return this.sliderRange.getValue();\n      } else {\n        return [this.options.start, this.sliderButton.getValue()];\n      }\n    }\n  }\n\n  public getCaptionFromValue(values: number[]) {\n    return this.sliderCaption.getCaptionFromValues(values);\n  }\n\n  public getCaption() {\n    return this.sliderCaption.getCaption();\n  }\n\n  public setValues(values: number[]) {\n    if (values != undefined) {\n      values[0] = Math.max(values[0], this.options.start);\n      values[1] = Math.min(values[1], this.options.end);\n    }\n    this.currentValues = values;\n    if (this.options.rangeSlider) {\n      this.sliderRange.setValue(values);\n      this.sliderLine.setActiveWidth(this.sliderRange.firstButton, this.sliderRange.secondButton);\n    } else {\n      this.sliderButton.setValue(values[1]);\n      this.sliderLine.setActiveWidth(this.sliderButton);\n    }\n    this.displayCaption();\n  }\n\n  public drawGraph(data?: ISliderGraphData[]) {\n    if (this.sliderGraph) {\n      this.sliderGraph.draw(data);\n    }\n  }\n\n  private setButtonBoundary() {\n    this.sliderButton.leftBoundary = 0;\n    this.sliderButton.rightBoundary = this.element.clientWidth;\n  }\n\n  private displayCaption() {\n    if (this.options.valueCaption != undefined) {\n      this.sliderCaption.setFromString(this.options.valueCaption(this.getValues()));\n    } else if (this.options.percentCaption != undefined) {\n      this.sliderCaption.setFromString(this.options.percentCaption(this.getPercentPosition()));\n    } else if (this.options.displayAsPercent != undefined && this.options.displayAsPercent.separator != undefined && this.options.displayAsPercent.enable) {\n      this.sliderCaption.setAsPercent();\n    } else {\n      this.sliderCaption.setAsValue();\n    }\n  }\n\n  private buildSteps() {\n    if (this.options.getSteps) {\n      this.steps = this.options.getSteps(this.options.start, this.options.end);\n    } else {\n      if (this.options.steps > MAX_NUMBER_OF_STEPS) {\n        new Logger(this).warn(`Maximum number of steps for slider is ${MAX_NUMBER_OF_STEPS} for performance reason`);\n        this.options.steps = MAX_NUMBER_OF_STEPS;\n      }\n      const oneStep = (this.options.end - this.options.start) / Math.max(1, this.options.steps);\n      if (oneStep > 0) {\n        let currentStep = this.options.start;\n        let currentNumberOfSteps = 0;\n        while (currentStep <= this.options.end && currentNumberOfSteps <= MAX_NUMBER_OF_STEPS) {\n          this.steps.push(currentStep);\n          currentStep += oneStep;\n          currentNumberOfSteps++;\n        }\n      } else {\n        this.steps.push(this.options.start);\n        this.steps.push(this.options.end);\n      }\n    }\n  }\n}\n\nclass SliderLine {\n  private backGround: HTMLElement;\n  private activePart: HTMLElement;\n\n  constructor(public slider: Slider) {\n  }\n\n  public build(): HTMLElement[] {\n    this.backGround = $$('div', {\n      className: 'coveo-slider-line coveo-background'\n    }).el;\n\n    this.activePart = $$('div', {\n      className: 'coveo-slider-line coveo-active'\n    }).el;\n\n    return [this.backGround, this.activePart];\n  }\n\n  public setActiveWidth(buttonOne: SliderButton, buttonTwo?: SliderButton) {\n    if (this.slider.options.rangeSlider) {\n      const width = (buttonTwo.getPercent() - buttonOne.getPercent()) * 100;\n      this.activePart.style.width = width + '%';\n      this.activePart.style.left = buttonOne.getPercent() * 100 + '%';\n      this.activePart.style.right = buttonTwo.getPercent() * 100 + '%';\n    } else {\n      const width = buttonOne.getPercent() * 100;\n      this.activePart.style.width = width + '%';\n    }\n  }\n}\n\n// This component relies heavily on mouse interaction, really difficult to test inside a UT context.\n// Ignore it\n/* istanbul ignore next */\nexport class SliderButton {\n  public leftBoundary: number;\n  public rightBoundary: number;\n  public element: HTMLElement;\n  private currentPos: number;\n  private startPositionX: number;\n  private isMouseDown: boolean;\n  private lastElementLeft: number;\n  private origUserSelect: string;\n  private origCursor: string;\n  private origZIndex: string;\n\n  private eventMouseDown = DeviceUtils.isMobileDevice() ? 'touchstart' : 'mousedown';\n  private eventMouseMove = DeviceUtils.isMobileDevice() ? 'touchmove' : 'mousemove';\n  private eventMouseUp = DeviceUtils.isMobileDevice() ? 'touchend' : 'mouseup';\n\n  constructor(public slider: Slider, private which: number) {\n  }\n\n  public build() {\n    this.element = $$('div', {\n      className: 'coveo-slider-button'\n    }).el;\n\n    this.bindEvents();\n    this.element['CoveoSliderButton'] = this;\n    return this.element;\n  }\n\n  public toBeginning() {\n    this.element.style.left = '0%';\n  }\n\n  public toEnd() {\n    this.element.style.left = '100%';\n  }\n\n  public setValue(value: number) {\n    const percent = this.fromValueToPercent(value);\n    this.element.style.left = Math.round(percent * 100) + '%';\n  }\n\n  public getPosition() {\n    const left = this.element.style.left;\n    if (left.indexOf('%') != -1) {\n      return (parseFloat(left) / 100) * this.slider.element.clientWidth;\n    } else {\n      return parseFloat(left);\n    }\n  }\n\n  public getPercent(position: number = this.getPosition()) {\n    if (this.slider.element.clientWidth == 0) {\n      return 0;\n    }\n    return +(position / this.slider.element.clientWidth).toFixed(2);\n  }\n\n  public getValue() {\n    const value = this.getPercent() * (this.slider.options.end - this.slider.options.start) + this.slider.options.start;\n    return value;\n  }\n\n  public fromValueToPercent(value: number) {\n    return 1 - ((this.slider.options.end - value) / (this.slider.options.end - this.slider.options.start));\n  }\n\n  public fromPositionToValue(position: number) {\n    const percent = this.getPercent(position);\n    return this.slider.options.start + (percent * (this.slider.options.end - this.slider.options.start));\n  }\n\n  public fromValueToPosition(value: number) {\n    const percent = this.fromValueToPercent(value);\n    return this.slider.element.clientWidth * percent;\n  }\n\n  private bindEvents() {\n    $$(this.element).on(this.eventMouseDown, (e: MouseEvent) => {\n      this.handleStartSlide(e);\n    });\n    const doc = this.slider.options.document || document;\n    doc.addEventListener(this.eventMouseMove, (e: MouseEvent) => {\n      if (this.eventMouseMove == 'touchmove' && this.isMouseDown) {\n        e.preventDefault();\n      }\n      this.handleMoving(e);\n    });\n\n    doc.addEventListener(this.eventMouseUp, () => {\n      this.handleEndSlide();\n    });\n  }\n\n  private getUserSelect() {\n    if (document.body.style.msUserSelect !== undefined) {\n      return 'msUserSelect';\n    }\n    if (document.body.style.webkitUserSelect !== undefined) {\n      return 'webkitUserSelect';\n    }\n    if (document.body.style['MozUserSelect'] !== undefined) {\n      return 'MozUserSelect';\n    }\n    return 'userSelect';\n  }\n\n  private handleStartSlide(e: MouseEvent) {\n    const position = this.getMousePosition(e);\n    this.isMouseDown = true;\n    this.startPositionX = position.x;\n    this.lastElementLeft = (parseInt(this.element.style.left, 10) / 100) * this.slider.element.clientWidth;\n    this.origUserSelect = document.body.style[this.getUserSelect()];\n    this.origCursor = document.body.style.cursor;\n    document.body.style[this.getUserSelect()] = 'none';\n    document.body.style.cursor = 'pointer';\n    $$(this.element).addClass('coveo-active');\n    $$(this.element).trigger(SliderEvents.startSlide, <IStartSlideEventArgs>{\n      button: this,\n      slider: this.slider\n    });\n    e.stopPropagation();\n  }\n\n  private handleMoving(e: MouseEvent) {\n    if (this.isMouseDown) {\n      this.slider.onMoving();\n      this.updatePosition(e);\n      this.handleButtonNearEnd();\n      $$(this.element).trigger(SliderEvents.duringSlide, <IDuringSlideEventArgs>{\n        button: this,\n        slider: this.slider\n      });\n    }\n  }\n\n  private handleEndSlide() {\n    if (this.isMouseDown) {\n      document.body.style[this.getUserSelect()] = this.origUserSelect;\n      document.body.style.cursor = this.origCursor;\n      $$(this.element).removeClass('coveo-active');\n      $$(this.element).trigger(SliderEvents.endSlide, <IEndSlideEventArgs>{\n        button: this,\n        slider: this.slider\n      });\n    }\n    this.isMouseDown = false;\n  }\n\n  private handleButtonNearEnd() {\n    if (this.which == 0) {\n      if (this.origZIndex == undefined) {\n        this.origZIndex = this.element.style.zIndex || '1';\n      }\n      if (this.currentPos > 90) {\n        this.element.style.zIndex = this.origZIndex + 1;\n      } else {\n        this.element.style.zIndex = this.origZIndex;\n      }\n    }\n  }\n\n  private getMousePosition(e: MouseEvent) {\n    let posx = 0;\n    let posy = 0;\n    if (e['touches'] && e['touches'][0]) {\n      posx = e['touches'][0].pageX;\n      posy = e['touches'][0].pageY;\n    } else if (e.pageX && e.pageY) {\n      posx = e.pageX;\n      posy = e.pageY;\n    } else if (e.clientX && e.clientY) {\n      posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n      posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n    }\n    return { x: posx, y: posy };\n  }\n\n  private updatePosition(e: MouseEvent) {\n    const pos = this.getMousePosition(e);\n    const spanX = pos.x - this.startPositionX;\n    let currentValue;\n    this.currentPos = this.lastElementLeft + spanX;\n    if (this.slider.options.steps || this.slider.options.getSteps) {\n      const snapResult = this.snapToStep(spanX);\n      this.currentPos = snapResult.position;\n      currentValue = snapResult.value;\n    }\n    this.currentPos = Math.max(this.leftBoundary, this.currentPos);\n    this.currentPos = Math.min(this.rightBoundary, this.currentPos);\n    this.currentPos = this.getPercent(this.currentPos) * 100;\n    this.currentPos = Math.min(this.currentPos, 100);\n    this.currentPos = Math.max(this.currentPos, 0);\n    this.element.style.left = Math.round(this.currentPos) + '%';\n    if (this.slider.options.steps || this.slider.options.getSteps) {\n      this.slider.currentValues[this.which] = currentValue;\n    } else {\n      this.slider.currentValues[this.which] = this.getValue();\n    }\n  }\n\n  private snapToStep(spanX: number) {\n    const diffs = _.map(this.slider.steps, (step, i) => {\n      return Math.abs(this.currentPos - this.fromValueToPosition(this.slider.steps[i]));\n    });\n    const diffsNext = _.map(this.slider.steps, (step, i) => {\n      return Math.abs(this.rightBoundary - this.fromValueToPosition(this.slider.steps[i]));\n    });\n    const diffsPrev = _.map(this.slider.steps, (step, i) => {\n      return Math.abs(this.leftBoundary - this.fromValueToPosition(this.slider.steps[i]));\n    });\n    const nearest = _.min(diffs);\n    const nearestNext = _.min(diffsNext);\n    const nearestPrevious = _.min(diffsPrev);\n    let currentStep = this.slider.steps[_.indexOf(diffs, nearest)];\n    const nextStep = this.slider.steps[_.indexOf(diffsNext, nearestNext)];\n    const previousStep = this.slider.steps[_.indexOf(diffsPrev, nearestPrevious)];\n    currentStep = Math.min(currentStep, nextStep);\n    currentStep = Math.max(currentStep, previousStep);\n    return { position: this.fromValueToPosition(currentStep), value: currentStep };\n  }\n}\n\nclass SliderRange {\n  public firstButton: SliderButton;\n  public secondButton: SliderButton;\n\n  constructor(public slider: Slider) {\n    this.firstButton = new SliderButton(slider, 0);\n    this.secondButton = new SliderButton(slider, 1);\n  }\n\n  public build(): HTMLElement[] {\n    const firstElem = this.firstButton.build();\n    const secondElem = this.secondButton.build();\n    $$(secondElem).addClass('coveo-range-button');\n    return [firstElem, secondElem];\n  }\n\n  public initializeSliderRangeState(values?: number[]) {\n    if (values == undefined) {\n      this.firstButton.toBeginning();\n      this.secondButton.toEnd();\n    } else {\n      this.firstButton.setValue(values[0]);\n      this.secondButton.setValue(values[1]);\n    }\n    this.setBoundary();\n  }\n\n  public setValue(values: number[]) {\n    this.firstButton.setValue(values[0]);\n    this.secondButton.setValue(values[1]);\n  }\n\n  public setBoundary() {\n    this.firstButton.leftBoundary = 0;\n    this.firstButton.rightBoundary = this.secondButton.getPosition();\n    this.secondButton.leftBoundary = this.firstButton.getPosition();\n    this.secondButton.rightBoundary = this.slider.element.clientWidth;\n  }\n\n  public getPosition() {\n    return [this.firstButton.getPosition(), this.secondButton.getPosition()];\n  }\n\n  public getPercentPosition() {\n    return [this.firstButton.getPercent(), this.secondButton.getPercent()];\n  }\n\n  public getValue() {\n    return [this.firstButton.getValue(), this.secondButton.getValue()];\n  }\n}\n\nclass SliderCaption {\n  private caption: HTMLElement;\n\n  public unitSign: string;\n  public separator: string;\n\n  constructor(public slider: Slider) {\n    this.separator = '-';\n    this.unitSign = '';\n    if (this.slider.options.displayAsPercent && this.slider.options.displayAsPercent.enable) {\n      this.separator = this.slider.options.displayAsPercent.separator != undefined ? this.slider.options.displayAsPercent.separator : this.separator;\n    } else if (this.slider.options.displayAsValue && this.slider.options.displayAsValue.enable) {\n      this.separator = this.slider.options.displayAsValue.separator != undefined ? this.slider.options.displayAsValue.separator : this.separator;\n      this.unitSign = this.slider.options.displayAsValue.unitSign != undefined ? this.slider.options.displayAsValue.unitSign : this.unitSign;\n    }\n  }\n\n  public build(): HTMLElement {\n    this.caption = $$('div', {\n      className: 'coveo-slider-caption'\n    }).el;\n    return this.caption;\n  }\n\n  public getCaption() {\n    return $$(this.caption).text();\n  }\n\n  public getCaptionFromValues(values: number[]) {\n    return this.getValueCaption(values);\n  }\n\n  public getCaptionFromValuesAsPercent(values: number[]) {\n    return this.getValueCaption(values);\n  }\n\n  public setAsValue() {\n    $$(this.caption).text(this.getValueCaption());\n  }\n\n  public setAsPercent() {\n    const values = this.slider.getPercentPosition();\n    $$(this.caption).text([(values[0] * 100).toFixed(this.slider.options.rounded), '%', this.separator, (values[1] * 100).toFixed(this.slider.options.rounded), '%'].join(' '));\n  }\n\n  public setFromString(str: string) {\n    $$(this.caption).text(str);\n  }\n\n  private getValueCaption(values = this.slider.getValues()) {\n    let first = values[0];\n    let second = values[1];\n\n    if (this.slider.options.dateField) {\n      const firstAsDate = new Date(first);\n      const secondAsDate = new Date(second);\n      firstAsDate.setHours(0, 0, 0, 0);\n      secondAsDate.setHours(0, 0, 0, 0);\n      first = Globalize.format(firstAsDate, this.slider.options.dateFormat || 'MMM dd, yyyy');\n      second = Globalize.format(secondAsDate, this.slider.options.dateFormat || 'MMM dd, yyyy');\n      this.unitSign = '';\n    } else {\n      first = first.toFixed(this.slider.options.rounded);\n      second = second.toFixed(this.slider.options.rounded);\n    }\n    return [first, this.unitSign, this.separator, second, this.unitSign].join(' ');\n  }\n}\n\nclass SliderGraph {\n  private svg: any;\n  private x: any;\n  private y: any;\n  private oldData: ISliderGraphData[];\n  private tooltip: HTMLElement;\n\n  constructor(public slider: Slider) {\n    this.svg = d3.select(slider.element).append('svg').append('g');\n    this.x = d3Scale.scaleBand();\n    this.y = d3Scale.scaleLinear();\n    this.slider.options.graph.margin = Utils.extendDeep({\n      top: 20,\n      right: 0,\n      left: 0,\n      bottom: 20\n    }, this.slider.options.graph.margin || {});\n    this.slider.options.graph.animationDuration = this.slider.options.graph.animationDuration || 500;\n\n    this.tooltip = $$('div', {\n      className: 'coveo-slider-tooltip'\n    }).el;\n    this.tooltip.style.display = 'none';\n    this.slider.element.appendChild(this.tooltip);\n    this.slider.options.graph.steps = this.slider.options.graph.steps || 10;\n  }\n\n  public draw(data: ISliderGraphData[] = this.oldData) {\n    if (data) {\n      if (data != this.oldData) {\n        // only modify the data if it's new\n        data = this.modifyPossibleSinglePointDataIntoValidRange(data);\n      }\n      const sliderOuterWidth = this.slider.element.offsetWidth;\n      const sliderOuterHeight = this.slider.element.offsetHeight;\n      const width = sliderOuterWidth - this.slider.options.graph.margin.left - this.slider.options.graph.margin.right;\n      const height = sliderOuterHeight - this.slider.options.graph.margin.top - this.slider.options.graph.margin.bottom;\n      if (!isNaN(width) && width >= 0 && !isNaN(height) && height >= 0) {\n        this.applyTransformOnSvg(width, height);\n        this.setXAndYRange(width, height);\n        this.setXAndYDomain(data);\n\n        const bars = this.svg.selectAll('.coveo-bar').data(data);\n        const currentSliderValues = this.slider.getValues();\n        this.renderGraphBars(bars, width, height, currentSliderValues);\n        this.setGraphBarsTransition(bars, height, currentSliderValues);\n      }\n\n      this.oldData = data;\n    }\n  }\n\n  private modifyPossibleSinglePointDataIntoValidRange(data: ISliderGraphData[]) {\n    return _.map(data, (d: ISliderGraphData) => {\n      // In some rare corner case, the index can return range values where the start of the data is equal to the end of the data\n      // Since it's a \"point\" as opposed to a real range, it's impossible to display this properly on a graph (where the range is the x axis)\n      // An element in a graph with with 0 width on the x axis is illogical and cannot work.\n      // In those case, we must \"widen\" the x range. Instead of adding an arbitrary value (like +1 to end, for example), we need something that won't make the range super small to click on.\n      // We use the total width available, and subtract half a step at the beginning, and add half a step at the end\n      if (d.start == d.end) {\n        const oneStep = (this.slider.options.end - this.slider.options.start) / this.slider.options.graph.steps;\n        d.start = Math.round(d.start - oneStep / 2);\n        d.end = Math.round(d.end + oneStep / 2);\n      }\n      return d;\n    });\n  }\n\n  private setXAndYRange(width: number, height: number) {\n    this.x.range([0, width]);\n    this.x.padding(0.2);\n    this.y.range([height - this.slider.options.graph.margin.top, 0]);\n  }\n\n  private setXAndYDomain(data: ISliderGraphData[]) {\n    this.padGraphWithEmptyData(data);\n    this.x.domain(_.map(data, (d) => {\n      return d.start;\n    }));\n    this.y.domain([0, d3.max(data, (d) => {\n      return d.y;\n    })]);\n  }\n\n  private padGraphWithEmptyData(data: ISliderGraphData[]) {\n    let oneStepOfGraph = data[0].end - data[0].start;\n    this.padBeginningOfGraphWithEmptyData(data, oneStepOfGraph);\n    this.padEndOfGraphWithEmptyData(data, oneStepOfGraph);\n  }\n\n  private padBeginningOfGraphWithEmptyData(data: ISliderGraphData[], oneStepOfGraph: number) {\n    if (data[0].start > this.slider.options.start && data[0].start > oneStepOfGraph) {\n      const difToFillAtStart = data[0].start - this.slider.options.start;\n      const nbOfStepsAtStart = Math.round(difToFillAtStart / oneStepOfGraph);\n      let currentStep = data[0].start;\n      for (let i = nbOfStepsAtStart; i > 0; i--) {\n        data.unshift(<ISliderGraphData>{ start: currentStep - oneStepOfGraph, end: currentStep, y: 0 });\n        currentStep -= oneStepOfGraph;\n      }\n    }\n  }\n\n  private padEndOfGraphWithEmptyData(data: ISliderGraphData[], oneStepOfGraph: number) {\n    const lastDataIndex = data.length - 1;\n    if (data[lastDataIndex].end < this.slider.options.end) {\n      const diffToFillAtEnd = this.slider.options.end - data[lastDataIndex].end;\n      const nbOfStepsAtEnd = Math.round(diffToFillAtEnd / oneStepOfGraph);\n      let currentStep = data[lastDataIndex].end;\n      for (let i = 0; i < nbOfStepsAtEnd; i++) {\n        data.push(<ISliderGraphData>{ start: currentStep, end: currentStep + oneStepOfGraph, y: 0 });\n        currentStep += oneStepOfGraph;\n      }\n    }\n  }\n\n  private applyTransformOnSvg(width: number, height: number) {\n    const svg = $$(this.slider.element).find('svg');\n    svg.setAttribute('width', width + 'px');\n    svg.setAttribute('height', height + 'px');\n    this.svg.attr('transform', 'translate(' + this.slider.options.graph.margin.left + ',' + this.slider.options.graph.margin.top + ')');\n  }\n\n  private renderGraphBars(bars: d3.selection.Update<ISliderGraphData>, width: number, height: number, currentSliderValues: number[]) {\n    bars.enter().append('rect')\n      .attr('class', this.getFunctionForClass(currentSliderValues))\n      .attr('width', this.x.bandwidth())\n      .attr('height', this.getFunctionForHeight(height))\n      .attr('x', this.getFunctionForX())\n      .attr('y', this.getFunctionForY())\n      .on('click', this.getFunctionForClick())\n      .on('mouseover', this.getFunctionForMouseOver(height))\n      .on('mouseout', this.getFunctionForMouseOut());\n  }\n\n  private setGraphBarsTransition(bars: d3.Transition<ISliderGraphData>, height: number, currentSliderValues: number[]) {\n    bars\n      .transition()\n      .attr('x', this.getFunctionForX())\n      .attr('width', this.x.bandwidth())\n      .attr('class', this.getFunctionForClass(currentSliderValues))\n      .transition()\n      .duration(this.slider.options.graph.animationDuration)\n      .attr('y', this.getFunctionForY())\n      .attr('height', this.getFunctionForHeight(height));\n  }\n\n  private getBarClass(currentSliderValues: number[], d: ISliderGraphData, i: number) {\n    if (d.start >= currentSliderValues[0] && d.end <= currentSliderValues[1]) {\n      return 'coveo-active';\n    } else if (currentSliderValues[0] == this.slider.options.start && i == 0) {\n      return 'coveo-active';\n    } else if (currentSliderValues[1] == this.slider.options.end && i == this.slider.options.graph.steps - 1) {\n      return 'coveo-active';\n    } else {\n      return '';\n    }\n  }\n\n  private setTooltip(d: ISliderGraphData, height: number) {\n    const caption = $$('span', {\n      className: 'coveo-caption'\n    });\n    caption.text(this.slider.getCaptionFromValue([d.start, d.end]));\n\n    const count = $$('span', {\n      className: 'coveo-count'\n    });\n    count.text(d.y.toString());\n    $$(this.tooltip).empty();\n    this.tooltip.appendChild(caption.el);\n    this.tooltip.appendChild(count.el);\n\n    this.tooltip.style.display = 'block';\n    this.tooltip.style.left = (this.x(d.start) - (0.2 * this.slider.options.graph.steps)) + 'px';\n    this.tooltip.style.top = (this.y(d.y) - height) + 'px';\n  }\n\n  private getFunctionForX() {\n    return (d: ISliderGraphData) => {\n      return this.x(d.start);\n    };\n  }\n\n  private getFunctionForY() {\n    return (d: ISliderGraphData) => {\n      return this.y(d.y);\n    };\n  }\n\n  private getFunctionForHeight(height: number) {\n    return (d: ISliderGraphData) => {\n      return height - this.y(d.y);\n    };\n  }\n\n  private getFunctionForClass(currentSliderValues: number[]) {\n    return (d, i) => {\n      return 'coveo-bar ' + this.getBarClass(currentSliderValues, d, i);\n    };\n  }\n\n  private getFunctionForClick() {\n    return (d: ISliderGraphData, i) => {\n      $$(this.slider.element).trigger(SliderEvents.graphValueSelected, <IGraphValueSelectedArgs>{\n        start: d.start,\n        end: d.end,\n        value: d.y\n      });\n    };\n  }\n\n  private getFunctionForMouseOver(height: number) {\n    return (d: ISliderGraphData) => {\n      this.setTooltip(d, height);\n    };\n  }\n\n  private getFunctionForMouseOut() {\n    return () => {\n      this.tooltip.style.display = 'none';\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Misc/Slider.ts\n **/","// https://d3js.org/d3-scale/ Version 1.0.3. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format'), require('d3-color')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) :\n  (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));\n}(this, function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict';\n\n  var array = Array.prototype;\n\n  var map$1 = array.map;\n  var slice = array.slice;\n\n  var implicit = {name: \"implicit\"};\n\n  function ordinal(range) {\n    var index = d3Collection.map(),\n        domain = [],\n        unknown = implicit;\n\n    range = range == null ? [] : slice.call(range);\n\n    function scale(d) {\n      var key = d + \"\", i = index.get(key);\n      if (!i) {\n        if (unknown !== implicit) return unknown;\n        index.set(key, i = domain.push(d));\n      }\n      return range[(i - 1) % range.length];\n    }\n\n    scale.domain = function(_) {\n      if (!arguments.length) return domain.slice();\n      domain = [], index = d3Collection.map();\n      var i = -1, n = _.length, d, key;\n      while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n      return scale;\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice.call(_), scale) : range.slice();\n    };\n\n    scale.unknown = function(_) {\n      return arguments.length ? (unknown = _, scale) : unknown;\n    };\n\n    scale.copy = function() {\n      return ordinal()\n          .domain(domain)\n          .range(range)\n          .unknown(unknown);\n    };\n\n    return scale;\n  }\n\n  function band() {\n    var scale = ordinal().unknown(undefined),\n        domain = scale.domain,\n        ordinalRange = scale.range,\n        range = [0, 1],\n        step,\n        bandwidth,\n        round = false,\n        paddingInner = 0,\n        paddingOuter = 0,\n        align = 0.5;\n\n    delete scale.unknown;\n\n    function rescale() {\n      var n = domain().length,\n          reverse = range[1] < range[0],\n          start = range[reverse - 0],\n          stop = range[1 - reverse];\n      step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n      if (round) step = Math.floor(step);\n      start += (stop - start - step * (n - paddingInner)) * align;\n      bandwidth = step * (1 - paddingInner);\n      if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n      var values = d3Array.range(n).map(function(i) { return start + step * i; });\n      return ordinalRange(reverse ? values.reverse() : values);\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain(_), rescale()) : domain();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range = [+_[0], +_[1]], round = true, rescale();\n    };\n\n    scale.bandwidth = function() {\n      return bandwidth;\n    };\n\n    scale.step = function() {\n      return step;\n    };\n\n    scale.round = function(_) {\n      return arguments.length ? (round = !!_, rescale()) : round;\n    };\n\n    scale.padding = function(_) {\n      return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n    };\n\n    scale.paddingInner = function(_) {\n      return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n    };\n\n    scale.paddingOuter = function(_) {\n      return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n    };\n\n    scale.align = function(_) {\n      return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n    };\n\n    scale.copy = function() {\n      return band()\n          .domain(domain())\n          .range(range)\n          .round(round)\n          .paddingInner(paddingInner)\n          .paddingOuter(paddingOuter)\n          .align(align);\n    };\n\n    return rescale();\n  }\n\n  function pointish(scale) {\n    var copy = scale.copy;\n\n    scale.padding = scale.paddingOuter;\n    delete scale.paddingInner;\n    delete scale.paddingOuter;\n\n    scale.copy = function() {\n      return pointish(copy());\n    };\n\n    return scale;\n  }\n\n  function point() {\n    return pointish(band().paddingInner(1));\n  }\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function number(x) {\n    return +x;\n  }\n\n  var unit = [0, 1];\n\n  function deinterpolate(a, b) {\n    return (b -= (a = +a))\n        ? function(x) { return (x - a) / b; }\n        : constant(b);\n  }\n\n  function deinterpolateClamp(deinterpolate) {\n    return function(a, b) {\n      var d = deinterpolate(a = +a, b = +b);\n      return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n    };\n  }\n\n  function reinterpolateClamp(reinterpolate) {\n    return function(a, b) {\n      var r = reinterpolate(a = +a, b = +b);\n      return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n    };\n  }\n\n  function bimap(domain, range, deinterpolate, reinterpolate) {\n    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n    if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n    else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n    return function(x) { return r0(d0(x)); };\n  }\n\n  function polymap(domain, range, deinterpolate, reinterpolate) {\n    var j = Math.min(domain.length, range.length) - 1,\n        d = new Array(j),\n        r = new Array(j),\n        i = -1;\n\n    // Reverse descending domains.\n    if (domain[j] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n\n    while (++i < j) {\n      d[i] = deinterpolate(domain[i], domain[i + 1]);\n      r[i] = reinterpolate(range[i], range[i + 1]);\n    }\n\n    return function(x) {\n      var i = d3Array.bisect(domain, x, 1, j) - 1;\n      return r[i](d[i](x));\n    };\n  }\n\n  function copy(source, target) {\n    return target\n        .domain(source.domain())\n        .range(source.range())\n        .interpolate(source.interpolate())\n        .clamp(source.clamp());\n  }\n\n  // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n  // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n  function continuous(deinterpolate$$, reinterpolate) {\n    var domain = unit,\n        range = unit,\n        interpolate = d3Interpolate.interpolate,\n        clamp = false,\n        piecewise,\n        output,\n        input;\n\n    function rescale() {\n      piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n      output = input = null;\n      return scale;\n    }\n\n    function scale(x) {\n      return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate)))(+x);\n    }\n\n    scale.invert = function(y) {\n      return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale();\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = !!_, rescale()) : clamp;\n    };\n\n    scale.interpolate = function(_) {\n      return arguments.length ? (interpolate = _, rescale()) : interpolate;\n    };\n\n    return rescale();\n  }\n\n  function tickFormat(domain, count, specifier) {\n    var start = domain[0],\n        stop = domain[domain.length - 1],\n        step = d3Array.tickStep(start, stop, count == null ? 10 : count),\n        precision;\n    specifier = d3Format.formatSpecifier(specifier == null ? \",f\" : specifier);\n    switch (specifier.type) {\n      case \"s\": {\n        var value = Math.max(Math.abs(start), Math.abs(stop));\n        if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;\n        return d3Format.formatPrefix(specifier, value);\n      }\n      case \"\":\n      case \"e\":\n      case \"g\":\n      case \"p\":\n      case \"r\": {\n        if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n        break;\n      }\n      case \"f\":\n      case \"%\": {\n        if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n        break;\n      }\n    }\n    return d3Format.format(specifier);\n  }\n\n  function linearish(scale) {\n    var domain = scale.domain;\n\n    scale.ticks = function(count) {\n      var d = domain();\n      return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      return tickFormat(domain(), count, specifier);\n    };\n\n    scale.nice = function(count) {\n      var d = domain(),\n          i = d.length - 1,\n          n = count == null ? 10 : count,\n          start = d[0],\n          stop = d[i],\n          step = d3Array.tickStep(start, stop, n);\n\n      if (step) {\n        step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n        d[0] = Math.floor(start / step) * step;\n        d[i] = Math.ceil(stop / step) * step;\n        domain(d);\n      }\n\n      return scale;\n    };\n\n    return scale;\n  }\n\n  function linear() {\n    var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber);\n\n    scale.copy = function() {\n      return copy(scale, linear());\n    };\n\n    return linearish(scale);\n  }\n\n  function identity() {\n    var domain = [0, 1];\n\n    function scale(x) {\n      return +x;\n    }\n\n    scale.invert = scale;\n\n    scale.domain = scale.range = function(_) {\n      return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();\n    };\n\n    scale.copy = function() {\n      return identity().domain(domain);\n    };\n\n    return linearish(scale);\n  }\n\n  function nice(domain, interval) {\n    domain = domain.slice();\n\n    var i0 = 0,\n        i1 = domain.length - 1,\n        x0 = domain[i0],\n        x1 = domain[i1],\n        t;\n\n    if (x1 < x0) {\n      t = i0, i0 = i1, i1 = t;\n      t = x0, x0 = x1, x1 = t;\n    }\n\n    domain[i0] = interval.floor(x0);\n    domain[i1] = interval.ceil(x1);\n    return domain;\n  }\n\n  function deinterpolate$1(a, b) {\n    return (b = Math.log(b / a))\n        ? function(x) { return Math.log(x / a) / b; }\n        : constant(b);\n  }\n\n  function reinterpolate(a, b) {\n    return a < 0\n        ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n        : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n  }\n\n  function pow10(x) {\n    return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n  }\n\n  function powp(base) {\n    return base === 10 ? pow10\n        : base === Math.E ? Math.exp\n        : function(x) { return Math.pow(base, x); };\n  }\n\n  function logp(base) {\n    return base === Math.E ? Math.log\n        : base === 10 && Math.log10\n        || base === 2 && Math.log2\n        || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n  }\n\n  function reflect(f) {\n    return function(x) {\n      return -f(-x);\n    };\n  }\n\n  function log() {\n    var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),\n        domain = scale.domain,\n        base = 10,\n        logs = logp(10),\n        pows = powp(10);\n\n    function rescale() {\n      logs = logp(base), pows = powp(base);\n      if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n      return scale;\n    }\n\n    scale.base = function(_) {\n      return arguments.length ? (base = +_, rescale()) : base;\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain(_), rescale()) : domain();\n    };\n\n    scale.ticks = function(count) {\n      var d = domain(),\n          u = d[0],\n          v = d[d.length - 1],\n          r;\n\n      if (r = v < u) i = u, u = v, v = i;\n\n      var i = logs(u),\n          j = logs(v),\n          p,\n          k,\n          t,\n          n = count == null ? 10 : +count,\n          z = [];\n\n      if (!(base % 1) && j - i < n) {\n        i = Math.round(i) - 1, j = Math.round(j) + 1;\n        if (u > 0) for (; i < j; ++i) {\n          for (k = 1, p = pows(i); k < base; ++k) {\n            t = p * k;\n            if (t < u) continue;\n            if (t > v) break;\n            z.push(t);\n          }\n        } else for (; i < j; ++i) {\n          for (k = base - 1, p = pows(i); k >= 1; --k) {\n            t = p * k;\n            if (t < u) continue;\n            if (t > v) break;\n            z.push(t);\n          }\n        }\n      } else {\n        z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);\n      }\n\n      return r ? z.reverse() : z;\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n      if (typeof specifier !== \"function\") specifier = d3Format.format(specifier);\n      if (count === Infinity) return specifier;\n      if (count == null) count = 10;\n      var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n      return function(d) {\n        var i = d / pows(Math.round(logs(d)));\n        if (i * base < base - 0.5) i *= base;\n        return i <= k ? specifier(d) : \"\";\n      };\n    };\n\n    scale.nice = function() {\n      return domain(nice(domain(), {\n        floor: function(x) { return pows(Math.floor(logs(x))); },\n        ceil: function(x) { return pows(Math.ceil(logs(x))); }\n      }));\n    };\n\n    scale.copy = function() {\n      return copy(scale, log().base(base));\n    };\n\n    return scale;\n  }\n\n  function raise(x, exponent) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  }\n\n  function pow() {\n    var exponent = 1,\n        scale = continuous(deinterpolate, reinterpolate),\n        domain = scale.domain;\n\n    function deinterpolate(a, b) {\n      return (b = raise(b, exponent) - (a = raise(a, exponent)))\n          ? function(x) { return (raise(x, exponent) - a) / b; }\n          : constant(b);\n    }\n\n    function reinterpolate(a, b) {\n      b = raise(b, exponent) - (a = raise(a, exponent));\n      return function(t) { return raise(a + b * t, 1 / exponent); };\n    }\n\n    scale.exponent = function(_) {\n      return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n    };\n\n    scale.copy = function() {\n      return copy(scale, pow().exponent(exponent));\n    };\n\n    return linearish(scale);\n  }\n\n  function sqrt() {\n    return pow().exponent(0.5);\n  }\n\n  function quantile$1() {\n    var domain = [],\n        range = [],\n        thresholds = [];\n\n    function rescale() {\n      var i = 0, n = Math.max(1, range.length);\n      thresholds = new Array(n - 1);\n      while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);\n      return scale;\n    }\n\n    function scale(x) {\n      if (!isNaN(x = +x)) return range[d3Array.bisect(thresholds, x)];\n    }\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return i < 0 ? [NaN, NaN] : [\n        i > 0 ? thresholds[i - 1] : domain[0],\n        i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n      ];\n    };\n\n    scale.domain = function(_) {\n      if (!arguments.length) return domain.slice();\n      domain = [];\n      for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n      domain.sort(d3Array.ascending);\n      return rescale();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n    };\n\n    scale.quantiles = function() {\n      return thresholds.slice();\n    };\n\n    scale.copy = function() {\n      return quantile$1()\n          .domain(domain)\n          .range(range);\n    };\n\n    return scale;\n  }\n\n  function quantize() {\n    var x0 = 0,\n        x1 = 1,\n        n = 1,\n        domain = [0.5],\n        range = [0, 1];\n\n    function scale(x) {\n      if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n    }\n\n    function rescale() {\n      var i = -1;\n      domain = new Array(n);\n      while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n      return scale;\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n    };\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return i < 0 ? [NaN, NaN]\n          : i < 1 ? [x0, domain[0]]\n          : i >= n ? [domain[n - 1], x1]\n          : [domain[i - 1], domain[i]];\n    };\n\n    scale.copy = function() {\n      return quantize()\n          .domain([x0, x1])\n          .range(range);\n    };\n\n    return linearish(scale);\n  }\n\n  function threshold() {\n    var domain = [0.5],\n        range = [0, 1],\n        n = 1;\n\n    function scale(x) {\n      if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n    };\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return [domain[i - 1], domain[i]];\n    };\n\n    scale.copy = function() {\n      return threshold()\n          .domain(domain)\n          .range(range);\n    };\n\n    return scale;\n  }\n\n  var durationSecond = 1000;\n  var durationMinute = durationSecond * 60;\n  var durationHour = durationMinute * 60;\n  var durationDay = durationHour * 24;\n  var durationWeek = durationDay * 7;\n  var durationMonth = durationDay * 30;\n  var durationYear = durationDay * 365;\n  function date(t) {\n    return new Date(t);\n  }\n\n  function number$1(t) {\n    return t instanceof Date ? +t : +new Date(+t);\n  }\n\n  function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n    var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber),\n        invert = scale.invert,\n        domain = scale.domain;\n\n    var formatMillisecond = format(\".%L\"),\n        formatSecond = format(\":%S\"),\n        formatMinute = format(\"%I:%M\"),\n        formatHour = format(\"%I %p\"),\n        formatDay = format(\"%a %d\"),\n        formatWeek = format(\"%b %d\"),\n        formatMonth = format(\"%B\"),\n        formatYear = format(\"%Y\");\n\n    var tickIntervals = [\n      [second,  1,      durationSecond],\n      [second,  5,  5 * durationSecond],\n      [second, 15, 15 * durationSecond],\n      [second, 30, 30 * durationSecond],\n      [minute,  1,      durationMinute],\n      [minute,  5,  5 * durationMinute],\n      [minute, 15, 15 * durationMinute],\n      [minute, 30, 30 * durationMinute],\n      [  hour,  1,      durationHour  ],\n      [  hour,  3,  3 * durationHour  ],\n      [  hour,  6,  6 * durationHour  ],\n      [  hour, 12, 12 * durationHour  ],\n      [   day,  1,      durationDay   ],\n      [   day,  2,  2 * durationDay   ],\n      [  week,  1,      durationWeek  ],\n      [ month,  1,      durationMonth ],\n      [ month,  3,  3 * durationMonth ],\n      [  year,  1,      durationYear  ]\n    ];\n\n    function tickFormat(date) {\n      return (second(date) < date ? formatMillisecond\n          : minute(date) < date ? formatSecond\n          : hour(date) < date ? formatMinute\n          : day(date) < date ? formatHour\n          : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n          : year(date) < date ? formatMonth\n          : formatYear)(date);\n    }\n\n    function tickInterval(interval, start, stop, step) {\n      if (interval == null) interval = 10;\n\n      // If a desired tick count is specified, pick a reasonable tick interval\n      // based on the extent of the domain and a rough estimate of tick size.\n      // Otherwise, assume interval is already a time interval and use it.\n      if (typeof interval === \"number\") {\n        var target = Math.abs(stop - start) / interval,\n            i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n        if (i === tickIntervals.length) {\n          step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);\n          interval = year;\n        } else if (i) {\n          i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n          step = i[1];\n          interval = i[0];\n        } else {\n          step = d3Array.tickStep(start, stop, interval);\n          interval = millisecond;\n        }\n      }\n\n      return step == null ? interval : interval.every(step);\n    }\n\n    scale.invert = function(y) {\n      return new Date(invert(y));\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date);\n    };\n\n    scale.ticks = function(interval, step) {\n      var d = domain(),\n          t0 = d[0],\n          t1 = d[d.length - 1],\n          r = t1 < t0,\n          t;\n      if (r) t = t0, t0 = t1, t1 = t;\n      t = tickInterval(interval, t0, t1, step);\n      t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n      return r ? t.reverse() : t;\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      return specifier == null ? tickFormat : format(specifier);\n    };\n\n    scale.nice = function(interval, step) {\n      var d = domain();\n      return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n          ? domain(nice(d, interval))\n          : scale;\n    };\n\n    scale.copy = function() {\n      return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n    };\n\n    return scale;\n  }\n\n  function time() {\n    return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n  }\n\n  function utcTime() {\n    return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n  }\n\n  function colors(s) {\n    return s.match(/.{6}/g).map(function(x) {\n      return \"#\" + x;\n    });\n  }\n\n  var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\n  var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\n  var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\n  var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\n  var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0));\n\n  var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n  var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n  var rainbow = d3Color.cubehelix();\n\n  function rainbow$1(t) {\n    if (t < 0 || t > 1) t -= Math.floor(t);\n    var ts = Math.abs(t - 0.5);\n    rainbow.h = 360 * t - 100;\n    rainbow.s = 1.5 - 1.5 * ts;\n    rainbow.l = 0.8 - 0.9 * ts;\n    return rainbow + \"\";\n  }\n\n  function ramp(range) {\n    var n = range.length;\n    return function(t) {\n      return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n    };\n  }\n\n  var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\n  var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\n  var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\n  var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\n  function sequential(interpolator) {\n    var x0 = 0,\n        x1 = 1,\n        clamp = false;\n\n    function scale(x) {\n      var t = (x - x0) / (x1 - x0);\n      return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = !!_, scale) : clamp;\n    };\n\n    scale.interpolator = function(_) {\n      return arguments.length ? (interpolator = _, scale) : interpolator;\n    };\n\n    scale.copy = function() {\n      return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n    };\n\n    return linearish(scale);\n  }\n\n  exports.scaleBand = band;\n  exports.scalePoint = point;\n  exports.scaleIdentity = identity;\n  exports.scaleLinear = linear;\n  exports.scaleLog = log;\n  exports.scaleOrdinal = ordinal;\n  exports.scaleImplicit = implicit;\n  exports.scalePow = pow;\n  exports.scaleSqrt = sqrt;\n  exports.scaleQuantile = quantile$1;\n  exports.scaleQuantize = quantize;\n  exports.scaleThreshold = threshold;\n  exports.scaleTime = time;\n  exports.scaleUtc = utcTime;\n  exports.schemeCategory10 = category10;\n  exports.schemeCategory20b = category20b;\n  exports.schemeCategory20c = category20c;\n  exports.schemeCategory20 = category20;\n  exports.interpolateCubehelixDefault = cubehelix$1;\n  exports.interpolateRainbow = rainbow$1;\n  exports.interpolateWarm = warm;\n  exports.interpolateCool = cool;\n  exports.interpolateViridis = viridis;\n  exports.interpolateMagma = magma;\n  exports.interpolateInferno = inferno;\n  exports.interpolatePlasma = plasma;\n  exports.scaleSequential = sequential;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-scale/build/d3-scale.js\n ** module id = 148\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-array/ Version 1.0.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n  var bisectLeft = ascendingBisect.left;\n\n  function descending(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function number(x) {\n    return x === null ? NaN : +x;\n  }\n\n  function variance(array, f) {\n    var n = array.length,\n        m = 0,\n        a,\n        d,\n        s = 0,\n        i = -1,\n        j = 0;\n\n    if (f == null) {\n      while (++i < n) {\n        if (!isNaN(a = number(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    else {\n      while (++i < n) {\n        if (!isNaN(a = number(f(array[i], i, array)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    if (j > 1) return s / (j - 1);\n  }\n\n  function deviation(array, f) {\n    var v = variance(array, f);\n    return v ? Math.sqrt(v) : v;\n  }\n\n  function extent(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b,\n        c;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    return [a, c];\n  }\n\n  var array = Array.prototype;\n\n  var slice = array.slice;\n  var map = array.map;\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function identity(x) {\n    return x;\n  }\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50);\n  var e5 = Math.sqrt(10);\n  var e2 = Math.sqrt(2);\n  function ticks(start, stop, count) {\n    var step = tickStep(start, stop, count);\n    return range(\n      Math.ceil(start / step) * step,\n      Math.floor(stop / step) * step + step / 2, // inclusive\n      step\n    );\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n  }\n\n  function histogram() {\n    var value = identity,\n        domain = extent,\n        threshold = sturges;\n\n    function histogram(data) {\n      var i,\n          n = data.length,\n          x,\n          values = new Array(n);\n\n      for (i = 0; i < n; ++i) {\n        values[i] = value(data[i], i, data);\n      }\n\n      var xz = domain(values),\n          x0 = xz[0],\n          x1 = xz[1],\n          tz = threshold(values, x0, x1);\n\n      // Convert number of thresholds into uniform thresholds.\n      if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\n      // Remove any thresholds outside the domain.\n      var m = tz.length;\n      while (tz[0] <= x0) tz.shift(), --m;\n      while (tz[m - 1] >= x1) tz.pop(), --m;\n\n      var bins = new Array(m + 1),\n          bin;\n\n      // Initialize bins.\n      for (i = 0; i <= m; ++i) {\n        bin = bins[i] = [];\n        bin.x0 = i > 0 ? tz[i - 1] : x0;\n        bin.x1 = i < m ? tz[i] : x1;\n      }\n\n      // Assign data to bins by value, ignoring any outside the domain.\n      for (i = 0; i < n; ++i) {\n        x = values[i];\n        if (x0 <= x && x <= x1) {\n          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n        }\n      }\n\n      return bins;\n    }\n\n    histogram.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n    };\n\n    histogram.domain = function(_) {\n      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n    };\n\n    histogram.thresholds = function(_) {\n      return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n    };\n\n    return histogram;\n  }\n\n  function quantile(array, p, f) {\n    if (f == null) f = number;\n    if (!(n = array.length)) return;\n    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n    if (p >= 1) return +f(array[n - 1], n - 1, array);\n    var n,\n        h = (n - 1) * p,\n        i = Math.floor(h),\n        a = +f(array[i], i, array),\n        b = +f(array[i + 1], i + 1, array);\n    return a + (b - a) * (h - i);\n  }\n\n  function freedmanDiaconis(values, min, max) {\n    values = map.call(values, number).sort(ascending);\n    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function scott(values, min, max) {\n    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function max(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n    }\n\n    return a;\n  }\n\n  function mean(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1,\n        j = n;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;\n    }\n\n    if (j) return s / j;\n  }\n\n  function median(array, f) {\n    var numbers = [],\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n    }\n\n    return quantile(numbers.sort(ascending), 0.5);\n  }\n\n  function merge(arrays) {\n    var n = arrays.length,\n        m,\n        i = -1,\n        j = 0,\n        merged,\n        array;\n\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n\n    return merged;\n  }\n\n  function min(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n    }\n\n    return a;\n  }\n\n  function pairs(array) {\n    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [p, p = array[++i]];\n    return pairs;\n  }\n\n  function permute(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  }\n\n  function scan(array, compare) {\n    if (!(n = array.length)) return;\n    var i = 0,\n        n,\n        j = 0,\n        xi,\n        xj = array[j];\n\n    if (!compare) compare = ascending;\n\n    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n    if (compare(xj, xj) === 0) return j;\n  }\n\n  function shuffle(array, i0, i1) {\n    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n        t,\n        i;\n\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n\n    return array;\n  }\n\n  function sum(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n    }\n\n    else {\n      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n    }\n\n    return s;\n  }\n\n  function transpose(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  }\n\n  function length(d) {\n    return d.length;\n  }\n\n  function zip() {\n    return transpose(arguments);\n  }\n\n  exports.bisect = bisectRight;\n  exports.bisectRight = bisectRight;\n  exports.bisectLeft = bisectLeft;\n  exports.ascending = ascending;\n  exports.bisector = bisector;\n  exports.descending = descending;\n  exports.deviation = deviation;\n  exports.extent = extent;\n  exports.histogram = histogram;\n  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n  exports.thresholdScott = scott;\n  exports.thresholdSturges = sturges;\n  exports.max = max;\n  exports.mean = mean;\n  exports.median = median;\n  exports.merge = merge;\n  exports.min = min;\n  exports.pairs = pairs;\n  exports.permute = permute;\n  exports.quantile = quantile;\n  exports.range = range;\n  exports.scan = scan;\n  exports.shuffle = shuffle;\n  exports.sum = sum;\n  exports.ticks = ticks;\n  exports.tickStep = tickStep;\n  exports.transpose = transpose;\n  exports.variance = variance;\n  exports.zip = zip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-array/build/d3-array.js\n ** module id = 149\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-collection/ Version 1.0.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  var prefix = \"$\";\n\n  function Map() {}\n\n  Map.prototype = map.prototype = {\n    constructor: Map,\n    has: function(key) {\n      return (prefix + key) in this;\n    },\n    get: function(key) {\n      return this[prefix + key];\n    },\n    set: function(key, value) {\n      this[prefix + key] = value;\n      return this;\n    },\n    remove: function(key) {\n      var property = prefix + key;\n      return property in this && delete this[property];\n    },\n    clear: function() {\n      for (var property in this) if (property[0] === prefix) delete this[property];\n    },\n    keys: function() {\n      var keys = [];\n      for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n      return keys;\n    },\n    values: function() {\n      var values = [];\n      for (var property in this) if (property[0] === prefix) values.push(this[property]);\n      return values;\n    },\n    entries: function() {\n      var entries = [];\n      for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n      return entries;\n    },\n    size: function() {\n      var size = 0;\n      for (var property in this) if (property[0] === prefix) ++size;\n      return size;\n    },\n    empty: function() {\n      for (var property in this) if (property[0] === prefix) return false;\n      return true;\n    },\n    each: function(f) {\n      for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n    }\n  };\n\n  function map(object, f) {\n    var map = new Map;\n\n    // Copy constructor.\n    if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n    // Index array by numeric index or specified key function.\n    else if (Array.isArray(object)) {\n      var i = -1,\n          n = object.length,\n          o;\n\n      if (f == null) while (++i < n) map.set(i, object[i]);\n      else while (++i < n) map.set(f(o = object[i], i, object), o);\n    }\n\n    // Convert object to map.\n    else if (object) for (var key in object) map.set(key, object[key]);\n\n    return map;\n  }\n\n  function nest() {\n    var keys = [],\n        sortKeys = [],\n        sortValues,\n        rollup,\n        nest;\n\n    function apply(array, depth, createResult, setResult) {\n      if (depth >= keys.length) return rollup != null\n          ? rollup(array) : (sortValues != null\n          ? array.sort(sortValues)\n          : array);\n\n      var i = -1,\n          n = array.length,\n          key = keys[depth++],\n          keyValue,\n          value,\n          valuesByKey = map(),\n          values,\n          result = createResult();\n\n      while (++i < n) {\n        if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n          values.push(value);\n        } else {\n          valuesByKey.set(keyValue, [value]);\n        }\n      }\n\n      valuesByKey.each(function(values, key) {\n        setResult(result, key, apply(values, depth, createResult, setResult));\n      });\n\n      return result;\n    }\n\n    function entries(map, depth) {\n      if (++depth > keys.length) return map;\n      var array, sortKey = sortKeys[depth - 1];\n      if (rollup != null && depth >= keys.length) array = map.entries();\n      else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n      return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n    }\n\n    return nest = {\n      object: function(array) { return apply(array, 0, createObject, setObject); },\n      map: function(array) { return apply(array, 0, createMap, setMap); },\n      entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n      key: function(d) { keys.push(d); return nest; },\n      sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n      sortValues: function(order) { sortValues = order; return nest; },\n      rollup: function(f) { rollup = f; return nest; }\n    };\n  }\n\n  function createObject() {\n    return {};\n  }\n\n  function setObject(object, key, value) {\n    object[key] = value;\n  }\n\n  function createMap() {\n    return map();\n  }\n\n  function setMap(map, key, value) {\n    map.set(key, value);\n  }\n\n  function Set() {}\n\n  var proto = map.prototype;\n\n  Set.prototype = set.prototype = {\n    constructor: Set,\n    has: proto.has,\n    add: function(value) {\n      value += \"\";\n      this[prefix + value] = value;\n      return this;\n    },\n    remove: proto.remove,\n    clear: proto.clear,\n    values: proto.keys,\n    size: proto.size,\n    empty: proto.empty,\n    each: proto.each\n  };\n\n  function set(object, f) {\n    var set = new Set;\n\n    // Copy constructor.\n    if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n    // Otherwise, assume it’s an array.\n    else if (object) {\n      var i = -1, n = object.length;\n      if (f == null) while (++i < n) set.add(object[i]);\n      else while (++i < n) set.add(f(object[i], i, object));\n    }\n\n    return set;\n  }\n\n  function keys(map) {\n    var keys = [];\n    for (var key in map) keys.push(key);\n    return keys;\n  }\n\n  function values(map) {\n    var values = [];\n    for (var key in map) values.push(map[key]);\n    return values;\n  }\n\n  function entries(map) {\n    var entries = [];\n    for (var key in map) entries.push({key: key, value: map[key]});\n    return entries;\n  }\n\n  exports.nest = nest;\n  exports.set = set;\n  exports.map = map;\n  exports.keys = keys;\n  exports.values = values;\n  exports.entries = entries;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-collection/build/d3-collection.js\n ** module id = 150\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-interpolate/ Version 1.1.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-color')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) :\n  (factory((global.d3 = global.d3 || {}),global.d3));\n}(this, function (exports,d3Color) { 'use strict';\n\n  function basis(t1, v0, v1, v2, v3) {\n    var t2 = t1 * t1, t3 = t2 * t1;\n    return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n        + (4 - 6 * t2 + 3 * t3) * v1\n        + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n        + t3 * v3) / 6;\n  }\n\n  function basis$1(values) {\n    var n = values.length - 1;\n    return function(t) {\n      var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n          v1 = values[i],\n          v2 = values[i + 1],\n          v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n          v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n      return basis((t - i / n) * n, v0, v1, v2, v3);\n    };\n  }\n\n  function basisClosed(values) {\n    var n = values.length;\n    return function(t) {\n      var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n          v0 = values[(i + n - 1) % n],\n          v1 = values[i % n],\n          v2 = values[(i + 1) % n],\n          v3 = values[(i + 2) % n];\n      return basis((t - i / n) * n, v0, v1, v2, v3);\n    };\n  }\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function linear(a, d) {\n    return function(t) {\n      return a + t * d;\n    };\n  }\n\n  function exponential(a, b, y) {\n    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n      return Math.pow(a + t * b, y);\n    };\n  }\n\n  function hue(a, b) {\n    var d = b - a;\n    return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n  }\n\n  function gamma(y) {\n    return (y = +y) === 1 ? nogamma : function(a, b) {\n      return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n    };\n  }\n\n  function nogamma(a, b) {\n    var d = b - a;\n    return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n  }\n\n  var rgb$1 = (function rgbGamma(y) {\n    var color = gamma(y);\n\n    function rgb(start, end) {\n      var r = color((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),\n          g = color(start.g, end.g),\n          b = color(start.b, end.b),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.r = r(t);\n        start.g = g(t);\n        start.b = b(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    rgb.gamma = rgbGamma;\n\n    return rgb;\n  })(1);\n\n  function rgbSpline(spline) {\n    return function(colors) {\n      var n = colors.length,\n          r = new Array(n),\n          g = new Array(n),\n          b = new Array(n),\n          i, color;\n      for (i = 0; i < n; ++i) {\n        color = d3Color.rgb(colors[i]);\n        r[i] = color.r || 0;\n        g[i] = color.g || 0;\n        b[i] = color.b || 0;\n      }\n      r = spline(r);\n      g = spline(g);\n      b = spline(b);\n      color.opacity = 1;\n      return function(t) {\n        color.r = r(t);\n        color.g = g(t);\n        color.b = b(t);\n        return color + \"\";\n      };\n    };\n  }\n\n  var rgbBasis = rgbSpline(basis$1);\n  var rgbBasisClosed = rgbSpline(basisClosed);\n\n  function array(a, b) {\n    var nb = b ? b.length : 0,\n        na = a ? Math.min(nb, a.length) : 0,\n        x = new Array(nb),\n        c = new Array(nb),\n        i;\n\n    for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n    for (; i < nb; ++i) c[i] = b[i];\n\n    return function(t) {\n      for (i = 0; i < na; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n\n  function date(a, b) {\n    var d = new Date;\n    return a = +a, b -= a, function(t) {\n      return d.setTime(a + b * t), d;\n    };\n  }\n\n  function number(a, b) {\n    return a = +a, b -= a, function(t) {\n      return a + b * t;\n    };\n  }\n\n  function object(a, b) {\n    var i = {},\n        c = {},\n        k;\n\n    if (a === null || typeof a !== \"object\") a = {};\n    if (b === null || typeof b !== \"object\") b = {};\n\n    for (k in b) {\n      if (k in a) {\n        i[k] = value(a[k], b[k]);\n      } else {\n        c[k] = b[k];\n      }\n    }\n\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n\n  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\n  var reB = new RegExp(reA.source, \"g\");\n  function zero(b) {\n    return function() {\n      return b;\n    };\n  }\n\n  function one(b) {\n    return function(t) {\n      return b(t) + \"\";\n    };\n  }\n\n  function string(a, b) {\n    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n        am, // current match in a\n        bm, // current match in b\n        bs, // string preceding current number in b, if any\n        i = -1, // index in s\n        s = [], // string constants and placeholders\n        q = []; // number interpolators\n\n    // Coerce inputs to strings.\n    a = a + \"\", b = b + \"\";\n\n    // Interpolate pairs of numbers in a & b.\n    while ((am = reA.exec(a))\n        && (bm = reB.exec(b))) {\n      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; // coalesce with previous string\n        else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n        if (s[i]) s[i] += bm; // coalesce with previous string\n        else s[++i] = bm;\n      } else { // interpolate non-matching numbers\n        s[++i] = null;\n        q.push({i: i, x: number(am, bm)});\n      }\n      bi = reB.lastIndex;\n    }\n\n    // Add remains of b.\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n\n    // Special optimization for only a single match.\n    // Otherwise, interpolate each of the numbers and rejoin the string.\n    return s.length < 2 ? (q[0]\n        ? one(q[0].x)\n        : zero(b))\n        : (b = q.length, function(t) {\n            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n            return s.join(\"\");\n          });\n  }\n\n  function value(a, b) {\n    var t = typeof b, c;\n    return b == null || t === \"boolean\" ? constant(b)\n        : (t === \"number\" ? number\n        : t === \"string\" ? ((c = d3Color.color(b)) ? (b = c, rgb$1) : string)\n        : b instanceof d3Color.color ? rgb$1\n        : b instanceof Date ? date\n        : Array.isArray(b) ? array\n        : isNaN(b) ? object\n        : number)(a, b);\n  }\n\n  function round(a, b) {\n    return a = +a, b -= a, function(t) {\n      return Math.round(a + b * t);\n    };\n  }\n\n  var degrees = 180 / Math.PI;\n\n  var identity = {\n    translateX: 0,\n    translateY: 0,\n    rotate: 0,\n    skewX: 0,\n    scaleX: 1,\n    scaleY: 1\n  };\n\n  function decompose(a, b, c, d, e, f) {\n    var scaleX, scaleY, skewX;\n    if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n    if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n    if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n    if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n    return {\n      translateX: e,\n      translateY: f,\n      rotate: Math.atan2(b, a) * degrees,\n      skewX: Math.atan(skewX) * degrees,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n\n  var cssNode;\n  var cssRoot;\n  var cssView;\n  var svgNode;\n  function parseCss(value) {\n    if (value === \"none\") return identity;\n    if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n    cssNode.style.transform = value;\n    value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n    cssRoot.removeChild(cssNode);\n    value = value.slice(7, -1).split(\",\");\n    return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n  }\n\n  function parseSvg(value) {\n    if (value == null) return identity;\n    if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    svgNode.setAttribute(\"transform\", value);\n    if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n    value = value.matrix;\n    return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n  }\n\n  function interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n    function pop(s) {\n      return s.length ? s.pop() + \" \" : \"\";\n    }\n\n    function translate(xa, ya, xb, yb, s, q) {\n      if (xa !== xb || ya !== yb) {\n        var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n        q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n      } else if (xb || yb) {\n        s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n      }\n    }\n\n    function rotate(a, b, s, q) {\n      if (a !== b) {\n        if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n        q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n      } else if (b) {\n        s.push(pop(s) + \"rotate(\" + b + degParen);\n      }\n    }\n\n    function skewX(a, b, s, q) {\n      if (a !== b) {\n        q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n      } else if (b) {\n        s.push(pop(s) + \"skewX(\" + b + degParen);\n      }\n    }\n\n    function scale(xa, ya, xb, yb, s, q) {\n      if (xa !== xb || ya !== yb) {\n        var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n        q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n      } else if (xb !== 1 || yb !== 1) {\n        s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n      }\n    }\n\n    return function(a, b) {\n      var s = [], // string constants and placeholders\n          q = []; // number interpolators\n      a = parse(a), b = parse(b);\n      translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n      rotate(a.rotate, b.rotate, s, q);\n      skewX(a.skewX, b.skewX, s, q);\n      scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n      a = b = null; // gc\n      return function(t) {\n        var i = -1, n = q.length, o;\n        while (++i < n) s[(o = q[i]).i] = o.x(t);\n        return s.join(\"\");\n      };\n    };\n  }\n\n  var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\n  var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\n  var rho = Math.SQRT2;\n  var rho2 = 2;\n  var rho4 = 4;\n  var epsilon2 = 1e-12;\n  function cosh(x) {\n    return ((x = Math.exp(x)) + 1 / x) / 2;\n  }\n\n  function sinh(x) {\n    return ((x = Math.exp(x)) - 1 / x) / 2;\n  }\n\n  function tanh(x) {\n    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n  }\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000;\n\n    return i;\n  }\n\n  function hsl$1(hue) {\n    return function(start, end) {\n      var h = hue((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),\n          s = nogamma(start.s, end.s),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n  }\n\n  var hsl$2 = hsl$1(hue);\n  var hslLong = hsl$1(nogamma);\n\n  function lab$1(start, end) {\n    var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),\n        a = nogamma(start.a, end.a),\n        b = nogamma(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.l = l(t);\n      start.a = a(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  function hcl$1(hue) {\n    return function(start, end) {\n      var h = hue((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),\n          c = nogamma(start.c, end.c),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.c = c(t);\n        start.l = l(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n  }\n\n  var hcl$2 = hcl$1(hue);\n  var hclLong = hcl$1(nogamma);\n\n  function cubehelix$1(hue) {\n    return (function cubehelixGamma(y) {\n      y = +y;\n\n      function cubehelix(start, end) {\n        var h = hue((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),\n            s = nogamma(start.s, end.s),\n            l = nogamma(start.l, end.l),\n            opacity = nogamma(start.opacity, end.opacity);\n        return function(t) {\n          start.h = h(t);\n          start.s = s(t);\n          start.l = l(Math.pow(t, y));\n          start.opacity = opacity(t);\n          return start + \"\";\n        };\n      }\n\n      cubehelix.gamma = cubehelixGamma;\n\n      return cubehelix;\n    })(1);\n  }\n\n  var cubehelix$2 = cubehelix$1(hue);\n  var cubehelixLong = cubehelix$1(nogamma);\n\n  function quantize(interpolator, n) {\n    var samples = new Array(n);\n    for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n    return samples;\n  }\n\n  exports.interpolate = value;\n  exports.interpolateArray = array;\n  exports.interpolateBasis = basis$1;\n  exports.interpolateBasisClosed = basisClosed;\n  exports.interpolateDate = date;\n  exports.interpolateNumber = number;\n  exports.interpolateObject = object;\n  exports.interpolateRound = round;\n  exports.interpolateString = string;\n  exports.interpolateTransformCss = interpolateTransformCss;\n  exports.interpolateTransformSvg = interpolateTransformSvg;\n  exports.interpolateZoom = zoom;\n  exports.interpolateRgb = rgb$1;\n  exports.interpolateRgbBasis = rgbBasis;\n  exports.interpolateRgbBasisClosed = rgbBasisClosed;\n  exports.interpolateHsl = hsl$2;\n  exports.interpolateHslLong = hslLong;\n  exports.interpolateLab = lab$1;\n  exports.interpolateHcl = hcl$2;\n  exports.interpolateHclLong = hclLong;\n  exports.interpolateCubehelix = cubehelix$2;\n  exports.interpolateCubehelixLong = cubehelixLong;\n  exports.quantize = quantize;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-interpolate/build/d3-interpolate.js\n ** module id = 151\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-color/ Version 1.0.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  function define(constructor, factory, prototype) {\n    constructor.prototype = factory.prototype = prototype;\n    prototype.constructor = constructor;\n  }\n\n  function extend(parent, definition) {\n    var prototype = Object.create(parent.prototype);\n    for (var key in definition) prototype[key] = definition[key];\n    return prototype;\n  }\n\n  function Color() {}\n\n  var darker = 0.7;\n  var brighter = 1 / darker;\n\n  var reHex3 = /^#([0-9a-f]{3})$/;\n  var reHex6 = /^#([0-9a-f]{6})$/;\n  var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n  var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n  var reRgbaInteger = /^rgba\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var reRgbaPercent = /^rgba\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n  var reHslaPercent = /^hsla\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var named = {\n    aliceblue: 0xf0f8ff,\n    antiquewhite: 0xfaebd7,\n    aqua: 0x00ffff,\n    aquamarine: 0x7fffd4,\n    azure: 0xf0ffff,\n    beige: 0xf5f5dc,\n    bisque: 0xffe4c4,\n    black: 0x000000,\n    blanchedalmond: 0xffebcd,\n    blue: 0x0000ff,\n    blueviolet: 0x8a2be2,\n    brown: 0xa52a2a,\n    burlywood: 0xdeb887,\n    cadetblue: 0x5f9ea0,\n    chartreuse: 0x7fff00,\n    chocolate: 0xd2691e,\n    coral: 0xff7f50,\n    cornflowerblue: 0x6495ed,\n    cornsilk: 0xfff8dc,\n    crimson: 0xdc143c,\n    cyan: 0x00ffff,\n    darkblue: 0x00008b,\n    darkcyan: 0x008b8b,\n    darkgoldenrod: 0xb8860b,\n    darkgray: 0xa9a9a9,\n    darkgreen: 0x006400,\n    darkgrey: 0xa9a9a9,\n    darkkhaki: 0xbdb76b,\n    darkmagenta: 0x8b008b,\n    darkolivegreen: 0x556b2f,\n    darkorange: 0xff8c00,\n    darkorchid: 0x9932cc,\n    darkred: 0x8b0000,\n    darksalmon: 0xe9967a,\n    darkseagreen: 0x8fbc8f,\n    darkslateblue: 0x483d8b,\n    darkslategray: 0x2f4f4f,\n    darkslategrey: 0x2f4f4f,\n    darkturquoise: 0x00ced1,\n    darkviolet: 0x9400d3,\n    deeppink: 0xff1493,\n    deepskyblue: 0x00bfff,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1e90ff,\n    firebrick: 0xb22222,\n    floralwhite: 0xfffaf0,\n    forestgreen: 0x228b22,\n    fuchsia: 0xff00ff,\n    gainsboro: 0xdcdcdc,\n    ghostwhite: 0xf8f8ff,\n    gold: 0xffd700,\n    goldenrod: 0xdaa520,\n    gray: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xadff2f,\n    grey: 0x808080,\n    honeydew: 0xf0fff0,\n    hotpink: 0xff69b4,\n    indianred: 0xcd5c5c,\n    indigo: 0x4b0082,\n    ivory: 0xfffff0,\n    khaki: 0xf0e68c,\n    lavender: 0xe6e6fa,\n    lavenderblush: 0xfff0f5,\n    lawngreen: 0x7cfc00,\n    lemonchiffon: 0xfffacd,\n    lightblue: 0xadd8e6,\n    lightcoral: 0xf08080,\n    lightcyan: 0xe0ffff,\n    lightgoldenrodyellow: 0xfafad2,\n    lightgray: 0xd3d3d3,\n    lightgreen: 0x90ee90,\n    lightgrey: 0xd3d3d3,\n    lightpink: 0xffb6c1,\n    lightsalmon: 0xffa07a,\n    lightseagreen: 0x20b2aa,\n    lightskyblue: 0x87cefa,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xb0c4de,\n    lightyellow: 0xffffe0,\n    lime: 0x00ff00,\n    limegreen: 0x32cd32,\n    linen: 0xfaf0e6,\n    magenta: 0xff00ff,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66cdaa,\n    mediumblue: 0x0000cd,\n    mediumorchid: 0xba55d3,\n    mediumpurple: 0x9370db,\n    mediumseagreen: 0x3cb371,\n    mediumslateblue: 0x7b68ee,\n    mediumspringgreen: 0x00fa9a,\n    mediumturquoise: 0x48d1cc,\n    mediumvioletred: 0xc71585,\n    midnightblue: 0x191970,\n    mintcream: 0xf5fffa,\n    mistyrose: 0xffe4e1,\n    moccasin: 0xffe4b5,\n    navajowhite: 0xffdead,\n    navy: 0x000080,\n    oldlace: 0xfdf5e6,\n    olive: 0x808000,\n    olivedrab: 0x6b8e23,\n    orange: 0xffa500,\n    orangered: 0xff4500,\n    orchid: 0xda70d6,\n    palegoldenrod: 0xeee8aa,\n    palegreen: 0x98fb98,\n    paleturquoise: 0xafeeee,\n    palevioletred: 0xdb7093,\n    papayawhip: 0xffefd5,\n    peachpuff: 0xffdab9,\n    peru: 0xcd853f,\n    pink: 0xffc0cb,\n    plum: 0xdda0dd,\n    powderblue: 0xb0e0e6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xff0000,\n    rosybrown: 0xbc8f8f,\n    royalblue: 0x4169e1,\n    saddlebrown: 0x8b4513,\n    salmon: 0xfa8072,\n    sandybrown: 0xf4a460,\n    seagreen: 0x2e8b57,\n    seashell: 0xfff5ee,\n    sienna: 0xa0522d,\n    silver: 0xc0c0c0,\n    skyblue: 0x87ceeb,\n    slateblue: 0x6a5acd,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xfffafa,\n    springgreen: 0x00ff7f,\n    steelblue: 0x4682b4,\n    tan: 0xd2b48c,\n    teal: 0x008080,\n    thistle: 0xd8bfd8,\n    tomato: 0xff6347,\n    turquoise: 0x40e0d0,\n    violet: 0xee82ee,\n    wheat: 0xf5deb3,\n    white: 0xffffff,\n    whitesmoke: 0xf5f5f5,\n    yellow: 0xffff00,\n    yellowgreen: 0x9acd32\n  };\n\n  define(Color, color, {\n    displayable: function() {\n      return this.rgb().displayable();\n    },\n    toString: function() {\n      return this.rgb() + \"\";\n    }\n  });\n\n  function color(format) {\n    var m;\n    format = (format + \"\").trim().toLowerCase();\n    return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n        : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n        : named.hasOwnProperty(format) ? rgbn(named[format])\n        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n        : null;\n  }\n\n  function rgbn(n) {\n    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n  }\n\n  function rgba(r, g, b, a) {\n    if (a <= 0) r = g = b = NaN;\n    return new Rgb(r, g, b, a);\n  }\n\n  function rgbConvert(o) {\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Rgb;\n    o = o.rgb();\n    return new Rgb(o.r, o.g, o.b, o.opacity);\n  }\n\n  function rgb(r, g, b, opacity) {\n    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n  }\n\n  function Rgb(r, g, b, opacity) {\n    this.r = +r;\n    this.g = +g;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Rgb, rgb, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    rgb: function() {\n      return this;\n    },\n    displayable: function() {\n      return (0 <= this.r && this.r <= 255)\n          && (0 <= this.g && this.g <= 255)\n          && (0 <= this.b && this.b <= 255)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    toString: function() {\n      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n      return (a === 1 ? \"rgb(\" : \"rgba(\")\n          + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n          + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n          + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n          + (a === 1 ? \")\" : \", \" + a + \")\");\n    }\n  }));\n\n  function hsla(h, s, l, a) {\n    if (a <= 0) h = s = l = NaN;\n    else if (l <= 0 || l >= 1) h = s = NaN;\n    else if (s <= 0) h = NaN;\n    return new Hsl(h, s, l, a);\n  }\n\n  function hslConvert(o) {\n    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Hsl;\n    if (o instanceof Hsl) return o;\n    o = o.rgb();\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        min = Math.min(r, g, b),\n        max = Math.max(r, g, b),\n        h = NaN,\n        s = max - min,\n        l = (max + min) / 2;\n    if (s) {\n      if (r === max) h = (g - b) / s + (g < b) * 6;\n      else if (g === max) h = (b - r) / s + 2;\n      else h = (r - g) / s + 4;\n      s /= l < 0.5 ? max + min : 2 - max - min;\n      h *= 60;\n    } else {\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new Hsl(h, s, l, o.opacity);\n  }\n\n  function hsl(h, s, l, opacity) {\n    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hsl(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hsl, hsl, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = this.h % 360 + (this.h < 0) * 360,\n          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n          l = this.l,\n          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n          m1 = 2 * l - m2;\n      return new Rgb(\n        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n        hsl2rgb(h, m1, m2),\n        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n        this.opacity\n      );\n    },\n    displayable: function() {\n      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n          && (0 <= this.l && this.l <= 1)\n          && (0 <= this.opacity && this.opacity <= 1);\n    }\n  }));\n\n  /* From FvD 13.37, CSS Color Module Level 3 */\n  function hsl2rgb(h, m1, m2) {\n    return (h < 60 ? m1 + (m2 - m1) * h / 60\n        : h < 180 ? m2\n        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n        : m1) * 255;\n  }\n\n  var deg2rad = Math.PI / 180;\n  var rad2deg = 180 / Math.PI;\n\n  var Kn = 18;\n  var Xn = 0.950470;\n  var Yn = 1;\n  var Zn = 1.088830;\n  var t0 = 4 / 29;\n  var t1 = 6 / 29;\n  var t2 = 3 * t1 * t1;\n  var t3 = t1 * t1 * t1;\n  function labConvert(o) {\n    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n    if (o instanceof Hcl) {\n      var h = o.h * deg2rad;\n      return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n    }\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var b = rgb2xyz(o.r),\n        a = rgb2xyz(o.g),\n        l = rgb2xyz(o.b),\n        x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n        y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n        z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n  }\n\n  function lab(l, a, b, opacity) {\n    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n  }\n\n  function Lab(l, a, b, opacity) {\n    this.l = +l;\n    this.a = +a;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Lab, lab, extend(Color, {\n    brighter: function(k) {\n      return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    darker: function(k) {\n      return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    rgb: function() {\n      var y = (this.l + 16) / 116,\n          x = isNaN(this.a) ? y : y + this.a / 500,\n          z = isNaN(this.b) ? y : y - this.b / 200;\n      y = Yn * lab2xyz(y);\n      x = Xn * lab2xyz(x);\n      z = Zn * lab2xyz(z);\n      return new Rgb(\n        xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n        xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n        xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n        this.opacity\n      );\n    }\n  }));\n\n  function xyz2lab(t) {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n  }\n\n  function lab2xyz(t) {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n  }\n\n  function xyz2rgb(x) {\n    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n  }\n\n  function rgb2xyz(x) {\n    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n  }\n\n  function hclConvert(o) {\n    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n    if (!(o instanceof Lab)) o = labConvert(o);\n    var h = Math.atan2(o.b, o.a) * rad2deg;\n    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n  }\n\n  function hcl(h, c, l, opacity) {\n    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hcl(h, c, l, opacity) {\n    this.h = +h;\n    this.c = +c;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hcl, hcl, extend(Color, {\n    brighter: function(k) {\n      return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n    },\n    darker: function(k) {\n      return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n    },\n    rgb: function() {\n      return labConvert(this).rgb();\n    }\n  }));\n\n  var A = -0.14861;\n  var B = +1.78277;\n  var C = -0.29227;\n  var D = -0.90649;\n  var E = +1.97294;\n  var ED = E * D;\n  var EB = E * B;\n  var BC_DA = B * C - D * A;\n  function cubehelixConvert(o) {\n    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n        bl = b - l,\n        k = (E * (g - l) - C * bl) / D,\n        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n  }\n\n  function cubehelix(h, s, l, opacity) {\n    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Cubehelix(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Cubehelix, cubehelix, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n          l = +this.l,\n          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n          cosh = Math.cos(h),\n          sinh = Math.sin(h);\n      return new Rgb(\n        255 * (l + a * (A * cosh + B * sinh)),\n        255 * (l + a * (C * cosh + D * sinh)),\n        255 * (l + a * (E * cosh)),\n        this.opacity\n      );\n    }\n  }));\n\n  exports.color = color;\n  exports.rgb = rgb;\n  exports.hsl = hsl;\n  exports.lab = lab;\n  exports.hcl = hcl;\n  exports.cubehelix = cubehelix;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-color/build/d3-color.js\n ** module id = 152\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-format/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  // Computes the decimal coefficient and exponent of the specified number x with\n  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n  // For example, formatDecimal(1.23) returns [\"123\", 0].\n  function formatDecimal(x, p) {\n    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n    var i, coefficient = x.slice(0, i);\n\n    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n    return [\n      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n      +x.slice(i + 1)\n    ];\n  }\n\n  function exponent(x) {\n    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n  }\n\n  function formatGroup(grouping, thousands) {\n    return function(value, width) {\n      var i = value.length,\n          t = [],\n          j = 0,\n          g = grouping[0],\n          length = 0;\n\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = grouping[j = (j + 1) % grouping.length];\n      }\n\n      return t.reverse().join(thousands);\n    };\n  }\n\n  function formatDefault(x, p) {\n    x = x.toPrecision(p);\n\n    out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n      switch (x[i]) {\n        case \".\": i0 = i1 = i; break;\n        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n        case \"e\": break out;\n        default: if (i0 > 0) i0 = 0; break;\n      }\n    }\n\n    return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n  }\n\n  var prefixExponent;\n\n  function formatPrefixAuto(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1],\n        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n        n = coefficient.length;\n    return i === n ? coefficient\n        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n  }\n\n  function formatRounded(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1];\n    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n  }\n\n  var formatTypes = {\n    \"\": formatDefault,\n    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n    \"b\": function(x) { return Math.round(x).toString(2); },\n    \"c\": function(x) { return x + \"\"; },\n    \"d\": function(x) { return Math.round(x).toString(10); },\n    \"e\": function(x, p) { return x.toExponential(p); },\n    \"f\": function(x, p) { return x.toFixed(p); },\n    \"g\": function(x, p) { return x.toPrecision(p); },\n    \"o\": function(x) { return Math.round(x).toString(8); },\n    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n    \"r\": formatRounded,\n    \"s\": formatPrefixAuto,\n    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n    \"x\": function(x) { return Math.round(x).toString(16); }\n  };\n\n  // [[fill]align][sign][symbol][0][width][,][.precision][type]\n  var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n  function formatSpecifier(specifier) {\n    return new FormatSpecifier(specifier);\n  }\n\n  function FormatSpecifier(specifier) {\n    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n    var match,\n        fill = match[1] || \" \",\n        align = match[2] || \">\",\n        sign = match[3] || \"-\",\n        symbol = match[4] || \"\",\n        zero = !!match[5],\n        width = match[6] && +match[6],\n        comma = !!match[7],\n        precision = match[8] && +match[8].slice(1),\n        type = match[9] || \"\";\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // Map invalid types to the default format.\n    else if (!formatTypes[type]) type = \"\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    this.fill = fill;\n    this.align = align;\n    this.sign = sign;\n    this.symbol = symbol;\n    this.zero = zero;\n    this.width = width;\n    this.comma = comma;\n    this.precision = precision;\n    this.type = type;\n  }\n\n  FormatSpecifier.prototype.toString = function() {\n    return this.fill\n        + this.align\n        + this.sign\n        + this.symbol\n        + (this.zero ? \"0\" : \"\")\n        + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n        + (this.comma ? \",\" : \"\")\n        + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n        + this.type;\n  };\n\n  var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n  function identity(x) {\n    return x;\n  }\n\n  function formatLocale(locale) {\n    var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n        currency = locale.currency,\n        decimal = locale.decimal;\n\n    function newFormat(specifier) {\n      specifier = formatSpecifier(specifier);\n\n      var fill = specifier.fill,\n          align = specifier.align,\n          sign = specifier.sign,\n          symbol = specifier.symbol,\n          zero = specifier.zero,\n          width = specifier.width,\n          comma = specifier.comma,\n          precision = specifier.precision,\n          type = specifier.type;\n\n      // Compute the prefix and suffix.\n      // For SI-prefix, the suffix is lazily computed.\n      var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n          suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n      // What format function should we use?\n      // Is this an integer type?\n      // Can this type generate exponential notation?\n      var formatType = formatTypes[type],\n          maybeSuffix = !type || /[defgprs%]/.test(type);\n\n      // Set the default precision if not specified,\n      // or clamp the specified precision to the supported range.\n      // For significant precision, it must be in [1, 21].\n      // For fixed precision, it must be in [0, 20].\n      precision = precision == null ? (type ? 6 : 12)\n          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n          : Math.max(0, Math.min(20, precision));\n\n      function format(value) {\n        var valuePrefix = prefix,\n            valueSuffix = suffix,\n            i, n, c;\n\n        if (type === \"c\") {\n          valueSuffix = formatType(value) + valueSuffix;\n          value = \"\";\n        } else {\n          value = +value;\n\n          // Convert negative to positive, and compute the prefix.\n          // Note that -0 is not less than 0, but 1 / -0 is!\n          var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n          // Perform the initial formatting.\n          value = formatType(value, precision);\n\n          // If the original value was negative, it may be rounded to zero during\n          // formatting; treat this as (positive) zero.\n          if (valueNegative) {\n            i = -1, n = value.length;\n            valueNegative = false;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), (48 < c && c < 58)\n                  || (type === \"x\" && 96 < c && c < 103)\n                  || (type === \"X\" && 64 < c && c < 71)) {\n                valueNegative = true;\n                break;\n              }\n            }\n          }\n\n          // Compute the prefix and suffix.\n          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n          valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n          // Break the formatted value into the integer “value” part that can be\n          // grouped, and fractional or exponential “suffix” part that is not.\n          if (maybeSuffix) {\n            i = -1, n = value.length;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n                value = value.slice(0, i);\n                break;\n              }\n            }\n          }\n        }\n\n        // If the fill character is not \"0\", grouping is applied before padding.\n        if (comma && !zero) value = group(value, Infinity);\n\n        // Compute the padding.\n        var length = valuePrefix.length + value.length + valueSuffix.length,\n            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n        // If the fill character is \"0\", grouping is applied after padding.\n        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n        // Reconstruct the final output based on the desired alignment.\n        switch (align) {\n          case \"<\": return valuePrefix + value + valueSuffix + padding;\n          case \"=\": return valuePrefix + padding + value + valueSuffix;\n          case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n        }\n        return padding + valuePrefix + value + valueSuffix;\n      }\n\n      format.toString = function() {\n        return specifier + \"\";\n      };\n\n      return format;\n    }\n\n    function formatPrefix(specifier, value) {\n      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n          e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n          k = Math.pow(10, -e),\n          prefix = prefixes[8 + e / 3];\n      return function(value) {\n        return f(k * value) + prefix;\n      };\n    }\n\n    return {\n      format: newFormat,\n      formatPrefix: formatPrefix\n    };\n  }\n\n  var locale;\n  defaultLocale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [3],\n    currency: [\"$\", \"\"]\n  });\n\n  function defaultLocale(definition) {\n    locale = formatLocale(definition);\n    exports.format = locale.format;\n    exports.formatPrefix = locale.formatPrefix;\n    return locale;\n  }\n\n  function precisionFixed(step) {\n    return Math.max(0, -exponent(Math.abs(step)));\n  }\n\n  function precisionPrefix(step, value) {\n    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n  }\n\n  function precisionRound(step, max) {\n    step = Math.abs(step), max = Math.abs(max) - step;\n    return Math.max(0, exponent(max) - exponent(step)) + 1;\n  }\n\n  exports.formatDefaultLocale = defaultLocale;\n  exports.formatLocale = formatLocale;\n  exports.formatSpecifier = formatSpecifier;\n  exports.precisionFixed = precisionFixed;\n  exports.precisionPrefix = precisionPrefix;\n  exports.precisionRound = precisionRound;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-format/build/d3-format.js\n ** module id = 153\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-time/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  var t0 = new Date;\n  var t1 = new Date;\n  function newInterval(floori, offseti, count, field) {\n\n    function interval(date) {\n      return floori(date = new Date(+date)), date;\n    }\n\n    interval.floor = interval;\n\n    interval.ceil = function(date) {\n      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n    };\n\n    interval.round = function(date) {\n      var d0 = interval(date),\n          d1 = interval.ceil(date);\n      return date - d0 < d1 - date ? d0 : d1;\n    };\n\n    interval.offset = function(date, step) {\n      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n    };\n\n    interval.range = function(start, stop, step) {\n      var range = [];\n      start = interval.ceil(start);\n      step = step == null ? 1 : Math.floor(step);\n      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n      do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)\n      return range;\n    };\n\n    interval.filter = function(test) {\n      return newInterval(function(date) {\n        while (floori(date), !test(date)) date.setTime(date - 1);\n      }, function(date, step) {\n        while (--step >= 0) while (offseti(date, 1), !test(date));\n      });\n    };\n\n    if (count) {\n      interval.count = function(start, end) {\n        t0.setTime(+start), t1.setTime(+end);\n        floori(t0), floori(t1);\n        return Math.floor(count(t0, t1));\n      };\n\n      interval.every = function(step) {\n        step = Math.floor(step);\n        return !isFinite(step) || !(step > 0) ? null\n            : !(step > 1) ? interval\n            : interval.filter(field\n                ? function(d) { return field(d) % step === 0; }\n                : function(d) { return interval.count(0, d) % step === 0; });\n      };\n    }\n\n    return interval;\n  }\n\n  var millisecond = newInterval(function() {\n    // noop\n  }, function(date, step) {\n    date.setTime(+date + step);\n  }, function(start, end) {\n    return end - start;\n  });\n\n  // An optimized implementation for this simple case.\n  millisecond.every = function(k) {\n    k = Math.floor(k);\n    if (!isFinite(k) || !(k > 0)) return null;\n    if (!(k > 1)) return millisecond;\n    return newInterval(function(date) {\n      date.setTime(Math.floor(date / k) * k);\n    }, function(date, step) {\n      date.setTime(+date + step * k);\n    }, function(start, end) {\n      return (end - start) / k;\n    });\n  };\n\n  var milliseconds = millisecond.range;\n\n  var durationSecond = 1e3;\n  var durationMinute = 6e4;\n  var durationHour = 36e5;\n  var durationDay = 864e5;\n  var durationWeek = 6048e5;\n\n  var second = newInterval(function(date) {\n    date.setTime(Math.floor(date / durationSecond) * durationSecond);\n  }, function(date, step) {\n    date.setTime(+date + step * durationSecond);\n  }, function(start, end) {\n    return (end - start) / durationSecond;\n  }, function(date) {\n    return date.getUTCSeconds();\n  });\n\n  var seconds = second.range;\n\n  var minute = newInterval(function(date) {\n    date.setTime(Math.floor(date / durationMinute) * durationMinute);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getMinutes();\n  });\n\n  var minutes = minute.range;\n\n  var hour = newInterval(function(date) {\n    var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n    if (offset < 0) offset += durationHour;\n    date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getHours();\n  });\n\n  var hours = hour.range;\n\n  var day = newInterval(function(date) {\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n\n  var days = day.range;\n\n  function weekday(i) {\n    return newInterval(function(date) {\n      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setDate(date.getDate() + step * 7);\n    }, function(start, end) {\n      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n    });\n  }\n\n  var sunday = weekday(0);\n  var monday = weekday(1);\n  var tuesday = weekday(2);\n  var wednesday = weekday(3);\n  var thursday = weekday(4);\n  var friday = weekday(5);\n  var saturday = weekday(6);\n\n  var sundays = sunday.range;\n  var mondays = monday.range;\n  var tuesdays = tuesday.range;\n  var wednesdays = wednesday.range;\n  var thursdays = thursday.range;\n  var fridays = friday.range;\n  var saturdays = saturday.range;\n\n  var month = newInterval(function(date) {\n    date.setDate(1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setMonth(date.getMonth() + step);\n  }, function(start, end) {\n    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n  }, function(date) {\n    return date.getMonth();\n  });\n\n  var months = month.range;\n\n  var year = newInterval(function(date) {\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step);\n  }, function(start, end) {\n    return end.getFullYear() - start.getFullYear();\n  }, function(date) {\n    return date.getFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  year.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n      date.setMonth(0, 1);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setFullYear(date.getFullYear() + step * k);\n    });\n  };\n\n  var years = year.range;\n\n  var utcMinute = newInterval(function(date) {\n    date.setUTCSeconds(0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getUTCMinutes();\n  });\n\n  var utcMinutes = utcMinute.range;\n\n  var utcHour = newInterval(function(date) {\n    date.setUTCMinutes(0, 0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getUTCHours();\n  });\n\n  var utcHours = utcHour.range;\n\n  var utcDay = newInterval(function(date) {\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step);\n  }, function(start, end) {\n    return (end - start) / durationDay;\n  }, function(date) {\n    return date.getUTCDate() - 1;\n  });\n\n  var utcDays = utcDay.range;\n\n  function utcWeekday(i) {\n    return newInterval(function(date) {\n      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCDate(date.getUTCDate() + step * 7);\n    }, function(start, end) {\n      return (end - start) / durationWeek;\n    });\n  }\n\n  var utcSunday = utcWeekday(0);\n  var utcMonday = utcWeekday(1);\n  var utcTuesday = utcWeekday(2);\n  var utcWednesday = utcWeekday(3);\n  var utcThursday = utcWeekday(4);\n  var utcFriday = utcWeekday(5);\n  var utcSaturday = utcWeekday(6);\n\n  var utcSundays = utcSunday.range;\n  var utcMondays = utcMonday.range;\n  var utcTuesdays = utcTuesday.range;\n  var utcWednesdays = utcWednesday.range;\n  var utcThursdays = utcThursday.range;\n  var utcFridays = utcFriday.range;\n  var utcSaturdays = utcSaturday.range;\n\n  var utcMonth = newInterval(function(date) {\n    date.setUTCDate(1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCMonth(date.getUTCMonth() + step);\n  }, function(start, end) {\n    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n  }, function(date) {\n    return date.getUTCMonth();\n  });\n\n  var utcMonths = utcMonth.range;\n\n  var utcYear = newInterval(function(date) {\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step);\n  }, function(start, end) {\n    return end.getUTCFullYear() - start.getUTCFullYear();\n  }, function(date) {\n    return date.getUTCFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  utcYear.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n      date.setUTCMonth(0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n    });\n  };\n\n  var utcYears = utcYear.range;\n\n  exports.timeInterval = newInterval;\n  exports.timeMillisecond = millisecond;\n  exports.timeMilliseconds = milliseconds;\n  exports.utcMillisecond = millisecond;\n  exports.utcMilliseconds = milliseconds;\n  exports.timeSecond = second;\n  exports.timeSeconds = seconds;\n  exports.utcSecond = second;\n  exports.utcSeconds = seconds;\n  exports.timeMinute = minute;\n  exports.timeMinutes = minutes;\n  exports.timeHour = hour;\n  exports.timeHours = hours;\n  exports.timeDay = day;\n  exports.timeDays = days;\n  exports.timeWeek = sunday;\n  exports.timeWeeks = sundays;\n  exports.timeSunday = sunday;\n  exports.timeSundays = sundays;\n  exports.timeMonday = monday;\n  exports.timeMondays = mondays;\n  exports.timeTuesday = tuesday;\n  exports.timeTuesdays = tuesdays;\n  exports.timeWednesday = wednesday;\n  exports.timeWednesdays = wednesdays;\n  exports.timeThursday = thursday;\n  exports.timeThursdays = thursdays;\n  exports.timeFriday = friday;\n  exports.timeFridays = fridays;\n  exports.timeSaturday = saturday;\n  exports.timeSaturdays = saturdays;\n  exports.timeMonth = month;\n  exports.timeMonths = months;\n  exports.timeYear = year;\n  exports.timeYears = years;\n  exports.utcMinute = utcMinute;\n  exports.utcMinutes = utcMinutes;\n  exports.utcHour = utcHour;\n  exports.utcHours = utcHours;\n  exports.utcDay = utcDay;\n  exports.utcDays = utcDays;\n  exports.utcWeek = utcSunday;\n  exports.utcWeeks = utcSundays;\n  exports.utcSunday = utcSunday;\n  exports.utcSundays = utcSundays;\n  exports.utcMonday = utcMonday;\n  exports.utcMondays = utcMondays;\n  exports.utcTuesday = utcTuesday;\n  exports.utcTuesdays = utcTuesdays;\n  exports.utcWednesday = utcWednesday;\n  exports.utcWednesdays = utcWednesdays;\n  exports.utcThursday = utcThursday;\n  exports.utcThursdays = utcThursdays;\n  exports.utcFriday = utcFriday;\n  exports.utcFridays = utcFridays;\n  exports.utcSaturday = utcSaturday;\n  exports.utcSaturdays = utcSaturdays;\n  exports.utcMonth = utcMonth;\n  exports.utcMonths = utcMonths;\n  exports.utcYear = utcYear;\n  exports.utcYears = utcYears;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-time/build/d3-time.js\n ** module id = 154\n ** module chunks = 0 1\n **/","// https://d3js.org/d3-time-format/ Version 2.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) :\n  (factory((global.d3 = global.d3 || {}),global.d3));\n}(this, function (exports,d3Time) { 'use strict';\n\n  function localDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n      date.setFullYear(d.y);\n      return date;\n    }\n    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n  }\n\n  function utcDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n      date.setUTCFullYear(d.y);\n      return date;\n    }\n    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n  }\n\n  function newYear(y) {\n    return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n  }\n\n  function formatLocale(locale) {\n    var locale_dateTime = locale.dateTime,\n        locale_date = locale.date,\n        locale_time = locale.time,\n        locale_periods = locale.periods,\n        locale_weekdays = locale.days,\n        locale_shortWeekdays = locale.shortDays,\n        locale_months = locale.months,\n        locale_shortMonths = locale.shortMonths;\n\n    var periodRe = formatRe(locale_periods),\n        periodLookup = formatLookup(locale_periods),\n        weekdayRe = formatRe(locale_weekdays),\n        weekdayLookup = formatLookup(locale_weekdays),\n        shortWeekdayRe = formatRe(locale_shortWeekdays),\n        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n        monthRe = formatRe(locale_months),\n        monthLookup = formatLookup(locale_months),\n        shortMonthRe = formatRe(locale_shortMonths),\n        shortMonthLookup = formatLookup(locale_shortMonths);\n\n    var formats = {\n      \"a\": formatShortWeekday,\n      \"A\": formatWeekday,\n      \"b\": formatShortMonth,\n      \"B\": formatMonth,\n      \"c\": null,\n      \"d\": formatDayOfMonth,\n      \"e\": formatDayOfMonth,\n      \"H\": formatHour24,\n      \"I\": formatHour12,\n      \"j\": formatDayOfYear,\n      \"L\": formatMilliseconds,\n      \"m\": formatMonthNumber,\n      \"M\": formatMinutes,\n      \"p\": formatPeriod,\n      \"S\": formatSeconds,\n      \"U\": formatWeekNumberSunday,\n      \"w\": formatWeekdayNumber,\n      \"W\": formatWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatYear,\n      \"Y\": formatFullYear,\n      \"Z\": formatZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var utcFormats = {\n      \"a\": formatUTCShortWeekday,\n      \"A\": formatUTCWeekday,\n      \"b\": formatUTCShortMonth,\n      \"B\": formatUTCMonth,\n      \"c\": null,\n      \"d\": formatUTCDayOfMonth,\n      \"e\": formatUTCDayOfMonth,\n      \"H\": formatUTCHour24,\n      \"I\": formatUTCHour12,\n      \"j\": formatUTCDayOfYear,\n      \"L\": formatUTCMilliseconds,\n      \"m\": formatUTCMonthNumber,\n      \"M\": formatUTCMinutes,\n      \"p\": formatUTCPeriod,\n      \"S\": formatUTCSeconds,\n      \"U\": formatUTCWeekNumberSunday,\n      \"w\": formatUTCWeekdayNumber,\n      \"W\": formatUTCWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatUTCYear,\n      \"Y\": formatUTCFullYear,\n      \"Z\": formatUTCZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var parses = {\n      \"a\": parseShortWeekday,\n      \"A\": parseWeekday,\n      \"b\": parseShortMonth,\n      \"B\": parseMonth,\n      \"c\": parseLocaleDateTime,\n      \"d\": parseDayOfMonth,\n      \"e\": parseDayOfMonth,\n      \"H\": parseHour24,\n      \"I\": parseHour24,\n      \"j\": parseDayOfYear,\n      \"L\": parseMilliseconds,\n      \"m\": parseMonthNumber,\n      \"M\": parseMinutes,\n      \"p\": parsePeriod,\n      \"S\": parseSeconds,\n      \"U\": parseWeekNumberSunday,\n      \"w\": parseWeekdayNumber,\n      \"W\": parseWeekNumberMonday,\n      \"x\": parseLocaleDate,\n      \"X\": parseLocaleTime,\n      \"y\": parseYear,\n      \"Y\": parseFullYear,\n      \"Z\": parseZone,\n      \"%\": parseLiteralPercent\n    };\n\n    // These recursive directive definitions must be deferred.\n    formats.x = newFormat(locale_date, formats);\n    formats.X = newFormat(locale_time, formats);\n    formats.c = newFormat(locale_dateTime, formats);\n    utcFormats.x = newFormat(locale_date, utcFormats);\n    utcFormats.X = newFormat(locale_time, utcFormats);\n    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n    function newFormat(specifier, formats) {\n      return function(date) {\n        var string = [],\n            i = -1,\n            j = 0,\n            n = specifier.length,\n            c,\n            pad,\n            format;\n\n        if (!(date instanceof Date)) date = new Date(+date);\n\n        while (++i < n) {\n          if (specifier.charCodeAt(i) === 37) {\n            string.push(specifier.slice(j, i));\n            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n            else pad = c === \"e\" ? \" \" : \"0\";\n            if (format = formats[c]) c = format(date, pad);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n\n        string.push(specifier.slice(j, i));\n        return string.join(\"\");\n      };\n    }\n\n    function newParse(specifier, newDate) {\n      return function(string) {\n        var d = newYear(1900),\n            i = parseSpecifier(d, specifier, string += \"\", 0);\n        if (i != string.length) return null;\n\n        // The am-pm flag is 0 for AM, and 1 for PM.\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n        // Convert day-of-week and week-of-year to day-of-year.\n        if (\"W\" in d || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n          var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n          d.m = 0;\n          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n        }\n\n        // If a time zone is specified, all fields are interpreted as UTC and then\n        // offset according to the specified time zone.\n        if (\"Z\" in d) {\n          d.H += d.Z / 100 | 0;\n          d.M += d.Z % 100;\n          return utcDate(d);\n        }\n\n        // Otherwise, all fields are in local time.\n        return newDate(d);\n      };\n    }\n\n    function parseSpecifier(d, specifier, string, j) {\n      var i = 0,\n          n = specifier.length,\n          m = string.length,\n          c,\n          parse;\n\n      while (i < n) {\n        if (j >= m) return -1;\n        c = specifier.charCodeAt(i++);\n        if (c === 37) {\n          c = specifier.charAt(i++);\n          parse = parses[c in pads ? specifier.charAt(i++) : c];\n          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n\n      return j;\n    }\n\n    function parsePeriod(d, string, i) {\n      var n = periodRe.exec(string.slice(i));\n      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortWeekday(d, string, i) {\n      var n = shortWeekdayRe.exec(string.slice(i));\n      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseWeekday(d, string, i) {\n      var n = weekdayRe.exec(string.slice(i));\n      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortMonth(d, string, i) {\n      var n = shortMonthRe.exec(string.slice(i));\n      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseMonth(d, string, i) {\n      var n = monthRe.exec(string.slice(i));\n      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseLocaleDateTime(d, string, i) {\n      return parseSpecifier(d, locale_dateTime, string, i);\n    }\n\n    function parseLocaleDate(d, string, i) {\n      return parseSpecifier(d, locale_date, string, i);\n    }\n\n    function parseLocaleTime(d, string, i) {\n      return parseSpecifier(d, locale_time, string, i);\n    }\n\n    function formatShortWeekday(d) {\n      return locale_shortWeekdays[d.getDay()];\n    }\n\n    function formatWeekday(d) {\n      return locale_weekdays[d.getDay()];\n    }\n\n    function formatShortMonth(d) {\n      return locale_shortMonths[d.getMonth()];\n    }\n\n    function formatMonth(d) {\n      return locale_months[d.getMonth()];\n    }\n\n    function formatPeriod(d) {\n      return locale_periods[+(d.getHours() >= 12)];\n    }\n\n    function formatUTCShortWeekday(d) {\n      return locale_shortWeekdays[d.getUTCDay()];\n    }\n\n    function formatUTCWeekday(d) {\n      return locale_weekdays[d.getUTCDay()];\n    }\n\n    function formatUTCShortMonth(d) {\n      return locale_shortMonths[d.getUTCMonth()];\n    }\n\n    function formatUTCMonth(d) {\n      return locale_months[d.getUTCMonth()];\n    }\n\n    function formatUTCPeriod(d) {\n      return locale_periods[+(d.getUTCHours() >= 12)];\n    }\n\n    return {\n      format: function(specifier) {\n        var f = newFormat(specifier += \"\", formats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      parse: function(specifier) {\n        var p = newParse(specifier += \"\", localDate);\n        p.toString = function() { return specifier; };\n        return p;\n      },\n      utcFormat: function(specifier) {\n        var f = newFormat(specifier += \"\", utcFormats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      utcParse: function(specifier) {\n        var p = newParse(specifier, utcDate);\n        p.toString = function() { return specifier; };\n        return p;\n      }\n    };\n  }\n\n  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n  var numberRe = /^\\s*\\d+/;\n  var percentRe = /^%/;\n  var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n  function pad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\",\n        string = (sign ? -value : value) + \"\",\n        length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n\n  function requote(s) {\n    return s.replace(requoteRe, \"\\\\$&\");\n  }\n\n  function formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n  }\n\n  function formatLookup(names) {\n    var map = {}, i = -1, n = names.length;\n    while (++i < n) map[names[i].toLowerCase()] = i;\n    return map;\n  }\n\n  function parseWeekdayNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.w = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.U = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.W = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseFullYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 4));\n    return n ? (d.y = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n  }\n\n  function parseZone(d, string, i) {\n    var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n  }\n\n  function parseMonthNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n  }\n\n  function parseDayOfMonth(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseDayOfYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseHour24(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.H = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMinutes(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.M = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.S = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMilliseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.L = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseLiteralPercent(d, string, i) {\n    var n = percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n\n  function formatDayOfMonth(d, p) {\n    return pad(d.getDate(), p, 2);\n  }\n\n  function formatHour24(d, p) {\n    return pad(d.getHours(), p, 2);\n  }\n\n  function formatHour12(d, p) {\n    return pad(d.getHours() % 12 || 12, p, 2);\n  }\n\n  function formatDayOfYear(d, p) {\n    return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);\n  }\n\n  function formatMilliseconds(d, p) {\n    return pad(d.getMilliseconds(), p, 3);\n  }\n\n  function formatMonthNumber(d, p) {\n    return pad(d.getMonth() + 1, p, 2);\n  }\n\n  function formatMinutes(d, p) {\n    return pad(d.getMinutes(), p, 2);\n  }\n\n  function formatSeconds(d, p) {\n    return pad(d.getSeconds(), p, 2);\n  }\n\n  function formatWeekNumberSunday(d, p) {\n    return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2);\n  }\n\n  function formatWeekdayNumber(d) {\n    return d.getDay();\n  }\n\n  function formatWeekNumberMonday(d, p) {\n    return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2);\n  }\n\n  function formatYear(d, p) {\n    return pad(d.getFullYear() % 100, p, 2);\n  }\n\n  function formatFullYear(d, p) {\n    return pad(d.getFullYear() % 10000, p, 4);\n  }\n\n  function formatZone(d) {\n    var z = d.getTimezoneOffset();\n    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n        + pad(z / 60 | 0, \"0\", 2)\n        + pad(z % 60, \"0\", 2);\n  }\n\n  function formatUTCDayOfMonth(d, p) {\n    return pad(d.getUTCDate(), p, 2);\n  }\n\n  function formatUTCHour24(d, p) {\n    return pad(d.getUTCHours(), p, 2);\n  }\n\n  function formatUTCHour12(d, p) {\n    return pad(d.getUTCHours() % 12 || 12, p, 2);\n  }\n\n  function formatUTCDayOfYear(d, p) {\n    return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);\n  }\n\n  function formatUTCMilliseconds(d, p) {\n    return pad(d.getUTCMilliseconds(), p, 3);\n  }\n\n  function formatUTCMonthNumber(d, p) {\n    return pad(d.getUTCMonth() + 1, p, 2);\n  }\n\n  function formatUTCMinutes(d, p) {\n    return pad(d.getUTCMinutes(), p, 2);\n  }\n\n  function formatUTCSeconds(d, p) {\n    return pad(d.getUTCSeconds(), p, 2);\n  }\n\n  function formatUTCWeekNumberSunday(d, p) {\n    return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2);\n  }\n\n  function formatUTCWeekdayNumber(d) {\n    return d.getUTCDay();\n  }\n\n  function formatUTCWeekNumberMonday(d, p) {\n    return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2);\n  }\n\n  function formatUTCYear(d, p) {\n    return pad(d.getUTCFullYear() % 100, p, 2);\n  }\n\n  function formatUTCFullYear(d, p) {\n    return pad(d.getUTCFullYear() % 10000, p, 4);\n  }\n\n  function formatUTCZone() {\n    return \"+0000\";\n  }\n\n  function formatLiteralPercent() {\n    return \"%\";\n  }\n\n  var locale;\n  defaultLocale({\n    dateTime: \"%x, %X\",\n    date: \"%-m/%-d/%Y\",\n    time: \"%-I:%M:%S %p\",\n    periods: [\"AM\", \"PM\"],\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n  });\n\n  function defaultLocale(definition) {\n    locale = formatLocale(definition);\n    exports.timeFormat = locale.format;\n    exports.timeParse = locale.parse;\n    exports.utcFormat = locale.utcFormat;\n    exports.utcParse = locale.utcParse;\n    return locale;\n  }\n\n  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n  function formatIsoNative(date) {\n    return date.toISOString();\n  }\n\n  var formatIso = Date.prototype.toISOString\n      ? formatIsoNative\n      : exports.utcFormat(isoSpecifier);\n\n  function parseIsoNative(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  }\n\n  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n      ? parseIsoNative\n      : exports.utcParse(isoSpecifier);\n\n  exports.timeFormatDefaultLocale = defaultLocale;\n  exports.timeFormatLocale = formatLocale;\n  exports.isoFormat = formatIso;\n  exports.isoParse = parseIso;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3-time-format/build/d3-time-format.js\n ** module id = 155\n ** module chunks = 0 1\n **/","// https://d3js.org Version 4.2.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n  var version = \"4.2.1\";\n\n  function ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function bisector(compare) {\n    if (compare.length === 1) compare = ascendingComparator(compare);\n    return {\n      left: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1;\n          else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (lo == null) lo = 0;\n        if (hi == null) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid;\n          else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n\n  function ascendingComparator(f) {\n    return function(d, x) {\n      return ascending(f(d), x);\n    };\n  }\n\n  var ascendingBisect = bisector(ascending);\n  var bisectRight = ascendingBisect.right;\n  var bisectLeft = ascendingBisect.left;\n\n  function descending(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function number(x) {\n    return x === null ? NaN : +x;\n  }\n\n  function variance(array, f) {\n    var n = array.length,\n        m = 0,\n        a,\n        d,\n        s = 0,\n        i = -1,\n        j = 0;\n\n    if (f == null) {\n      while (++i < n) {\n        if (!isNaN(a = number(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    else {\n      while (++i < n) {\n        if (!isNaN(a = number(f(array[i], i, array)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n\n    if (j > 1) return s / (j - 1);\n  }\n\n  function deviation(array, f) {\n    var v = variance(array, f);\n    return v ? Math.sqrt(v) : v;\n  }\n\n  function extent(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b,\n        c;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n\n    return [a, c];\n  }\n\n  var array = Array.prototype;\n\n  var slice = array.slice;\n  var map = array.map;\n\n  function constant(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function identity(x) {\n    return x;\n  }\n\n  function range(start, stop, step) {\n    start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n    var i = -1,\n        n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n        range = new Array(n);\n\n    while (++i < n) {\n      range[i] = start + i * step;\n    }\n\n    return range;\n  }\n\n  var e10 = Math.sqrt(50);\n  var e5 = Math.sqrt(10);\n  var e2 = Math.sqrt(2);\n  function ticks(start, stop, count) {\n    var step = tickStep(start, stop, count);\n    return range(\n      Math.ceil(start / step) * step,\n      Math.floor(stop / step) * step + step / 2, // inclusive\n      step\n    );\n  }\n\n  function tickStep(start, stop, count) {\n    var step0 = Math.abs(stop - start) / Math.max(0, count),\n        step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n        error = step0 / step1;\n    if (error >= e10) step1 *= 10;\n    else if (error >= e5) step1 *= 5;\n    else if (error >= e2) step1 *= 2;\n    return stop < start ? -step1 : step1;\n  }\n\n  function sturges(values) {\n    return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n  }\n\n  function histogram() {\n    var value = identity,\n        domain = extent,\n        threshold = sturges;\n\n    function histogram(data) {\n      var i,\n          n = data.length,\n          x,\n          values = new Array(n);\n\n      for (i = 0; i < n; ++i) {\n        values[i] = value(data[i], i, data);\n      }\n\n      var xz = domain(values),\n          x0 = xz[0],\n          x1 = xz[1],\n          tz = threshold(values, x0, x1);\n\n      // Convert number of thresholds into uniform thresholds.\n      if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\n      // Remove any thresholds outside the domain.\n      var m = tz.length;\n      while (tz[0] <= x0) tz.shift(), --m;\n      while (tz[m - 1] >= x1) tz.pop(), --m;\n\n      var bins = new Array(m + 1),\n          bin;\n\n      // Initialize bins.\n      for (i = 0; i <= m; ++i) {\n        bin = bins[i] = [];\n        bin.x0 = i > 0 ? tz[i - 1] : x0;\n        bin.x1 = i < m ? tz[i] : x1;\n      }\n\n      // Assign data to bins by value, ignoring any outside the domain.\n      for (i = 0; i < n; ++i) {\n        x = values[i];\n        if (x0 <= x && x <= x1) {\n          bins[bisectRight(tz, x, 0, m)].push(data[i]);\n        }\n      }\n\n      return bins;\n    }\n\n    histogram.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n    };\n\n    histogram.domain = function(_) {\n      return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n    };\n\n    histogram.thresholds = function(_) {\n      return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n    };\n\n    return histogram;\n  }\n\n  function threshold(array, p, f) {\n    if (f == null) f = number;\n    if (!(n = array.length)) return;\n    if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n    if (p >= 1) return +f(array[n - 1], n - 1, array);\n    var n,\n        h = (n - 1) * p,\n        i = Math.floor(h),\n        a = +f(array[i], i, array),\n        b = +f(array[i + 1], i + 1, array);\n    return a + (b - a) * (h - i);\n  }\n\n  function freedmanDiaconis(values, min, max) {\n    values = map.call(values, number).sort(ascending);\n    return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function scott(values, min, max) {\n    return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n  }\n\n  function max(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n    }\n\n    return a;\n  }\n\n  function mean(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1,\n        j = n;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;\n    }\n\n    if (j) return s / j;\n  }\n\n  function median(array, f) {\n    var numbers = [],\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n    }\n\n    else {\n      while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n    }\n\n    return threshold(numbers.sort(ascending), 0.5);\n  }\n\n  function merge(arrays) {\n    var n = arrays.length,\n        m,\n        i = -1,\n        j = 0,\n        merged,\n        array;\n\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n\n    return merged;\n  }\n\n  function min(array, f) {\n    var i = -1,\n        n = array.length,\n        a,\n        b;\n\n    if (f == null) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    }\n\n    else {\n      while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n      while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n    }\n\n    return a;\n  }\n\n  function pairs(array) {\n    var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [p, p = array[++i]];\n    return pairs;\n  }\n\n  function permute(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  }\n\n  function scan(array, compare) {\n    if (!(n = array.length)) return;\n    var i = 0,\n        n,\n        j = 0,\n        xi,\n        xj = array[j];\n\n    if (!compare) compare = ascending;\n\n    while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n    if (compare(xj, xj) === 0) return j;\n  }\n\n  function shuffle(array, i0, i1) {\n    var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n        t,\n        i;\n\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n\n    return array;\n  }\n\n  function sum(array, f) {\n    var s = 0,\n        n = array.length,\n        a,\n        i = -1;\n\n    if (f == null) {\n      while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n    }\n\n    else {\n      while (++i < n) if (a = +f(array[i], i, array)) s += a;\n    }\n\n    return s;\n  }\n\n  function transpose(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  }\n\n  function length(d) {\n    return d.length;\n  }\n\n  function zip() {\n    return transpose(arguments);\n  }\n\n  var prefix = \"$\";\n\n  function Map() {}\n\n  Map.prototype = map$1.prototype = {\n    constructor: Map,\n    has: function(key) {\n      return (prefix + key) in this;\n    },\n    get: function(key) {\n      return this[prefix + key];\n    },\n    set: function(key, value) {\n      this[prefix + key] = value;\n      return this;\n    },\n    remove: function(key) {\n      var property = prefix + key;\n      return property in this && delete this[property];\n    },\n    clear: function() {\n      for (var property in this) if (property[0] === prefix) delete this[property];\n    },\n    keys: function() {\n      var keys = [];\n      for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n      return keys;\n    },\n    values: function() {\n      var values = [];\n      for (var property in this) if (property[0] === prefix) values.push(this[property]);\n      return values;\n    },\n    entries: function() {\n      var entries = [];\n      for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n      return entries;\n    },\n    size: function() {\n      var size = 0;\n      for (var property in this) if (property[0] === prefix) ++size;\n      return size;\n    },\n    empty: function() {\n      for (var property in this) if (property[0] === prefix) return false;\n      return true;\n    },\n    each: function(f) {\n      for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n    }\n  };\n\n  function map$1(object, f) {\n    var map = new Map;\n\n    // Copy constructor.\n    if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n    // Index array by numeric index or specified key function.\n    else if (Array.isArray(object)) {\n      var i = -1,\n          n = object.length,\n          o;\n\n      if (f == null) while (++i < n) map.set(i, object[i]);\n      else while (++i < n) map.set(f(o = object[i], i, object), o);\n    }\n\n    // Convert object to map.\n    else if (object) for (var key in object) map.set(key, object[key]);\n\n    return map;\n  }\n\n  function nest() {\n    var keys = [],\n        sortKeys = [],\n        sortValues,\n        rollup,\n        nest;\n\n    function apply(array, depth, createResult, setResult) {\n      if (depth >= keys.length) return rollup != null\n          ? rollup(array) : (sortValues != null\n          ? array.sort(sortValues)\n          : array);\n\n      var i = -1,\n          n = array.length,\n          key = keys[depth++],\n          keyValue,\n          value,\n          valuesByKey = map$1(),\n          values,\n          result = createResult();\n\n      while (++i < n) {\n        if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n          values.push(value);\n        } else {\n          valuesByKey.set(keyValue, [value]);\n        }\n      }\n\n      valuesByKey.each(function(values, key) {\n        setResult(result, key, apply(values, depth, createResult, setResult));\n      });\n\n      return result;\n    }\n\n    function entries(map, depth) {\n      if (++depth > keys.length) return map;\n      var array, sortKey = sortKeys[depth - 1];\n      if (rollup != null && depth >= keys.length) array = map.entries();\n      else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n      return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n    }\n\n    return nest = {\n      object: function(array) { return apply(array, 0, createObject, setObject); },\n      map: function(array) { return apply(array, 0, createMap, setMap); },\n      entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n      key: function(d) { keys.push(d); return nest; },\n      sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n      sortValues: function(order) { sortValues = order; return nest; },\n      rollup: function(f) { rollup = f; return nest; }\n    };\n  }\n\n  function createObject() {\n    return {};\n  }\n\n  function setObject(object, key, value) {\n    object[key] = value;\n  }\n\n  function createMap() {\n    return map$1();\n  }\n\n  function setMap(map, key, value) {\n    map.set(key, value);\n  }\n\n  function Set() {}\n\n  var proto = map$1.prototype;\n\n  Set.prototype = set.prototype = {\n    constructor: Set,\n    has: proto.has,\n    add: function(value) {\n      value += \"\";\n      this[prefix + value] = value;\n      return this;\n    },\n    remove: proto.remove,\n    clear: proto.clear,\n    values: proto.keys,\n    size: proto.size,\n    empty: proto.empty,\n    each: proto.each\n  };\n\n  function set(object, f) {\n    var set = new Set;\n\n    // Copy constructor.\n    if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n    // Otherwise, assume it’s an array.\n    else if (object) {\n      var i = -1, n = object.length;\n      if (f == null) while (++i < n) set.add(object[i]);\n      else while (++i < n) set.add(f(object[i], i, object));\n    }\n\n    return set;\n  }\n\n  function keys(map) {\n    var keys = [];\n    for (var key in map) keys.push(key);\n    return keys;\n  }\n\n  function values(map) {\n    var values = [];\n    for (var key in map) values.push(map[key]);\n    return values;\n  }\n\n  function entries(map) {\n    var entries = [];\n    for (var key in map) entries.push({key: key, value: map[key]});\n    return entries;\n  }\n\n  function uniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return Math.random() * max + min;\n    };\n  }\n\n  function normal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = Math.random() * 2 - 1;\n        y = Math.random() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  function logNormal() {\n    var randomNormal = normal.apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  function irwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();\n      return sum;\n    };\n  }\n\n  function bates(n) {\n    var randomIrwinHall = irwinHall(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  function exponential(lambda) {\n    return function() {\n      return -Math.log(1 - Math.random()) / lambda;\n    };\n  }\n\n  function linear(t) {\n    return +t;\n  }\n\n  function quadIn(t) {\n    return t * t;\n  }\n\n  function quadOut(t) {\n    return t * (2 - t);\n  }\n\n  function quadInOut(t) {\n    return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n  }\n\n  function cubicIn(t) {\n    return t * t * t;\n  }\n\n  function cubicOut(t) {\n    return --t * t * t + 1;\n  }\n\n  function easeCubicInOut(t) {\n    return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n  }\n\n  var exponent = 3;\n\n  var polyIn = (function custom(e) {\n    e = +e;\n\n    function polyIn(t) {\n      return Math.pow(t, e);\n    }\n\n    polyIn.exponent = custom;\n\n    return polyIn;\n  })(exponent);\n\n  var polyOut = (function custom(e) {\n    e = +e;\n\n    function polyOut(t) {\n      return 1 - Math.pow(1 - t, e);\n    }\n\n    polyOut.exponent = custom;\n\n    return polyOut;\n  })(exponent);\n\n  var polyInOut = (function custom(e) {\n    e = +e;\n\n    function polyInOut(t) {\n      return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n    }\n\n    polyInOut.exponent = custom;\n\n    return polyInOut;\n  })(exponent);\n\n  var pi = Math.PI;\n  var halfPi = pi / 2;\n  function sinIn(t) {\n    return 1 - Math.cos(t * halfPi);\n  }\n\n  function sinOut(t) {\n    return Math.sin(t * halfPi);\n  }\n\n  function sinInOut(t) {\n    return (1 - Math.cos(pi * t)) / 2;\n  }\n\n  function expIn(t) {\n    return Math.pow(2, 10 * t - 10);\n  }\n\n  function expOut(t) {\n    return 1 - Math.pow(2, -10 * t);\n  }\n\n  function expInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;\n  }\n\n  function circleIn(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n\n  function circleOut(t) {\n    return Math.sqrt(1 - --t * t);\n  }\n\n  function circleInOut(t) {\n    return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n  }\n\n  var b1 = 4 / 11;\n  var b2 = 6 / 11;\n  var b3 = 8 / 11;\n  var b4 = 3 / 4;\n  var b5 = 9 / 11;\n  var b6 = 10 / 11;\n  var b7 = 15 / 16;\n  var b8 = 21 / 22;\n  var b9 = 63 / 64;\n  var b0 = 1 / b1 / b1;\n  function bounceIn(t) {\n    return 1 - bounceOut(1 - t);\n  }\n\n  function bounceOut(t) {\n    return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n  }\n\n  function bounceInOut(t) {\n    return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n  }\n\n  var overshoot = 1.70158;\n\n  var backIn = (function custom(s) {\n    s = +s;\n\n    function backIn(t) {\n      return t * t * ((s + 1) * t - s);\n    }\n\n    backIn.overshoot = custom;\n\n    return backIn;\n  })(overshoot);\n\n  var backOut = (function custom(s) {\n    s = +s;\n\n    function backOut(t) {\n      return --t * t * ((s + 1) * t + s) + 1;\n    }\n\n    backOut.overshoot = custom;\n\n    return backOut;\n  })(overshoot);\n\n  var backInOut = (function custom(s) {\n    s = +s;\n\n    function backInOut(t) {\n      return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n    }\n\n    backInOut.overshoot = custom;\n\n    return backInOut;\n  })(overshoot);\n\n  var tau = 2 * Math.PI;\n  var amplitude = 1;\n  var period = 0.3;\n  var elasticIn = (function custom(a, p) {\n    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n    function elasticIn(t) {\n      return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n    }\n\n    elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n    elasticIn.period = function(p) { return custom(a, p); };\n\n    return elasticIn;\n  })(amplitude, period);\n\n  var elasticOut = (function custom(a, p) {\n    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n    function elasticOut(t) {\n      return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n    }\n\n    elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n    elasticOut.period = function(p) { return custom(a, p); };\n\n    return elasticOut;\n  })(amplitude, period);\n\n  var elasticInOut = (function custom(a, p) {\n    var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n    function elasticInOut(t) {\n      return ((t = t * 2 - 1) < 0\n          ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n          : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n    }\n\n    elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n    elasticInOut.period = function(p) { return custom(a, p); };\n\n    return elasticInOut;\n  })(amplitude, period);\n\n  function area(polygon) {\n    var i = -1,\n        n = polygon.length,\n        a,\n        b = polygon[n - 1],\n        area = 0;\n\n    while (++i < n) {\n      a = b;\n      b = polygon[i];\n      area += a[1] * b[0] - a[0] * b[1];\n    }\n\n    return area / 2;\n  }\n\n  function centroid(polygon) {\n    var i = -1,\n        n = polygon.length,\n        x = 0,\n        y = 0,\n        a,\n        b = polygon[n - 1],\n        c,\n        k = 0;\n\n    while (++i < n) {\n      a = b;\n      b = polygon[i];\n      k += c = a[0] * b[1] - b[0] * a[1];\n      x += (a[0] + b[0]) * c;\n      y += (a[1] + b[1]) * c;\n    }\n\n    return k *= 3, [x / k, y / k];\n  }\n\n  // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n  // the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n  // right, +y is up). Returns a positive value if ABC is counter-clockwise,\n  // negative if clockwise, and zero if the points are collinear.\n  function cross(a, b, c) {\n    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n  }\n\n  function lexicographicOrder(a, b) {\n    return a[0] - b[0] || a[1] - b[1];\n  }\n\n  // Computes the upper convex hull per the monotone chain algorithm.\n  // Assumes points.length >= 3, is sorted by x, unique in y.\n  // Returns an array of indices into points in left-to-right order.\n  function computeUpperHullIndexes(points) {\n    var n = points.length,\n        indexes = [0, 1],\n        size = 2;\n\n    for (var i = 2; i < n; ++i) {\n      while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n      indexes[size++] = i;\n    }\n\n    return indexes.slice(0, size); // remove popped points\n  }\n\n  function hull(points) {\n    if ((n = points.length) < 3) return null;\n\n    var i,\n        n,\n        sortedPoints = new Array(n),\n        flippedPoints = new Array(n);\n\n    for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n    sortedPoints.sort(lexicographicOrder);\n    for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n    var upperIndexes = computeUpperHullIndexes(sortedPoints),\n        lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n    // Construct the hull polygon, removing possible duplicate endpoints.\n    var skipLeft = lowerIndexes[0] === upperIndexes[0],\n        skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n        hull = [];\n\n    // Add upper hull in right-to-l order.\n    // Then add lower hull in left-to-right order.\n    for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n    for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n    return hull;\n  }\n\n  function contains(polygon, point) {\n    var n = polygon.length,\n        p = polygon[n - 1],\n        x = point[0], y = point[1],\n        x0 = p[0], y0 = p[1],\n        x1, y1,\n        inside = false;\n\n    for (var i = 0; i < n; ++i) {\n      p = polygon[i], x1 = p[0], y1 = p[1];\n      if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n      x0 = x1, y0 = y1;\n    }\n\n    return inside;\n  }\n\n  function length$1(polygon) {\n    var i = -1,\n        n = polygon.length,\n        b = polygon[n - 1],\n        xa,\n        ya,\n        xb = b[0],\n        yb = b[1],\n        perimeter = 0;\n\n    while (++i < n) {\n      xa = xb;\n      ya = yb;\n      b = polygon[i];\n      xb = b[0];\n      yb = b[1];\n      xa -= xb;\n      ya -= yb;\n      perimeter += Math.sqrt(xa * xa + ya * ya);\n    }\n\n    return perimeter;\n  }\n\nvar   pi$1 = Math.PI;\nvar   tau$1 = 2 * pi$1;\n  var epsilon = 1e-6;\n  var tauEpsilon = tau$1 - epsilon;\n  function Path() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = [];\n  }\n\n  function path() {\n    return new Path;\n  }\n\n  Path.prototype = path.prototype = {\n    constructor: Path,\n    moveTo: function(x, y) {\n      this._.push(\"M\", this._x0 = this._x1 = +x, \",\", this._y0 = this._y1 = +y);\n    },\n    closePath: function() {\n      if (this._x1 !== null) {\n        this._x1 = this._x0, this._y1 = this._y0;\n        this._.push(\"Z\");\n      }\n    },\n    lineTo: function(x, y) {\n      this._.push(\"L\", this._x1 = +x, \",\", this._y1 = +y);\n    },\n    quadraticCurveTo: function(x1, y1, x, y) {\n      this._.push(\"Q\", +x1, \",\", +y1, \",\", this._x1 = +x, \",\", this._y1 = +y);\n    },\n    bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n      this._.push(\"C\", +x1, \",\", +y1, \",\", +x2, \",\", +y2, \",\", this._x1 = +x, \",\", this._y1 = +y);\n    },\n    arcTo: function(x1, y1, x2, y2, r) {\n      x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n      var x0 = this._x1,\n          y0 = this._y1,\n          x21 = x2 - x1,\n          y21 = y2 - y1,\n          x01 = x0 - x1,\n          y01 = y0 - y1,\n          l01_2 = x01 * x01 + y01 * y01;\n\n      // Is the radius negative? Error.\n      if (r < 0) throw new Error(\"negative radius: \" + r);\n\n      // Is this path empty? Move to (x1,y1).\n      if (this._x1 === null) {\n        this._.push(\n          \"M\", this._x1 = x1, \",\", this._y1 = y1\n        );\n      }\n\n      // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n      else if (!(l01_2 > epsilon));\n\n      // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n      // Equivalently, is (x1,y1) coincident with (x2,y2)?\n      // Or, is the radius zero? Line to (x1,y1).\n      else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n        this._.push(\n          \"L\", this._x1 = x1, \",\", this._y1 = y1\n        );\n      }\n\n      // Otherwise, draw an arc!\n      else {\n        var x20 = x2 - x0,\n            y20 = y2 - y0,\n            l21_2 = x21 * x21 + y21 * y21,\n            l20_2 = x20 * x20 + y20 * y20,\n            l21 = Math.sqrt(l21_2),\n            l01 = Math.sqrt(l01_2),\n            l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n            t01 = l / l01,\n            t21 = l / l21;\n\n        // If the start tangent is not coincident with (x0,y0), line to.\n        if (Math.abs(t01 - 1) > epsilon) {\n          this._.push(\n            \"L\", x1 + t01 * x01, \",\", y1 + t01 * y01\n          );\n        }\n\n        this._.push(\n          \"A\", r, \",\", r, \",0,0,\", +(y01 * x20 > x01 * y20), \",\", this._x1 = x1 + t21 * x21, \",\", this._y1 = y1 + t21 * y21\n        );\n      }\n    },\n    arc: function(x, y, r, a0, a1, ccw) {\n      x = +x, y = +y, r = +r;\n      var dx = r * Math.cos(a0),\n          dy = r * Math.sin(a0),\n          x0 = x + dx,\n          y0 = y + dy,\n          cw = 1 ^ ccw,\n          da = ccw ? a0 - a1 : a1 - a0;\n\n      // Is the radius negative? Error.\n      if (r < 0) throw new Error(\"negative radius: \" + r);\n\n      // Is this path empty? Move to (x0,y0).\n      if (this._x1 === null) {\n        this._.push(\n          \"M\", x0, \",\", y0\n        );\n      }\n\n      // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n      else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n        this._.push(\n          \"L\", x0, \",\", y0\n        );\n      }\n\n      // Is this arc empty? We’re done.\n      if (!r) return;\n\n      // Is this a complete circle? Draw two arcs to complete the circle.\n      if (da > tauEpsilon) {\n        this._.push(\n          \"A\", r, \",\", r, \",0,1,\", cw, \",\", x - dx, \",\", y - dy,\n          \"A\", r, \",\", r, \",0,1,\", cw, \",\", this._x1 = x0, \",\", this._y1 = y0\n        );\n      }\n\n      // Otherwise, draw an arc!\n      else {\n        if (da < 0) da = da % tau$1 + tau$1;\n        this._.push(\n          \"A\", r, \",\", r, \",0,\", +(da >= pi$1), \",\", cw, \",\", this._x1 = x + r * Math.cos(a1), \",\", this._y1 = y + r * Math.sin(a1)\n        );\n      }\n    },\n    rect: function(x, y, w, h) {\n      this._.push(\"M\", this._x0 = this._x1 = +x, \",\", this._y0 = this._y1 = +y, \"h\", +w, \"v\", +h, \"h\", -w, \"Z\");\n    },\n    toString: function() {\n      return this._.join(\"\");\n    }\n  };\n\n  function tree_add(d) {\n    var x = +this._x.call(null, d),\n        y = +this._y.call(null, d);\n    return add(this.cover(x, y), x, y, d);\n  }\n\n  function add(tree, x, y, d) {\n    if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n    var parent,\n        node = tree._root,\n        leaf = {data: d},\n        x0 = tree._x0,\n        y0 = tree._y0,\n        x1 = tree._x1,\n        y1 = tree._y1,\n        xm,\n        ym,\n        xp,\n        yp,\n        right,\n        bottom,\n        i,\n        j;\n\n    // If the tree is empty, initialize the root as a leaf.\n    if (!node) return tree._root = leaf, tree;\n\n    // Find the existing leaf for the new point, or add it.\n    while (node.length) {\n      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n      if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n    }\n\n    // Is the new point is exactly coincident with the existing point?\n    xp = +tree._x.call(null, node.data);\n    yp = +tree._y.call(null, node.data);\n    if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n    // Otherwise, split the leaf node until the old and new point are separated.\n    do {\n      parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n    return parent[j] = node, parent[i] = leaf, tree;\n  }\n\n  function addAll(data) {\n    var d, i, n = data.length,\n        x,\n        y,\n        xz = new Array(n),\n        yz = new Array(n),\n        x0 = Infinity,\n        y0 = Infinity,\n        x1 = -Infinity,\n        y1 = -Infinity;\n\n    // Compute the points and their extent.\n    for (i = 0; i < n; ++i) {\n      if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n      xz[i] = x;\n      yz[i] = y;\n      if (x < x0) x0 = x;\n      if (x > x1) x1 = x;\n      if (y < y0) y0 = y;\n      if (y > y1) y1 = y;\n    }\n\n    // If there were no (valid) points, inherit the existing extent.\n    if (x1 < x0) x0 = this._x0, x1 = this._x1;\n    if (y1 < y0) y0 = this._y0, y1 = this._y1;\n\n    // Expand the tree to cover the new points.\n    this.cover(x0, y0).cover(x1, y1);\n\n    // Add the new points.\n    for (i = 0; i < n; ++i) {\n      add(this, xz[i], yz[i], data[i]);\n    }\n\n    return this;\n  }\n\n  function tree_cover(x, y) {\n    if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n    var x0 = this._x0,\n        y0 = this._y0,\n        x1 = this._x1,\n        y1 = this._y1;\n\n    // If the quadtree has no extent, initialize them.\n    // Integer extent are necessary so that if we later double the extent,\n    // the existing quadrant boundaries don’t change due to floating point error!\n    if (isNaN(x0)) {\n      x1 = (x0 = Math.floor(x)) + 1;\n      y1 = (y0 = Math.floor(y)) + 1;\n    }\n\n    // Otherwise, double repeatedly to cover.\n    else if (x0 > x || x > x1 || y0 > y || y > y1) {\n      var z = x1 - x0,\n          node = this._root,\n          parent,\n          i;\n\n      switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {\n        case 0: {\n          do parent = new Array(4), parent[i] = node, node = parent;\n          while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);\n          break;\n        }\n        case 1: {\n          do parent = new Array(4), parent[i] = node, node = parent;\n          while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);\n          break;\n        }\n        case 2: {\n          do parent = new Array(4), parent[i] = node, node = parent;\n          while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);\n          break;\n        }\n        case 3: {\n          do parent = new Array(4), parent[i] = node, node = parent;\n          while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);\n          break;\n        }\n      }\n\n      if (this._root && this._root.length) this._root = node;\n    }\n\n    // If the quadtree covers the point already, just return.\n    else return this;\n\n    this._x0 = x0;\n    this._y0 = y0;\n    this._x1 = x1;\n    this._y1 = y1;\n    return this;\n  }\n\n  function tree_data() {\n    var data = [];\n    this.visit(function(node) {\n      if (!node.length) do data.push(node.data); while (node = node.next)\n    });\n    return data;\n  }\n\n  function tree_extent(_) {\n    return arguments.length\n        ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n        : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n  }\n\n  function Quad(node, x0, y0, x1, y1) {\n    this.node = node;\n    this.x0 = x0;\n    this.y0 = y0;\n    this.x1 = x1;\n    this.y1 = y1;\n  }\n\n  function tree_find(x, y, radius) {\n    var data,\n        x0 = this._x0,\n        y0 = this._y0,\n        x1,\n        y1,\n        x2,\n        y2,\n        x3 = this._x1,\n        y3 = this._y1,\n        quads = [],\n        node = this._root,\n        q,\n        i;\n\n    if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n    if (radius == null) radius = Infinity;\n    else {\n      x0 = x - radius, y0 = y - radius;\n      x3 = x + radius, y3 = y + radius;\n      radius *= radius;\n    }\n\n    while (q = quads.pop()) {\n\n      // Stop searching if this quadrant can’t contain a closer node.\n      if (!(node = q.node)\n          || (x1 = q.x0) > x3\n          || (y1 = q.y0) > y3\n          || (x2 = q.x1) < x0\n          || (y2 = q.y1) < y0) continue;\n\n      // Bisect the current quadrant.\n      if (node.length) {\n        var xm = (x1 + x2) / 2,\n            ym = (y1 + y2) / 2;\n\n        quads.push(\n          new Quad(node[3], xm, ym, x2, y2),\n          new Quad(node[2], x1, ym, xm, y2),\n          new Quad(node[1], xm, y1, x2, ym),\n          new Quad(node[0], x1, y1, xm, ym)\n        );\n\n        // Visit the closest quadrant first.\n        if (i = (y >= ym) << 1 | (x >= xm)) {\n          q = quads[quads.length - 1];\n          quads[quads.length - 1] = quads[quads.length - 1 - i];\n          quads[quads.length - 1 - i] = q;\n        }\n      }\n\n      // Visit this point. (Visiting coincident points isn’t necessary!)\n      else {\n        var dx = x - +this._x.call(null, node.data),\n            dy = y - +this._y.call(null, node.data),\n            d2 = dx * dx + dy * dy;\n        if (d2 < radius) {\n          var d = Math.sqrt(radius = d2);\n          x0 = x - d, y0 = y - d;\n          x3 = x + d, y3 = y + d;\n          data = node.data;\n        }\n      }\n    }\n\n    return data;\n  }\n\n  function tree_remove(d) {\n    if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n    var parent,\n        node = this._root,\n        retainer,\n        previous,\n        next,\n        x0 = this._x0,\n        y0 = this._y0,\n        x1 = this._x1,\n        y1 = this._y1,\n        x,\n        y,\n        xm,\n        ym,\n        right,\n        bottom,\n        i,\n        j;\n\n    // If the tree is empty, initialize the root as a leaf.\n    if (!node) return this;\n\n    // Find the leaf node for the point.\n    // While descending, also retain the deepest parent with a non-removed sibling.\n    if (node.length) while (true) {\n      if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n      if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n      if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n      if (!node.length) break;\n      if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n    }\n\n    // Find the point to remove.\n    while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n    if (next = node.next) delete node.next;\n\n    // If there are multiple coincident points, remove just the point.\n    if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n    // If this is the root point, remove it.\n    if (!parent) return this._root = next, this;\n\n    // Remove this leaf.\n    next ? parent[i] = next : delete parent[i];\n\n    // If the parent now contains exactly one leaf, collapse superfluous parents.\n    if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n        && node === (parent[3] || parent[2] || parent[1] || parent[0])\n        && !node.length) {\n      if (retainer) retainer[j] = node;\n      else this._root = node;\n    }\n\n    return this;\n  }\n\n  function removeAll(data) {\n    for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n    return this;\n  }\n\n  function tree_root() {\n    return this._root;\n  }\n\n  function tree_size() {\n    var size = 0;\n    this.visit(function(node) {\n      if (!node.length) do ++size; while (node = node.next)\n    });\n    return size;\n  }\n\n  function tree_visit(callback) {\n    var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n    if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n    while (q = quads.pop()) {\n      if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n        var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n        if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n        if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n        if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n        if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      }\n    }\n    return this;\n  }\n\n  function tree_visitAfter(callback) {\n    var quads = [], next = [], q;\n    if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n    while (q = quads.pop()) {\n      var node = q.node;\n      if (node.length) {\n        var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n        if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n        if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n        if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n        if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      }\n      next.push(q);\n    }\n    while (q = next.pop()) {\n      callback(q.node, q.x0, q.y0, q.x1, q.y1);\n    }\n    return this;\n  }\n\n  function defaultX(d) {\n    return d[0];\n  }\n\n  function tree_x(_) {\n    return arguments.length ? (this._x = _, this) : this._x;\n  }\n\n  function defaultY(d) {\n    return d[1];\n  }\n\n  function tree_y(_) {\n    return arguments.length ? (this._y = _, this) : this._y;\n  }\n\n  function quadtree(nodes, x, y) {\n    var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n    return nodes == null ? tree : tree.addAll(nodes);\n  }\n\n  function Quadtree(x, y, x0, y0, x1, y1) {\n    this._x = x;\n    this._y = y;\n    this._x0 = x0;\n    this._y0 = y0;\n    this._x1 = x1;\n    this._y1 = y1;\n    this._root = undefined;\n  }\n\n  function leaf_copy(leaf) {\n    var copy = {data: leaf.data}, next = copy;\n    while (leaf = leaf.next) next = next.next = {data: leaf.data};\n    return copy;\n  }\n\n  var treeProto = quadtree.prototype = Quadtree.prototype;\n\n  treeProto.copy = function() {\n    var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n        node = this._root,\n        nodes,\n        child;\n\n    if (!node) return copy;\n\n    if (!node.length) return copy._root = leaf_copy(node), copy;\n\n    nodes = [{source: node, target: copy._root = new Array(4)}];\n    while (node = nodes.pop()) {\n      for (var i = 0; i < 4; ++i) {\n        if (child = node.source[i]) {\n          if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n          else node.target[i] = leaf_copy(child);\n        }\n      }\n    }\n\n    return copy;\n  };\n\n  treeProto.add = tree_add;\n  treeProto.addAll = addAll;\n  treeProto.cover = tree_cover;\n  treeProto.data = tree_data;\n  treeProto.extent = tree_extent;\n  treeProto.find = tree_find;\n  treeProto.remove = tree_remove;\n  treeProto.removeAll = removeAll;\n  treeProto.root = tree_root;\n  treeProto.size = tree_size;\n  treeProto.visit = tree_visit;\n  treeProto.visitAfter = tree_visitAfter;\n  treeProto.x = tree_x;\n  treeProto.y = tree_y;\n\n  var slice$1 = [].slice;\n\n  var noabort = {};\n\n  function Queue(size) {\n    if (!(size >= 1)) throw new Error;\n    this._size = size;\n    this._call =\n    this._error = null;\n    this._tasks = [];\n    this._data = [];\n    this._waiting =\n    this._active =\n    this._ended =\n    this._start = 0; // inside a synchronous task callback?\n  }\n\n  Queue.prototype = queue.prototype = {\n    constructor: Queue,\n    defer: function(callback) {\n      if (typeof callback !== \"function\" || this._call) throw new Error;\n      if (this._error != null) return this;\n      var t = slice$1.call(arguments, 1);\n      t.push(callback);\n      ++this._waiting, this._tasks.push(t);\n      poke(this);\n      return this;\n    },\n    abort: function() {\n      if (this._error == null) abort(this, new Error(\"abort\"));\n      return this;\n    },\n    await: function(callback) {\n      if (typeof callback !== \"function\" || this._call) throw new Error;\n      this._call = function(error, results) { callback.apply(null, [error].concat(results)); };\n      maybeNotify(this);\n      return this;\n    },\n    awaitAll: function(callback) {\n      if (typeof callback !== \"function\" || this._call) throw new Error;\n      this._call = callback;\n      maybeNotify(this);\n      return this;\n    }\n  };\n\n  function poke(q) {\n    if (!q._start) try { start(q); } // let the current task complete\n    catch (e) { if (q._tasks[q._ended + q._active - 1]) abort(q, e); } // task errored synchronously\n  }\n\n  function start(q) {\n    while (q._start = q._waiting && q._active < q._size) {\n      var i = q._ended + q._active,\n          t = q._tasks[i],\n          j = t.length - 1,\n          c = t[j];\n      t[j] = end(q, i);\n      --q._waiting, ++q._active;\n      t = c.apply(null, t);\n      if (!q._tasks[i]) continue; // task finished synchronously\n      q._tasks[i] = t || noabort;\n    }\n  }\n\n  function end(q, i) {\n    return function(e, r) {\n      if (!q._tasks[i]) return; // ignore multiple callbacks\n      --q._active, ++q._ended;\n      q._tasks[i] = null;\n      if (q._error != null) return; // ignore secondary errors\n      if (e != null) {\n        abort(q, e);\n      } else {\n        q._data[i] = r;\n        if (q._waiting) poke(q);\n        else maybeNotify(q);\n      }\n    };\n  }\n\n  function abort(q, e) {\n    var i = q._tasks.length, t;\n    q._error = e; // ignore active callbacks\n    q._data = undefined; // allow gc\n    q._waiting = NaN; // prevent starting\n\n    while (--i >= 0) {\n      if (t = q._tasks[i]) {\n        q._tasks[i] = null;\n        if (t.abort) try { t.abort(); }\n        catch (e) { /* ignore */ }\n      }\n    }\n\n    q._active = NaN; // allow notification\n    maybeNotify(q);\n  }\n\n  function maybeNotify(q) {\n    if (!q._active && q._call) q._call(q._error, q._data);\n  }\n\n  function queue(concurrency) {\n    return new Queue(arguments.length ? +concurrency : Infinity);\n  }\n\n  function constant$1(x) {\n    return function constant() {\n      return x;\n    };\n  }\n\n  var epsilon$1 = 1e-12;\n  var pi$2 = Math.PI;\n  var halfPi$1 = pi$2 / 2;\n  var tau$2 = 2 * pi$2;\n\n  function arcInnerRadius(d) {\n    return d.innerRadius;\n  }\n\n  function arcOuterRadius(d) {\n    return d.outerRadius;\n  }\n\n  function arcStartAngle(d) {\n    return d.startAngle;\n  }\n\n  function arcEndAngle(d) {\n    return d.endAngle;\n  }\n\n  function arcPadAngle(d) {\n    return d && d.padAngle; // Note: optional!\n  }\n\n  function asin(x) {\n    return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);\n  }\n\n  function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n    var x10 = x1 - x0, y10 = y1 - y0,\n        x32 = x3 - x2, y32 = y3 - y2,\n        t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n    return [x0 + t * x10, y0 + t * y10];\n  }\n\n  // Compute perpendicular offset line of length rc.\n  // http://mathworld.wolfram.com/Circle-LineIntersection.html\n  function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n    var x01 = x0 - x1,\n        y01 = y0 - y1,\n        lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),\n        ox = lo * y01,\n        oy = -lo * x01,\n        x11 = x0 + ox,\n        y11 = y0 + oy,\n        x10 = x1 + ox,\n        y10 = y1 + oy,\n        x00 = (x11 + x10) / 2,\n        y00 = (y11 + y10) / 2,\n        dx = x10 - x11,\n        dy = y10 - y11,\n        d2 = dx * dx + dy * dy,\n        r = r1 - rc,\n        D = x11 * y10 - x10 * y11,\n        d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),\n        cx0 = (D * dy - dx * d) / d2,\n        cy0 = (-D * dx - dy * d) / d2,\n        cx1 = (D * dy + dx * d) / d2,\n        cy1 = (-D * dx + dy * d) / d2,\n        dx0 = cx0 - x00,\n        dy0 = cy0 - y00,\n        dx1 = cx1 - x00,\n        dy1 = cy1 - y00;\n\n    // Pick the closer of the two intersection points.\n    // TODO Is there a faster way to determine which intersection to use?\n    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n    return {\n      cx: cx0,\n      cy: cy0,\n      x01: -ox,\n      y01: -oy,\n      x11: cx0 * (r1 / r - 1),\n      y11: cy0 * (r1 / r - 1)\n    };\n  }\n\n  function arc() {\n    var innerRadius = arcInnerRadius,\n        outerRadius = arcOuterRadius,\n        cornerRadius = constant$1(0),\n        padRadius = null,\n        startAngle = arcStartAngle,\n        endAngle = arcEndAngle,\n        padAngle = arcPadAngle,\n        context = null;\n\n    function arc() {\n      var buffer,\n          r,\n          r0 = +innerRadius.apply(this, arguments),\n          r1 = +outerRadius.apply(this, arguments),\n          a0 = startAngle.apply(this, arguments) - halfPi$1,\n          a1 = endAngle.apply(this, arguments) - halfPi$1,\n          da = Math.abs(a1 - a0),\n          cw = a1 > a0;\n\n      if (!context) context = buffer = path();\n\n      // Ensure that the outer radius is always larger than the inner radius.\n      if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n      // Is it a point?\n      if (!(r1 > epsilon$1)) context.moveTo(0, 0);\n\n      // Or is it a circle or annulus?\n      else if (da > tau$2 - epsilon$1) {\n        context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));\n        context.arc(0, 0, r1, a0, a1, !cw);\n        if (r0 > epsilon$1) {\n          context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));\n          context.arc(0, 0, r0, a1, a0, cw);\n        }\n      }\n\n      // Or is it a circular or annular sector?\n      else {\n        var a01 = a0,\n            a11 = a1,\n            a00 = a0,\n            a10 = a1,\n            da0 = da,\n            da1 = da,\n            ap = padAngle.apply(this, arguments) / 2,\n            rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),\n            rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n            rc0 = rc,\n            rc1 = rc,\n            t0,\n            t1;\n\n        // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n        if (rp > epsilon$1) {\n          var p0 = asin(rp / r0 * Math.sin(ap)),\n              p1 = asin(rp / r1 * Math.sin(ap));\n          if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n          else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n          if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n          else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n        }\n\n        var x01 = r1 * Math.cos(a01),\n            y01 = r1 * Math.sin(a01),\n            x10 = r0 * Math.cos(a10),\n            y10 = r0 * Math.sin(a10);\n\n        // Apply rounded corners?\n        if (rc > epsilon$1) {\n          var x11 = r1 * Math.cos(a11),\n              y11 = r1 * Math.sin(a11),\n              x00 = r0 * Math.cos(a00),\n              y00 = r0 * Math.sin(a00);\n\n          // Restrict the corner radius according to the sector angle.\n          if (da < pi$2) {\n            var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n                ax = x01 - oc[0],\n                ay = y01 - oc[1],\n                bx = x11 - oc[0],\n                by = y11 - oc[1],\n                kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),\n                lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n            rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n            rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n          }\n        }\n\n        // Is the sector collapsed to a line?\n        if (!(da1 > epsilon$1)) context.moveTo(x01, y01);\n\n        // Does the sector’s outer ring have rounded corners?\n        else if (rc1 > epsilon$1) {\n          t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n          t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n          context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n          // Have the corners merged?\n          if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n          // Otherwise, draw the two corners and the ring.\n          else {\n            context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n            context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n            context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n          }\n        }\n\n        // Or is the outer ring just a circular arc?\n        else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n        // Is there no inner ring, and it’s a circular sector?\n        // Or perhaps it’s an annular sector collapsed due to padding?\n        if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);\n\n        // Does the sector’s inner ring (or point) have rounded corners?\n        else if (rc0 > epsilon$1) {\n          t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n          t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n          context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n          // Have the corners merged?\n          if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n          // Otherwise, draw the two corners and the ring.\n          else {\n            context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n            context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n            context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n          }\n        }\n\n        // Or is the inner ring just a circular arc?\n        else context.arc(0, 0, r0, a10, a00, cw);\n      }\n\n      context.closePath();\n\n      if (buffer) return context = null, buffer + \"\" || null;\n    }\n\n    arc.centroid = function() {\n      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n          a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;\n      return [Math.cos(a) * r, Math.sin(a) * r];\n    };\n\n    arc.innerRadius = function(_) {\n      return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : innerRadius;\n    };\n\n    arc.outerRadius = function(_) {\n      return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : outerRadius;\n    };\n\n    arc.cornerRadius = function(_) {\n      return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : cornerRadius;\n    };\n\n    arc.padRadius = function(_) {\n      return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), arc) : padRadius;\n    };\n\n    arc.startAngle = function(_) {\n      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : startAngle;\n    };\n\n    arc.endAngle = function(_) {\n      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : endAngle;\n    };\n\n    arc.padAngle = function(_) {\n      return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : padAngle;\n    };\n\n    arc.context = function(_) {\n      return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n    };\n\n    return arc;\n  }\n\n  function Linear(context) {\n    this._context = context;\n  }\n\n  Linear.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; // proceed\n        default: this._context.lineTo(x, y); break;\n      }\n    }\n  };\n\n  function curveLinear(context) {\n    return new Linear(context);\n  }\n\n  function x(p) {\n    return p[0];\n  }\n\n  function y(p) {\n    return p[1];\n  }\n\n  function line() {\n    var x$$ = x,\n        y$$ = y,\n        defined = constant$1(true),\n        context = null,\n        curve = curveLinear,\n        output = null;\n\n    function line(data) {\n      var i,\n          n = data.length,\n          d,\n          defined0 = false,\n          buffer;\n\n      if (context == null) output = curve(buffer = path());\n\n      for (i = 0; i <= n; ++i) {\n        if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n          if (defined0 = !defined0) output.lineStart();\n          else output.lineEnd();\n        }\n        if (defined0) output.point(+x$$(d, i, data), +y$$(d, i, data));\n      }\n\n      if (buffer) return output = null, buffer + \"\" || null;\n    }\n\n    line.x = function(_) {\n      return arguments.length ? (x$$ = typeof _ === \"function\" ? _ : constant$1(+_), line) : x$$;\n    };\n\n    line.y = function(_) {\n      return arguments.length ? (y$$ = typeof _ === \"function\" ? _ : constant$1(+_), line) : y$$;\n    };\n\n    line.defined = function(_) {\n      return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), line) : defined;\n    };\n\n    line.curve = function(_) {\n      return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n    };\n\n    line.context = function(_) {\n      return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n    };\n\n    return line;\n  }\n\n  function area$1() {\n    var x0 = x,\n        x1 = null,\n        y0 = constant$1(0),\n        y1 = y,\n        defined = constant$1(true),\n        context = null,\n        curve = curveLinear,\n        output = null;\n\n    function area(data) {\n      var i,\n          j,\n          k,\n          n = data.length,\n          d,\n          defined0 = false,\n          buffer,\n          x0z = new Array(n),\n          y0z = new Array(n);\n\n      if (context == null) output = curve(buffer = path());\n\n      for (i = 0; i <= n; ++i) {\n        if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n          if (defined0 = !defined0) {\n            j = i;\n            output.areaStart();\n            output.lineStart();\n          } else {\n            output.lineEnd();\n            output.lineStart();\n            for (k = i - 1; k >= j; --k) {\n              output.point(x0z[k], y0z[k]);\n            }\n            output.lineEnd();\n            output.areaEnd();\n          }\n        }\n        if (defined0) {\n          x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n          output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n        }\n      }\n\n      if (buffer) return output = null, buffer + \"\" || null;\n    }\n\n    function arealine() {\n      return line().defined(defined).curve(curve).context(context);\n    }\n\n    area.x = function(_) {\n      return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), x1 = null, area) : x0;\n    };\n\n    area.x0 = function(_) {\n      return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : x0;\n    };\n\n    area.x1 = function(_) {\n      return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : x1;\n    };\n\n    area.y = function(_) {\n      return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), y1 = null, area) : y0;\n    };\n\n    area.y0 = function(_) {\n      return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : y0;\n    };\n\n    area.y1 = function(_) {\n      return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : y1;\n    };\n\n    area.lineX0 =\n    area.lineY0 = function() {\n      return arealine().x(x0).y(y0);\n    };\n\n    area.lineY1 = function() {\n      return arealine().x(x0).y(y1);\n    };\n\n    area.lineX1 = function() {\n      return arealine().x(x1).y(y0);\n    };\n\n    area.defined = function(_) {\n      return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), area) : defined;\n    };\n\n    area.curve = function(_) {\n      return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n    };\n\n    area.context = function(_) {\n      return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n    };\n\n    return area;\n  }\n\n  function descending$1(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  }\n\n  function identity$1(d) {\n    return d;\n  }\n\n  function pie() {\n    var value = identity$1,\n        sortValues = descending$1,\n        sort = null,\n        startAngle = constant$1(0),\n        endAngle = constant$1(tau$2),\n        padAngle = constant$1(0);\n\n    function pie(data) {\n      var i,\n          n = data.length,\n          j,\n          k,\n          sum = 0,\n          index = new Array(n),\n          arcs = new Array(n),\n          a0 = +startAngle.apply(this, arguments),\n          da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),\n          a1,\n          p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n          pa = p * (da < 0 ? -1 : 1),\n          v;\n\n      for (i = 0; i < n; ++i) {\n        if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n          sum += v;\n        }\n      }\n\n      // Optionally sort the arcs by previously-computed values or by data.\n      if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n      else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n      // Compute the arcs! They are stored in the original data's order.\n      for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n        j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n          data: data[j],\n          index: i,\n          value: v,\n          startAngle: a0,\n          endAngle: a1,\n          padAngle: p\n        };\n      }\n\n      return arcs;\n    }\n\n    pie.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), pie) : value;\n    };\n\n    pie.sortValues = function(_) {\n      return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n    };\n\n    pie.sort = function(_) {\n      return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n    };\n\n    pie.startAngle = function(_) {\n      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : startAngle;\n    };\n\n    pie.endAngle = function(_) {\n      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : endAngle;\n    };\n\n    pie.padAngle = function(_) {\n      return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : padAngle;\n    };\n\n    return pie;\n  }\n\n  var curveRadialLinear = curveRadial(curveLinear);\n\n  function Radial(curve) {\n    this._curve = curve;\n  }\n\n  Radial.prototype = {\n    areaStart: function() {\n      this._curve.areaStart();\n    },\n    areaEnd: function() {\n      this._curve.areaEnd();\n    },\n    lineStart: function() {\n      this._curve.lineStart();\n    },\n    lineEnd: function() {\n      this._curve.lineEnd();\n    },\n    point: function(a, r) {\n      this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n    }\n  };\n\n  function curveRadial(curve) {\n\n    function radial(context) {\n      return new Radial(curve(context));\n    }\n\n    radial._curve = curve;\n\n    return radial;\n  }\n\n  function radialLine(l) {\n    var c = l.curve;\n\n    l.angle = l.x, delete l.x;\n    l.radius = l.y, delete l.y;\n\n    l.curve = function(_) {\n      return arguments.length ? c(curveRadial(_)) : c()._curve;\n    };\n\n    return l;\n  }\n\n  function radialLine$1() {\n    return radialLine(line().curve(curveRadialLinear));\n  }\n\n  function radialArea() {\n    var a = area$1().curve(curveRadialLinear),\n        c = a.curve,\n        x0 = a.lineX0,\n        x1 = a.lineX1,\n        y0 = a.lineY0,\n        y1 = a.lineY1;\n\n    a.angle = a.x, delete a.x;\n    a.startAngle = a.x0, delete a.x0;\n    a.endAngle = a.x1, delete a.x1;\n    a.radius = a.y, delete a.y;\n    a.innerRadius = a.y0, delete a.y0;\n    a.outerRadius = a.y1, delete a.y1;\n    a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;\n    a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;\n    a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;\n    a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;\n\n    a.curve = function(_) {\n      return arguments.length ? c(curveRadial(_)) : c()._curve;\n    };\n\n    return a;\n  }\n\n  var circle = {\n    draw: function(context, size) {\n      var r = Math.sqrt(size / pi$2);\n      context.moveTo(r, 0);\n      context.arc(0, 0, r, 0, tau$2);\n    }\n  };\n\n  var cross$1 = {\n    draw: function(context, size) {\n      var r = Math.sqrt(size / 5) / 2;\n      context.moveTo(-3 * r, -r);\n      context.lineTo(-r, -r);\n      context.lineTo(-r, -3 * r);\n      context.lineTo(r, -3 * r);\n      context.lineTo(r, -r);\n      context.lineTo(3 * r, -r);\n      context.lineTo(3 * r, r);\n      context.lineTo(r, r);\n      context.lineTo(r, 3 * r);\n      context.lineTo(-r, 3 * r);\n      context.lineTo(-r, r);\n      context.lineTo(-3 * r, r);\n      context.closePath();\n    }\n  };\n\n  var tan30 = Math.sqrt(1 / 3);\n  var tan30_2 = tan30 * 2;\n  var diamond = {\n    draw: function(context, size) {\n      var y = Math.sqrt(size / tan30_2),\n          x = y * tan30;\n      context.moveTo(0, -y);\n      context.lineTo(x, 0);\n      context.lineTo(0, y);\n      context.lineTo(-x, 0);\n      context.closePath();\n    }\n  };\n\n  var ka = 0.89081309152928522810;\n  var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);\n  var kx = Math.sin(tau$2 / 10) * kr;\n  var ky = -Math.cos(tau$2 / 10) * kr;\n  var star = {\n    draw: function(context, size) {\n      var r = Math.sqrt(size * ka),\n          x = kx * r,\n          y = ky * r;\n      context.moveTo(0, -r);\n      context.lineTo(x, y);\n      for (var i = 1; i < 5; ++i) {\n        var a = tau$2 * i / 5,\n            c = Math.cos(a),\n            s = Math.sin(a);\n        context.lineTo(s * r, -c * r);\n        context.lineTo(c * x - s * y, s * x + c * y);\n      }\n      context.closePath();\n    }\n  };\n\n  var square = {\n    draw: function(context, size) {\n      var w = Math.sqrt(size),\n          x = -w / 2;\n      context.rect(x, x, w, w);\n    }\n  };\n\n  var sqrt3 = Math.sqrt(3);\n\n  var triangle = {\n    draw: function(context, size) {\n      var y = -Math.sqrt(size / (sqrt3 * 3));\n      context.moveTo(0, y * 2);\n      context.lineTo(-sqrt3 * y, -y);\n      context.lineTo(sqrt3 * y, -y);\n      context.closePath();\n    }\n  };\n\n  var c = -0.5;\n  var s = Math.sqrt(3) / 2;\n  var k = 1 / Math.sqrt(12);\n  var a = (k / 2 + 1) * 3;\n  var wye = {\n    draw: function(context, size) {\n      var r = Math.sqrt(size / a),\n          x0 = r / 2,\n          y0 = r * k,\n          x1 = x0,\n          y1 = r * k + r,\n          x2 = -x1,\n          y2 = y1;\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n      context.lineTo(x2, y2);\n      context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n      context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n      context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n      context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n      context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n      context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n      context.closePath();\n    }\n  };\n\n  var symbols = [\n    circle,\n    cross$1,\n    diamond,\n    square,\n    star,\n    triangle,\n    wye\n  ];\n\n  function symbol() {\n    var type = constant$1(circle),\n        size = constant$1(64),\n        context = null;\n\n    function symbol() {\n      var buffer;\n      if (!context) context = buffer = path();\n      type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n      if (buffer) return context = null, buffer + \"\" || null;\n    }\n\n    symbol.type = function(_) {\n      return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$1(_), symbol) : type;\n    };\n\n    symbol.size = function(_) {\n      return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$1(+_), symbol) : size;\n    };\n\n    symbol.context = function(_) {\n      return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n    };\n\n    return symbol;\n  }\n\n  function noop() {}\n\n  function point(that, x, y) {\n    that._context.bezierCurveTo(\n      (2 * that._x0 + that._x1) / 3,\n      (2 * that._y0 + that._y1) / 3,\n      (that._x0 + 2 * that._x1) / 3,\n      (that._y0 + 2 * that._y1) / 3,\n      (that._x0 + 4 * that._x1 + x) / 6,\n      (that._y0 + 4 * that._y1 + y) / 6\n    );\n  }\n\n  function Basis(context) {\n    this._context = context;\n  }\n\n  Basis.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 =\n      this._y0 = this._y1 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 3: point(this, this._x1, this._y1); // proceed\n        case 2: this._context.lineTo(this._x1, this._y1); break;\n      }\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n        default: point(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = x;\n      this._y0 = this._y1, this._y1 = y;\n    }\n  };\n\n  function basis(context) {\n    return new Basis(context);\n  }\n\n  function BasisClosed(context) {\n    this._context = context;\n  }\n\n  BasisClosed.prototype = {\n    areaStart: noop,\n    areaEnd: noop,\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 1: {\n          this._context.moveTo(this._x2, this._y2);\n          this._context.closePath();\n          break;\n        }\n        case 2: {\n          this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n          this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n          this._context.closePath();\n          break;\n        }\n        case 3: {\n          this.point(this._x2, this._y2);\n          this.point(this._x3, this._y3);\n          this.point(this._x4, this._y4);\n          break;\n        }\n      }\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n        case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n        case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n        default: point(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = x;\n      this._y0 = this._y1, this._y1 = y;\n    }\n  };\n\n  function basisClosed(context) {\n    return new BasisClosed(context);\n  }\n\n  function BasisOpen(context) {\n    this._context = context;\n  }\n\n  BasisOpen.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 =\n      this._y0 = this._y1 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n        case 3: this._point = 4; // proceed\n        default: point(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = x;\n      this._y0 = this._y1, this._y1 = y;\n    }\n  };\n\n  function basisOpen(context) {\n    return new BasisOpen(context);\n  }\n\n  function Bundle(context, beta) {\n    this._basis = new Basis(context);\n    this._beta = beta;\n  }\n\n  Bundle.prototype = {\n    lineStart: function() {\n      this._x = [];\n      this._y = [];\n      this._basis.lineStart();\n    },\n    lineEnd: function() {\n      var x = this._x,\n          y = this._y,\n          j = x.length - 1;\n\n      if (j > 0) {\n        var x0 = x[0],\n            y0 = y[0],\n            dx = x[j] - x0,\n            dy = y[j] - y0,\n            i = -1,\n            t;\n\n        while (++i <= j) {\n          t = i / j;\n          this._basis.point(\n            this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n            this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n          );\n        }\n      }\n\n      this._x = this._y = null;\n      this._basis.lineEnd();\n    },\n    point: function(x, y) {\n      this._x.push(+x);\n      this._y.push(+y);\n    }\n  };\n\n  var bundle = (function custom(beta) {\n\n    function bundle(context) {\n      return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n    }\n\n    bundle.beta = function(beta) {\n      return custom(+beta);\n    };\n\n    return bundle;\n  })(0.85);\n\n  function point$1(that, x, y) {\n    that._context.bezierCurveTo(\n      that._x1 + that._k * (that._x2 - that._x0),\n      that._y1 + that._k * (that._y2 - that._y0),\n      that._x2 + that._k * (that._x1 - x),\n      that._y2 + that._k * (that._y1 - y),\n      that._x2,\n      that._y2\n    );\n  }\n\n  function Cardinal(context, tension) {\n    this._context = context;\n    this._k = (1 - tension) / 6;\n  }\n\n  Cardinal.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 =\n      this._y0 = this._y1 = this._y2 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 2: this._context.lineTo(this._x2, this._y2); break;\n        case 3: point$1(this, this._x1, this._y1); break;\n      }\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n        case 2: this._point = 3; // proceed\n        default: point$1(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var cardinal = (function custom(tension) {\n\n    function cardinal(context) {\n      return new Cardinal(context, tension);\n    }\n\n    cardinal.tension = function(tension) {\n      return custom(+tension);\n    };\n\n    return cardinal;\n  })(0);\n\n  function CardinalClosed(context, tension) {\n    this._context = context;\n    this._k = (1 - tension) / 6;\n  }\n\n  CardinalClosed.prototype = {\n    areaStart: noop,\n    areaEnd: noop,\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 1: {\n          this._context.moveTo(this._x3, this._y3);\n          this._context.closePath();\n          break;\n        }\n        case 2: {\n          this._context.lineTo(this._x3, this._y3);\n          this._context.closePath();\n          break;\n        }\n        case 3: {\n          this.point(this._x3, this._y3);\n          this.point(this._x4, this._y4);\n          this.point(this._x5, this._y5);\n          break;\n        }\n      }\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n        case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n        case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n        default: point$1(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var cardinalClosed = (function custom(tension) {\n\n    function cardinal(context) {\n      return new CardinalClosed(context, tension);\n    }\n\n    cardinal.tension = function(tension) {\n      return custom(+tension);\n    };\n\n    return cardinal;\n  })(0);\n\n  function CardinalOpen(context, tension) {\n    this._context = context;\n    this._k = (1 - tension) / 6;\n  }\n\n  CardinalOpen.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 =\n      this._y0 = this._y1 = this._y2 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n        case 3: this._point = 4; // proceed\n        default: point$1(this, x, y); break;\n      }\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var cardinalOpen = (function custom(tension) {\n\n    function cardinal(context) {\n      return new CardinalOpen(context, tension);\n    }\n\n    cardinal.tension = function(tension) {\n      return custom(+tension);\n    };\n\n    return cardinal;\n  })(0);\n\n  function point$2(that, x, y) {\n    var x1 = that._x1,\n        y1 = that._y1,\n        x2 = that._x2,\n        y2 = that._y2;\n\n    if (that._l01_a > epsilon$1) {\n      var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n          n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n      x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n      y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n    }\n\n    if (that._l23_a > epsilon$1) {\n      var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n          m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n      x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n      y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n    }\n\n    that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n  }\n\n  function CatmullRom(context, alpha) {\n    this._context = context;\n    this._alpha = alpha;\n  }\n\n  CatmullRom.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 =\n      this._y0 = this._y1 = this._y2 = NaN;\n      this._l01_a = this._l12_a = this._l23_a =\n      this._l01_2a = this._l12_2a = this._l23_2a =\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 2: this._context.lineTo(this._x2, this._y2); break;\n        case 3: this.point(this, this._x2, this._y2); break;\n      }\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n\n      if (this._point) {\n        var x23 = this._x2 - x,\n            y23 = this._y2 - y;\n        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n      }\n\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; // proceed\n        default: point$2(this, x, y); break;\n      }\n\n      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var catmullRom = (function custom(alpha) {\n\n    function catmullRom(context) {\n      return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n    }\n\n    catmullRom.alpha = function(alpha) {\n      return custom(+alpha);\n    };\n\n    return catmullRom;\n  })(0.5);\n\n  function CatmullRomClosed(context, alpha) {\n    this._context = context;\n    this._alpha = alpha;\n  }\n\n  CatmullRomClosed.prototype = {\n    areaStart: noop,\n    areaEnd: noop,\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n      this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n      this._l01_a = this._l12_a = this._l23_a =\n      this._l01_2a = this._l12_2a = this._l23_2a =\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 1: {\n          this._context.moveTo(this._x3, this._y3);\n          this._context.closePath();\n          break;\n        }\n        case 2: {\n          this._context.lineTo(this._x3, this._y3);\n          this._context.closePath();\n          break;\n        }\n        case 3: {\n          this.point(this._x3, this._y3);\n          this.point(this._x4, this._y4);\n          this.point(this._x5, this._y5);\n          break;\n        }\n      }\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n\n      if (this._point) {\n        var x23 = this._x2 - x,\n            y23 = this._y2 - y;\n        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n      }\n\n      switch (this._point) {\n        case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n        case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n        case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n        default: point$2(this, x, y); break;\n      }\n\n      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var catmullRomClosed = (function custom(alpha) {\n\n    function catmullRom(context) {\n      return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n    }\n\n    catmullRom.alpha = function(alpha) {\n      return custom(+alpha);\n    };\n\n    return catmullRom;\n  })(0.5);\n\n  function CatmullRomOpen(context, alpha) {\n    this._context = context;\n    this._alpha = alpha;\n  }\n\n  CatmullRomOpen.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 = this._x2 =\n      this._y0 = this._y1 = this._y2 = NaN;\n      this._l01_a = this._l12_a = this._l23_a =\n      this._l01_2a = this._l12_2a = this._l23_2a =\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n\n      if (this._point) {\n        var x23 = this._x2 - x,\n            y23 = this._y2 - y;\n        this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n      }\n\n      switch (this._point) {\n        case 0: this._point = 1; break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n        case 3: this._point = 4; // proceed\n        default: point$2(this, x, y); break;\n      }\n\n      this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n      this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n      this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n      this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n    }\n  };\n\n  var catmullRomOpen = (function custom(alpha) {\n\n    function catmullRom(context) {\n      return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n    }\n\n    catmullRom.alpha = function(alpha) {\n      return custom(+alpha);\n    };\n\n    return catmullRom;\n  })(0.5);\n\n  function LinearClosed(context) {\n    this._context = context;\n  }\n\n  LinearClosed.prototype = {\n    areaStart: noop,\n    areaEnd: noop,\n    lineStart: function() {\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (this._point) this._context.closePath();\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      if (this._point) this._context.lineTo(x, y);\n      else this._point = 1, this._context.moveTo(x, y);\n    }\n  };\n\n  function linearClosed(context) {\n    return new LinearClosed(context);\n  }\n\n  function sign(x) {\n    return x < 0 ? -1 : 1;\n  }\n\n  // Calculate the slopes of the tangents (Hermite-type interpolation) based on\n  // the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n  // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n  // NOV(II), P. 443, 1990.\n  function slope3(that, x2, y2) {\n    var h0 = that._x1 - that._x0,\n        h1 = x2 - that._x1,\n        s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n        s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n        p = (s0 * h1 + s1 * h0) / (h0 + h1);\n    return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n  }\n\n  // Calculate a one-sided slope.\n  function slope2(that, t) {\n    var h = that._x1 - that._x0;\n    return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n  }\n\n  // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n  // \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n  // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\n  function point$3(that, t0, t1) {\n    var x0 = that._x0,\n        y0 = that._y0,\n        x1 = that._x1,\n        y1 = that._y1,\n        dx = (x1 - x0) / 3;\n    that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n  }\n\n  function MonotoneX(context) {\n    this._context = context;\n  }\n\n  MonotoneX.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x0 = this._x1 =\n      this._y0 = this._y1 =\n      this._t0 = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      switch (this._point) {\n        case 2: this._context.lineTo(this._x1, this._y1); break;\n        case 3: point$3(this, this._t0, slope2(this, this._t0)); break;\n      }\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      var t1 = NaN;\n\n      x = +x, y = +y;\n      if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; break;\n        case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n        default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;\n      }\n\n      this._x0 = this._x1, this._x1 = x;\n      this._y0 = this._y1, this._y1 = y;\n      this._t0 = t1;\n    }\n  }\n\n  function MonotoneY(context) {\n    this._context = new ReflectContext(context);\n  }\n\n  (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n    MonotoneX.prototype.point.call(this, y, x);\n  };\n\n  function ReflectContext(context) {\n    this._context = context;\n  }\n\n  ReflectContext.prototype = {\n    moveTo: function(x, y) { this._context.moveTo(y, x); },\n    closePath: function() { this._context.closePath(); },\n    lineTo: function(x, y) { this._context.lineTo(y, x); },\n    bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n  };\n\n  function monotoneX(context) {\n    return new MonotoneX(context);\n  }\n\n  function monotoneY(context) {\n    return new MonotoneY(context);\n  }\n\n  function Natural(context) {\n    this._context = context;\n  }\n\n  Natural.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x = [];\n      this._y = [];\n    },\n    lineEnd: function() {\n      var x = this._x,\n          y = this._y,\n          n = x.length;\n\n      if (n) {\n        this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n        if (n === 2) {\n          this._context.lineTo(x[1], y[1]);\n        } else {\n          var px = controlPoints(x),\n              py = controlPoints(y);\n          for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n            this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n          }\n        }\n      }\n\n      if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n      this._line = 1 - this._line;\n      this._x = this._y = null;\n    },\n    point: function(x, y) {\n      this._x.push(+x);\n      this._y.push(+y);\n    }\n  };\n\n  // See https://www.particleincell.com/2012/bezier-splines/ for derivation.\n  function controlPoints(x) {\n    var i,\n        n = x.length - 1,\n        m,\n        a = new Array(n),\n        b = new Array(n),\n        r = new Array(n);\n    a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n    for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n    a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n    for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n    a[n - 1] = r[n - 1] / b[n - 1];\n    for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n    b[n - 1] = (x[n] + a[n - 1]) / 2;\n    for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n    return [a, b];\n  }\n\n  function natural(context) {\n    return new Natural(context);\n  }\n\n  function Step(context, t) {\n    this._context = context;\n    this._t = t;\n  }\n\n  Step.prototype = {\n    areaStart: function() {\n      this._line = 0;\n    },\n    areaEnd: function() {\n      this._line = NaN;\n    },\n    lineStart: function() {\n      this._x = this._y = NaN;\n      this._point = 0;\n    },\n    lineEnd: function() {\n      if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n      if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n      if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n    },\n    point: function(x, y) {\n      x = +x, y = +y;\n      switch (this._point) {\n        case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n        case 1: this._point = 2; // proceed\n        default: {\n          if (this._t <= 0) {\n            this._context.lineTo(this._x, y);\n            this._context.lineTo(x, y);\n          } else {\n            var x1 = this._x * (1 - this._t) + x * this._t;\n            this._context.lineTo(x1, this._y);\n            this._context.lineTo(x1, y);\n          }\n          break;\n        }\n      }\n      this._x = x, this._y = y;\n    }\n  };\n\n  function step(context) {\n    return new Step(context, 0.5);\n  }\n\n  function stepBefore(context) {\n    return new Step(context, 0);\n  }\n\n  function stepAfter(context) {\n    return new Step(context, 1);\n  }\n\n  var slice$2 = Array.prototype.slice;\n\n  function none(series, order) {\n    if (!((n = series.length) > 1)) return;\n    for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n      s0 = s1, s1 = series[order[i]];\n      for (var j = 0; j < m; ++j) {\n        s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n      }\n    }\n  }\n\n  function none$1(series) {\n    var n = series.length, o = new Array(n);\n    while (--n >= 0) o[n] = n;\n    return o;\n  }\n\n  function stackValue(d, key) {\n    return d[key];\n  }\n\n  function stack() {\n    var keys = constant$1([]),\n        order = none$1,\n        offset = none,\n        value = stackValue;\n\n    function stack(data) {\n      var kz = keys.apply(this, arguments),\n          i,\n          m = data.length,\n          n = kz.length,\n          sz = new Array(n),\n          oz;\n\n      for (i = 0; i < n; ++i) {\n        for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n          si[j] = sij = [0, +value(data[j], ki, j, data)];\n          sij.data = data[j];\n        }\n        si.key = ki;\n      }\n\n      for (i = 0, oz = order(sz); i < n; ++i) {\n        sz[oz[i]].index = i;\n      }\n\n      offset(sz, oz);\n      return sz;\n    }\n\n    stack.keys = function(_) {\n      return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant$1(slice$2.call(_)), stack) : keys;\n    };\n\n    stack.value = function(_) {\n      return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), stack) : value;\n    };\n\n    stack.order = function(_) {\n      return arguments.length ? (order = _ == null ? none$1 : typeof _ === \"function\" ? _ : constant$1(slice$2.call(_)), stack) : order;\n    };\n\n    stack.offset = function(_) {\n      return arguments.length ? (offset = _ == null ? none : _, stack) : offset;\n    };\n\n    return stack;\n  }\n\n  function expand(series, order) {\n    if (!((n = series.length) > 0)) return;\n    for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n      for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n      if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n    }\n    none(series, order);\n  }\n\n  function silhouette(series, order) {\n    if (!((n = series.length) > 0)) return;\n    for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n      for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n      s0[j][1] += s0[j][0] = -y / 2;\n    }\n    none(series, order);\n  }\n\n  function wiggle(series, order) {\n    if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n    for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n      for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n        var si = series[order[i]],\n            sij0 = si[j][1] || 0,\n            sij1 = si[j - 1][1] || 0,\n            s3 = (sij0 - sij1) / 2;\n        for (var k = 0; k < i; ++k) {\n          var sk = series[order[k]],\n              skj0 = sk[j][1] || 0,\n              skj1 = sk[j - 1][1] || 0;\n          s3 += skj0 - skj1;\n        }\n        s1 += sij0, s2 += s3 * sij0;\n      }\n      s0[j - 1][1] += s0[j - 1][0] = y;\n      if (s1) y -= s2 / s1;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    none(series, order);\n  }\n\n  function ascending$1(series) {\n    var sums = series.map(sum$1);\n    return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });\n  }\n\n  function sum$1(series) {\n    var s = 0, i = -1, n = series.length, v;\n    while (++i < n) if (v = +series[i][1]) s += v;\n    return s;\n  }\n\n  function descending$2(series) {\n    return ascending$1(series).reverse();\n  }\n\n  function insideOut(series) {\n    var n = series.length,\n        i,\n        j,\n        sums = series.map(sum$1),\n        order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),\n        top = 0,\n        bottom = 0,\n        tops = [],\n        bottoms = [];\n\n    for (i = 0; i < n; ++i) {\n      j = order[i];\n      if (top < bottom) {\n        top += sums[j];\n        tops.push(j);\n      } else {\n        bottom += sums[j];\n        bottoms.push(j);\n      }\n    }\n\n    return bottoms.reverse().concat(tops);\n  }\n\n  function reverse(series) {\n    return none$1(series).reverse();\n  }\n\n  function define(constructor, factory, prototype) {\n    constructor.prototype = factory.prototype = prototype;\n    prototype.constructor = constructor;\n  }\n\n  function extend(parent, definition) {\n    var prototype = Object.create(parent.prototype);\n    for (var key in definition) prototype[key] = definition[key];\n    return prototype;\n  }\n\n  function Color() {}\n\n  var darker = 0.7;\n  var brighter = 1 / darker;\n\n  var reHex3 = /^#([0-9a-f]{3})$/;\n  var reHex6 = /^#([0-9a-f]{6})$/;\n  var reRgbInteger = /^rgb\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*\\)$/;\n  var reRgbPercent = /^rgb\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n  var reRgbaInteger = /^rgba\\(\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var reRgbaPercent = /^rgba\\(\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var reHslPercent = /^hsl\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n  var reHslaPercent = /^hsla\\(\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)%\\s*,\\s*([-+]?\\d+(?:\\.\\d+)?)\\s*\\)$/;\n  var named = {\n    aliceblue: 0xf0f8ff,\n    antiquewhite: 0xfaebd7,\n    aqua: 0x00ffff,\n    aquamarine: 0x7fffd4,\n    azure: 0xf0ffff,\n    beige: 0xf5f5dc,\n    bisque: 0xffe4c4,\n    black: 0x000000,\n    blanchedalmond: 0xffebcd,\n    blue: 0x0000ff,\n    blueviolet: 0x8a2be2,\n    brown: 0xa52a2a,\n    burlywood: 0xdeb887,\n    cadetblue: 0x5f9ea0,\n    chartreuse: 0x7fff00,\n    chocolate: 0xd2691e,\n    coral: 0xff7f50,\n    cornflowerblue: 0x6495ed,\n    cornsilk: 0xfff8dc,\n    crimson: 0xdc143c,\n    cyan: 0x00ffff,\n    darkblue: 0x00008b,\n    darkcyan: 0x008b8b,\n    darkgoldenrod: 0xb8860b,\n    darkgray: 0xa9a9a9,\n    darkgreen: 0x006400,\n    darkgrey: 0xa9a9a9,\n    darkkhaki: 0xbdb76b,\n    darkmagenta: 0x8b008b,\n    darkolivegreen: 0x556b2f,\n    darkorange: 0xff8c00,\n    darkorchid: 0x9932cc,\n    darkred: 0x8b0000,\n    darksalmon: 0xe9967a,\n    darkseagreen: 0x8fbc8f,\n    darkslateblue: 0x483d8b,\n    darkslategray: 0x2f4f4f,\n    darkslategrey: 0x2f4f4f,\n    darkturquoise: 0x00ced1,\n    darkviolet: 0x9400d3,\n    deeppink: 0xff1493,\n    deepskyblue: 0x00bfff,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1e90ff,\n    firebrick: 0xb22222,\n    floralwhite: 0xfffaf0,\n    forestgreen: 0x228b22,\n    fuchsia: 0xff00ff,\n    gainsboro: 0xdcdcdc,\n    ghostwhite: 0xf8f8ff,\n    gold: 0xffd700,\n    goldenrod: 0xdaa520,\n    gray: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xadff2f,\n    grey: 0x808080,\n    honeydew: 0xf0fff0,\n    hotpink: 0xff69b4,\n    indianred: 0xcd5c5c,\n    indigo: 0x4b0082,\n    ivory: 0xfffff0,\n    khaki: 0xf0e68c,\n    lavender: 0xe6e6fa,\n    lavenderblush: 0xfff0f5,\n    lawngreen: 0x7cfc00,\n    lemonchiffon: 0xfffacd,\n    lightblue: 0xadd8e6,\n    lightcoral: 0xf08080,\n    lightcyan: 0xe0ffff,\n    lightgoldenrodyellow: 0xfafad2,\n    lightgray: 0xd3d3d3,\n    lightgreen: 0x90ee90,\n    lightgrey: 0xd3d3d3,\n    lightpink: 0xffb6c1,\n    lightsalmon: 0xffa07a,\n    lightseagreen: 0x20b2aa,\n    lightskyblue: 0x87cefa,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xb0c4de,\n    lightyellow: 0xffffe0,\n    lime: 0x00ff00,\n    limegreen: 0x32cd32,\n    linen: 0xfaf0e6,\n    magenta: 0xff00ff,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66cdaa,\n    mediumblue: 0x0000cd,\n    mediumorchid: 0xba55d3,\n    mediumpurple: 0x9370db,\n    mediumseagreen: 0x3cb371,\n    mediumslateblue: 0x7b68ee,\n    mediumspringgreen: 0x00fa9a,\n    mediumturquoise: 0x48d1cc,\n    mediumvioletred: 0xc71585,\n    midnightblue: 0x191970,\n    mintcream: 0xf5fffa,\n    mistyrose: 0xffe4e1,\n    moccasin: 0xffe4b5,\n    navajowhite: 0xffdead,\n    navy: 0x000080,\n    oldlace: 0xfdf5e6,\n    olive: 0x808000,\n    olivedrab: 0x6b8e23,\n    orange: 0xffa500,\n    orangered: 0xff4500,\n    orchid: 0xda70d6,\n    palegoldenrod: 0xeee8aa,\n    palegreen: 0x98fb98,\n    paleturquoise: 0xafeeee,\n    palevioletred: 0xdb7093,\n    papayawhip: 0xffefd5,\n    peachpuff: 0xffdab9,\n    peru: 0xcd853f,\n    pink: 0xffc0cb,\n    plum: 0xdda0dd,\n    powderblue: 0xb0e0e6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xff0000,\n    rosybrown: 0xbc8f8f,\n    royalblue: 0x4169e1,\n    saddlebrown: 0x8b4513,\n    salmon: 0xfa8072,\n    sandybrown: 0xf4a460,\n    seagreen: 0x2e8b57,\n    seashell: 0xfff5ee,\n    sienna: 0xa0522d,\n    silver: 0xc0c0c0,\n    skyblue: 0x87ceeb,\n    slateblue: 0x6a5acd,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xfffafa,\n    springgreen: 0x00ff7f,\n    steelblue: 0x4682b4,\n    tan: 0xd2b48c,\n    teal: 0x008080,\n    thistle: 0xd8bfd8,\n    tomato: 0xff6347,\n    turquoise: 0x40e0d0,\n    violet: 0xee82ee,\n    wheat: 0xf5deb3,\n    white: 0xffffff,\n    whitesmoke: 0xf5f5f5,\n    yellow: 0xffff00,\n    yellowgreen: 0x9acd32\n  };\n\n  define(Color, color, {\n    displayable: function() {\n      return this.rgb().displayable();\n    },\n    toString: function() {\n      return this.rgb() + \"\";\n    }\n  });\n\n  function color(format) {\n    var m;\n    format = (format + \"\").trim().toLowerCase();\n    return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n        : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n        : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n        : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n        : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n        : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n        : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n        : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n        : named.hasOwnProperty(format) ? rgbn(named[format])\n        : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n        : null;\n  }\n\n  function rgbn(n) {\n    return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n  }\n\n  function rgba(r, g, b, a) {\n    if (a <= 0) r = g = b = NaN;\n    return new Rgb(r, g, b, a);\n  }\n\n  function rgbConvert(o) {\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Rgb;\n    o = o.rgb();\n    return new Rgb(o.r, o.g, o.b, o.opacity);\n  }\n\n  function colorRgb(r, g, b, opacity) {\n    return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n  }\n\n  function Rgb(r, g, b, opacity) {\n    this.r = +r;\n    this.g = +g;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Rgb, colorRgb, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n    },\n    rgb: function() {\n      return this;\n    },\n    displayable: function() {\n      return (0 <= this.r && this.r <= 255)\n          && (0 <= this.g && this.g <= 255)\n          && (0 <= this.b && this.b <= 255)\n          && (0 <= this.opacity && this.opacity <= 1);\n    },\n    toString: function() {\n      var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n      return (a === 1 ? \"rgb(\" : \"rgba(\")\n          + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n          + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n          + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n          + (a === 1 ? \")\" : \", \" + a + \")\");\n    }\n  }));\n\n  function hsla(h, s, l, a) {\n    if (a <= 0) h = s = l = NaN;\n    else if (l <= 0 || l >= 1) h = s = NaN;\n    else if (s <= 0) h = NaN;\n    return new Hsl(h, s, l, a);\n  }\n\n  function hslConvert(o) {\n    if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Color)) o = color(o);\n    if (!o) return new Hsl;\n    if (o instanceof Hsl) return o;\n    o = o.rgb();\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        min = Math.min(r, g, b),\n        max = Math.max(r, g, b),\n        h = NaN,\n        s = max - min,\n        l = (max + min) / 2;\n    if (s) {\n      if (r === max) h = (g - b) / s + (g < b) * 6;\n      else if (g === max) h = (b - r) / s + 2;\n      else h = (r - g) / s + 4;\n      s /= l < 0.5 ? max + min : 2 - max - min;\n      h *= 60;\n    } else {\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new Hsl(h, s, l, o.opacity);\n  }\n\n  function colorHsl(h, s, l, opacity) {\n    return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hsl(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hsl, colorHsl, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Hsl(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = this.h % 360 + (this.h < 0) * 360,\n          s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n          l = this.l,\n          m2 = l + (l < 0.5 ? l : 1 - l) * s,\n          m1 = 2 * l - m2;\n      return new Rgb(\n        hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n        hsl2rgb(h, m1, m2),\n        hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n        this.opacity\n      );\n    },\n    displayable: function() {\n      return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n          && (0 <= this.l && this.l <= 1)\n          && (0 <= this.opacity && this.opacity <= 1);\n    }\n  }));\n\n  /* From FvD 13.37, CSS Color Module Level 3 */\n  function hsl2rgb(h, m1, m2) {\n    return (h < 60 ? m1 + (m2 - m1) * h / 60\n        : h < 180 ? m2\n        : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n        : m1) * 255;\n  }\n\n  var deg2rad = Math.PI / 180;\n  var rad2deg = 180 / Math.PI;\n\n  var Kn = 18;\n  var Xn = 0.950470;\n  var Yn = 1;\n  var Zn = 1.088830;\n  var t0 = 4 / 29;\n  var t1 = 6 / 29;\n  var t2 = 3 * t1 * t1;\n  var t3 = t1 * t1 * t1;\n  function labConvert(o) {\n    if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n    if (o instanceof Hcl) {\n      var h = o.h * deg2rad;\n      return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n    }\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var b = rgb2xyz(o.r),\n        a = rgb2xyz(o.g),\n        l = rgb2xyz(o.b),\n        x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n        y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n        z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n    return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n  }\n\n  function lab(l, a, b, opacity) {\n    return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n  }\n\n  function Lab(l, a, b, opacity) {\n    this.l = +l;\n    this.a = +a;\n    this.b = +b;\n    this.opacity = +opacity;\n  }\n\n  define(Lab, lab, extend(Color, {\n    brighter: function(k) {\n      return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    darker: function(k) {\n      return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n    },\n    rgb: function() {\n      var y = (this.l + 16) / 116,\n          x = isNaN(this.a) ? y : y + this.a / 500,\n          z = isNaN(this.b) ? y : y - this.b / 200;\n      y = Yn * lab2xyz(y);\n      x = Xn * lab2xyz(x);\n      z = Zn * lab2xyz(z);\n      return new Rgb(\n        xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n        xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n        xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n        this.opacity\n      );\n    }\n  }));\n\n  function xyz2lab(t) {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n  }\n\n  function lab2xyz(t) {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n  }\n\n  function xyz2rgb(x) {\n    return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n  }\n\n  function rgb2xyz(x) {\n    return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n  }\n\n  function hclConvert(o) {\n    if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n    if (!(o instanceof Lab)) o = labConvert(o);\n    var h = Math.atan2(o.b, o.a) * rad2deg;\n    return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n  }\n\n  function colorHcl(h, c, l, opacity) {\n    return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n  }\n\n  function Hcl(h, c, l, opacity) {\n    this.h = +h;\n    this.c = +c;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Hcl, colorHcl, extend(Color, {\n    brighter: function(k) {\n      return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n    },\n    darker: function(k) {\n      return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n    },\n    rgb: function() {\n      return labConvert(this).rgb();\n    }\n  }));\n\n  var A = -0.14861;\n  var B = +1.78277;\n  var C = -0.29227;\n  var D = -0.90649;\n  var E = +1.97294;\n  var ED = E * D;\n  var EB = E * B;\n  var BC_DA = B * C - D * A;\n  function cubehelixConvert(o) {\n    if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n    if (!(o instanceof Rgb)) o = rgbConvert(o);\n    var r = o.r / 255,\n        g = o.g / 255,\n        b = o.b / 255,\n        l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n        bl = b - l,\n        k = (E * (g - l) - C * bl) / D,\n        s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n        h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n    return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n  }\n\n  function cubehelix(h, s, l, opacity) {\n    return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n  }\n\n  function Cubehelix(h, s, l, opacity) {\n    this.h = +h;\n    this.s = +s;\n    this.l = +l;\n    this.opacity = +opacity;\n  }\n\n  define(Cubehelix, cubehelix, extend(Color, {\n    brighter: function(k) {\n      k = k == null ? brighter : Math.pow(brighter, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    darker: function(k) {\n      k = k == null ? darker : Math.pow(darker, k);\n      return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n    },\n    rgb: function() {\n      var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n          l = +this.l,\n          a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n          cosh = Math.cos(h),\n          sinh = Math.sin(h);\n      return new Rgb(\n        255 * (l + a * (A * cosh + B * sinh)),\n        255 * (l + a * (C * cosh + D * sinh)),\n        255 * (l + a * (E * cosh)),\n        this.opacity\n      );\n    }\n  }));\n\n  function basis$1(t1, v0, v1, v2, v3) {\n    var t2 = t1 * t1, t3 = t2 * t1;\n    return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n        + (4 - 6 * t2 + 3 * t3) * v1\n        + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n        + t3 * v3) / 6;\n  }\n\n  function basis$2(values) {\n    var n = values.length - 1;\n    return function(t) {\n      var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n          v1 = values[i],\n          v2 = values[i + 1],\n          v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n          v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n      return basis$1((t - i / n) * n, v0, v1, v2, v3);\n    };\n  }\n\n  function basisClosed$1(values) {\n    var n = values.length;\n    return function(t) {\n      var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n          v0 = values[(i + n - 1) % n],\n          v1 = values[i % n],\n          v2 = values[(i + 1) % n],\n          v3 = values[(i + 2) % n];\n      return basis$1((t - i / n) * n, v0, v1, v2, v3);\n    };\n  }\n\n  function constant$2(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function linear$1(a, d) {\n    return function(t) {\n      return a + t * d;\n    };\n  }\n\n  function exponential$1(a, b, y) {\n    return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n      return Math.pow(a + t * b, y);\n    };\n  }\n\n  function hue(a, b) {\n    var d = b - a;\n    return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$2(isNaN(a) ? b : a);\n  }\n\n  function gamma(y) {\n    return (y = +y) === 1 ? nogamma : function(a, b) {\n      return b - a ? exponential$1(a, b, y) : constant$2(isNaN(a) ? b : a);\n    };\n  }\n\n  function nogamma(a, b) {\n    var d = b - a;\n    return d ? linear$1(a, d) : constant$2(isNaN(a) ? b : a);\n  }\n\n  var interpolateRgb = (function rgbGamma(y) {\n    var color = gamma(y);\n\n    function rgb(start, end) {\n      var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n          g = color(start.g, end.g),\n          b = color(start.b, end.b),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.r = r(t);\n        start.g = g(t);\n        start.b = b(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    rgb.gamma = rgbGamma;\n\n    return rgb;\n  })(1);\n\n  function rgbSpline(spline) {\n    return function(colors) {\n      var n = colors.length,\n          r = new Array(n),\n          g = new Array(n),\n          b = new Array(n),\n          i, color;\n      for (i = 0; i < n; ++i) {\n        color = colorRgb(colors[i]);\n        r[i] = color.r || 0;\n        g[i] = color.g || 0;\n        b[i] = color.b || 0;\n      }\n      r = spline(r);\n      g = spline(g);\n      b = spline(b);\n      color.opacity = 1;\n      return function(t) {\n        color.r = r(t);\n        color.g = g(t);\n        color.b = b(t);\n        return color + \"\";\n      };\n    };\n  }\n\n  var rgbBasis = rgbSpline(basis$2);\n  var rgbBasisClosed = rgbSpline(basisClosed$1);\n\n  function array$1(a, b) {\n    var nb = b ? b.length : 0,\n        na = a ? Math.min(nb, a.length) : 0,\n        x = new Array(nb),\n        c = new Array(nb),\n        i;\n\n    for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n    for (; i < nb; ++i) c[i] = b[i];\n\n    return function(t) {\n      for (i = 0; i < na; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n\n  function date(a, b) {\n    var d = new Date;\n    return a = +a, b -= a, function(t) {\n      return d.setTime(a + b * t), d;\n    };\n  }\n\n  function interpolateNumber(a, b) {\n    return a = +a, b -= a, function(t) {\n      return a + b * t;\n    };\n  }\n\n  function object(a, b) {\n    var i = {},\n        c = {},\n        k;\n\n    if (a === null || typeof a !== \"object\") a = {};\n    if (b === null || typeof b !== \"object\") b = {};\n\n    for (k in b) {\n      if (k in a) {\n        i[k] = interpolate(a[k], b[k]);\n      } else {\n        c[k] = b[k];\n      }\n    }\n\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n\n  var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\n  var reB = new RegExp(reA.source, \"g\");\n  function zero(b) {\n    return function() {\n      return b;\n    };\n  }\n\n  function one(b) {\n    return function(t) {\n      return b(t) + \"\";\n    };\n  }\n\n  function interpolateString(a, b) {\n    var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n        am, // current match in a\n        bm, // current match in b\n        bs, // string preceding current number in b, if any\n        i = -1, // index in s\n        s = [], // string constants and placeholders\n        q = []; // number interpolators\n\n    // Coerce inputs to strings.\n    a = a + \"\", b = b + \"\";\n\n    // Interpolate pairs of numbers in a & b.\n    while ((am = reA.exec(a))\n        && (bm = reB.exec(b))) {\n      if ((bs = bm.index) > bi) { // a string precedes the next number in b\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; // coalesce with previous string\n        else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n        if (s[i]) s[i] += bm; // coalesce with previous string\n        else s[++i] = bm;\n      } else { // interpolate non-matching numbers\n        s[++i] = null;\n        q.push({i: i, x: interpolateNumber(am, bm)});\n      }\n      bi = reB.lastIndex;\n    }\n\n    // Add remains of b.\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n\n    // Special optimization for only a single match.\n    // Otherwise, interpolate each of the numbers and rejoin the string.\n    return s.length < 2 ? (q[0]\n        ? one(q[0].x)\n        : zero(b))\n        : (b = q.length, function(t) {\n            for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n            return s.join(\"\");\n          });\n  }\n\n  function interpolate(a, b) {\n    var t = typeof b, c;\n    return b == null || t === \"boolean\" ? constant$2(b)\n        : (t === \"number\" ? interpolateNumber\n        : t === \"string\" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)\n        : b instanceof color ? interpolateRgb\n        : b instanceof Date ? date\n        : Array.isArray(b) ? array$1\n        : isNaN(b) ? object\n        : interpolateNumber)(a, b);\n  }\n\n  function interpolateRound(a, b) {\n    return a = +a, b -= a, function(t) {\n      return Math.round(a + b * t);\n    };\n  }\n\n  var degrees = 180 / Math.PI;\n\n  var identity$2 = {\n    translateX: 0,\n    translateY: 0,\n    rotate: 0,\n    skewX: 0,\n    scaleX: 1,\n    scaleY: 1\n  };\n\n  function decompose(a, b, c, d, e, f) {\n    var scaleX, scaleY, skewX;\n    if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n    if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n    if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n    if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n    return {\n      translateX: e,\n      translateY: f,\n      rotate: Math.atan2(b, a) * degrees,\n      skewX: Math.atan(skewX) * degrees,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n\n  var cssNode;\n  var cssRoot;\n  var cssView;\n  var svgNode;\n  function parseCss(value) {\n    if (value === \"none\") return identity$2;\n    if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n    cssNode.style.transform = value;\n    value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n    cssRoot.removeChild(cssNode);\n    value = value.slice(7, -1).split(\",\");\n    return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n  }\n\n  function parseSvg(value) {\n    if (value == null) return identity$2;\n    if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    svgNode.setAttribute(\"transform\", value);\n    if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;\n    value = value.matrix;\n    return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n  }\n\n  function interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n    function pop(s) {\n      return s.length ? s.pop() + \" \" : \"\";\n    }\n\n    function translate(xa, ya, xb, yb, s, q) {\n      if (xa !== xb || ya !== yb) {\n        var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n        q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n      } else if (xb || yb) {\n        s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n      }\n    }\n\n    function rotate(a, b, s, q) {\n      if (a !== b) {\n        if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n        q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n      } else if (b) {\n        s.push(pop(s) + \"rotate(\" + b + degParen);\n      }\n    }\n\n    function skewX(a, b, s, q) {\n      if (a !== b) {\n        q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n      } else if (b) {\n        s.push(pop(s) + \"skewX(\" + b + degParen);\n      }\n    }\n\n    function scale(xa, ya, xb, yb, s, q) {\n      if (xa !== xb || ya !== yb) {\n        var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n        q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n      } else if (xb !== 1 || yb !== 1) {\n        s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n      }\n    }\n\n    return function(a, b) {\n      var s = [], // string constants and placeholders\n          q = []; // number interpolators\n      a = parse(a), b = parse(b);\n      translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n      rotate(a.rotate, b.rotate, s, q);\n      skewX(a.skewX, b.skewX, s, q);\n      scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n      a = b = null; // gc\n      return function(t) {\n        var i = -1, n = q.length, o;\n        while (++i < n) s[(o = q[i]).i] = o.x(t);\n        return s.join(\"\");\n      };\n    };\n  }\n\n  var interpolateTransform$1 = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\n  var interpolateTransform$2 = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\n  var rho = Math.SQRT2;\n  var rho2 = 2;\n  var rho4 = 4;\n  var epsilon2 = 1e-12;\n  function cosh(x) {\n    return ((x = Math.exp(x)) + 1 / x) / 2;\n  }\n\n  function sinh(x) {\n    return ((x = Math.exp(x)) - 1 / x) / 2;\n  }\n\n  function tanh(x) {\n    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n  }\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function interpolateZoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000;\n\n    return i;\n  }\n\n  function hsl(hue) {\n    return function(start, end) {\n      var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n          s = nogamma(start.s, end.s),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n  }\n\n  var hsl$1 = hsl(hue);\n  var hslLong = hsl(nogamma);\n\n  function lab$1(start, end) {\n    var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n        a = nogamma(start.a, end.a),\n        b = nogamma(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.l = l(t);\n      start.a = a(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  function hcl(hue) {\n    return function(start, end) {\n      var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n          c = nogamma(start.c, end.c),\n          l = nogamma(start.l, end.l),\n          opacity = nogamma(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.c = c(t);\n        start.l = l(t);\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n  }\n\n  var hcl$1 = hcl(hue);\n  var hclLong = hcl(nogamma);\n\n  function cubehelix$1(hue) {\n    return (function cubehelixGamma(y) {\n      y = +y;\n\n      function cubehelix$$(start, end) {\n        var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),\n            s = nogamma(start.s, end.s),\n            l = nogamma(start.l, end.l),\n            opacity = nogamma(start.opacity, end.opacity);\n        return function(t) {\n          start.h = h(t);\n          start.s = s(t);\n          start.l = l(Math.pow(t, y));\n          start.opacity = opacity(t);\n          return start + \"\";\n        };\n      }\n\n      cubehelix$$.gamma = cubehelixGamma;\n\n      return cubehelix$$;\n    })(1);\n  }\n\n  var cubehelix$2 = cubehelix$1(hue);\n  var interpolateCubehelixLong = cubehelix$1(nogamma);\n\n  function quantize(interpolator, n) {\n    var samples = new Array(n);\n    for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n    return samples;\n  }\n\n  var noop$1 = {value: function() {}};\n\n  function dispatch() {\n    for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n      if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n      _[t] = [];\n    }\n    return new Dispatch(_);\n  }\n\n  function Dispatch(_) {\n    this._ = _;\n  }\n\n  function parseTypenames(typenames, types) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n      return {type: t, name: name};\n    });\n  }\n\n  Dispatch.prototype = dispatch.prototype = {\n    constructor: Dispatch,\n    on: function(typename, callback) {\n      var _ = this._,\n          T = parseTypenames(typename + \"\", _),\n          t,\n          i = -1,\n          n = T.length;\n\n      // If no callback was specified, return the callback of the given type and name.\n      if (arguments.length < 2) {\n        while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n        return;\n      }\n\n      // If a type was specified, set the callback for the given type and name.\n      // Otherwise, if a null callback was specified, remove callbacks of the given name.\n      if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n      while (++i < n) {\n        if (t = (typename = T[i]).type) _[t] = set$1(_[t], typename.name, callback);\n        else if (callback == null) for (t in _) _[t] = set$1(_[t], typename.name, null);\n      }\n\n      return this;\n    },\n    copy: function() {\n      var copy = {}, _ = this._;\n      for (var t in _) copy[t] = _[t].slice();\n      return new Dispatch(copy);\n    },\n    call: function(type, that) {\n      if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    },\n    apply: function(type, that, args) {\n      if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n      for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n    }\n  };\n\n  function get(type, name) {\n    for (var i = 0, n = type.length, c; i < n; ++i) {\n      if ((c = type[i]).name === name) {\n        return c.value;\n      }\n    }\n  }\n\n  function set$1(type, name, callback) {\n    for (var i = 0, n = type.length; i < n; ++i) {\n      if (type[i].name === name) {\n        type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));\n        break;\n      }\n    }\n    if (callback != null) type.push({name: name, value: callback});\n    return type;\n  }\n\n  function objectConverter(columns) {\n    return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n      return JSON.stringify(name) + \": d[\" + i + \"]\";\n    }).join(\",\") + \"}\");\n  }\n\n  function customConverter(columns, f) {\n    var object = objectConverter(columns);\n    return function(row, i) {\n      return f(object(row), i, columns);\n    };\n  }\n\n  // Compute unique columns in order of discovery.\n  function inferColumns(rows) {\n    var columnSet = Object.create(null),\n        columns = [];\n\n    rows.forEach(function(row) {\n      for (var column in row) {\n        if (!(column in columnSet)) {\n          columns.push(columnSet[column] = column);\n        }\n      }\n    });\n\n    return columns;\n  }\n\n  function dsv(delimiter) {\n    var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n]\"),\n        delimiterCode = delimiter.charCodeAt(0);\n\n    function parse(text, f) {\n      var convert, columns, rows = parseRows(text, function(row, i) {\n        if (convert) return convert(row, i - 1);\n        columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n      });\n      rows.columns = columns;\n      return rows;\n    }\n\n    function parseRows(text, f) {\n      var EOL = {}, // sentinel value for end-of-line\n          EOF = {}, // sentinel value for end-of-file\n          rows = [], // output rows\n          N = text.length,\n          I = 0, // current character index\n          n = 0, // the current line number\n          t, // the current token\n          eol; // is the current token followed by EOL?\n\n      function token() {\n        if (I >= N) return EOF; // special case: end of file\n        if (eol) return eol = false, EOL; // special case: end of line\n\n        // special case: quotes\n        var j = I, c;\n        if (text.charCodeAt(j) === 34) {\n          var i = j;\n          while (i++ < N) {\n            if (text.charCodeAt(i) === 34) {\n              if (text.charCodeAt(i + 1) !== 34) break;\n              ++i;\n            }\n          }\n          I = i + 2;\n          c = text.charCodeAt(i + 1);\n          if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(i + 2) === 10) ++I;\n          } else if (c === 10) {\n            eol = true;\n          }\n          return text.slice(j + 1, i).replace(/\"\"/g, \"\\\"\");\n        }\n\n        // common case: find next delimiter or newline\n        while (I < N) {\n          var k = 1;\n          c = text.charCodeAt(I++);\n          if (c === 10) eol = true; // \\n\n          else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \\r|\\r\\n\n          else if (c !== delimiterCode) continue;\n          return text.slice(j, I - k);\n        }\n\n        // special case: last token before EOF\n        return text.slice(j);\n      }\n\n      while ((t = token()) !== EOF) {\n        var a = [];\n        while (t !== EOL && t !== EOF) {\n          a.push(t);\n          t = token();\n        }\n        if (f && (a = f(a, n++)) == null) continue;\n        rows.push(a);\n      }\n\n      return rows;\n    }\n\n    function format(rows, columns) {\n      if (columns == null) columns = inferColumns(rows);\n      return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n        return columns.map(function(column) {\n          return formatValue(row[column]);\n        }).join(delimiter);\n      })).join(\"\\n\");\n    }\n\n    function formatRows(rows) {\n      return rows.map(formatRow).join(\"\\n\");\n    }\n\n    function formatRow(row) {\n      return row.map(formatValue).join(delimiter);\n    }\n\n    function formatValue(text) {\n      return text == null ? \"\"\n          : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\\\"/g, \"\\\"\\\"\") + \"\\\"\"\n          : text;\n    }\n\n    return {\n      parse: parse,\n      parseRows: parseRows,\n      format: format,\n      formatRows: formatRows\n    };\n  }\n\n  var csv = dsv(\",\");\n\n  var csvParse = csv.parse;\n  var csvParseRows = csv.parseRows;\n  var csvFormat = csv.format;\n  var csvFormatRows = csv.formatRows;\n\n  var tsv = dsv(\"\\t\");\n\n  var tsvParse = tsv.parse;\n  var tsvParseRows = tsv.parseRows;\n  var tsvFormat = tsv.format;\n  var tsvFormatRows = tsv.formatRows;\n\n  function request(url, callback) {\n    var request,\n        event = dispatch(\"beforesend\", \"progress\", \"load\", \"error\"),\n        mimeType,\n        headers = map$1(),\n        xhr = new XMLHttpRequest,\n        user = null,\n        password = null,\n        response,\n        responseType,\n        timeout = 0;\n\n    // If IE does not support CORS, use XDomainRequest.\n    if (typeof XDomainRequest !== \"undefined\"\n        && !(\"withCredentials\" in xhr)\n        && /^(http(s)?:)?\\/\\//.test(url)) xhr = new XDomainRequest;\n\n    \"onload\" in xhr\n        ? xhr.onload = xhr.onerror = xhr.ontimeout = respond\n        : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };\n\n    function respond(o) {\n      var status = xhr.status, result;\n      if (!status && hasResponse(xhr)\n          || status >= 200 && status < 300\n          || status === 304) {\n        if (response) {\n          try {\n            result = response.call(request, xhr);\n          } catch (e) {\n            event.call(\"error\", request, e);\n            return;\n          }\n        } else {\n          result = xhr;\n        }\n        event.call(\"load\", request, result);\n      } else {\n        event.call(\"error\", request, o);\n      }\n    }\n\n    xhr.onprogress = function(e) {\n      event.call(\"progress\", request, e);\n    };\n\n    request = {\n      header: function(name, value) {\n        name = (name + \"\").toLowerCase();\n        if (arguments.length < 2) return headers.get(name);\n        if (value == null) headers.remove(name);\n        else headers.set(name, value + \"\");\n        return request;\n      },\n\n      // If mimeType is non-null and no Accept header is set, a default is used.\n      mimeType: function(value) {\n        if (!arguments.length) return mimeType;\n        mimeType = value == null ? null : value + \"\";\n        return request;\n      },\n\n      // Specifies what type the response value should take;\n      // for instance, arraybuffer, blob, document, or text.\n      responseType: function(value) {\n        if (!arguments.length) return responseType;\n        responseType = value;\n        return request;\n      },\n\n      timeout: function(value) {\n        if (!arguments.length) return timeout;\n        timeout = +value;\n        return request;\n      },\n\n      user: function(value) {\n        return arguments.length < 1 ? user : (user = value == null ? null : value + \"\", request);\n      },\n\n      password: function(value) {\n        return arguments.length < 1 ? password : (password = value == null ? null : value + \"\", request);\n      },\n\n      // Specify how to convert the response content to a specific type;\n      // changes the callback value on \"load\" events.\n      response: function(value) {\n        response = value;\n        return request;\n      },\n\n      // Alias for send(\"GET\", …).\n      get: function(data, callback) {\n        return request.send(\"GET\", data, callback);\n      },\n\n      // Alias for send(\"POST\", …).\n      post: function(data, callback) {\n        return request.send(\"POST\", data, callback);\n      },\n\n      // If callback is non-null, it will be used for error and load events.\n      send: function(method, data, callback) {\n        xhr.open(method, url, true, user, password);\n        if (mimeType != null && !headers.has(\"accept\")) headers.set(\"accept\", mimeType + \",*/*\");\n        if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });\n        if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);\n        if (responseType != null) xhr.responseType = responseType;\n        if (timeout > 0) xhr.timeout = timeout;\n        if (callback == null && typeof data === \"function\") callback = data, data = null;\n        if (callback != null && callback.length === 1) callback = fixCallback(callback);\n        if (callback != null) request.on(\"error\", callback).on(\"load\", function(xhr) { callback(null, xhr); });\n        event.call(\"beforesend\", request, xhr);\n        xhr.send(data == null ? null : data);\n        return request;\n      },\n\n      abort: function() {\n        xhr.abort();\n        return request;\n      },\n\n      on: function() {\n        var value = event.on.apply(event, arguments);\n        return value === event ? request : value;\n      }\n    };\n\n    if (callback != null) {\n      if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n      return request.get(callback);\n    }\n\n    return request;\n  }\n\n  function fixCallback(callback) {\n    return function(error, xhr) {\n      callback(error == null ? xhr : null);\n    };\n  }\n\n  function hasResponse(xhr) {\n    var type = xhr.responseType;\n    return type && type !== \"text\"\n        ? xhr.response // null on error\n        : xhr.responseText; // \"\" on error\n  }\n\n  function type(defaultMimeType, response) {\n    return function(url, callback) {\n      var r = request(url).mimeType(defaultMimeType).response(response);\n      if (callback != null) {\n        if (typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n        return r.get(callback);\n      }\n      return r;\n    };\n  }\n\n  var html = type(\"text/html\", function(xhr) {\n    return document.createRange().createContextualFragment(xhr.responseText);\n  });\n\n  var json = type(\"application/json\", function(xhr) {\n    return JSON.parse(xhr.responseText);\n  });\n\n  var text = type(\"text/plain\", function(xhr) {\n    return xhr.responseText;\n  });\n\n  var xml = type(\"application/xml\", function(xhr) {\n    var xml = xhr.responseXML;\n    if (!xml) throw new Error(\"parse error\");\n    return xml;\n  });\n\n  function dsv$1(defaultMimeType, parse) {\n    return function(url, row, callback) {\n      if (arguments.length < 3) callback = row, row = null;\n      var r = request(url).mimeType(defaultMimeType);\n      r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };\n      r.row(row);\n      return callback ? r.get(callback) : r;\n    };\n  }\n\n  function responseOf(parse, row) {\n    return function(request) {\n      return parse(request.responseText, row);\n    };\n  }\n\n  var csv$1 = dsv$1(\"text/csv\", csvParse);\n\n  var tsv$1 = dsv$1(\"text/tab-separated-values\", tsvParse);\n\n  var frame = 0;\n  var timeout = 0;\n  var interval = 0;\n  var pokeDelay = 1000;\n  var taskHead;\n  var taskTail;\n  var clockLast = 0;\n  var clockNow = 0;\n  var clockSkew = 0;\n  var clock = typeof performance === \"object\" && performance.now ? performance : Date;\n  var setFrame = typeof requestAnimationFrame === \"function\"\n          ? (clock === Date ? function(f) { requestAnimationFrame(function() { f(clock.now()); }); } : requestAnimationFrame)\n          : function(f) { setTimeout(f, 17); };\n  function now() {\n    return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n  }\n\n  function clearNow() {\n    clockNow = 0;\n  }\n\n  function Timer() {\n    this._call =\n    this._time =\n    this._next = null;\n  }\n\n  Timer.prototype = timer.prototype = {\n    constructor: Timer,\n    restart: function(callback, delay, time) {\n      if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n      time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n      if (!this._next && taskTail !== this) {\n        if (taskTail) taskTail._next = this;\n        else taskHead = this;\n        taskTail = this;\n      }\n      this._call = callback;\n      this._time = time;\n      sleep();\n    },\n    stop: function() {\n      if (this._call) {\n        this._call = null;\n        this._time = Infinity;\n        sleep();\n      }\n    }\n  };\n\n  function timer(callback, delay, time) {\n    var t = new Timer;\n    t.restart(callback, delay, time);\n    return t;\n  }\n\n  function timerFlush() {\n    now(); // Get the current time, if not already set.\n    ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n    var t = taskHead, e;\n    while (t) {\n      if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n      t = t._next;\n    }\n    --frame;\n  }\n\n  function wake(time) {\n    clockNow = (clockLast = time || clock.now()) + clockSkew;\n    frame = timeout = 0;\n    try {\n      timerFlush();\n    } finally {\n      frame = 0;\n      nap();\n      clockNow = 0;\n    }\n  }\n\n  function poke$1() {\n    var now = clock.now(), delay = now - clockLast;\n    if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n  }\n\n  function nap() {\n    var t0, t1 = taskHead, t2, time = Infinity;\n    while (t1) {\n      if (t1._call) {\n        if (time > t1._time) time = t1._time;\n        t0 = t1, t1 = t1._next;\n      } else {\n        t2 = t1._next, t1._next = null;\n        t1 = t0 ? t0._next = t2 : taskHead = t2;\n      }\n    }\n    taskTail = t0;\n    sleep(time);\n  }\n\n  function sleep(time) {\n    if (frame) return; // Soonest alarm already set, or will be.\n    if (timeout) timeout = clearTimeout(timeout);\n    var delay = time - clockNow;\n    if (delay > 24) {\n      if (time < Infinity) timeout = setTimeout(wake, delay);\n      if (interval) interval = clearInterval(interval);\n    } else {\n      if (!interval) interval = setInterval(poke$1, pokeDelay);\n      frame = 1, setFrame(wake);\n    }\n  }\n\n  function timeout$1(callback, delay, time) {\n    var t = new Timer;\n    delay = delay == null ? 0 : +delay;\n    t.restart(function(elapsed) {\n      t.stop();\n      callback(elapsed + delay);\n    }, delay, time);\n    return t;\n  }\n\n  function interval$1(callback, delay, time) {\n    var t = new Timer, total = delay;\n    if (delay == null) return t.restart(callback, delay, time), t;\n    delay = +delay, time = time == null ? now() : +time;\n    t.restart(function tick(elapsed) {\n      elapsed += total;\n      t.restart(tick, total += delay, time);\n      callback(elapsed);\n    }, delay, time);\n    return t;\n  }\n\nvar   t0$1 = new Date;\nvar   t1$1 = new Date;\n  function newInterval(floori, offseti, count, field) {\n\n    function interval(date) {\n      return floori(date = new Date(+date)), date;\n    }\n\n    interval.floor = interval;\n\n    interval.ceil = function(date) {\n      return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n    };\n\n    interval.round = function(date) {\n      var d0 = interval(date),\n          d1 = interval.ceil(date);\n      return date - d0 < d1 - date ? d0 : d1;\n    };\n\n    interval.offset = function(date, step) {\n      return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n    };\n\n    interval.range = function(start, stop, step) {\n      var range = [];\n      start = interval.ceil(start);\n      step = step == null ? 1 : Math.floor(step);\n      if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n      do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)\n      return range;\n    };\n\n    interval.filter = function(test) {\n      return newInterval(function(date) {\n        while (floori(date), !test(date)) date.setTime(date - 1);\n      }, function(date, step) {\n        while (--step >= 0) while (offseti(date, 1), !test(date));\n      });\n    };\n\n    if (count) {\n      interval.count = function(start, end) {\n        t0$1.setTime(+start), t1$1.setTime(+end);\n        floori(t0$1), floori(t1$1);\n        return Math.floor(count(t0$1, t1$1));\n      };\n\n      interval.every = function(step) {\n        step = Math.floor(step);\n        return !isFinite(step) || !(step > 0) ? null\n            : !(step > 1) ? interval\n            : interval.filter(field\n                ? function(d) { return field(d) % step === 0; }\n                : function(d) { return interval.count(0, d) % step === 0; });\n      };\n    }\n\n    return interval;\n  }\n\n  var millisecond = newInterval(function() {\n    // noop\n  }, function(date, step) {\n    date.setTime(+date + step);\n  }, function(start, end) {\n    return end - start;\n  });\n\n  // An optimized implementation for this simple case.\n  millisecond.every = function(k) {\n    k = Math.floor(k);\n    if (!isFinite(k) || !(k > 0)) return null;\n    if (!(k > 1)) return millisecond;\n    return newInterval(function(date) {\n      date.setTime(Math.floor(date / k) * k);\n    }, function(date, step) {\n      date.setTime(+date + step * k);\n    }, function(start, end) {\n      return (end - start) / k;\n    });\n  };\n\n  var milliseconds = millisecond.range;\n\n  var durationSecond = 1e3;\n  var durationMinute = 6e4;\n  var durationHour = 36e5;\n  var durationDay = 864e5;\n  var durationWeek = 6048e5;\n\n  var second = newInterval(function(date) {\n    date.setTime(Math.floor(date / durationSecond) * durationSecond);\n  }, function(date, step) {\n    date.setTime(+date + step * durationSecond);\n  }, function(start, end) {\n    return (end - start) / durationSecond;\n  }, function(date) {\n    return date.getUTCSeconds();\n  });\n\n  var seconds = second.range;\n\n  var minute = newInterval(function(date) {\n    date.setTime(Math.floor(date / durationMinute) * durationMinute);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getMinutes();\n  });\n\n  var minutes = minute.range;\n\n  var hour = newInterval(function(date) {\n    var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n    if (offset < 0) offset += durationHour;\n    date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getHours();\n  });\n\n  var hours = hour.range;\n\n  var day = newInterval(function(date) {\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n\n  var days = day.range;\n\n  function weekday(i) {\n    return newInterval(function(date) {\n      date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setDate(date.getDate() + step * 7);\n    }, function(start, end) {\n      return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n    });\n  }\n\n  var timeWeek = weekday(0);\n  var timeMonday = weekday(1);\n  var tuesday = weekday(2);\n  var wednesday = weekday(3);\n  var thursday = weekday(4);\n  var friday = weekday(5);\n  var saturday = weekday(6);\n\n  var sundays = timeWeek.range;\n  var mondays = timeMonday.range;\n  var tuesdays = tuesday.range;\n  var wednesdays = wednesday.range;\n  var thursdays = thursday.range;\n  var fridays = friday.range;\n  var saturdays = saturday.range;\n\n  var month = newInterval(function(date) {\n    date.setDate(1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setMonth(date.getMonth() + step);\n  }, function(start, end) {\n    return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n  }, function(date) {\n    return date.getMonth();\n  });\n\n  var months = month.range;\n\n  var year = newInterval(function(date) {\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step);\n  }, function(start, end) {\n    return end.getFullYear() - start.getFullYear();\n  }, function(date) {\n    return date.getFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  year.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n      date.setMonth(0, 1);\n      date.setHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setFullYear(date.getFullYear() + step * k);\n    });\n  };\n\n  var years = year.range;\n\n  var utcMinute = newInterval(function(date) {\n    date.setUTCSeconds(0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationMinute);\n  }, function(start, end) {\n    return (end - start) / durationMinute;\n  }, function(date) {\n    return date.getUTCMinutes();\n  });\n\n  var utcMinutes = utcMinute.range;\n\n  var utcHour = newInterval(function(date) {\n    date.setUTCMinutes(0, 0, 0);\n  }, function(date, step) {\n    date.setTime(+date + step * durationHour);\n  }, function(start, end) {\n    return (end - start) / durationHour;\n  }, function(date) {\n    return date.getUTCHours();\n  });\n\n  var utcHours = utcHour.range;\n\n  var utcDay = newInterval(function(date) {\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step);\n  }, function(start, end) {\n    return (end - start) / durationDay;\n  }, function(date) {\n    return date.getUTCDate() - 1;\n  });\n\n  var utcDays = utcDay.range;\n\n  function utcWeekday(i) {\n    return newInterval(function(date) {\n      date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCDate(date.getUTCDate() + step * 7);\n    }, function(start, end) {\n      return (end - start) / durationWeek;\n    });\n  }\n\n  var utcWeek = utcWeekday(0);\n  var utcMonday = utcWeekday(1);\n  var utcTuesday = utcWeekday(2);\n  var utcWednesday = utcWeekday(3);\n  var utcThursday = utcWeekday(4);\n  var utcFriday = utcWeekday(5);\n  var utcSaturday = utcWeekday(6);\n\n  var utcSundays = utcWeek.range;\n  var utcMondays = utcMonday.range;\n  var utcTuesdays = utcTuesday.range;\n  var utcWednesdays = utcWednesday.range;\n  var utcThursdays = utcThursday.range;\n  var utcFridays = utcFriday.range;\n  var utcSaturdays = utcSaturday.range;\n\n  var utcMonth = newInterval(function(date) {\n    date.setUTCDate(1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCMonth(date.getUTCMonth() + step);\n  }, function(start, end) {\n    return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n  }, function(date) {\n    return date.getUTCMonth();\n  });\n\n  var utcMonths = utcMonth.range;\n\n  var utcYear = newInterval(function(date) {\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step);\n  }, function(start, end) {\n    return end.getUTCFullYear() - start.getUTCFullYear();\n  }, function(date) {\n    return date.getUTCFullYear();\n  });\n\n  // An optimized implementation for this simple case.\n  utcYear.every = function(k) {\n    return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n      date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n      date.setUTCMonth(0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n    }, function(date, step) {\n      date.setUTCFullYear(date.getUTCFullYear() + step * k);\n    });\n  };\n\n  var utcYears = utcYear.range;\n\n  // Computes the decimal coefficient and exponent of the specified number x with\n  // significant digits p, where x is positive and p is in [1, 21] or undefined.\n  // For example, formatDecimal(1.23) returns [\"123\", 0].\n  function formatDecimal(x, p) {\n    if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n    var i, coefficient = x.slice(0, i);\n\n    // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n    // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n    return [\n      coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n      +x.slice(i + 1)\n    ];\n  }\n\n  function exponent$1(x) {\n    return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n  }\n\n  function formatGroup(grouping, thousands) {\n    return function(value, width) {\n      var i = value.length,\n          t = [],\n          j = 0,\n          g = grouping[0],\n          length = 0;\n\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = grouping[j = (j + 1) % grouping.length];\n      }\n\n      return t.reverse().join(thousands);\n    };\n  }\n\n  function formatDefault(x, p) {\n    x = x.toPrecision(p);\n\n    out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n      switch (x[i]) {\n        case \".\": i0 = i1 = i; break;\n        case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n        case \"e\": break out;\n        default: if (i0 > 0) i0 = 0; break;\n      }\n    }\n\n    return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n  }\n\n  var prefixExponent;\n\n  function formatPrefixAuto(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1],\n        i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n        n = coefficient.length;\n    return i === n ? coefficient\n        : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n        : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n        : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n  }\n\n  function formatRounded(x, p) {\n    var d = formatDecimal(x, p);\n    if (!d) return x + \"\";\n    var coefficient = d[0],\n        exponent = d[1];\n    return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n        : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n        : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n  }\n\n  var formatTypes = {\n    \"\": formatDefault,\n    \"%\": function(x, p) { return (x * 100).toFixed(p); },\n    \"b\": function(x) { return Math.round(x).toString(2); },\n    \"c\": function(x) { return x + \"\"; },\n    \"d\": function(x) { return Math.round(x).toString(10); },\n    \"e\": function(x, p) { return x.toExponential(p); },\n    \"f\": function(x, p) { return x.toFixed(p); },\n    \"g\": function(x, p) { return x.toPrecision(p); },\n    \"o\": function(x) { return Math.round(x).toString(8); },\n    \"p\": function(x, p) { return formatRounded(x * 100, p); },\n    \"r\": formatRounded,\n    \"s\": formatPrefixAuto,\n    \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n    \"x\": function(x) { return Math.round(x).toString(16); }\n  };\n\n  // [[fill]align][sign][symbol][0][width][,][.precision][type]\n  var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n  function formatSpecifier(specifier) {\n    return new FormatSpecifier(specifier);\n  }\n\n  function FormatSpecifier(specifier) {\n    if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n    var match,\n        fill = match[1] || \" \",\n        align = match[2] || \">\",\n        sign = match[3] || \"-\",\n        symbol = match[4] || \"\",\n        zero = !!match[5],\n        width = match[6] && +match[6],\n        comma = !!match[7],\n        precision = match[8] && +match[8].slice(1),\n        type = match[9] || \"\";\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // Map invalid types to the default format.\n    else if (!formatTypes[type]) type = \"\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    this.fill = fill;\n    this.align = align;\n    this.sign = sign;\n    this.symbol = symbol;\n    this.zero = zero;\n    this.width = width;\n    this.comma = comma;\n    this.precision = precision;\n    this.type = type;\n  }\n\n  FormatSpecifier.prototype.toString = function() {\n    return this.fill\n        + this.align\n        + this.sign\n        + this.symbol\n        + (this.zero ? \"0\" : \"\")\n        + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n        + (this.comma ? \",\" : \"\")\n        + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n        + this.type;\n  };\n\n  var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xB5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n  function identity$3(x) {\n    return x;\n  }\n\n  function formatLocale(locale) {\n    var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,\n        currency = locale.currency,\n        decimal = locale.decimal;\n\n    function newFormat(specifier) {\n      specifier = formatSpecifier(specifier);\n\n      var fill = specifier.fill,\n          align = specifier.align,\n          sign = specifier.sign,\n          symbol = specifier.symbol,\n          zero = specifier.zero,\n          width = specifier.width,\n          comma = specifier.comma,\n          precision = specifier.precision,\n          type = specifier.type;\n\n      // Compute the prefix and suffix.\n      // For SI-prefix, the suffix is lazily computed.\n      var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n          suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n      // What format function should we use?\n      // Is this an integer type?\n      // Can this type generate exponential notation?\n      var formatType = formatTypes[type],\n          maybeSuffix = !type || /[defgprs%]/.test(type);\n\n      // Set the default precision if not specified,\n      // or clamp the specified precision to the supported range.\n      // For significant precision, it must be in [1, 21].\n      // For fixed precision, it must be in [0, 20].\n      precision = precision == null ? (type ? 6 : 12)\n          : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n          : Math.max(0, Math.min(20, precision));\n\n      function format(value) {\n        var valuePrefix = prefix,\n            valueSuffix = suffix,\n            i, n, c;\n\n        if (type === \"c\") {\n          valueSuffix = formatType(value) + valueSuffix;\n          value = \"\";\n        } else {\n          value = +value;\n\n          // Convert negative to positive, and compute the prefix.\n          // Note that -0 is not less than 0, but 1 / -0 is!\n          var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n          // Perform the initial formatting.\n          value = formatType(value, precision);\n\n          // If the original value was negative, it may be rounded to zero during\n          // formatting; treat this as (positive) zero.\n          if (valueNegative) {\n            i = -1, n = value.length;\n            valueNegative = false;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), (48 < c && c < 58)\n                  || (type === \"x\" && 96 < c && c < 103)\n                  || (type === \"X\" && 64 < c && c < 71)) {\n                valueNegative = true;\n                break;\n              }\n            }\n          }\n\n          // Compute the prefix and suffix.\n          valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n          valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n          // Break the formatted value into the integer “value” part that can be\n          // grouped, and fractional or exponential “suffix” part that is not.\n          if (maybeSuffix) {\n            i = -1, n = value.length;\n            while (++i < n) {\n              if (c = value.charCodeAt(i), 48 > c || c > 57) {\n                valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n                value = value.slice(0, i);\n                break;\n              }\n            }\n          }\n        }\n\n        // If the fill character is not \"0\", grouping is applied before padding.\n        if (comma && !zero) value = group(value, Infinity);\n\n        // Compute the padding.\n        var length = valuePrefix.length + value.length + valueSuffix.length,\n            padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n        // If the fill character is \"0\", grouping is applied after padding.\n        if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n        // Reconstruct the final output based on the desired alignment.\n        switch (align) {\n          case \"<\": return valuePrefix + value + valueSuffix + padding;\n          case \"=\": return valuePrefix + padding + value + valueSuffix;\n          case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n        }\n        return padding + valuePrefix + value + valueSuffix;\n      }\n\n      format.toString = function() {\n        return specifier + \"\";\n      };\n\n      return format;\n    }\n\n    function formatPrefix(specifier, value) {\n      var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n          e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,\n          k = Math.pow(10, -e),\n          prefix = prefixes[8 + e / 3];\n      return function(value) {\n        return f(k * value) + prefix;\n      };\n    }\n\n    return {\n      format: newFormat,\n      formatPrefix: formatPrefix\n    };\n  }\n\n  var locale;\n  defaultLocale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [3],\n    currency: [\"$\", \"\"]\n  });\n\n  function defaultLocale(definition) {\n    locale = formatLocale(definition);\n    exports.format = locale.format;\n    exports.formatPrefix = locale.formatPrefix;\n    return locale;\n  }\n\n  function precisionFixed(step) {\n    return Math.max(0, -exponent$1(Math.abs(step)));\n  }\n\n  function precisionPrefix(step, value) {\n    return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));\n  }\n\n  function precisionRound(step, max) {\n    step = Math.abs(step), max = Math.abs(max) - step;\n    return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;\n  }\n\n  function localDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n      date.setFullYear(d.y);\n      return date;\n    }\n    return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n  }\n\n  function utcDate(d) {\n    if (0 <= d.y && d.y < 100) {\n      var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n      date.setUTCFullYear(d.y);\n      return date;\n    }\n    return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n  }\n\n  function newYear(y) {\n    return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n  }\n\n  function formatLocale$1(locale) {\n    var locale_dateTime = locale.dateTime,\n        locale_date = locale.date,\n        locale_time = locale.time,\n        locale_periods = locale.periods,\n        locale_weekdays = locale.days,\n        locale_shortWeekdays = locale.shortDays,\n        locale_months = locale.months,\n        locale_shortMonths = locale.shortMonths;\n\n    var periodRe = formatRe(locale_periods),\n        periodLookup = formatLookup(locale_periods),\n        weekdayRe = formatRe(locale_weekdays),\n        weekdayLookup = formatLookup(locale_weekdays),\n        shortWeekdayRe = formatRe(locale_shortWeekdays),\n        shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n        monthRe = formatRe(locale_months),\n        monthLookup = formatLookup(locale_months),\n        shortMonthRe = formatRe(locale_shortMonths),\n        shortMonthLookup = formatLookup(locale_shortMonths);\n\n    var formats = {\n      \"a\": formatShortWeekday,\n      \"A\": formatWeekday,\n      \"b\": formatShortMonth,\n      \"B\": formatMonth,\n      \"c\": null,\n      \"d\": formatDayOfMonth,\n      \"e\": formatDayOfMonth,\n      \"H\": formatHour24,\n      \"I\": formatHour12,\n      \"j\": formatDayOfYear,\n      \"L\": formatMilliseconds,\n      \"m\": formatMonthNumber,\n      \"M\": formatMinutes,\n      \"p\": formatPeriod,\n      \"S\": formatSeconds,\n      \"U\": formatWeekNumberSunday,\n      \"w\": formatWeekdayNumber,\n      \"W\": formatWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatYear,\n      \"Y\": formatFullYear,\n      \"Z\": formatZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var utcFormats = {\n      \"a\": formatUTCShortWeekday,\n      \"A\": formatUTCWeekday,\n      \"b\": formatUTCShortMonth,\n      \"B\": formatUTCMonth,\n      \"c\": null,\n      \"d\": formatUTCDayOfMonth,\n      \"e\": formatUTCDayOfMonth,\n      \"H\": formatUTCHour24,\n      \"I\": formatUTCHour12,\n      \"j\": formatUTCDayOfYear,\n      \"L\": formatUTCMilliseconds,\n      \"m\": formatUTCMonthNumber,\n      \"M\": formatUTCMinutes,\n      \"p\": formatUTCPeriod,\n      \"S\": formatUTCSeconds,\n      \"U\": formatUTCWeekNumberSunday,\n      \"w\": formatUTCWeekdayNumber,\n      \"W\": formatUTCWeekNumberMonday,\n      \"x\": null,\n      \"X\": null,\n      \"y\": formatUTCYear,\n      \"Y\": formatUTCFullYear,\n      \"Z\": formatUTCZone,\n      \"%\": formatLiteralPercent\n    };\n\n    var parses = {\n      \"a\": parseShortWeekday,\n      \"A\": parseWeekday,\n      \"b\": parseShortMonth,\n      \"B\": parseMonth,\n      \"c\": parseLocaleDateTime,\n      \"d\": parseDayOfMonth,\n      \"e\": parseDayOfMonth,\n      \"H\": parseHour24,\n      \"I\": parseHour24,\n      \"j\": parseDayOfYear,\n      \"L\": parseMilliseconds,\n      \"m\": parseMonthNumber,\n      \"M\": parseMinutes,\n      \"p\": parsePeriod,\n      \"S\": parseSeconds,\n      \"U\": parseWeekNumberSunday,\n      \"w\": parseWeekdayNumber,\n      \"W\": parseWeekNumberMonday,\n      \"x\": parseLocaleDate,\n      \"X\": parseLocaleTime,\n      \"y\": parseYear,\n      \"Y\": parseFullYear,\n      \"Z\": parseZone,\n      \"%\": parseLiteralPercent\n    };\n\n    // These recursive directive definitions must be deferred.\n    formats.x = newFormat(locale_date, formats);\n    formats.X = newFormat(locale_time, formats);\n    formats.c = newFormat(locale_dateTime, formats);\n    utcFormats.x = newFormat(locale_date, utcFormats);\n    utcFormats.X = newFormat(locale_time, utcFormats);\n    utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n    function newFormat(specifier, formats) {\n      return function(date) {\n        var string = [],\n            i = -1,\n            j = 0,\n            n = specifier.length,\n            c,\n            pad,\n            format;\n\n        if (!(date instanceof Date)) date = new Date(+date);\n\n        while (++i < n) {\n          if (specifier.charCodeAt(i) === 37) {\n            string.push(specifier.slice(j, i));\n            if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n            else pad = c === \"e\" ? \" \" : \"0\";\n            if (format = formats[c]) c = format(date, pad);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n\n        string.push(specifier.slice(j, i));\n        return string.join(\"\");\n      };\n    }\n\n    function newParse(specifier, newDate) {\n      return function(string) {\n        var d = newYear(1900),\n            i = parseSpecifier(d, specifier, string += \"\", 0);\n        if (i != string.length) return null;\n\n        // The am-pm flag is 0 for AM, and 1 for PM.\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n        // Convert day-of-week and week-of-year to day-of-year.\n        if (\"W\" in d || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n          var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n          d.m = 0;\n          d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n        }\n\n        // If a time zone is specified, all fields are interpreted as UTC and then\n        // offset according to the specified time zone.\n        if (\"Z\" in d) {\n          d.H += d.Z / 100 | 0;\n          d.M += d.Z % 100;\n          return utcDate(d);\n        }\n\n        // Otherwise, all fields are in local time.\n        return newDate(d);\n      };\n    }\n\n    function parseSpecifier(d, specifier, string, j) {\n      var i = 0,\n          n = specifier.length,\n          m = string.length,\n          c,\n          parse;\n\n      while (i < n) {\n        if (j >= m) return -1;\n        c = specifier.charCodeAt(i++);\n        if (c === 37) {\n          c = specifier.charAt(i++);\n          parse = parses[c in pads ? specifier.charAt(i++) : c];\n          if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n\n      return j;\n    }\n\n    function parsePeriod(d, string, i) {\n      var n = periodRe.exec(string.slice(i));\n      return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortWeekday(d, string, i) {\n      var n = shortWeekdayRe.exec(string.slice(i));\n      return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseWeekday(d, string, i) {\n      var n = weekdayRe.exec(string.slice(i));\n      return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseShortMonth(d, string, i) {\n      var n = shortMonthRe.exec(string.slice(i));\n      return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseMonth(d, string, i) {\n      var n = monthRe.exec(string.slice(i));\n      return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n    }\n\n    function parseLocaleDateTime(d, string, i) {\n      return parseSpecifier(d, locale_dateTime, string, i);\n    }\n\n    function parseLocaleDate(d, string, i) {\n      return parseSpecifier(d, locale_date, string, i);\n    }\n\n    function parseLocaleTime(d, string, i) {\n      return parseSpecifier(d, locale_time, string, i);\n    }\n\n    function formatShortWeekday(d) {\n      return locale_shortWeekdays[d.getDay()];\n    }\n\n    function formatWeekday(d) {\n      return locale_weekdays[d.getDay()];\n    }\n\n    function formatShortMonth(d) {\n      return locale_shortMonths[d.getMonth()];\n    }\n\n    function formatMonth(d) {\n      return locale_months[d.getMonth()];\n    }\n\n    function formatPeriod(d) {\n      return locale_periods[+(d.getHours() >= 12)];\n    }\n\n    function formatUTCShortWeekday(d) {\n      return locale_shortWeekdays[d.getUTCDay()];\n    }\n\n    function formatUTCWeekday(d) {\n      return locale_weekdays[d.getUTCDay()];\n    }\n\n    function formatUTCShortMonth(d) {\n      return locale_shortMonths[d.getUTCMonth()];\n    }\n\n    function formatUTCMonth(d) {\n      return locale_months[d.getUTCMonth()];\n    }\n\n    function formatUTCPeriod(d) {\n      return locale_periods[+(d.getUTCHours() >= 12)];\n    }\n\n    return {\n      format: function(specifier) {\n        var f = newFormat(specifier += \"\", formats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      parse: function(specifier) {\n        var p = newParse(specifier += \"\", localDate);\n        p.toString = function() { return specifier; };\n        return p;\n      },\n      utcFormat: function(specifier) {\n        var f = newFormat(specifier += \"\", utcFormats);\n        f.toString = function() { return specifier; };\n        return f;\n      },\n      utcParse: function(specifier) {\n        var p = newParse(specifier, utcDate);\n        p.toString = function() { return specifier; };\n        return p;\n      }\n    };\n  }\n\n  var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\n  var numberRe = /^\\s*\\d+/;\n  var percentRe = /^%/;\n  var requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n  function pad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\",\n        string = (sign ? -value : value) + \"\",\n        length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n\n  function requote(s) {\n    return s.replace(requoteRe, \"\\\\$&\");\n  }\n\n  function formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n  }\n\n  function formatLookup(names) {\n    var map = {}, i = -1, n = names.length;\n    while (++i < n) map[names[i].toLowerCase()] = i;\n    return map;\n  }\n\n  function parseWeekdayNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 1));\n    return n ? (d.w = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberSunday(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.U = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseWeekNumberMonday(d, string, i) {\n    var n = numberRe.exec(string.slice(i));\n    return n ? (d.W = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseFullYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 4));\n    return n ? (d.y = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n  }\n\n  function parseZone(d, string, i) {\n    var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n    return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n  }\n\n  function parseMonthNumber(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n  }\n\n  function parseDayOfMonth(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseDayOfYear(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseHour24(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.H = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMinutes(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.M = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseSeconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 2));\n    return n ? (d.S = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseMilliseconds(d, string, i) {\n    var n = numberRe.exec(string.slice(i, i + 3));\n    return n ? (d.L = +n[0], i + n[0].length) : -1;\n  }\n\n  function parseLiteralPercent(d, string, i) {\n    var n = percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n\n  function formatDayOfMonth(d, p) {\n    return pad(d.getDate(), p, 2);\n  }\n\n  function formatHour24(d, p) {\n    return pad(d.getHours(), p, 2);\n  }\n\n  function formatHour12(d, p) {\n    return pad(d.getHours() % 12 || 12, p, 2);\n  }\n\n  function formatDayOfYear(d, p) {\n    return pad(1 + day.count(year(d), d), p, 3);\n  }\n\n  function formatMilliseconds(d, p) {\n    return pad(d.getMilliseconds(), p, 3);\n  }\n\n  function formatMonthNumber(d, p) {\n    return pad(d.getMonth() + 1, p, 2);\n  }\n\n  function formatMinutes(d, p) {\n    return pad(d.getMinutes(), p, 2);\n  }\n\n  function formatSeconds(d, p) {\n    return pad(d.getSeconds(), p, 2);\n  }\n\n  function formatWeekNumberSunday(d, p) {\n    return pad(timeWeek.count(year(d), d), p, 2);\n  }\n\n  function formatWeekdayNumber(d) {\n    return d.getDay();\n  }\n\n  function formatWeekNumberMonday(d, p) {\n    return pad(timeMonday.count(year(d), d), p, 2);\n  }\n\n  function formatYear(d, p) {\n    return pad(d.getFullYear() % 100, p, 2);\n  }\n\n  function formatFullYear(d, p) {\n    return pad(d.getFullYear() % 10000, p, 4);\n  }\n\n  function formatZone(d) {\n    var z = d.getTimezoneOffset();\n    return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n        + pad(z / 60 | 0, \"0\", 2)\n        + pad(z % 60, \"0\", 2);\n  }\n\n  function formatUTCDayOfMonth(d, p) {\n    return pad(d.getUTCDate(), p, 2);\n  }\n\n  function formatUTCHour24(d, p) {\n    return pad(d.getUTCHours(), p, 2);\n  }\n\n  function formatUTCHour12(d, p) {\n    return pad(d.getUTCHours() % 12 || 12, p, 2);\n  }\n\n  function formatUTCDayOfYear(d, p) {\n    return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n  }\n\n  function formatUTCMilliseconds(d, p) {\n    return pad(d.getUTCMilliseconds(), p, 3);\n  }\n\n  function formatUTCMonthNumber(d, p) {\n    return pad(d.getUTCMonth() + 1, p, 2);\n  }\n\n  function formatUTCMinutes(d, p) {\n    return pad(d.getUTCMinutes(), p, 2);\n  }\n\n  function formatUTCSeconds(d, p) {\n    return pad(d.getUTCSeconds(), p, 2);\n  }\n\n  function formatUTCWeekNumberSunday(d, p) {\n    return pad(utcWeek.count(utcYear(d), d), p, 2);\n  }\n\n  function formatUTCWeekdayNumber(d) {\n    return d.getUTCDay();\n  }\n\n  function formatUTCWeekNumberMonday(d, p) {\n    return pad(utcMonday.count(utcYear(d), d), p, 2);\n  }\n\n  function formatUTCYear(d, p) {\n    return pad(d.getUTCFullYear() % 100, p, 2);\n  }\n\n  function formatUTCFullYear(d, p) {\n    return pad(d.getUTCFullYear() % 10000, p, 4);\n  }\n\n  function formatUTCZone() {\n    return \"+0000\";\n  }\n\n  function formatLiteralPercent() {\n    return \"%\";\n  }\n\n  var locale$1;\n  defaultLocale$1({\n    dateTime: \"%x, %X\",\n    date: \"%-m/%-d/%Y\",\n    time: \"%-I:%M:%S %p\",\n    periods: [\"AM\", \"PM\"],\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n  });\n\n  function defaultLocale$1(definition) {\n    locale$1 = formatLocale$1(definition);\n    exports.timeFormat = locale$1.format;\n    exports.timeParse = locale$1.parse;\n    exports.utcFormat = locale$1.utcFormat;\n    exports.utcParse = locale$1.utcParse;\n    return locale$1;\n  }\n\n  var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n  function formatIsoNative(date) {\n    return date.toISOString();\n  }\n\n  var formatIso = Date.prototype.toISOString\n      ? formatIsoNative\n      : exports.utcFormat(isoSpecifier);\n\n  function parseIsoNative(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  }\n\n  var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n      ? parseIsoNative\n      : exports.utcParse(isoSpecifier);\n\n  var array$2 = Array.prototype;\n\n  var map$2 = array$2.map;\n  var slice$3 = array$2.slice;\n\n  var implicit = {name: \"implicit\"};\n\n  function ordinal(range) {\n    var index = map$1(),\n        domain = [],\n        unknown = implicit;\n\n    range = range == null ? [] : slice$3.call(range);\n\n    function scale(d) {\n      var key = d + \"\", i = index.get(key);\n      if (!i) {\n        if (unknown !== implicit) return unknown;\n        index.set(key, i = domain.push(d));\n      }\n      return range[(i - 1) % range.length];\n    }\n\n    scale.domain = function(_) {\n      if (!arguments.length) return domain.slice();\n      domain = [], index = map$1();\n      var i = -1, n = _.length, d, key;\n      while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n      return scale;\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice$3.call(_), scale) : range.slice();\n    };\n\n    scale.unknown = function(_) {\n      return arguments.length ? (unknown = _, scale) : unknown;\n    };\n\n    scale.copy = function() {\n      return ordinal()\n          .domain(domain)\n          .range(range)\n          .unknown(unknown);\n    };\n\n    return scale;\n  }\n\n  function band() {\n    var scale = ordinal().unknown(undefined),\n        domain = scale.domain,\n        ordinalRange = scale.range,\n        range$$ = [0, 1],\n        step,\n        bandwidth,\n        round = false,\n        paddingInner = 0,\n        paddingOuter = 0,\n        align = 0.5;\n\n    delete scale.unknown;\n\n    function rescale() {\n      var n = domain().length,\n          reverse = range$$[1] < range$$[0],\n          start = range$$[reverse - 0],\n          stop = range$$[1 - reverse];\n      step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n      if (round) step = Math.floor(step);\n      start += (stop - start - step * (n - paddingInner)) * align;\n      bandwidth = step * (1 - paddingInner);\n      if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n      var values = range(n).map(function(i) { return start + step * i; });\n      return ordinalRange(reverse ? values.reverse() : values);\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain(_), rescale()) : domain();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range$$ = [+_[0], +_[1]], rescale()) : range$$.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range$$ = [+_[0], +_[1]], round = true, rescale();\n    };\n\n    scale.bandwidth = function() {\n      return bandwidth;\n    };\n\n    scale.step = function() {\n      return step;\n    };\n\n    scale.round = function(_) {\n      return arguments.length ? (round = !!_, rescale()) : round;\n    };\n\n    scale.padding = function(_) {\n      return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n    };\n\n    scale.paddingInner = function(_) {\n      return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n    };\n\n    scale.paddingOuter = function(_) {\n      return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n    };\n\n    scale.align = function(_) {\n      return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n    };\n\n    scale.copy = function() {\n      return band()\n          .domain(domain())\n          .range(range$$)\n          .round(round)\n          .paddingInner(paddingInner)\n          .paddingOuter(paddingOuter)\n          .align(align);\n    };\n\n    return rescale();\n  }\n\n  function pointish(scale) {\n    var copy = scale.copy;\n\n    scale.padding = scale.paddingOuter;\n    delete scale.paddingInner;\n    delete scale.paddingOuter;\n\n    scale.copy = function() {\n      return pointish(copy());\n    };\n\n    return scale;\n  }\n\n  function point$4() {\n    return pointish(band().paddingInner(1));\n  }\n\n  function constant$3(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function number$1(x) {\n    return +x;\n  }\n\n  var unit = [0, 1];\n\n  function deinterpolate(a, b) {\n    return (b -= (a = +a))\n        ? function(x) { return (x - a) / b; }\n        : constant$3(b);\n  }\n\n  function deinterpolateClamp(deinterpolate) {\n    return function(a, b) {\n      var d = deinterpolate(a = +a, b = +b);\n      return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n    };\n  }\n\n  function reinterpolateClamp(reinterpolate) {\n    return function(a, b) {\n      var r = reinterpolate(a = +a, b = +b);\n      return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n    };\n  }\n\n  function bimap(domain, range, deinterpolate, reinterpolate) {\n    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n    if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n    else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n    return function(x) { return r0(d0(x)); };\n  }\n\n  function polymap(domain, range, deinterpolate, reinterpolate) {\n    var j = Math.min(domain.length, range.length) - 1,\n        d = new Array(j),\n        r = new Array(j),\n        i = -1;\n\n    // Reverse descending domains.\n    if (domain[j] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n\n    while (++i < j) {\n      d[i] = deinterpolate(domain[i], domain[i + 1]);\n      r[i] = reinterpolate(range[i], range[i + 1]);\n    }\n\n    return function(x) {\n      var i = bisectRight(domain, x, 1, j) - 1;\n      return r[i](d[i](x));\n    };\n  }\n\n  function copy(source, target) {\n    return target\n        .domain(source.domain())\n        .range(source.range())\n        .interpolate(source.interpolate())\n        .clamp(source.clamp());\n  }\n\n  // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n  // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n  function continuous(deinterpolate$$, reinterpolate) {\n    var domain = unit,\n        range = unit,\n        interpolate$$ = interpolate,\n        clamp = false,\n        piecewise,\n        output,\n        input;\n\n    function rescale() {\n      piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n      output = input = null;\n      return scale;\n    }\n\n    function scale(x) {\n      return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate$$)))(+x);\n    }\n\n    scale.invert = function(y) {\n      return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = map$2.call(_, number$1), rescale()) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice$3.call(_), rescale()) : range.slice();\n    };\n\n    scale.rangeRound = function(_) {\n      return range = slice$3.call(_), interpolate$$ = interpolateRound, rescale();\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = !!_, rescale()) : clamp;\n    };\n\n    scale.interpolate = function(_) {\n      return arguments.length ? (interpolate$$ = _, rescale()) : interpolate$$;\n    };\n\n    return rescale();\n  }\n\n  function tickFormat(domain, count, specifier) {\n    var start = domain[0],\n        stop = domain[domain.length - 1],\n        step = tickStep(start, stop, count == null ? 10 : count),\n        precision;\n    specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n    switch (specifier.type) {\n      case \"s\": {\n        var value = Math.max(Math.abs(start), Math.abs(stop));\n        if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n        return exports.formatPrefix(specifier, value);\n      }\n      case \"\":\n      case \"e\":\n      case \"g\":\n      case \"p\":\n      case \"r\": {\n        if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n        break;\n      }\n      case \"f\":\n      case \"%\": {\n        if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n        break;\n      }\n    }\n    return exports.format(specifier);\n  }\n\n  function linearish(scale) {\n    var domain = scale.domain;\n\n    scale.ticks = function(count) {\n      var d = domain();\n      return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      return tickFormat(domain(), count, specifier);\n    };\n\n    scale.nice = function(count) {\n      var d = domain(),\n          i = d.length - 1,\n          n = count == null ? 10 : count,\n          start = d[0],\n          stop = d[i],\n          step = tickStep(start, stop, n);\n\n      if (step) {\n        step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n        d[0] = Math.floor(start / step) * step;\n        d[i] = Math.ceil(stop / step) * step;\n        domain(d);\n      }\n\n      return scale;\n    };\n\n    return scale;\n  }\n\n  function linear$2() {\n    var scale = continuous(deinterpolate, interpolateNumber);\n\n    scale.copy = function() {\n      return copy(scale, linear$2());\n    };\n\n    return linearish(scale);\n  }\n\n  function identity$4() {\n    var domain = [0, 1];\n\n    function scale(x) {\n      return +x;\n    }\n\n    scale.invert = scale;\n\n    scale.domain = scale.range = function(_) {\n      return arguments.length ? (domain = map$2.call(_, number$1), scale) : domain.slice();\n    };\n\n    scale.copy = function() {\n      return identity$4().domain(domain);\n    };\n\n    return linearish(scale);\n  }\n\n  function nice(domain, interval) {\n    domain = domain.slice();\n\n    var i0 = 0,\n        i1 = domain.length - 1,\n        x0 = domain[i0],\n        x1 = domain[i1],\n        t;\n\n    if (x1 < x0) {\n      t = i0, i0 = i1, i1 = t;\n      t = x0, x0 = x1, x1 = t;\n    }\n\n    domain[i0] = interval.floor(x0);\n    domain[i1] = interval.ceil(x1);\n    return domain;\n  }\n\n  function deinterpolate$1(a, b) {\n    return (b = Math.log(b / a))\n        ? function(x) { return Math.log(x / a) / b; }\n        : constant$3(b);\n  }\n\n  function reinterpolate(a, b) {\n    return a < 0\n        ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n        : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n  }\n\n  function pow10(x) {\n    return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n  }\n\n  function powp(base) {\n    return base === 10 ? pow10\n        : base === Math.E ? Math.exp\n        : function(x) { return Math.pow(base, x); };\n  }\n\n  function logp(base) {\n    return base === Math.E ? Math.log\n        : base === 10 && Math.log10\n        || base === 2 && Math.log2\n        || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n  }\n\n  function reflect(f) {\n    return function(x) {\n      return -f(-x);\n    };\n  }\n\n  function log() {\n    var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),\n        domain = scale.domain,\n        base = 10,\n        logs = logp(10),\n        pows = powp(10);\n\n    function rescale() {\n      logs = logp(base), pows = powp(base);\n      if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n      return scale;\n    }\n\n    scale.base = function(_) {\n      return arguments.length ? (base = +_, rescale()) : base;\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain(_), rescale()) : domain();\n    };\n\n    scale.ticks = function(count) {\n      var d = domain(),\n          u = d[0],\n          v = d[d.length - 1],\n          r;\n\n      if (r = v < u) i = u, u = v, v = i;\n\n      var i = logs(u),\n          j = logs(v),\n          p,\n          k,\n          t,\n          n = count == null ? 10 : +count,\n          z = [];\n\n      if (!(base % 1) && j - i < n) {\n        i = Math.round(i) - 1, j = Math.round(j) + 1;\n        if (u > 0) for (; i < j; ++i) {\n          for (k = 1, p = pows(i); k < base; ++k) {\n            t = p * k;\n            if (t < u) continue;\n            if (t > v) break;\n            z.push(t);\n          }\n        } else for (; i < j; ++i) {\n          for (k = base - 1, p = pows(i); k >= 1; --k) {\n            t = p * k;\n            if (t < u) continue;\n            if (t > v) break;\n            z.push(t);\n          }\n        }\n      } else {\n        z = ticks(i, j, Math.min(j - i, n)).map(pows);\n      }\n\n      return r ? z.reverse() : z;\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n      if (typeof specifier !== \"function\") specifier = exports.format(specifier);\n      if (count === Infinity) return specifier;\n      if (count == null) count = 10;\n      var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n      return function(d) {\n        var i = d / pows(Math.round(logs(d)));\n        if (i * base < base - 0.5) i *= base;\n        return i <= k ? specifier(d) : \"\";\n      };\n    };\n\n    scale.nice = function() {\n      return domain(nice(domain(), {\n        floor: function(x) { return pows(Math.floor(logs(x))); },\n        ceil: function(x) { return pows(Math.ceil(logs(x))); }\n      }));\n    };\n\n    scale.copy = function() {\n      return copy(scale, log().base(base));\n    };\n\n    return scale;\n  }\n\n  function raise(x, exponent) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  }\n\n  function pow() {\n    var exponent = 1,\n        scale = continuous(deinterpolate, reinterpolate),\n        domain = scale.domain;\n\n    function deinterpolate(a, b) {\n      return (b = raise(b, exponent) - (a = raise(a, exponent)))\n          ? function(x) { return (raise(x, exponent) - a) / b; }\n          : constant$3(b);\n    }\n\n    function reinterpolate(a, b) {\n      b = raise(b, exponent) - (a = raise(a, exponent));\n      return function(t) { return raise(a + b * t, 1 / exponent); };\n    }\n\n    scale.exponent = function(_) {\n      return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n    };\n\n    scale.copy = function() {\n      return copy(scale, pow().exponent(exponent));\n    };\n\n    return linearish(scale);\n  }\n\n  function sqrt() {\n    return pow().exponent(0.5);\n  }\n\n  function quantile() {\n    var domain = [],\n        range = [],\n        thresholds = [];\n\n    function rescale() {\n      var i = 0, n = Math.max(1, range.length);\n      thresholds = new Array(n - 1);\n      while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n      return scale;\n    }\n\n    function scale(x) {\n      if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)];\n    }\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return i < 0 ? [NaN, NaN] : [\n        i > 0 ? thresholds[i - 1] : domain[0],\n        i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n      ];\n    };\n\n    scale.domain = function(_) {\n      if (!arguments.length) return domain.slice();\n      domain = [];\n      for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n      domain.sort(ascending);\n      return rescale();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice$3.call(_), rescale()) : range.slice();\n    };\n\n    scale.quantiles = function() {\n      return thresholds.slice();\n    };\n\n    scale.copy = function() {\n      return quantile()\n          .domain(domain)\n          .range(range);\n    };\n\n    return scale;\n  }\n\n  function quantize$1() {\n    var x0 = 0,\n        x1 = 1,\n        n = 1,\n        domain = [0.5],\n        range = [0, 1];\n\n    function scale(x) {\n      if (x <= x) return range[bisectRight(domain, x, 0, n)];\n    }\n\n    function rescale() {\n      var i = -1;\n      domain = new Array(n);\n      while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n      return scale;\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (n = (range = slice$3.call(_)).length - 1, rescale()) : range.slice();\n    };\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return i < 0 ? [NaN, NaN]\n          : i < 1 ? [x0, domain[0]]\n          : i >= n ? [domain[n - 1], x1]\n          : [domain[i - 1], domain[i]];\n    };\n\n    scale.copy = function() {\n      return quantize$1()\n          .domain([x0, x1])\n          .range(range);\n    };\n\n    return linearish(scale);\n  }\n\n  function threshold$1() {\n    var domain = [0.5],\n        range = [0, 1],\n        n = 1;\n\n    function scale(x) {\n      if (x <= x) return range[bisectRight(domain, x, 0, n)];\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n    };\n\n    scale.range = function(_) {\n      return arguments.length ? (range = slice$3.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n    };\n\n    scale.invertExtent = function(y) {\n      var i = range.indexOf(y);\n      return [domain[i - 1], domain[i]];\n    };\n\n    scale.copy = function() {\n      return threshold$1()\n          .domain(domain)\n          .range(range);\n    };\n\n    return scale;\n  }\n\nvar   durationSecond$1 = 1000;\nvar   durationMinute$1 = durationSecond$1 * 60;\nvar   durationHour$1 = durationMinute$1 * 60;\nvar   durationDay$1 = durationHour$1 * 24;\nvar   durationWeek$1 = durationDay$1 * 7;\n  var durationMonth = durationDay$1 * 30;\n  var durationYear = durationDay$1 * 365;\n  function date$1(t) {\n    return new Date(t);\n  }\n\n  function number$2(t) {\n    return t instanceof Date ? +t : +new Date(+t);\n  }\n\n  function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n    var scale = continuous(deinterpolate, interpolateNumber),\n        invert = scale.invert,\n        domain = scale.domain;\n\n    var formatMillisecond = format(\".%L\"),\n        formatSecond = format(\":%S\"),\n        formatMinute = format(\"%I:%M\"),\n        formatHour = format(\"%I %p\"),\n        formatDay = format(\"%a %d\"),\n        formatWeek = format(\"%b %d\"),\n        formatMonth = format(\"%B\"),\n        formatYear = format(\"%Y\");\n\n    var tickIntervals = [\n      [second,  1,      durationSecond$1],\n      [second,  5,  5 * durationSecond$1],\n      [second, 15, 15 * durationSecond$1],\n      [second, 30, 30 * durationSecond$1],\n      [minute,  1,      durationMinute$1],\n      [minute,  5,  5 * durationMinute$1],\n      [minute, 15, 15 * durationMinute$1],\n      [minute, 30, 30 * durationMinute$1],\n      [  hour,  1,      durationHour$1  ],\n      [  hour,  3,  3 * durationHour$1  ],\n      [  hour,  6,  6 * durationHour$1  ],\n      [  hour, 12, 12 * durationHour$1  ],\n      [   day,  1,      durationDay$1   ],\n      [   day,  2,  2 * durationDay$1   ],\n      [  week,  1,      durationWeek$1  ],\n      [ month,  1,      durationMonth ],\n      [ month,  3,  3 * durationMonth ],\n      [  year,  1,      durationYear  ]\n    ];\n\n    function tickFormat(date) {\n      return (second(date) < date ? formatMillisecond\n          : minute(date) < date ? formatSecond\n          : hour(date) < date ? formatMinute\n          : day(date) < date ? formatHour\n          : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n          : year(date) < date ? formatMonth\n          : formatYear)(date);\n    }\n\n    function tickInterval(interval, start, stop, step) {\n      if (interval == null) interval = 10;\n\n      // If a desired tick count is specified, pick a reasonable tick interval\n      // based on the extent of the domain and a rough estimate of tick size.\n      // Otherwise, assume interval is already a time interval and use it.\n      if (typeof interval === \"number\") {\n        var target = Math.abs(stop - start) / interval,\n            i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n        if (i === tickIntervals.length) {\n          step = tickStep(start / durationYear, stop / durationYear, interval);\n          interval = year;\n        } else if (i) {\n          i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n          step = i[1];\n          interval = i[0];\n        } else {\n          step = tickStep(start, stop, interval);\n          interval = millisecond;\n        }\n      }\n\n      return step == null ? interval : interval.every(step);\n    }\n\n    scale.invert = function(y) {\n      return new Date(invert(y));\n    };\n\n    scale.domain = function(_) {\n      return arguments.length ? domain(map$2.call(_, number$2)) : domain().map(date$1);\n    };\n\n    scale.ticks = function(interval, step) {\n      var d = domain(),\n          t0 = d[0],\n          t1 = d[d.length - 1],\n          r = t1 < t0,\n          t;\n      if (r) t = t0, t0 = t1, t1 = t;\n      t = tickInterval(interval, t0, t1, step);\n      t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n      return r ? t.reverse() : t;\n    };\n\n    scale.tickFormat = function(count, specifier) {\n      return specifier == null ? tickFormat : format(specifier);\n    };\n\n    scale.nice = function(interval, step) {\n      var d = domain();\n      return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n          ? domain(nice(d, interval))\n          : scale;\n    };\n\n    scale.copy = function() {\n      return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n    };\n\n    return scale;\n  }\n\n  function time() {\n    return calendar(year, month, timeWeek, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n  }\n\n  function utcTime() {\n    return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n  }\n\n  function colors(s) {\n    return s.match(/.{6}/g).map(function(x) {\n      return \"#\" + x;\n    });\n  }\n\n  var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\n  var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\n  var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\n  var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\n  var cubehelix$3 = interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n\n  var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\n  var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\n  var rainbow = cubehelix();\n\n  function rainbow$1(t) {\n    if (t < 0 || t > 1) t -= Math.floor(t);\n    var ts = Math.abs(t - 0.5);\n    rainbow.h = 360 * t - 100;\n    rainbow.s = 1.5 - 1.5 * ts;\n    rainbow.l = 0.8 - 0.9 * ts;\n    return rainbow + \"\";\n  }\n\n  function ramp(range) {\n    var n = range.length;\n    return function(t) {\n      return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n    };\n  }\n\n  var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\n  var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\n  var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\n  var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\n  function sequential(interpolator) {\n    var x0 = 0,\n        x1 = 1,\n        clamp = false;\n\n    function scale(x) {\n      var t = (x - x0) / (x1 - x0);\n      return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n    }\n\n    scale.domain = function(_) {\n      return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n    };\n\n    scale.clamp = function(_) {\n      return arguments.length ? (clamp = !!_, scale) : clamp;\n    };\n\n    scale.interpolator = function(_) {\n      return arguments.length ? (interpolator = _, scale) : interpolator;\n    };\n\n    scale.copy = function() {\n      return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n    };\n\n    return linearish(scale);\n  }\n\n  var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n  var namespaces = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: xhtml,\n    xlink: \"http://www.w3.org/1999/xlink\",\n    xml: \"http://www.w3.org/XML/1998/namespace\",\n    xmlns: \"http://www.w3.org/2000/xmlns/\"\n  };\n\n  function namespace(name) {\n    var prefix = name += \"\", i = prefix.indexOf(\":\");\n    if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n    return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n  }\n\n  function creatorInherit(name) {\n    return function() {\n      var document = this.ownerDocument,\n          uri = this.namespaceURI;\n      return uri === xhtml && document.documentElement.namespaceURI === xhtml\n          ? document.createElement(name)\n          : document.createElementNS(uri, name);\n    };\n  }\n\n  function creatorFixed(fullname) {\n    return function() {\n      return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n    };\n  }\n\n  function creator(name) {\n    var fullname = namespace(name);\n    return (fullname.local\n        ? creatorFixed\n        : creatorInherit)(fullname);\n  }\n\n  var nextId = 0;\n\n  function local() {\n    return new Local;\n  }\n\n  function Local() {\n    this._ = \"@\" + (++nextId).toString(36);\n  }\n\n  Local.prototype = local.prototype = {\n    constructor: Local,\n    get: function(node) {\n      var id = this._;\n      while (!(id in node)) if (!(node = node.parentNode)) return;\n      return node[id];\n    },\n    set: function(node, value) {\n      return node[this._] = value;\n    },\n    remove: function(node) {\n      return this._ in node && delete node[this._];\n    },\n    toString: function() {\n      return this._;\n    }\n  };\n\n  var matcher = function(selector) {\n    return function() {\n      return this.matches(selector);\n    };\n  };\n\n  if (typeof document !== \"undefined\") {\n    var element = document.documentElement;\n    if (!element.matches) {\n      var vendorMatches = element.webkitMatchesSelector\n          || element.msMatchesSelector\n          || element.mozMatchesSelector\n          || element.oMatchesSelector;\n      matcher = function(selector) {\n        return function() {\n          return vendorMatches.call(this, selector);\n        };\n      };\n    }\n  }\n\n  var matcher$1 = matcher;\n\n  var filterEvents = {};\n\n  exports.event = null;\n\n  if (typeof document !== \"undefined\") {\n    var element$1 = document.documentElement;\n    if (!(\"onmouseenter\" in element$1)) {\n      filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n    }\n  }\n\n  function filterContextListener(listener, index, group) {\n    listener = contextListener(listener, index, group);\n    return function(event) {\n      var related = event.relatedTarget;\n      if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n        listener.call(this, event);\n      }\n    };\n  }\n\n  function contextListener(listener, index, group) {\n    return function(event1) {\n      var event0 = exports.event; // Events can be reentrant (e.g., focus).\n      exports.event = event1;\n      try {\n        listener.call(this, this.__data__, index, group);\n      } finally {\n        exports.event = event0;\n      }\n    };\n  }\n\n  function parseTypenames$1(typenames) {\n    return typenames.trim().split(/^|\\s+/).map(function(t) {\n      var name = \"\", i = t.indexOf(\".\");\n      if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n      return {type: t, name: name};\n    });\n  }\n\n  function onRemove(typename) {\n    return function() {\n      var on = this.__on;\n      if (!on) return;\n      for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n        if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n        } else {\n          on[++i] = o;\n        }\n      }\n      if (++i) on.length = i;\n      else delete this.__on;\n    };\n  }\n\n  function onAdd(typename, value, capture) {\n    var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n    return function(d, i, group) {\n      var on = this.__on, o, listener = wrap(value, i, group);\n      if (on) for (var j = 0, m = on.length; j < m; ++j) {\n        if ((o = on[j]).type === typename.type && o.name === typename.name) {\n          this.removeEventListener(o.type, o.listener, o.capture);\n          this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n          o.value = value;\n          return;\n        }\n      }\n      this.addEventListener(typename.type, listener, capture);\n      o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n      if (!on) this.__on = [o];\n      else on.push(o);\n    };\n  }\n\n  function selection_on(typename, value, capture) {\n    var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n    if (arguments.length < 2) {\n      var on = this.node().__on;\n      if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n        for (i = 0, o = on[j]; i < n; ++i) {\n          if ((t = typenames[i]).type === o.type && t.name === o.name) {\n            return o.value;\n          }\n        }\n      }\n      return;\n    }\n\n    on = value ? onAdd : onRemove;\n    if (capture == null) capture = false;\n    for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n    return this;\n  }\n\n  function customEvent(event1, listener, that, args) {\n    var event0 = exports.event;\n    event1.sourceEvent = exports.event;\n    exports.event = event1;\n    try {\n      return listener.apply(that, args);\n    } finally {\n      exports.event = event0;\n    }\n  }\n\n  function sourceEvent() {\n    var current = exports.event, source;\n    while (source = current.sourceEvent) current = source;\n    return current;\n  }\n\n  function point$5(node, event) {\n    var svg = node.ownerSVGElement || node;\n\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n\n    var rect = node.getBoundingClientRect();\n    return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n  }\n\n  function mouse(node) {\n    var event = sourceEvent();\n    if (event.changedTouches) event = event.changedTouches[0];\n    return point$5(node, event);\n  }\n\n  function none$2() {}\n\n  function selector(selector) {\n    return selector == null ? none$2 : function() {\n      return this.querySelector(selector);\n    };\n  }\n\n  function selection_select(select) {\n    if (typeof select !== \"function\") select = selector(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          subgroup[i] = subnode;\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function empty() {\n    return [];\n  }\n\n  function selectorAll(selector) {\n    return selector == null ? empty : function() {\n      return this.querySelectorAll(selector);\n    };\n  }\n\n  function selection_selectAll(select) {\n    if (typeof select !== \"function\") select = selectorAll(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          subgroups.push(select.call(node, node.__data__, i, group));\n          parents.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, parents);\n  }\n\n  function selection_filter(match) {\n    if (typeof match !== \"function\") match = matcher$1(match);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n          subgroup.push(node);\n        }\n      }\n    }\n\n    return new Selection(subgroups, this._parents);\n  }\n\n  function sparse(update) {\n    return new Array(update.length);\n  }\n\n  function selection_enter() {\n    return new Selection(this._enter || this._groups.map(sparse), this._parents);\n  }\n\n  function EnterNode(parent, datum) {\n    this.ownerDocument = parent.ownerDocument;\n    this.namespaceURI = parent.namespaceURI;\n    this._next = null;\n    this._parent = parent;\n    this.__data__ = datum;\n  }\n\n  EnterNode.prototype = {\n    constructor: EnterNode,\n    appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n    insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n    querySelector: function(selector) { return this._parent.querySelector(selector); },\n    querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n  };\n\n  function constant$4(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n  function bindIndex(parent, group, enter, update, exit, data) {\n    var i = 0,\n        node,\n        groupLength = group.length,\n        dataLength = data.length;\n\n    // Put any non-null nodes that fit into update.\n    // Put any null nodes into enter.\n    // Put any remaining data into enter.\n    for (; i < dataLength; ++i) {\n      if (node = group[i]) {\n        node.__data__ = data[i];\n        update[i] = node;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Put any non-null nodes that don’t fit into exit.\n    for (; i < groupLength; ++i) {\n      if (node = group[i]) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function bindKey(parent, group, enter, update, exit, data, key) {\n    var i,\n        node,\n        nodeByKeyValue = {},\n        groupLength = group.length,\n        dataLength = data.length,\n        keyValues = new Array(groupLength),\n        keyValue;\n\n    // Compute the key for each node.\n    // If multiple nodes have the same key, the duplicates are added to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if (node = group[i]) {\n        keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n        if (keyValue in nodeByKeyValue) {\n          exit[i] = node;\n        } else {\n          nodeByKeyValue[keyValue] = node;\n        }\n      }\n    }\n\n    // Compute the key for each datum.\n    // If there a node associated with this key, join and add it to update.\n    // If there is not (or the key is a duplicate), add it to enter.\n    for (i = 0; i < dataLength; ++i) {\n      keyValue = keyPrefix + key.call(parent, data[i], i, data);\n      if (node = nodeByKeyValue[keyValue]) {\n        update[i] = node;\n        node.__data__ = data[i];\n        nodeByKeyValue[keyValue] = null;\n      } else {\n        enter[i] = new EnterNode(parent, data[i]);\n      }\n    }\n\n    // Add any remaining nodes that were not bound to data to exit.\n    for (i = 0; i < groupLength; ++i) {\n      if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n        exit[i] = node;\n      }\n    }\n  }\n\n  function selection_data(value, key) {\n    if (!value) {\n      data = new Array(this.size()), j = -1;\n      this.each(function(d) { data[++j] = d; });\n      return data;\n    }\n\n    var bind = key ? bindKey : bindIndex,\n        parents = this._parents,\n        groups = this._groups;\n\n    if (typeof value !== \"function\") value = constant$4(value);\n\n    for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n      var parent = parents[j],\n          group = groups[j],\n          groupLength = group.length,\n          data = value.call(parent, parent && parent.__data__, j, parents),\n          dataLength = data.length,\n          enterGroup = enter[j] = new Array(dataLength),\n          updateGroup = update[j] = new Array(dataLength),\n          exitGroup = exit[j] = new Array(groupLength);\n\n      bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n      // Now connect the enter nodes to their following update node, such that\n      // appendChild can insert the materialized enter node before this node,\n      // rather than at the end of the parent node.\n      for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n        if (previous = enterGroup[i0]) {\n          if (i0 >= i1) i1 = i0 + 1;\n          while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n          previous._next = next || null;\n        }\n      }\n    }\n\n    update = new Selection(update, parents);\n    update._enter = enter;\n    update._exit = exit;\n    return update;\n  }\n\n  function selection_exit() {\n    return new Selection(this._exit || this._groups.map(sparse), this._parents);\n  }\n\n  function selection_merge(selection) {\n\n    for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group0[i] || group1[i]) {\n          merge[i] = node;\n        }\n      }\n    }\n\n    for (; j < m0; ++j) {\n      merges[j] = groups0[j];\n    }\n\n    return new Selection(merges, this._parents);\n  }\n\n  function selection_order() {\n\n    for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n      for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n        if (node = group[i]) {\n          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n\n    return this;\n  }\n\n  function selection_sort(compare) {\n    if (!compare) compare = ascending$2;\n\n    function compareNode(a, b) {\n      return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n    }\n\n    for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          sortgroup[i] = node;\n        }\n      }\n      sortgroup.sort(compareNode);\n    }\n\n    return new Selection(sortgroups, this._parents).order();\n  }\n\n  function ascending$2(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n\n  function selection_call() {\n    var callback = arguments[0];\n    arguments[0] = this;\n    callback.apply(null, arguments);\n    return this;\n  }\n\n  function selection_nodes() {\n    var nodes = new Array(this.size()), i = -1;\n    this.each(function() { nodes[++i] = this; });\n    return nodes;\n  }\n\n  function selection_node() {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n\n    return null;\n  }\n\n  function selection_size() {\n    var size = 0;\n    this.each(function() { ++size; });\n    return size;\n  }\n\n  function selection_empty() {\n    return !this.node();\n  }\n\n  function selection_each(callback) {\n\n    for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n      for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n        if (node = group[i]) callback.call(node, node.__data__, i, group);\n      }\n    }\n\n    return this;\n  }\n\n  function attrRemove(name) {\n    return function() {\n      this.removeAttribute(name);\n    };\n  }\n\n  function attrRemoveNS(fullname) {\n    return function() {\n      this.removeAttributeNS(fullname.space, fullname.local);\n    };\n  }\n\n  function attrConstant(name, value) {\n    return function() {\n      this.setAttribute(name, value);\n    };\n  }\n\n  function attrConstantNS(fullname, value) {\n    return function() {\n      this.setAttributeNS(fullname.space, fullname.local, value);\n    };\n  }\n\n  function attrFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttribute(name);\n      else this.setAttribute(name, v);\n    };\n  }\n\n  function attrFunctionNS(fullname, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n      else this.setAttributeNS(fullname.space, fullname.local, v);\n    };\n  }\n\n  function selection_attr(name, value) {\n    var fullname = namespace(name);\n\n    if (arguments.length < 2) {\n      var node = this.node();\n      return fullname.local\n          ? node.getAttributeNS(fullname.space, fullname.local)\n          : node.getAttribute(fullname);\n    }\n\n    return this.each((value == null\n        ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n        ? (fullname.local ? attrFunctionNS : attrFunction)\n        : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n  }\n\n  function window(node) {\n    return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n        || (node.document && node) // node is a Window\n        || node.defaultView; // node is a Document\n  }\n\n  function styleRemove(name) {\n    return function() {\n      this.style.removeProperty(name);\n    };\n  }\n\n  function styleConstant(name, value, priority) {\n    return function() {\n      this.style.setProperty(name, value, priority);\n    };\n  }\n\n  function styleFunction(name, value, priority) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) this.style.removeProperty(name);\n      else this.style.setProperty(name, v, priority);\n    };\n  }\n\n  function selection_style(name, value, priority) {\n    var node;\n    return arguments.length > 1\n        ? this.each((value == null\n              ? styleRemove : typeof value === \"function\"\n              ? styleFunction\n              : styleConstant)(name, value, priority == null ? \"\" : priority))\n        : window(node = this.node())\n            .getComputedStyle(node, null)\n            .getPropertyValue(name);\n  }\n\n  function propertyRemove(name) {\n    return function() {\n      delete this[name];\n    };\n  }\n\n  function propertyConstant(name, value) {\n    return function() {\n      this[name] = value;\n    };\n  }\n\n  function propertyFunction(name, value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      if (v == null) delete this[name];\n      else this[name] = v;\n    };\n  }\n\n  function selection_property(name, value) {\n    return arguments.length > 1\n        ? this.each((value == null\n            ? propertyRemove : typeof value === \"function\"\n            ? propertyFunction\n            : propertyConstant)(name, value))\n        : this.node()[name];\n  }\n\n  function classArray(string) {\n    return string.trim().split(/^|\\s+/);\n  }\n\n  function classList(node) {\n    return node.classList || new ClassList(node);\n  }\n\n  function ClassList(node) {\n    this._node = node;\n    this._names = classArray(node.getAttribute(\"class\") || \"\");\n  }\n\n  ClassList.prototype = {\n    add: function(name) {\n      var i = this._names.indexOf(name);\n      if (i < 0) {\n        this._names.push(name);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    remove: function(name) {\n      var i = this._names.indexOf(name);\n      if (i >= 0) {\n        this._names.splice(i, 1);\n        this._node.setAttribute(\"class\", this._names.join(\" \"));\n      }\n    },\n    contains: function(name) {\n      return this._names.indexOf(name) >= 0;\n    }\n  };\n\n  function classedAdd(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.add(names[i]);\n  }\n\n  function classedRemove(node, names) {\n    var list = classList(node), i = -1, n = names.length;\n    while (++i < n) list.remove(names[i]);\n  }\n\n  function classedTrue(names) {\n    return function() {\n      classedAdd(this, names);\n    };\n  }\n\n  function classedFalse(names) {\n    return function() {\n      classedRemove(this, names);\n    };\n  }\n\n  function classedFunction(names, value) {\n    return function() {\n      (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n    };\n  }\n\n  function selection_classed(name, value) {\n    var names = classArray(name + \"\");\n\n    if (arguments.length < 2) {\n      var list = classList(this.node()), i = -1, n = names.length;\n      while (++i < n) if (!list.contains(names[i])) return false;\n      return true;\n    }\n\n    return this.each((typeof value === \"function\"\n        ? classedFunction : value\n        ? classedTrue\n        : classedFalse)(names, value));\n  }\n\n  function textRemove() {\n    this.textContent = \"\";\n  }\n\n  function textConstant(value) {\n    return function() {\n      this.textContent = value;\n    };\n  }\n\n  function textFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_text(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? textRemove : (typeof value === \"function\"\n            ? textFunction\n            : textConstant)(value))\n        : this.node().textContent;\n  }\n\n  function htmlRemove() {\n    this.innerHTML = \"\";\n  }\n\n  function htmlConstant(value) {\n    return function() {\n      this.innerHTML = value;\n    };\n  }\n\n  function htmlFunction(value) {\n    return function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    };\n  }\n\n  function selection_html(value) {\n    return arguments.length\n        ? this.each(value == null\n            ? htmlRemove : (typeof value === \"function\"\n            ? htmlFunction\n            : htmlConstant)(value))\n        : this.node().innerHTML;\n  }\n\n  function raise$1() {\n    if (this.nextSibling) this.parentNode.appendChild(this);\n  }\n\n  function selection_raise() {\n    return this.each(raise$1);\n  }\n\n  function lower() {\n    if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n  }\n\n  function selection_lower() {\n    return this.each(lower);\n  }\n\n  function selection_append(name) {\n    var create = typeof name === \"function\" ? name : creator(name);\n    return this.select(function() {\n      return this.appendChild(create.apply(this, arguments));\n    });\n  }\n\n  function constantNull() {\n    return null;\n  }\n\n  function selection_insert(name, before) {\n    var create = typeof name === \"function\" ? name : creator(name),\n        select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n    return this.select(function() {\n      return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n    });\n  }\n\n  function remove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n\n  function selection_remove() {\n    return this.each(remove);\n  }\n\n  function selection_datum(value) {\n    return arguments.length\n        ? this.property(\"__data__\", value)\n        : this.node().__data__;\n  }\n\n  function dispatchEvent(node, type, params) {\n    var window$$ = window(node),\n        event = window$$.CustomEvent;\n\n    if (event) {\n      event = new event(type, params);\n    } else {\n      event = window$$.document.createEvent(\"Event\");\n      if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n      else event.initEvent(type, false, false);\n    }\n\n    node.dispatchEvent(event);\n  }\n\n  function dispatchConstant(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params);\n    };\n  }\n\n  function dispatchFunction(type, params) {\n    return function() {\n      return dispatchEvent(this, type, params.apply(this, arguments));\n    };\n  }\n\n  function selection_dispatch(type, params) {\n    return this.each((typeof params === \"function\"\n        ? dispatchFunction\n        : dispatchConstant)(type, params));\n  }\n\n  var root = [null];\n\n  function Selection(groups, parents) {\n    this._groups = groups;\n    this._parents = parents;\n  }\n\n  function selection() {\n    return new Selection([[document.documentElement]], root);\n  }\n\n  Selection.prototype = selection.prototype = {\n    constructor: Selection,\n    select: selection_select,\n    selectAll: selection_selectAll,\n    filter: selection_filter,\n    data: selection_data,\n    enter: selection_enter,\n    exit: selection_exit,\n    merge: selection_merge,\n    order: selection_order,\n    sort: selection_sort,\n    call: selection_call,\n    nodes: selection_nodes,\n    node: selection_node,\n    size: selection_size,\n    empty: selection_empty,\n    each: selection_each,\n    attr: selection_attr,\n    style: selection_style,\n    property: selection_property,\n    classed: selection_classed,\n    text: selection_text,\n    html: selection_html,\n    raise: selection_raise,\n    lower: selection_lower,\n    append: selection_append,\n    insert: selection_insert,\n    remove: selection_remove,\n    datum: selection_datum,\n    on: selection_on,\n    dispatch: selection_dispatch\n  };\n\n  function select(selector) {\n    return typeof selector === \"string\"\n        ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n        : new Selection([[selector]], root);\n  }\n\n  function selectAll(selector) {\n    return typeof selector === \"string\"\n        ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n        : new Selection([selector == null ? [] : selector], root);\n  }\n\n  function touch(node, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n    for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return point$5(node, touch);\n      }\n    }\n\n    return null;\n  }\n\n  function touches(node, touches) {\n    if (touches == null) touches = sourceEvent().touches;\n\n    for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n      points[i] = point$5(node, touches[i]);\n    }\n\n    return points;\n  }\n\n  var emptyOn = dispatch(\"start\", \"end\", \"interrupt\");\n  var emptyTween = [];\n\n  var CREATED = 0;\n  var SCHEDULED = 1;\n  var STARTING = 2;\n  var STARTED = 3;\n  var ENDING = 4;\n  var ENDED = 5;\n\n  function schedule(node, name, id, index, group, timing) {\n    var schedules = node.__transition;\n    if (!schedules) node.__transition = {};\n    else if (id in schedules) return;\n    create(node, id, {\n      name: name,\n      index: index, // For context during callback.\n      group: group, // For context during callback.\n      on: emptyOn,\n      tween: emptyTween,\n      time: timing.time,\n      delay: timing.delay,\n      duration: timing.duration,\n      ease: timing.ease,\n      timer: null,\n      state: CREATED\n    });\n  }\n\n  function init(node, id) {\n    var schedule = node.__transition;\n    if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error(\"too late\");\n    return schedule;\n  }\n\n  function set$2(node, id) {\n    var schedule = node.__transition;\n    if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error(\"too late\");\n    return schedule;\n  }\n\n  function get$1(node, id) {\n    var schedule = node.__transition;\n    if (!schedule || !(schedule = schedule[id])) throw new Error(\"too late\");\n    return schedule;\n  }\n\n  function create(node, id, self) {\n    var schedules = node.__transition,\n        tween;\n\n    // Initialize the self timer when the transition is created.\n    // Note the actual delay is not known until the first callback!\n    schedules[id] = self;\n    self.timer = timer(schedule, 0, self.time);\n\n    // If the delay is greater than this first sleep, sleep some more;\n    // otherwise, start immediately.\n    function schedule(elapsed) {\n      self.state = SCHEDULED;\n      if (self.delay <= elapsed) start(elapsed - self.delay);\n      else self.timer.restart(start, self.delay, self.time);\n    }\n\n    function start(elapsed) {\n      var i, j, n, o;\n\n      for (i in schedules) {\n        o = schedules[i];\n        if (o.name !== self.name) continue;\n\n        // Interrupt the active transition, if any.\n        // Dispatch the interrupt event.\n        if (o.state === STARTED) {\n          o.state = ENDED;\n          o.timer.stop();\n          o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n          delete schedules[i];\n        }\n\n        // Cancel any pre-empted transitions. No interrupt event is dispatched\n        // because the cancelled transitions never started. Note that this also\n        // removes this transition from the pending list!\n        else if (+i < id) {\n          o.state = ENDED;\n          o.timer.stop();\n          delete schedules[i];\n        }\n      }\n\n      // Defer the first tick to end of the current frame; see mbostock/d3#1576.\n      // Note the transition may be canceled after start and before the first tick!\n      // Note this must be scheduled before the start event; see d3/d3-transition#16!\n      // Assuming this is successful, subsequent callbacks go straight to tick.\n      timeout$1(function() {\n        if (self.state === STARTED) {\n          self.timer.restart(tick, self.delay, self.time);\n          tick(elapsed);\n        }\n      });\n\n      // Dispatch the start event.\n      // Note this must be done before the tween are initialized.\n      self.state = STARTING;\n      self.on.call(\"start\", node, node.__data__, self.index, self.group);\n      if (self.state !== STARTING) return; // interrupted\n      self.state = STARTED;\n\n      // Initialize the tween, deleting null tween.\n      tween = new Array(n = self.tween.length);\n      for (i = 0, j = -1; i < n; ++i) {\n        if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n          tween[++j] = o;\n        }\n      }\n      tween.length = j + 1;\n    }\n\n    function tick(elapsed) {\n      var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.state = ENDING, 1),\n          i = -1,\n          n = tween.length;\n\n      while (++i < n) {\n        tween[i].call(null, t);\n      }\n\n      // Dispatch the end event.\n      if (self.state === ENDING) {\n        self.state = ENDED;\n        self.timer.stop();\n        self.on.call(\"end\", node, node.__data__, self.index, self.group);\n        for (i in schedules) if (+i !== id) return void delete schedules[id];\n        delete node.__transition;\n      }\n    }\n  }\n\n  function interrupt(node, name) {\n    var schedules = node.__transition,\n        schedule,\n        active,\n        empty = true,\n        i;\n\n    if (!schedules) return;\n\n    name = name == null ? null : name + \"\";\n\n    for (i in schedules) {\n      if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n      active = schedule.state === STARTED;\n      schedule.state = ENDED;\n      schedule.timer.stop();\n      if (active) schedule.on.call(\"interrupt\", node, node.__data__, schedule.index, schedule.group);\n      delete schedules[i];\n    }\n\n    if (empty) delete node.__transition;\n  }\n\n  function selection_interrupt(name) {\n    return this.each(function() {\n      interrupt(this, name);\n    });\n  }\n\n  function tweenRemove(id, name) {\n    var tween0, tween1;\n    return function() {\n      var schedule = set$2(this, id),\n          tween = schedule.tween;\n\n      // If this node shared tween with the previous node,\n      // just assign the updated shared tween and we’re done!\n      // Otherwise, copy-on-write.\n      if (tween !== tween0) {\n        tween1 = tween0 = tween;\n        for (var i = 0, n = tween1.length; i < n; ++i) {\n          if (tween1[i].name === name) {\n            tween1 = tween1.slice();\n            tween1.splice(i, 1);\n            break;\n          }\n        }\n      }\n\n      schedule.tween = tween1;\n    };\n  }\n\n  function tweenFunction(id, name, value) {\n    var tween0, tween1;\n    if (typeof value !== \"function\") throw new Error;\n    return function() {\n      var schedule = set$2(this, id),\n          tween = schedule.tween;\n\n      // If this node shared tween with the previous node,\n      // just assign the updated shared tween and we’re done!\n      // Otherwise, copy-on-write.\n      if (tween !== tween0) {\n        tween1 = (tween0 = tween).slice();\n        for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n          if (tween1[i].name === name) {\n            tween1[i] = t;\n            break;\n          }\n        }\n        if (i === n) tween1.push(t);\n      }\n\n      schedule.tween = tween1;\n    };\n  }\n\n  function transition_tween(name, value) {\n    var id = this._id;\n\n    name += \"\";\n\n    if (arguments.length < 2) {\n      var tween = get$1(this.node(), id).tween;\n      for (var i = 0, n = tween.length, t; i < n; ++i) {\n        if ((t = tween[i]).name === name) {\n          return t.value;\n        }\n      }\n      return null;\n    }\n\n    return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n  }\n\n  function tweenValue(transition, name, value) {\n    var id = transition._id;\n\n    transition.each(function() {\n      var schedule = set$2(this, id);\n      (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n    });\n\n    return function(node) {\n      return get$1(node, id).value[name];\n    };\n  }\n\n  function interpolate$1(a, b) {\n    var c;\n    return (typeof b === \"number\" ? interpolateNumber\n        : b instanceof color ? interpolateRgb\n        : (c = color(b)) ? (b = c, interpolateRgb)\n        : interpolateString)(a, b);\n  }\n\n  function attrRemove$1(name) {\n    return function() {\n      this.removeAttribute(name);\n    };\n  }\n\n  function attrRemoveNS$1(fullname) {\n    return function() {\n      this.removeAttributeNS(fullname.space, fullname.local);\n    };\n  }\n\n  function attrConstant$1(name, interpolate, value1) {\n    var value00,\n        interpolate0;\n    return function() {\n      var value0 = this.getAttribute(name);\n      return value0 === value1 ? null\n          : value0 === value00 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value1);\n    };\n  }\n\n  function attrConstantNS$1(fullname, interpolate, value1) {\n    var value00,\n        interpolate0;\n    return function() {\n      var value0 = this.getAttributeNS(fullname.space, fullname.local);\n      return value0 === value1 ? null\n          : value0 === value00 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value1);\n    };\n  }\n\n  function attrFunction$1(name, interpolate, value) {\n    var value00,\n        value10,\n        interpolate0;\n    return function() {\n      var value0, value1 = value(this);\n      if (value1 == null) return void this.removeAttribute(name);\n      value0 = this.getAttribute(name);\n      return value0 === value1 ? null\n          : value0 === value00 && value1 === value10 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n    };\n  }\n\n  function attrFunctionNS$1(fullname, interpolate, value) {\n    var value00,\n        value10,\n        interpolate0;\n    return function() {\n      var value0, value1 = value(this);\n      if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n      value0 = this.getAttributeNS(fullname.space, fullname.local);\n      return value0 === value1 ? null\n          : value0 === value00 && value1 === value10 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n    };\n  }\n\n  function transition_attr(name, value) {\n    var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform$2 : interpolate$1;\n    return this.attrTween(name, typeof value === \"function\"\n        ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n        : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)\n        : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));\n  }\n\n  function attrTweenNS(fullname, value) {\n    function tween() {\n      var node = this, i = value.apply(node, arguments);\n      return i && function(t) {\n        node.setAttributeNS(fullname.space, fullname.local, i(t));\n      };\n    }\n    tween._value = value;\n    return tween;\n  }\n\n  function attrTween(name, value) {\n    function tween() {\n      var node = this, i = value.apply(node, arguments);\n      return i && function(t) {\n        node.setAttribute(name, i(t));\n      };\n    }\n    tween._value = value;\n    return tween;\n  }\n\n  function transition_attrTween(name, value) {\n    var key = \"attr.\" + name;\n    if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n    if (value == null) return this.tween(key, null);\n    if (typeof value !== \"function\") throw new Error;\n    var fullname = namespace(name);\n    return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n  }\n\n  function delayFunction(id, value) {\n    return function() {\n      init(this, id).delay = +value.apply(this, arguments);\n    };\n  }\n\n  function delayConstant(id, value) {\n    return value = +value, function() {\n      init(this, id).delay = value;\n    };\n  }\n\n  function transition_delay(value) {\n    var id = this._id;\n\n    return arguments.length\n        ? this.each((typeof value === \"function\"\n            ? delayFunction\n            : delayConstant)(id, value))\n        : get$1(this.node(), id).delay;\n  }\n\n  function durationFunction(id, value) {\n    return function() {\n      set$2(this, id).duration = +value.apply(this, arguments);\n    };\n  }\n\n  function durationConstant(id, value) {\n    return value = +value, function() {\n      set$2(this, id).duration = value;\n    };\n  }\n\n  function transition_duration(value) {\n    var id = this._id;\n\n    return arguments.length\n        ? this.each((typeof value === \"function\"\n            ? durationFunction\n            : durationConstant)(id, value))\n        : get$1(this.node(), id).duration;\n  }\n\n  function easeConstant(id, value) {\n    if (typeof value !== \"function\") throw new Error;\n    return function() {\n      set$2(this, id).ease = value;\n    };\n  }\n\n  function transition_ease(value) {\n    var id = this._id;\n\n    return arguments.length\n        ? this.each(easeConstant(id, value))\n        : get$1(this.node(), id).ease;\n  }\n\n  function transition_filter(match) {\n    if (typeof match !== \"function\") match = matcher$1(match);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n        if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n          subgroup.push(node);\n        }\n      }\n    }\n\n    return new Transition(subgroups, this._parents, this._name, this._id);\n  }\n\n  function transition_merge(transition) {\n    if (transition._id !== this._id) throw new Error;\n\n    for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n      for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n        if (node = group0[i] || group1[i]) {\n          merge[i] = node;\n        }\n      }\n    }\n\n    for (; j < m0; ++j) {\n      merges[j] = groups0[j];\n    }\n\n    return new Transition(merges, this._parents, this._name, this._id);\n  }\n\n  function start$1(name) {\n    return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n      var i = t.indexOf(\".\");\n      if (i >= 0) t = t.slice(0, i);\n      return !t || t === \"start\";\n    });\n  }\n\n  function onFunction(id, name, listener) {\n    var on0, on1, sit = start$1(name) ? init : set$2;\n    return function() {\n      var schedule = sit(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n      schedule.on = on1;\n    };\n  }\n\n  function transition_on(name, listener) {\n    var id = this._id;\n\n    return arguments.length < 2\n        ? get$1(this.node(), id).on.on(name)\n        : this.each(onFunction(id, name, listener));\n  }\n\n  function removeFunction(id) {\n    return function() {\n      var parent = this.parentNode;\n      for (var i in this.__transition) if (+i !== id) return;\n      if (parent) parent.removeChild(this);\n    };\n  }\n\n  function transition_remove() {\n    return this.on(\"end.remove\", removeFunction(this._id));\n  }\n\n  function transition_select(select) {\n    var name = this._name,\n        id = this._id;\n\n    if (typeof select !== \"function\") select = selector(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          subgroup[i] = subnode;\n          schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));\n        }\n      }\n    }\n\n    return new Transition(subgroups, this._parents, name, id);\n  }\n\n  function transition_selectAll(select) {\n    var name = this._name,\n        id = this._id;\n\n    if (typeof select !== \"function\") select = selectorAll(select);\n\n    for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          for (var children = select.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {\n            if (child = children[k]) {\n              schedule(child, name, id, k, children, inherit);\n            }\n          }\n          subgroups.push(children);\n          parents.push(node);\n        }\n      }\n    }\n\n    return new Transition(subgroups, parents, name, id);\n  }\n\n  var Selection$1 = selection.prototype.constructor;\n\n  function transition_selection() {\n    return new Selection$1(this._groups, this._parents);\n  }\n\n  function styleRemove$1(name, interpolate) {\n    var value00,\n        value10,\n        interpolate0;\n    return function() {\n      var style = window(this).getComputedStyle(this, null),\n          value0 = style.getPropertyValue(name),\n          value1 = (this.style.removeProperty(name), style.getPropertyValue(name));\n      return value0 === value1 ? null\n          : value0 === value00 && value1 === value10 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n    };\n  }\n\n  function styleRemoveEnd(name) {\n    return function() {\n      this.style.removeProperty(name);\n    };\n  }\n\n  function styleConstant$1(name, interpolate, value1) {\n    var value00,\n        interpolate0;\n    return function() {\n      var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);\n      return value0 === value1 ? null\n          : value0 === value00 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value1);\n    };\n  }\n\n  function styleFunction$1(name, interpolate, value) {\n    var value00,\n        value10,\n        interpolate0;\n    return function() {\n      var style = window(this).getComputedStyle(this, null),\n          value0 = style.getPropertyValue(name),\n          value1 = value(this);\n      if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));\n      return value0 === value1 ? null\n          : value0 === value00 && value1 === value10 ? interpolate0\n          : interpolate0 = interpolate(value00 = value0, value10 = value1);\n    };\n  }\n\n  function transition_style(name, value, priority) {\n    var i = (name += \"\") === \"transform\" ? interpolateTransform$1 : interpolate$1;\n    return value == null ? this\n            .styleTween(name, styleRemove$1(name, i))\n            .on(\"end.style.\" + name, styleRemoveEnd(name))\n        : this.styleTween(name, typeof value === \"function\"\n            ? styleFunction$1(name, i, tweenValue(this, \"style.\" + name, value))\n            : styleConstant$1(name, i, value), priority);\n  }\n\n  function styleTween(name, value, priority) {\n    function tween() {\n      var node = this, i = value.apply(node, arguments);\n      return i && function(t) {\n        node.style.setProperty(name, i(t), priority);\n      };\n    }\n    tween._value = value;\n    return tween;\n  }\n\n  function transition_styleTween(name, value, priority) {\n    var key = \"style.\" + (name += \"\");\n    if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n    if (value == null) return this.tween(key, null);\n    if (typeof value !== \"function\") throw new Error;\n    return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n  }\n\n  function textConstant$1(value) {\n    return function() {\n      this.textContent = value;\n    };\n  }\n\n  function textFunction$1(value) {\n    return function() {\n      var value1 = value(this);\n      this.textContent = value1 == null ? \"\" : value1;\n    };\n  }\n\n  function transition_text(value) {\n    return this.tween(\"text\", typeof value === \"function\"\n        ? textFunction$1(tweenValue(this, \"text\", value))\n        : textConstant$1(value == null ? \"\" : value + \"\"));\n  }\n\n  function transition_transition() {\n    var name = this._name,\n        id0 = this._id,\n        id1 = newId();\n\n    for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          var inherit = get$1(node, id0);\n          schedule(node, name, id1, i, group, {\n            time: inherit.time + inherit.delay + inherit.duration,\n            delay: 0,\n            duration: inherit.duration,\n            ease: inherit.ease\n          });\n        }\n      }\n    }\n\n    return new Transition(groups, this._parents, name, id1);\n  }\n\n  var id = 0;\n\n  function Transition(groups, parents, name, id) {\n    this._groups = groups;\n    this._parents = parents;\n    this._name = name;\n    this._id = id;\n  }\n\n  function transition(name) {\n    return selection().transition(name);\n  }\n\n  function newId() {\n    return ++id;\n  }\n\n  var selection_prototype = selection.prototype;\n\n  Transition.prototype = transition.prototype = {\n    constructor: Transition,\n    select: transition_select,\n    selectAll: transition_selectAll,\n    filter: transition_filter,\n    merge: transition_merge,\n    selection: transition_selection,\n    transition: transition_transition,\n    call: selection_prototype.call,\n    nodes: selection_prototype.nodes,\n    node: selection_prototype.node,\n    size: selection_prototype.size,\n    empty: selection_prototype.empty,\n    each: selection_prototype.each,\n    on: transition_on,\n    attr: transition_attr,\n    attrTween: transition_attrTween,\n    style: transition_style,\n    styleTween: transition_styleTween,\n    text: transition_text,\n    remove: transition_remove,\n    tween: transition_tween,\n    delay: transition_delay,\n    duration: transition_duration,\n    ease: transition_ease\n  };\n\n  var defaultTiming = {\n    time: null, // Set on use.\n    delay: 0,\n    duration: 250,\n    ease: easeCubicInOut\n  };\n\n  function inherit(node, id) {\n    var timing;\n    while (!(timing = node.__transition) || !(timing = timing[id])) {\n      if (!(node = node.parentNode)) {\n        return defaultTiming.time = now(), defaultTiming;\n      }\n    }\n    return timing;\n  }\n\n  function selection_transition(name) {\n    var id,\n        timing;\n\n    if (name instanceof Transition) {\n      id = name._id, name = name._name;\n    } else {\n      id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n    }\n\n    for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n      for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n        if (node = group[i]) {\n          schedule(node, name, id, i, group, timing || inherit(node, id));\n        }\n      }\n    }\n\n    return new Transition(groups, this._parents, name, id);\n  }\n\n  selection.prototype.interrupt = selection_interrupt;\n  selection.prototype.transition = selection_transition;\n\n  var root$1 = [null];\n\n  function active(node, name) {\n    var schedules = node.__transition,\n        schedule,\n        i;\n\n    if (schedules) {\n      name = name == null ? null : name + \"\";\n      for (i in schedules) {\n        if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n          return new Transition([[node]], root$1, name, +i);\n        }\n      }\n    }\n\n    return null;\n  }\n\n  var slice$4 = Array.prototype.slice;\n\n  function identity$5(x) {\n    return x;\n  }\n\n  var top = 1;\n  var right = 2;\n  var bottom = 3;\n  var left = 4;\nvar   epsilon$2 = 1e-6;\n  function translateX(scale0, scale1, d) {\n    var x = scale0(d);\n    return \"translate(\" + (isFinite(x) ? x : scale1(d)) + \",0)\";\n  }\n\n  function translateY(scale0, scale1, d) {\n    var y = scale0(d);\n    return \"translate(0,\" + (isFinite(y) ? y : scale1(d)) + \")\";\n  }\n\n  function center(scale) {\n    var offset = scale.bandwidth() / 2;\n    if (scale.round()) offset = Math.round(offset);\n    return function(d) {\n      return scale(d) + offset;\n    };\n  }\n\n  function entering() {\n    return !this.__axis;\n  }\n\n  function axis(orient, scale) {\n    var tickArguments = [],\n        tickValues = null,\n        tickFormat = null,\n        tickSizeInner = 6,\n        tickSizeOuter = 6,\n        tickPadding = 3;\n\n    function axis(context) {\n      var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n          format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,\n          spacing = Math.max(tickSizeInner, 0) + tickPadding,\n          transform = orient === top || orient === bottom ? translateX : translateY,\n          range = scale.range(),\n          range0 = range[0] + 0.5,\n          range1 = range[range.length - 1] + 0.5,\n          position = (scale.bandwidth ? center : identity$5)(scale.copy()),\n          selection = context.selection ? context.selection() : context,\n          path = selection.selectAll(\".domain\").data([null]),\n          tick = selection.selectAll(\".tick\").data(values, scale).order(),\n          tickExit = tick.exit(),\n          tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n          line = tick.select(\"line\"),\n          text = tick.select(\"text\"),\n          k = orient === top || orient === left ? -1 : 1,\n          x, y = orient === left || orient === right ? (x = \"x\", \"y\") : (x = \"y\", \"x\");\n\n      path = path.merge(path.enter().insert(\"path\", \".tick\")\n          .attr(\"class\", \"domain\")\n          .attr(\"stroke\", \"#000\"));\n\n      tick = tick.merge(tickEnter);\n\n      line = line.merge(tickEnter.append(\"line\")\n          .attr(\"stroke\", \"#000\")\n          .attr(x + \"2\", k * tickSizeInner)\n          .attr(y + \"1\", 0.5)\n          .attr(y + \"2\", 0.5));\n\n      text = text.merge(tickEnter.append(\"text\")\n          .attr(\"fill\", \"#000\")\n          .attr(x, k * spacing)\n          .attr(y, 0.5)\n          .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n      if (context !== selection) {\n        path = path.transition(context);\n        tick = tick.transition(context);\n        line = line.transition(context);\n        text = text.transition(context);\n\n        tickExit = tickExit.transition(context)\n            .attr(\"opacity\", epsilon$2)\n            .attr(\"transform\", function(d) { return transform(position, this.parentNode.__axis || position, d); });\n\n        tickEnter\n            .attr(\"opacity\", epsilon$2)\n            .attr(\"transform\", function(d) { return transform(this.parentNode.__axis || position, position, d); });\n      }\n\n      tickExit.remove();\n\n      path\n          .attr(\"d\", orient === left || orient == right\n              ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter\n              : \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter);\n\n      tick\n          .attr(\"opacity\", 1)\n          .attr(\"transform\", function(d) { return transform(position, position, d); });\n\n      line\n          .attr(x + \"2\", k * tickSizeInner);\n\n      text\n          .attr(x, k * spacing)\n          .text(format);\n\n      selection.filter(entering)\n          .attr(\"fill\", \"none\")\n          .attr(\"font-size\", 10)\n          .attr(\"font-family\", \"sans-serif\")\n          .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n      selection\n          .each(function() { this.__axis = position; });\n    }\n\n    axis.scale = function(_) {\n      return arguments.length ? (scale = _, axis) : scale;\n    };\n\n    axis.ticks = function() {\n      return tickArguments = slice$4.call(arguments), axis;\n    };\n\n    axis.tickArguments = function(_) {\n      return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();\n    };\n\n    axis.tickValues = function(_) {\n      return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();\n    };\n\n    axis.tickFormat = function(_) {\n      return arguments.length ? (tickFormat = _, axis) : tickFormat;\n    };\n\n    axis.tickSize = function(_) {\n      return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n    };\n\n    axis.tickSizeInner = function(_) {\n      return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n    };\n\n    axis.tickSizeOuter = function(_) {\n      return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n    };\n\n    axis.tickPadding = function(_) {\n      return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n    };\n\n    return axis;\n  }\n\n  function axisTop(scale) {\n    return axis(top, scale);\n  }\n\n  function axisRight(scale) {\n    return axis(right, scale);\n  }\n\n  function axisBottom(scale) {\n    return axis(bottom, scale);\n  }\n\n  function axisLeft(scale) {\n    return axis(left, scale);\n  }\n\n  function defaultSeparation(a, b) {\n    return a.parent === b.parent ? 1 : 2;\n  }\n\n  function meanX(children) {\n    return children.reduce(meanXReduce, 0) / children.length;\n  }\n\n  function meanXReduce(x, c) {\n    return x + c.x;\n  }\n\n  function maxY(children) {\n    return 1 + children.reduce(maxYReduce, 0);\n  }\n\n  function maxYReduce(y, c) {\n    return Math.max(y, c.y);\n  }\n\n  function leafLeft(node) {\n    var children;\n    while (children = node.children) node = children[0];\n    return node;\n  }\n\n  function leafRight(node) {\n    var children;\n    while (children = node.children) node = children[children.length - 1];\n    return node;\n  }\n\n  function cluster() {\n    var separation = defaultSeparation,\n        dx = 1,\n        dy = 1,\n        nodeSize = false;\n\n    function cluster(root) {\n      var previousNode,\n          x = 0;\n\n      // First walk, computing the initial x & y values.\n      root.eachAfter(function(node) {\n        var children = node.children;\n        if (children) {\n          node.x = meanX(children);\n          node.y = maxY(children);\n        } else {\n          node.x = previousNode ? x += separation(node, previousNode) : 0;\n          node.y = 0;\n          previousNode = node;\n        }\n      });\n\n      var left = leafLeft(root),\n          right = leafRight(root),\n          x0 = left.x - separation(left, right) / 2,\n          x1 = right.x + separation(right, left) / 2;\n\n      // Second walk, normalizing x & y to the desired size.\n      return root.eachAfter(nodeSize ? function(node) {\n        node.x = (node.x - root.x) * dx;\n        node.y = (root.y - node.y) * dy;\n      } : function(node) {\n        node.x = (node.x - x0) / (x1 - x0) * dx;\n        node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n      });\n    }\n\n    cluster.separation = function(x) {\n      return arguments.length ? (separation = x, cluster) : separation;\n    };\n\n    cluster.size = function(x) {\n      return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n    };\n\n    cluster.nodeSize = function(x) {\n      return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n    };\n\n    return cluster;\n  }\n\n  function node_each(callback) {\n    var node = this, current, next = [node], children, i, n;\n    do {\n      current = next.reverse(), next = [];\n      while (node = current.pop()) {\n        callback(node), children = node.children;\n        if (children) for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    } while (next.length);\n    return this;\n  }\n\n  function node_eachBefore(callback) {\n    var node = this, nodes = [node], children, i;\n    while (node = nodes.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n    return this;\n  }\n\n  function node_eachAfter(callback) {\n    var node = this, nodes = [node], next = [], children, i, n;\n    while (node = nodes.pop()) {\n      next.push(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n    while (node = next.pop()) {\n      callback(node);\n    }\n    return this;\n  }\n\n  function node_sum(value) {\n    return this.eachAfter(function(node) {\n      var sum = +value(node.data) || 0,\n          children = node.children,\n          i = children && children.length;\n      while (--i >= 0) sum += children[i].value;\n      node.value = sum;\n    });\n  }\n\n  function node_sort(compare) {\n    return this.eachBefore(function(node) {\n      if (node.children) {\n        node.children.sort(compare);\n      }\n    });\n  }\n\n  function node_path(end) {\n    var start = this,\n        ancestor = leastCommonAncestor(start, end),\n        nodes = [start];\n    while (start !== ancestor) {\n      start = start.parent;\n      nodes.push(start);\n    }\n    var k = nodes.length;\n    while (end !== ancestor) {\n      nodes.splice(k, 0, end);\n      end = end.parent;\n    }\n    return nodes;\n  }\n\n  function leastCommonAncestor(a, b) {\n    if (a === b) return a;\n    var aNodes = a.ancestors(),\n        bNodes = b.ancestors(),\n        c = null;\n    a = aNodes.pop();\n    b = bNodes.pop();\n    while (a === b) {\n      c = a;\n      a = aNodes.pop();\n      b = bNodes.pop();\n    }\n    return c;\n  }\n\n  function node_ancestors() {\n    var node = this, nodes = [node];\n    while (node = node.parent) {\n      nodes.push(node);\n    }\n    return nodes;\n  }\n\n  function node_descendants() {\n    var nodes = [];\n    this.each(function(node) {\n      nodes.push(node);\n    });\n    return nodes;\n  }\n\n  function node_leaves() {\n    var leaves = [];\n    this.eachBefore(function(node) {\n      if (!node.children) {\n        leaves.push(node);\n      }\n    });\n    return leaves;\n  }\n\n  function node_links() {\n    var root = this, links = [];\n    root.each(function(node) {\n      if (node !== root) { // Don’t include the root’s parent, if any.\n        links.push({source: node.parent, target: node});\n      }\n    });\n    return links;\n  }\n\n  function hierarchy(data, children) {\n    var root = new Node(data),\n        valued = +data.value && (root.value = data.value),\n        node,\n        nodes = [root],\n        child,\n        childs,\n        i,\n        n;\n\n    if (children == null) children = defaultChildren;\n\n    while (node = nodes.pop()) {\n      if (valued) node.value = +node.data.value;\n      if ((childs = children(node.data)) && (n = childs.length)) {\n        node.children = new Array(n);\n        for (i = n - 1; i >= 0; --i) {\n          nodes.push(child = node.children[i] = new Node(childs[i]));\n          child.parent = node;\n          child.depth = node.depth + 1;\n        }\n      }\n    }\n\n    return root.eachBefore(computeHeight);\n  }\n\n  function node_copy() {\n    return hierarchy(this).eachBefore(copyData);\n  }\n\n  function defaultChildren(d) {\n    return d.children;\n  }\n\n  function copyData(node) {\n    node.data = node.data.data;\n  }\n\n  function computeHeight(node) {\n    var height = 0;\n    do node.height = height;\n    while ((node = node.parent) && (node.height < ++height));\n  }\n\n  function Node(data) {\n    this.data = data;\n    this.depth =\n    this.height = 0;\n    this.parent = null;\n  }\n\n  Node.prototype = hierarchy.prototype = {\n    constructor: Node,\n    each: node_each,\n    eachAfter: node_eachAfter,\n    eachBefore: node_eachBefore,\n    sum: node_sum,\n    sort: node_sort,\n    path: node_path,\n    ancestors: node_ancestors,\n    descendants: node_descendants,\n    leaves: node_leaves,\n    links: node_links,\n    copy: node_copy\n  };\n\n  function Node$2(value) {\n    this._ = value;\n    this.next = null;\n  }\n\n  function shuffle$1(array) {\n    var i,\n        n = (array = array.slice()).length,\n        head = null,\n        node = head;\n\n    while (n) {\n      var next = new Node$2(array[n - 1]);\n      if (node) node = node.next = next;\n      else node = head = next;\n      array[i] = array[--n];\n    }\n\n    return {\n      head: head,\n      tail: node\n    };\n  }\n\n  function enclose(circles) {\n    return encloseN(shuffle$1(circles), []);\n  }\n\n  function encloses(a, b) {\n    var dx = b.x - a.x,\n        dy = b.y - a.y,\n        dr = a.r - b.r;\n    return dr * dr + 1e-6 > dx * dx + dy * dy;\n  }\n\n  // Returns the smallest circle that contains circles L and intersects circles B.\n  function encloseN(L, B) {\n    var circle,\n        l0 = null,\n        l1 = L.head,\n        l2,\n        p1;\n\n    switch (B.length) {\n      case 1: circle = enclose1(B[0]); break;\n      case 2: circle = enclose2(B[0], B[1]); break;\n      case 3: circle = enclose3(B[0], B[1], B[2]); break;\n    }\n\n    while (l1) {\n      p1 = l1._, l2 = l1.next;\n      if (!circle || !encloses(circle, p1)) {\n\n        // Temporarily truncate L before l1.\n        if (l0) L.tail = l0, l0.next = null;\n        else L.head = L.tail = null;\n\n        B.push(p1);\n        circle = encloseN(L, B); // Note: reorders L!\n        B.pop();\n\n        // Move l1 to the front of L and reconnect the truncated list L.\n        if (L.head) l1.next = L.head, L.head = l1;\n        else l1.next = null, L.head = L.tail = l1;\n        l0 = L.tail, l0.next = l2;\n\n      } else {\n        l0 = l1;\n      }\n      l1 = l2;\n    }\n\n    L.tail = l0;\n    return circle;\n  }\n\n  function enclose1(a) {\n    return {\n      x: a.x,\n      y: a.y,\n      r: a.r\n    };\n  }\n\n  function enclose2(a, b) {\n    var x1 = a.x, y1 = a.y, r1 = a.r,\n        x2 = b.x, y2 = b.y, r2 = b.r,\n        x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n        l = Math.sqrt(x21 * x21 + y21 * y21);\n    return {\n      x: (x1 + x2 + x21 / l * r21) / 2,\n      y: (y1 + y2 + y21 / l * r21) / 2,\n      r: (l + r1 + r2) / 2\n    };\n  }\n\n  function enclose3(a, b, c) {\n    var x1 = a.x, y1 = a.y, r1 = a.r,\n        x2 = b.x, y2 = b.y, r2 = b.r,\n        x3 = c.x, y3 = c.y, r3 = c.r,\n        a2 = 2 * (x1 - x2),\n        b2 = 2 * (y1 - y2),\n        c2 = 2 * (r2 - r1),\n        d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,\n        a3 = 2 * (x1 - x3),\n        b3 = 2 * (y1 - y3),\n        c3 = 2 * (r3 - r1),\n        d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,\n        ab = a3 * b2 - a2 * b3,\n        xa = (b2 * d3 - b3 * d2) / ab - x1,\n        xb = (b3 * c2 - b2 * c3) / ab,\n        ya = (a3 * d2 - a2 * d3) / ab - y1,\n        yb = (a2 * c3 - a3 * c2) / ab,\n        A = xb * xb + yb * yb - 1,\n        B = 2 * (xa * xb + ya * yb + r1),\n        C = xa * xa + ya * ya - r1 * r1,\n        r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);\n    return {\n      x: xa + xb * r + x1,\n      y: ya + yb * r + y1,\n      r: r\n    };\n  }\n\n  function place(a, b, c) {\n    var ax = a.x,\n        ay = a.y,\n        da = b.r + c.r,\n        db = a.r + c.r,\n        dx = b.x - ax,\n        dy = b.y - ay,\n        dc = dx * dx + dy * dy;\n    if (dc) {\n      var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),\n          y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n      c.x = ax + x * dx + y * dy;\n      c.y = ay + x * dy - y * dx;\n    } else {\n      c.x = ax + db;\n      c.y = ay;\n    }\n  }\n\n  function intersects(a, b) {\n    var dx = b.x - a.x,\n        dy = b.y - a.y,\n        dr = a.r + b.r;\n    return dr * dr > dx * dx + dy * dy;\n  }\n\n  function distance2(circle, x, y) {\n    var dx = circle.x - x,\n        dy = circle.y - y;\n    return dx * dx + dy * dy;\n  }\n\n  function Node$1(circle) {\n    this._ = circle;\n    this.next = null;\n    this.previous = null;\n  }\n\n  function packEnclose(circles) {\n    if (!(n = circles.length)) return 0;\n\n    var a, b, c, n;\n\n    // Place the first circle.\n    a = circles[0], a.x = 0, a.y = 0;\n    if (!(n > 1)) return a.r;\n\n    // Place the second circle.\n    b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n    if (!(n > 2)) return a.r + b.r;\n\n    // Place the third circle.\n    place(b, a, c = circles[2]);\n\n    // Initialize the weighted centroid.\n    var aa = a.r * a.r,\n        ba = b.r * b.r,\n        ca = c.r * c.r,\n        oa = aa + ba + ca,\n        ox = aa * a.x + ba * b.x + ca * c.x,\n        oy = aa * a.y + ba * b.y + ca * c.y,\n        cx, cy, i, j, k, sj, sk;\n\n    // Initialize the front-chain using the first three circles a, b and c.\n    a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);\n    a.next = c.previous = b;\n    b.next = a.previous = c;\n    c.next = b.previous = a;\n\n    // Attempt to place each remaining circle…\n    pack: for (i = 3; i < n; ++i) {\n      place(a._, b._, c = circles[i]), c = new Node$1(c);\n\n      // If there are only three elements in the front-chain…\n      if ((k = a.previous) === (j = b.next)) {\n        // If the new circle intersects the third circle,\n        // rotate the front chain to try the next position.\n        if (intersects(j._, c._)) {\n          a = b, b = j, --i;\n          continue pack;\n        }\n      }\n\n      // Find the closest intersecting circle on the front-chain, if any.\n      else {\n        sj = j._.r, sk = k._.r;\n        do {\n          if (sj <= sk) {\n            if (intersects(j._, c._)) {\n              b = j, a.next = b, b.previous = a, --i;\n              continue pack;\n            }\n            j = j.next, sj += j._.r;\n          } else {\n            if (intersects(k._, c._)) {\n              a = k, a.next = b, b.previous = a, --i;\n              continue pack;\n            }\n            k = k.previous, sk += k._.r;\n          }\n        } while (j !== k.next);\n      }\n\n      // Success! Insert the new circle c between a and b.\n      c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n      // Update the weighted centroid.\n      oa += ca = c._.r * c._.r;\n      ox += ca * c._.x;\n      oy += ca * c._.y;\n\n      // Compute the new closest circle a to centroid.\n      aa = distance2(a._, cx = ox / oa, cy = oy / oa);\n      while ((c = c.next) !== b) {\n        if ((ca = distance2(c._, cx, cy)) < aa) {\n          a = c, aa = ca;\n        }\n      }\n      b = a.next;\n    }\n\n    // Compute the enclosing circle of the front chain.\n    a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n    // Translate the circles to put the enclosing circle around the origin.\n    for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n    return c.r;\n  }\n\n  function siblings(circles) {\n    packEnclose(circles);\n    return circles;\n  }\n\n  function optional(f) {\n    return f == null ? null : required(f);\n  }\n\n  function required(f) {\n    if (typeof f !== \"function\") throw new Error;\n    return f;\n  }\n\n  function constantZero() {\n    return 0;\n  }\n\n  function constant$5(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function defaultRadius(d) {\n    return Math.sqrt(d.value);\n  }\n\n  function index() {\n    var radius = null,\n        dx = 1,\n        dy = 1,\n        padding = constantZero;\n\n    function pack(root) {\n      root.x = dx / 2, root.y = dy / 2;\n      if (radius) {\n        root.eachBefore(radiusLeaf(radius))\n            .eachAfter(packChildren(padding, 0.5))\n            .eachBefore(translateChild(1));\n      } else {\n        root.eachBefore(radiusLeaf(defaultRadius))\n            .eachAfter(packChildren(constantZero, 1))\n            .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n            .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n      }\n      return root;\n    }\n\n    pack.radius = function(x) {\n      return arguments.length ? (radius = optional(x), pack) : radius;\n    };\n\n    pack.size = function(x) {\n      return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n    };\n\n    pack.padding = function(x) {\n      return arguments.length ? (padding = typeof x === \"function\" ? x : constant$5(+x), pack) : padding;\n    };\n\n    return pack;\n  }\n\n  function radiusLeaf(radius) {\n    return function(node) {\n      if (!node.children) {\n        node.r = Math.max(0, +radius(node) || 0);\n      }\n    };\n  }\n\n  function packChildren(padding, k) {\n    return function(node) {\n      if (children = node.children) {\n        var children,\n            i,\n            n = children.length,\n            r = padding(node) * k || 0,\n            e;\n\n        if (r) for (i = 0; i < n; ++i) children[i].r += r;\n        e = packEnclose(children);\n        if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n        node.r = e + r;\n      }\n    };\n  }\n\n  function translateChild(k) {\n    return function(node) {\n      var parent = node.parent;\n      node.r *= k;\n      if (parent) {\n        node.x = parent.x + k * node.x;\n        node.y = parent.y + k * node.y;\n      }\n    };\n  }\n\n  function roundNode(node) {\n    node.x0 = Math.round(node.x0);\n    node.y0 = Math.round(node.y0);\n    node.x1 = Math.round(node.x1);\n    node.y1 = Math.round(node.y1);\n  }\n\n  function treemapDice(parent, x0, y0, x1, y1) {\n    var nodes = parent.children,\n        node,\n        i = -1,\n        n = nodes.length,\n        k = parent.value && (x1 - x0) / parent.value;\n\n    while (++i < n) {\n      node = nodes[i], node.y0 = y0, node.y1 = y1;\n      node.x0 = x0, node.x1 = x0 += node.value * k;\n    }\n  }\n\n  function partition() {\n    var dx = 1,\n        dy = 1,\n        padding = 0,\n        round = false;\n\n    function partition(root) {\n      var n = root.height + 1;\n      root.x0 =\n      root.y0 = padding;\n      root.x1 = dx;\n      root.y1 = dy / n;\n      root.eachBefore(positionNode(dy, n));\n      if (round) root.eachBefore(roundNode);\n      return root;\n    }\n\n    function positionNode(dy, n) {\n      return function(node) {\n        if (node.children) {\n          treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n        }\n        var x0 = node.x0,\n            y0 = node.y0,\n            x1 = node.x1 - padding,\n            y1 = node.y1 - padding;\n        if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n        if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n        node.x0 = x0;\n        node.y0 = y0;\n        node.x1 = x1;\n        node.y1 = y1;\n      };\n    }\n\n    partition.round = function(x) {\n      return arguments.length ? (round = !!x, partition) : round;\n    };\n\n    partition.size = function(x) {\n      return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n    };\n\n    partition.padding = function(x) {\n      return arguments.length ? (padding = +x, partition) : padding;\n    };\n\n    return partition;\n  }\n\nvar   keyPrefix$1 = \"$\";\n  var preroot = {depth: -1};\n  var ambiguous = {};\n  function defaultId(d) {\n    return d.id;\n  }\n\n  function defaultParentId(d) {\n    return d.parentId;\n  }\n\n  function stratify() {\n    var id = defaultId,\n        parentId = defaultParentId;\n\n    function stratify(data) {\n      var d,\n          i,\n          n = data.length,\n          root,\n          parent,\n          node,\n          nodes = new Array(n),\n          nodeId,\n          nodeKey,\n          nodeByKey = {};\n\n      for (i = 0; i < n; ++i) {\n        d = data[i], node = nodes[i] = new Node(d);\n        if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n          nodeKey = keyPrefix$1 + (node.id = nodeId);\n          nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n        }\n      }\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i], nodeId = parentId(data[i], i, data);\n        if (nodeId == null || !(nodeId += \"\")) {\n          if (root) throw new Error(\"multiple roots\");\n          root = node;\n        } else {\n          parent = nodeByKey[keyPrefix$1 + nodeId];\n          if (!parent) throw new Error(\"missing: \" + nodeId);\n          if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n          if (parent.children) parent.children.push(node);\n          else parent.children = [node];\n          node.parent = parent;\n        }\n      }\n\n      if (!root) throw new Error(\"no root\");\n      root.parent = preroot;\n      root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n      root.parent = null;\n      if (n > 0) throw new Error(\"cycle\");\n\n      return root;\n    }\n\n    stratify.id = function(x) {\n      return arguments.length ? (id = required(x), stratify) : id;\n    };\n\n    stratify.parentId = function(x) {\n      return arguments.length ? (parentId = required(x), stratify) : parentId;\n    };\n\n    return stratify;\n  }\n\n  function defaultSeparation$1(a, b) {\n    return a.parent === b.parent ? 1 : 2;\n  }\n\n  // function radialSeparation(a, b) {\n  //   return (a.parent === b.parent ? 1 : 2) / a.depth;\n  // }\n\n  // This function is used to traverse the left contour of a subtree (or\n  // subforest). It returns the successor of v on this contour. This successor is\n  // either given by the leftmost child of v or by the thread of v. The function\n  // returns null if and only if v is on the highest level of its subtree.\n  function nextLeft(v) {\n    var children = v.children;\n    return children ? children[0] : v.t;\n  }\n\n  // This function works analogously to nextLeft.\n  function nextRight(v) {\n    var children = v.children;\n    return children ? children[children.length - 1] : v.t;\n  }\n\n  // Shifts the current subtree rooted at w+. This is done by increasing\n  // prelim(w+) and mod(w+) by shift.\n  function moveSubtree(wm, wp, shift) {\n    var change = shift / (wp.i - wm.i);\n    wp.c -= change;\n    wp.s += shift;\n    wm.c += change;\n    wp.z += shift;\n    wp.m += shift;\n  }\n\n  // All other shifts, applied to the smaller subtrees between w- and w+, are\n  // performed by this function. To prepare the shifts, we have to adjust\n  // change(w+), shift(w+), and change(w-).\n  function executeShifts(v) {\n    var shift = 0,\n        change = 0,\n        children = v.children,\n        i = children.length,\n        w;\n    while (--i >= 0) {\n      w = children[i];\n      w.z += shift;\n      w.m += shift;\n      shift += w.s + (change += w.c);\n    }\n  }\n\n  // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n  // returns the specified (default) ancestor.\n  function nextAncestor(vim, v, ancestor) {\n    return vim.a.parent === v.parent ? vim.a : ancestor;\n  }\n\n  function TreeNode(node, i) {\n    this._ = node;\n    this.parent = null;\n    this.children = null;\n    this.A = null; // default ancestor\n    this.a = this; // ancestor\n    this.z = 0; // prelim\n    this.m = 0; // mod\n    this.c = 0; // change\n    this.s = 0; // shift\n    this.t = null; // thread\n    this.i = i; // number\n  }\n\n  TreeNode.prototype = Object.create(Node.prototype);\n\n  function treeRoot(root) {\n    var tree = new TreeNode(root, 0),\n        node,\n        nodes = [tree],\n        child,\n        children,\n        i,\n        n;\n\n    while (node = nodes.pop()) {\n      if (children = node._.children) {\n        node.children = new Array(n = children.length);\n        for (i = n - 1; i >= 0; --i) {\n          nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n          child.parent = node;\n        }\n      }\n    }\n\n    (tree.parent = new TreeNode(null, 0)).children = [tree];\n    return tree;\n  }\n\n  // Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\n  function tree() {\n    var separation = defaultSeparation$1,\n        dx = 1,\n        dy = 1,\n        nodeSize = null;\n\n    function tree(root) {\n      var t = treeRoot(root);\n\n      // Compute the layout using Buchheim et al.’s algorithm.\n      t.eachAfter(firstWalk), t.parent.m = -t.z;\n      t.eachBefore(secondWalk);\n\n      // If a fixed node size is specified, scale x and y.\n      if (nodeSize) root.eachBefore(sizeNode);\n\n      // If a fixed tree size is specified, scale x and y based on the extent.\n      // Compute the left-most, right-most, and depth-most nodes for extents.\n      else {\n        var left = root,\n            right = root,\n            bottom = root;\n        root.eachBefore(function(node) {\n          if (node.x < left.x) left = node;\n          if (node.x > right.x) right = node;\n          if (node.depth > bottom.depth) bottom = node;\n        });\n        var s = left === right ? 1 : separation(left, right) / 2,\n            tx = s - left.x,\n            kx = dx / (right.x + s + tx),\n            ky = dy / (bottom.depth || 1);\n        root.eachBefore(function(node) {\n          node.x = (node.x + tx) * kx;\n          node.y = node.depth * ky;\n        });\n      }\n\n      return root;\n    }\n\n    // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n    // applied recursively to the children of v, as well as the function\n    // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n    // node v is placed to the midpoint of its outermost children.\n    function firstWalk(v) {\n      var children = v.children,\n          siblings = v.parent.children,\n          w = v.i ? siblings[v.i - 1] : null;\n      if (children) {\n        executeShifts(v);\n        var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n        if (w) {\n          v.z = w.z + separation(v._, w._);\n          v.m = v.z - midpoint;\n        } else {\n          v.z = midpoint;\n        }\n      } else if (w) {\n        v.z = w.z + separation(v._, w._);\n      }\n      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n    }\n\n    // Computes all real x-coordinates by summing up the modifiers recursively.\n    function secondWalk(v) {\n      v._.x = v.z + v.parent.m;\n      v.m += v.parent.m;\n    }\n\n    // The core of the algorithm. Here, a new subtree is combined with the\n    // previous subtrees. Threads are used to traverse the inside and outside\n    // contours of the left and right subtree up to the highest common level. The\n    // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n    // superscript o means outside and i means inside, the subscript - means left\n    // subtree and + means right subtree. For summing up the modifiers along the\n    // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n    // nodes of the inside contours conflict, we compute the left one of the\n    // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n    // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n    // Finally, we add a new thread (if necessary).\n    function apportion(v, w, ancestor) {\n      if (w) {\n        var vip = v,\n            vop = v,\n            vim = w,\n            vom = vip.parent.children[0],\n            sip = vip.m,\n            sop = vop.m,\n            sim = vim.m,\n            som = vom.m,\n            shift;\n        while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n          vom = nextLeft(vom);\n          vop = nextRight(vop);\n          vop.a = v;\n          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n          if (shift > 0) {\n            moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n            sip += shift;\n            sop += shift;\n          }\n          sim += vim.m;\n          sip += vip.m;\n          som += vom.m;\n          sop += vop.m;\n        }\n        if (vim && !nextRight(vop)) {\n          vop.t = vim;\n          vop.m += sim - sop;\n        }\n        if (vip && !nextLeft(vom)) {\n          vom.t = vip;\n          vom.m += sip - som;\n          ancestor = v;\n        }\n      }\n      return ancestor;\n    }\n\n    function sizeNode(node) {\n      node.x *= dx;\n      node.y = node.depth * dy;\n    }\n\n    tree.separation = function(x) {\n      return arguments.length ? (separation = x, tree) : separation;\n    };\n\n    tree.size = function(x) {\n      return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n    };\n\n    tree.nodeSize = function(x) {\n      return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n    };\n\n    return tree;\n  }\n\n  function treemapSlice(parent, x0, y0, x1, y1) {\n    var nodes = parent.children,\n        node,\n        i = -1,\n        n = nodes.length,\n        k = parent.value && (y1 - y0) / parent.value;\n\n    while (++i < n) {\n      node = nodes[i], node.x0 = x0, node.x1 = x1;\n      node.y0 = y0, node.y1 = y0 += node.value * k;\n    }\n  }\n\n  var phi = (1 + Math.sqrt(5)) / 2;\n\n  function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n    var rows = [],\n        nodes = parent.children,\n        row,\n        nodeValue,\n        i0 = 0,\n        i1,\n        n = nodes.length,\n        dx, dy,\n        value = parent.value,\n        sumValue,\n        minValue,\n        maxValue,\n        newRatio,\n        minRatio,\n        alpha,\n        beta;\n\n    while (i0 < n) {\n      dx = x1 - x0, dy = y1 - y0;\n      minValue = maxValue = sumValue = nodes[i0].value;\n      alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n      beta = sumValue * sumValue * alpha;\n      minRatio = Math.max(maxValue / beta, beta / minValue);\n\n      // Keep adding nodes while the aspect ratio maintains or improves.\n      for (i1 = i0 + 1; i1 < n; ++i1) {\n        sumValue += nodeValue = nodes[i1].value;\n        if (nodeValue < minValue) minValue = nodeValue;\n        if (nodeValue > maxValue) maxValue = nodeValue;\n        beta = sumValue * sumValue * alpha;\n        newRatio = Math.max(maxValue / beta, beta / minValue);\n        if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n        minRatio = newRatio;\n      }\n\n      // Position and record the row orientation.\n      rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n      if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n      else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n      value -= sumValue, i0 = i1;\n    }\n\n    return rows;\n  }\n\n  var squarify = (function custom(ratio) {\n\n    function squarify(parent, x0, y0, x1, y1) {\n      squarifyRatio(ratio, parent, x0, y0, x1, y1);\n    }\n\n    squarify.ratio = function(x) {\n      return custom((x = +x) > 1 ? x : 1);\n    };\n\n    return squarify;\n  })(phi);\n\n  function index$1() {\n    var tile = squarify,\n        round = false,\n        dx = 1,\n        dy = 1,\n        paddingStack = [0],\n        paddingInner = constantZero,\n        paddingTop = constantZero,\n        paddingRight = constantZero,\n        paddingBottom = constantZero,\n        paddingLeft = constantZero;\n\n    function treemap(root) {\n      root.x0 =\n      root.y0 = 0;\n      root.x1 = dx;\n      root.y1 = dy;\n      root.eachBefore(positionNode);\n      paddingStack = [0];\n      if (round) root.eachBefore(roundNode);\n      return root;\n    }\n\n    function positionNode(node) {\n      var p = paddingStack[node.depth],\n          x0 = node.x0 + p,\n          y0 = node.y0 + p,\n          x1 = node.x1 - p,\n          y1 = node.y1 - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n      if (node.children) {\n        p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n        x0 += paddingLeft(node) - p;\n        y0 += paddingTop(node) - p;\n        x1 -= paddingRight(node) - p;\n        y1 -= paddingBottom(node) - p;\n        if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n        if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n        tile(node, x0, y0, x1, y1);\n      }\n    }\n\n    treemap.round = function(x) {\n      return arguments.length ? (round = !!x, treemap) : round;\n    };\n\n    treemap.size = function(x) {\n      return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n    };\n\n    treemap.tile = function(x) {\n      return arguments.length ? (tile = required(x), treemap) : tile;\n    };\n\n    treemap.padding = function(x) {\n      return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n    };\n\n    treemap.paddingInner = function(x) {\n      return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingInner;\n    };\n\n    treemap.paddingOuter = function(x) {\n      return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n    };\n\n    treemap.paddingTop = function(x) {\n      return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingTop;\n    };\n\n    treemap.paddingRight = function(x) {\n      return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingRight;\n    };\n\n    treemap.paddingBottom = function(x) {\n      return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingBottom;\n    };\n\n    treemap.paddingLeft = function(x) {\n      return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$5(+x), treemap) : paddingLeft;\n    };\n\n    return treemap;\n  }\n\n  function binary(parent, x0, y0, x1, y1) {\n    var nodes = parent.children,\n        i, n = nodes.length,\n        sum, sums = new Array(n + 1);\n\n    for (sums[0] = sum = i = 0; i < n; ++i) {\n      sums[i + 1] = sum += nodes[i].value;\n    }\n\n    partition(0, n, parent.value, x0, y0, x1, y1);\n\n    function partition(i, j, value, x0, y0, x1, y1) {\n      if (i >= j - 1) {\n        var node = nodes[i];\n        node.x0 = x0, node.y0 = y0;\n        node.x1 = x1, node.y1 = y1;\n        return;\n      }\n\n      var valueOffset = sums[i],\n          valueTarget = (value / 2) + valueOffset,\n          k = i + 1,\n          hi = j - 1;\n\n      while (k < hi) {\n        var mid = k + hi >>> 1;\n        if (sums[mid] < valueTarget) k = mid + 1;\n        else hi = mid;\n      }\n\n      var valueLeft = sums[k] - valueOffset,\n          valueRight = value - valueLeft;\n\n      if ((y1 - y0) > (x1 - x0)) {\n        var yk = (y0 * valueRight + y1 * valueLeft) / value;\n        partition(i, k, valueLeft, x0, y0, x1, yk);\n        partition(k, j, valueRight, x0, yk, x1, y1);\n      } else {\n        var xk = (x0 * valueRight + x1 * valueLeft) / value;\n        partition(i, k, valueLeft, x0, y0, xk, y1);\n        partition(k, j, valueRight, xk, y0, x1, y1);\n      }\n    }\n  }\n\n  function sliceDice(parent, x0, y0, x1, y1) {\n    (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n  }\n\n  var resquarify = (function custom(ratio) {\n\n    function resquarify(parent, x0, y0, x1, y1) {\n      if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n        var rows,\n            row,\n            nodes,\n            i,\n            j = -1,\n            n,\n            m = rows.length,\n            value = parent.value;\n\n        while (++j < m) {\n          row = rows[j], nodes = row.children;\n          for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n          if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n          else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n          value -= row.value;\n        }\n      } else {\n        parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n        rows.ratio = ratio;\n      }\n    }\n\n    resquarify.ratio = function(x) {\n      return custom((x = +x) > 1 ? x : 1);\n    };\n\n    return resquarify;\n  })(phi);\n\n  function center$1(x, y) {\n    var nodes;\n\n    if (x == null) x = 0;\n    if (y == null) y = 0;\n\n    function force() {\n      var i,\n          n = nodes.length,\n          node,\n          sx = 0,\n          sy = 0;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i], sx += node.x, sy += node.y;\n      }\n\n      for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n        node = nodes[i], node.x -= sx, node.y -= sy;\n      }\n    }\n\n    force.initialize = function(_) {\n      nodes = _;\n    };\n\n    force.x = function(_) {\n      return arguments.length ? (x = +_, force) : x;\n    };\n\n    force.y = function(_) {\n      return arguments.length ? (y = +_, force) : y;\n    };\n\n    return force;\n  }\n\n  function constant$6(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function jiggle() {\n    return (Math.random() - 0.5) * 1e-6;\n  }\n\n  function x$1(d) {\n    return d.x + d.vx;\n  }\n\n  function y$1(d) {\n    return d.y + d.vy;\n  }\n\n  function collide(radius) {\n    var nodes,\n        radii,\n        strength = 1,\n        iterations = 1;\n\n    if (typeof radius !== \"function\") radius = constant$6(radius == null ? 1 : +radius);\n\n    function force() {\n      var i, n = nodes.length,\n          tree,\n          node,\n          xi,\n          yi,\n          ri,\n          ri2;\n\n      for (var k = 0; k < iterations; ++k) {\n        tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);\n        for (i = 0; i < n; ++i) {\n          node = nodes[i];\n          ri = radii[i], ri2 = ri * ri;\n          xi = node.x + node.vx;\n          yi = node.y + node.vy;\n          tree.visit(apply);\n        }\n      }\n\n      function apply(quad, x0, y0, x1, y1) {\n        var data = quad.data, rj = quad.r, r = ri + rj;\n        if (data) {\n          if (data.index > i) {\n            var x = xi - data.x - data.vx,\n                y = yi - data.y - data.vy,\n                l = x * x + y * y;\n            if (l < r * r) {\n              if (x === 0) x = jiggle(), l += x * x;\n              if (y === 0) y = jiggle(), l += y * y;\n              l = (r - (l = Math.sqrt(l))) / l * strength;\n              node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n              node.vy += (y *= l) * r;\n              data.vx -= x * (r = 1 - r);\n              data.vy -= y * r;\n            }\n          }\n          return;\n        }\n        return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n      }\n    }\n\n    function prepare(quad) {\n      if (quad.data) return quad.r = radii[quad.data.index];\n      for (var i = quad.r = 0; i < 4; ++i) {\n        if (quad[i] && quad[i].r > quad.r) {\n          quad.r = quad[i].r;\n        }\n      }\n    }\n\n    force.initialize = function(_) {\n      var i, n = (nodes = _).length; radii = new Array(n);\n      for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);\n    };\n\n    force.iterations = function(_) {\n      return arguments.length ? (iterations = +_, force) : iterations;\n    };\n\n    force.strength = function(_) {\n      return arguments.length ? (strength = +_, force) : strength;\n    };\n\n    force.radius = function(_) {\n      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$6(+_), force) : radius;\n    };\n\n    return force;\n  }\n\n  function index$2(d, i) {\n    return i;\n  }\n\n  function link(links) {\n    var id = index$2,\n        strength = defaultStrength,\n        strengths,\n        distance = constant$6(30),\n        distances,\n        nodes,\n        count,\n        bias,\n        iterations = 1;\n\n    if (links == null) links = [];\n\n    function defaultStrength(link) {\n      return 1 / Math.min(count[link.source.index], count[link.target.index]);\n    }\n\n    function force(alpha) {\n      for (var k = 0, n = links.length; k < iterations; ++k) {\n        for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n          link = links[i], source = link.source, target = link.target;\n          x = target.x + target.vx - source.x - source.vx || jiggle();\n          y = target.y + target.vy - source.y - source.vy || jiggle();\n          l = Math.sqrt(x * x + y * y);\n          l = (l - distances[i]) / l * alpha * strengths[i];\n          x *= l, y *= l;\n          target.vx -= x * (b = bias[i]);\n          target.vy -= y * b;\n          source.vx += x * (b = 1 - b);\n          source.vy += y * b;\n        }\n      }\n    }\n\n    function initialize() {\n      if (!nodes) return;\n\n      var i,\n          n = nodes.length,\n          m = links.length,\n          nodeById = map$1(nodes, id),\n          link;\n\n      for (i = 0, count = new Array(n); i < n; ++i) {\n        count[i] = 0;\n      }\n\n      for (i = 0; i < m; ++i) {\n        link = links[i], link.index = i;\n        if (typeof link.source !== \"object\") link.source = nodeById.get(link.source);\n        if (typeof link.target !== \"object\") link.target = nodeById.get(link.target);\n        ++count[link.source.index], ++count[link.target.index];\n      }\n\n      for (i = 0, bias = new Array(m); i < m; ++i) {\n        link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n      }\n\n      strengths = new Array(m), initializeStrength();\n      distances = new Array(m), initializeDistance();\n    }\n\n    function initializeStrength() {\n      if (!nodes) return;\n\n      for (var i = 0, n = links.length; i < n; ++i) {\n        strengths[i] = +strength(links[i], i, links);\n      }\n    }\n\n    function initializeDistance() {\n      if (!nodes) return;\n\n      for (var i = 0, n = links.length; i < n; ++i) {\n        distances[i] = +distance(links[i], i, links);\n      }\n    }\n\n    force.initialize = function(_) {\n      nodes = _;\n      initialize();\n    };\n\n    force.links = function(_) {\n      return arguments.length ? (links = _, initialize(), force) : links;\n    };\n\n    force.id = function(_) {\n      return arguments.length ? (id = _, force) : id;\n    };\n\n    force.iterations = function(_) {\n      return arguments.length ? (iterations = +_, force) : iterations;\n    };\n\n    force.strength = function(_) {\n      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initializeStrength(), force) : strength;\n    };\n\n    force.distance = function(_) {\n      return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$6(+_), initializeDistance(), force) : distance;\n    };\n\n    return force;\n  }\n\n  function x$2(d) {\n    return d.x;\n  }\n\n  function y$2(d) {\n    return d.y;\n  }\n\n  var initialRadius = 10;\n  var initialAngle = Math.PI * (3 - Math.sqrt(5));\n  function simulation(nodes) {\n    var simulation,\n        alpha = 1,\n        alphaMin = 0.001,\n        alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n        alphaTarget = 0,\n        velocityDecay = 0.6,\n        forces = map$1(),\n        stepper = timer(step),\n        event = dispatch(\"tick\", \"end\");\n\n    if (nodes == null) nodes = [];\n\n    function step() {\n      tick();\n      event.call(\"tick\", simulation);\n      if (alpha < alphaMin) {\n        stepper.stop();\n        event.call(\"end\", simulation);\n      }\n    }\n\n    function tick() {\n      var i, n = nodes.length, node;\n\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    function initializeNodes() {\n      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n        node = nodes[i], node.index = i;\n        if (isNaN(node.x) || isNaN(node.y)) {\n          var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n          node.x = radius * Math.cos(angle);\n          node.y = radius * Math.sin(angle);\n        }\n        if (isNaN(node.vx) || isNaN(node.vy)) {\n          node.vx = node.vy = 0;\n        }\n      }\n    }\n\n    function initializeForce(force) {\n      if (force.initialize) force.initialize(nodes);\n      return force;\n    }\n\n    initializeNodes();\n\n    return simulation = {\n      tick: tick,\n\n      restart: function() {\n        return stepper.restart(step), simulation;\n      },\n\n      stop: function() {\n        return stepper.stop(), simulation;\n      },\n\n      nodes: function(_) {\n        return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n      },\n\n      alpha: function(_) {\n        return arguments.length ? (alpha = +_, simulation) : alpha;\n      },\n\n      alphaMin: function(_) {\n        return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n      },\n\n      alphaDecay: function(_) {\n        return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n      },\n\n      alphaTarget: function(_) {\n        return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n      },\n\n      velocityDecay: function(_) {\n        return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n      },\n\n      force: function(name, _) {\n        return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n      },\n\n      find: function(x, y, radius) {\n        var i = 0,\n            n = nodes.length,\n            dx,\n            dy,\n            d2,\n            node,\n            closest;\n\n        if (radius == null) radius = Infinity;\n        else radius *= radius;\n\n        for (i = 0; i < n; ++i) {\n          node = nodes[i];\n          dx = x - node.x;\n          dy = y - node.y;\n          d2 = dx * dx + dy * dy;\n          if (d2 < radius) closest = node, radius = d2;\n        }\n\n        return closest;\n      },\n\n      on: function(name, _) {\n        return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n      }\n    };\n  }\n\n  function manyBody() {\n    var nodes,\n        node,\n        alpha,\n        strength = constant$6(-30),\n        strengths,\n        distanceMin2 = 1,\n        distanceMax2 = Infinity,\n        theta2 = 0.81;\n\n    function force(_) {\n      var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);\n      for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n    }\n\n    function initialize() {\n      if (!nodes) return;\n      var i, n = nodes.length;\n      strengths = new Array(n);\n      for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);\n    }\n\n    function accumulate(quad) {\n      var strength = 0, q, c, x, y, i;\n\n      // For internal nodes, accumulate forces from child quadrants.\n      if (quad.length) {\n        for (x = y = i = 0; i < 4; ++i) {\n          if ((q = quad[i]) && (c = q.value)) {\n            strength += c, x += c * q.x, y += c * q.y;\n          }\n        }\n        quad.x = x / strength;\n        quad.y = y / strength;\n      }\n\n      // For leaf nodes, accumulate forces from coincident quadrants.\n      else {\n        q = quad;\n        q.x = q.data.x;\n        q.y = q.data.y;\n        do strength += strengths[q.data.index];\n        while (q = q.next);\n      }\n\n      quad.value = strength;\n    }\n\n    function apply(quad, x1, _, x2) {\n      if (!quad.value) return true;\n\n      var x = quad.x - node.x,\n          y = quad.y - node.y,\n          w = x2 - x1,\n          l = x * x + y * y;\n\n      // Apply the Barnes-Hut approximation if possible.\n      // Limit forces for very close nodes; randomize direction if coincident.\n      if (w * w / theta2 < l) {\n        if (l < distanceMax2) {\n          if (x === 0) x = jiggle(), l += x * x;\n          if (y === 0) y = jiggle(), l += y * y;\n          if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n          node.vx += x * quad.value * alpha / l;\n          node.vy += y * quad.value * alpha / l;\n        }\n        return true;\n      }\n\n      // Otherwise, process points directly.\n      else if (quad.length || l >= distanceMax2) return;\n\n      // Limit forces for very close nodes; randomize direction if coincident.\n      if (quad.data !== node || quad.next) {\n        if (x === 0) x = jiggle(), l += x * x;\n        if (y === 0) y = jiggle(), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n      }\n\n      do if (quad.data !== node) {\n        w = strengths[quad.data.index] * alpha / l;\n        node.vx += x * w;\n        node.vy += y * w;\n      } while (quad = quad.next);\n    }\n\n    force.initialize = function(_) {\n      nodes = _;\n      initialize();\n    };\n\n    force.strength = function(_) {\n      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n    };\n\n    force.distanceMin = function(_) {\n      return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n    };\n\n    force.distanceMax = function(_) {\n      return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n    };\n\n    force.theta = function(_) {\n      return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n    };\n\n    return force;\n  }\n\n  function x$3(x) {\n    var strength = constant$6(0.1),\n        nodes,\n        strengths,\n        xz;\n\n    if (typeof x !== \"function\") x = constant$6(x == null ? 0 : +x);\n\n    function force(alpha) {\n      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n        node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n      }\n    }\n\n    function initialize() {\n      if (!nodes) return;\n      var i, n = nodes.length;\n      strengths = new Array(n);\n      xz = new Array(n);\n      for (i = 0; i < n; ++i) {\n        strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n      }\n    }\n\n    force.initialize = function(_) {\n      nodes = _;\n      initialize();\n    };\n\n    force.strength = function(_) {\n      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n    };\n\n    force.x = function(_) {\n      return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : x;\n    };\n\n    return force;\n  }\n\n  function y$3(y) {\n    var strength = constant$6(0.1),\n        nodes,\n        strengths,\n        yz;\n\n    if (typeof y !== \"function\") y = constant$6(y == null ? 0 : +y);\n\n    function force(alpha) {\n      for (var i = 0, n = nodes.length, node; i < n; ++i) {\n        node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n      }\n    }\n\n    function initialize() {\n      if (!nodes) return;\n      var i, n = nodes.length;\n      strengths = new Array(n);\n      yz = new Array(n);\n      for (i = 0; i < n; ++i) {\n        strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n      }\n    }\n\n    force.initialize = function(_) {\n      nodes = _;\n      initialize();\n    };\n\n    force.strength = function(_) {\n      return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : strength;\n    };\n\n    force.y = function(_) {\n      return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$6(+_), initialize(), force) : y;\n    };\n\n    return force;\n  }\n\n  function nopropagation() {\n    exports.event.stopImmediatePropagation();\n  }\n\n  function noevent() {\n    exports.event.preventDefault();\n    exports.event.stopImmediatePropagation();\n  }\n\n  function dragDisable(view) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", noevent, true);\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", noevent, true);\n    } else {\n      root.__noselect = root.style.MozUserSelect;\n      root.style.MozUserSelect = \"none\";\n    }\n  }\n\n  function dragEnable(view, noclick) {\n    var root = view.document.documentElement,\n        selection = select(view).on(\"dragstart.drag\", null);\n    if (noclick) {\n      selection.on(\"click.drag\", noevent, true);\n      setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n    }\n    if (\"onselectstart\" in root) {\n      selection.on(\"selectstart.drag\", null);\n    } else {\n      root.style.MozUserSelect = root.__noselect;\n      delete root.__noselect;\n    }\n  }\n\n  function constant$7(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n    this.target = target;\n    this.type = type;\n    this.subject = subject;\n    this.identifier = id;\n    this.active = active;\n    this.x = x;\n    this.y = y;\n    this.dx = dx;\n    this.dy = dy;\n    this._ = dispatch;\n  }\n\n  DragEvent.prototype.on = function() {\n    var value = this._.on.apply(this._, arguments);\n    return value === this._ ? this : value;\n  };\n\n  // Ignore right-click, since that should open the context menu.\n  function defaultFilter() {\n    return !exports.event.button;\n  }\n\n  function defaultContainer() {\n    return this.parentNode;\n  }\n\n  function defaultSubject(d) {\n    return d == null ? {x: exports.event.x, y: exports.event.y} : d;\n  }\n\n  function drag() {\n    var filter = defaultFilter,\n        container = defaultContainer,\n        subject = defaultSubject,\n        gestures = {},\n        listeners = dispatch(\"start\", \"drag\", \"end\"),\n        active = 0,\n        mousemoving,\n        touchending;\n\n    function drag(selection) {\n      selection\n          .on(\"mousedown.drag\", mousedowned)\n          .on(\"touchstart.drag\", touchstarted)\n          .on(\"touchmove.drag\", touchmoved)\n          .on(\"touchend.drag touchcancel.drag\", touchended)\n          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n    }\n\n    function mousedowned() {\n      if (touchending || !filter.apply(this, arguments)) return;\n      var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n      if (!gesture) return;\n      select(exports.event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n      dragDisable(exports.event.view);\n      nopropagation();\n      mousemoving = false;\n      gesture(\"start\");\n    }\n\n    function mousemoved() {\n      noevent();\n      mousemoving = true;\n      gestures.mouse(\"drag\");\n    }\n\n    function mouseupped() {\n      select(exports.event.view).on(\"mousemove.drag mouseup.drag\", null);\n      dragEnable(exports.event.view, mousemoving);\n      noevent();\n      gestures.mouse(\"end\");\n    }\n\n    function touchstarted() {\n      if (!filter.apply(this, arguments)) return;\n      var touches = exports.event.changedTouches,\n          c = container.apply(this, arguments),\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n          nopropagation();\n          gesture(\"start\");\n        }\n      }\n    }\n\n    function touchmoved() {\n      var touches = exports.event.changedTouches,\n          n = touches.length, i, gesture;\n\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          noevent();\n          gesture(\"drag\");\n        }\n      }\n    }\n\n    function touchended() {\n      var touches = exports.event.changedTouches,\n          n = touches.length, i, gesture;\n\n      if (touchending) clearTimeout(touchending);\n      touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      for (i = 0; i < n; ++i) {\n        if (gesture = gestures[touches[i].identifier]) {\n          nopropagation();\n          gesture(\"end\");\n        }\n      }\n    }\n\n    function beforestart(id, container, point, that, args) {\n      var p = point(container, id), s, dx, dy,\n          sublisteners = listeners.copy();\n\n      if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n        if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;\n        dx = s.x - p[0] || 0;\n        dy = s.y - p[1] || 0;\n        return true;\n      })) return;\n\n      return function gesture(type) {\n        var p0 = p, n;\n        switch (type) {\n          case \"start\": gestures[id] = gesture, n = active++; break;\n          case \"end\": delete gestures[id], --active; // nobreak\n          case \"drag\": p = point(container, id), n = active; break;\n        }\n        customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n      };\n    }\n\n    drag.filter = function(_) {\n      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$7(!!_), drag) : filter;\n    };\n\n    drag.container = function(_) {\n      return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$7(_), drag) : container;\n    };\n\n    drag.subject = function(_) {\n      return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$7(_), drag) : subject;\n    };\n\n    drag.on = function() {\n      var value = listeners.on.apply(listeners, arguments);\n      return value === listeners ? drag : value;\n    };\n\n    return drag;\n  }\n\n  function constant$8(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function x$4(d) {\n    return d[0];\n  }\n\n  function y$4(d) {\n    return d[1];\n  }\n\n  function RedBlackTree() {\n    this._ = null; // root node\n  }\n\n  function RedBlackNode(node) {\n    node.U = // parent node\n    node.C = // color - true for red, false for black\n    node.L = // left node\n    node.R = // right node\n    node.P = // previous node\n    node.N = null; // next node\n  }\n\n  RedBlackTree.prototype = {\n    constructor: RedBlackTree,\n\n    insert: function(after, node) {\n      var parent, grandpa, uncle;\n\n      if (after) {\n        node.P = after;\n        node.N = after.N;\n        if (after.N) after.N.P = node;\n        after.N = node;\n        if (after.R) {\n          after = after.R;\n          while (after.L) after = after.L;\n          after.L = node;\n        } else {\n          after.R = node;\n        }\n        parent = after;\n      } else if (this._) {\n        after = RedBlackFirst(this._);\n        node.P = null;\n        node.N = after;\n        after.P = after.L = node;\n        parent = after;\n      } else {\n        node.P = node.N = null;\n        this._ = node;\n        parent = null;\n      }\n      node.L = node.R = null;\n      node.U = parent;\n      node.C = true;\n\n      after = node;\n      while (parent && parent.C) {\n        grandpa = parent.U;\n        if (parent === grandpa.L) {\n          uncle = grandpa.R;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.R) {\n              RedBlackRotateLeft(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            RedBlackRotateRight(this, grandpa);\n          }\n        } else {\n          uncle = grandpa.L;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.L) {\n              RedBlackRotateRight(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            RedBlackRotateLeft(this, grandpa);\n          }\n        }\n        parent = after.U;\n      }\n      this._.C = false;\n    },\n\n    remove: function(node) {\n      if (node.N) node.N.P = node.P;\n      if (node.P) node.P.N = node.N;\n      node.N = node.P = null;\n\n      var parent = node.U,\n          sibling,\n          left = node.L,\n          right = node.R,\n          next,\n          red;\n\n      if (!left) next = right;\n      else if (!right) next = left;\n      else next = RedBlackFirst(right);\n\n      if (parent) {\n        if (parent.L === node) parent.L = next;\n        else parent.R = next;\n      } else {\n        this._ = next;\n      }\n\n      if (left && right) {\n        red = next.C;\n        next.C = node.C;\n        next.L = left;\n        left.U = next;\n        if (next !== right) {\n          parent = next.U;\n          next.U = node.U;\n          node = next.R;\n          parent.L = node;\n          next.R = right;\n          right.U = next;\n        } else {\n          next.U = parent;\n          parent = next;\n          node = next.R;\n        }\n      } else {\n        red = node.C;\n        node = next;\n      }\n\n      if (node) node.U = parent;\n      if (red) return;\n      if (node && node.C) { node.C = false; return; }\n\n      do {\n        if (node === this._) break;\n        if (node === parent.L) {\n          sibling = parent.R;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            RedBlackRotateLeft(this, parent);\n            sibling = parent.R;\n          }\n          if ((sibling.L && sibling.L.C)\n              || (sibling.R && sibling.R.C)) {\n            if (!sibling.R || !sibling.R.C) {\n              sibling.L.C = false;\n              sibling.C = true;\n              RedBlackRotateRight(this, sibling);\n              sibling = parent.R;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.R.C = false;\n            RedBlackRotateLeft(this, parent);\n            node = this._;\n            break;\n          }\n        } else {\n          sibling = parent.L;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            RedBlackRotateRight(this, parent);\n            sibling = parent.L;\n          }\n          if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n            if (!sibling.L || !sibling.L.C) {\n              sibling.R.C = false;\n              sibling.C = true;\n              RedBlackRotateLeft(this, sibling);\n              sibling = parent.L;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.L.C = false;\n            RedBlackRotateRight(this, parent);\n            node = this._;\n            break;\n          }\n        }\n        sibling.C = true;\n        node = parent;\n        parent = parent.U;\n      } while (!node.C);\n\n      if (node) node.C = false;\n    }\n  };\n\n  function RedBlackRotateLeft(tree, node) {\n    var p = node,\n        q = node.R,\n        parent = p.U;\n\n    if (parent) {\n      if (parent.L === p) parent.L = q;\n      else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n\n    q.U = parent;\n    p.U = q;\n    p.R = q.L;\n    if (p.R) p.R.U = p;\n    q.L = p;\n  }\n\n  function RedBlackRotateRight(tree, node) {\n    var p = node,\n        q = node.L,\n        parent = p.U;\n\n    if (parent) {\n      if (parent.L === p) parent.L = q;\n      else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n\n    q.U = parent;\n    p.U = q;\n    p.L = q.R;\n    if (p.L) p.L.U = p;\n    q.R = p;\n  }\n\n  function RedBlackFirst(node) {\n    while (node.L) node = node.L;\n    return node;\n  }\n\n  function createEdge(left, right, v0, v1) {\n    var edge = [null, null],\n        index = edges.push(edge) - 1;\n    edge.left = left;\n    edge.right = right;\n    if (v0) setEdgeEnd(edge, left, right, v0);\n    if (v1) setEdgeEnd(edge, right, left, v1);\n    cells[left.index].halfedges.push(index);\n    cells[right.index].halfedges.push(index);\n    return edge;\n  }\n\n  function createBorderEdge(left, v0, v1) {\n    var edge = [v0, v1];\n    edge.left = left;\n    return edge;\n  }\n\n  function setEdgeEnd(edge, left, right, vertex) {\n    if (!edge[0] && !edge[1]) {\n      edge[0] = vertex;\n      edge.left = left;\n      edge.right = right;\n    } else if (edge.left === right) {\n      edge[1] = vertex;\n    } else {\n      edge[0] = vertex;\n    }\n  }\n\n  // Liang–Barsky line clipping.\n  function clipEdge(edge, x0, y0, x1, y1) {\n    var a = edge[0],\n        b = edge[1],\n        ax = a[0],\n        ay = a[1],\n        bx = b[0],\n        by = b[1],\n        t0 = 0,\n        t1 = 1,\n        dx = bx - ax,\n        dy = by - ay,\n        r;\n\n    r = x0 - ax;\n    if (!dx && r > 0) return;\n    r /= dx;\n    if (dx < 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    } else if (dx > 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    }\n\n    r = x1 - ax;\n    if (!dx && r < 0) return;\n    r /= dx;\n    if (dx < 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    } else if (dx > 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    }\n\n    r = y0 - ay;\n    if (!dy && r > 0) return;\n    r /= dy;\n    if (dy < 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    } else if (dy > 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    }\n\n    r = y1 - ay;\n    if (!dy && r < 0) return;\n    r /= dy;\n    if (dy < 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    } else if (dy > 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    }\n\n    if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n    if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n    if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n    return true;\n  }\n\n  function connectEdge(edge, x0, y0, x1, y1) {\n    var v1 = edge[1];\n    if (v1) return true;\n\n    var v0 = edge[0],\n        left = edge.left,\n        right = edge.right,\n        lx = left[0],\n        ly = left[1],\n        rx = right[0],\n        ry = right[1],\n        fx = (lx + rx) / 2,\n        fy = (ly + ry) / 2,\n        fm,\n        fb;\n\n    if (ry === ly) {\n      if (fx < x0 || fx >= x1) return;\n      if (lx > rx) {\n        if (!v0) v0 = [fx, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [fx, y1];\n      } else {\n        if (!v0) v0 = [fx, y1];\n        else if (v0[1] < y0) return;\n        v1 = [fx, y0];\n      }\n    } else {\n      fm = (lx - rx) / (ry - ly);\n      fb = fy - fm * fx;\n      if (fm < -1 || fm > 1) {\n        if (lx > rx) {\n          if (!v0) v0 = [(y0 - fb) / fm, y0];\n          else if (v0[1] >= y1) return;\n          v1 = [(y1 - fb) / fm, y1];\n        } else {\n          if (!v0) v0 = [(y1 - fb) / fm, y1];\n          else if (v0[1] < y0) return;\n          v1 = [(y0 - fb) / fm, y0];\n        }\n      } else {\n        if (ly < ry) {\n          if (!v0) v0 = [x0, fm * x0 + fb];\n          else if (v0[0] >= x1) return;\n          v1 = [x1, fm * x1 + fb];\n        } else {\n          if (!v0) v0 = [x1, fm * x1 + fb];\n          else if (v0[0] < x0) return;\n          v1 = [x0, fm * x0 + fb];\n        }\n      }\n    }\n\n    edge[0] = v0;\n    edge[1] = v1;\n    return true;\n  }\n\n  function clipEdges(x0, y0, x1, y1) {\n    var i = edges.length,\n        edge;\n\n    while (i--) {\n      if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n          || !clipEdge(edge, x0, y0, x1, y1)\n          || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3\n              || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {\n        delete edges[i];\n      }\n    }\n  }\n\n  function createCell(site) {\n    return cells[site.index] = {\n      site: site,\n      halfedges: []\n    };\n  }\n\n  function cellHalfedgeAngle(cell, edge) {\n    var site = cell.site,\n        va = edge.left,\n        vb = edge.right;\n    if (site === vb) vb = va, va = site;\n    if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n    if (site === va) va = edge[1], vb = edge[0];\n    else va = edge[0], vb = edge[1];\n    return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n  }\n\n  function cellHalfedgeStart(cell, edge) {\n    return edge[+(edge.left !== cell.site)];\n  }\n\n  function cellHalfedgeEnd(cell, edge) {\n    return edge[+(edge.left === cell.site)];\n  }\n\n  function sortCellHalfedges() {\n    for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n      if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n        var index = new Array(m),\n            array = new Array(m);\n        for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n        index.sort(function(i, j) { return array[j] - array[i]; });\n        for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n        for (j = 0; j < m; ++j) halfedges[j] = array[j];\n      }\n    }\n  }\n\n  function clipCells(x0, y0, x1, y1) {\n    var nCells = cells.length,\n        iCell,\n        cell,\n        site,\n        iHalfedge,\n        halfedges,\n        nHalfedges,\n        start,\n        startX,\n        startY,\n        end,\n        endX,\n        endY,\n        cover = true;\n\n    for (iCell = 0; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        halfedges = cell.halfedges;\n        iHalfedge = halfedges.length;\n\n        // Remove any dangling clipped edges.\n        while (iHalfedge--) {\n          if (!edges[halfedges[iHalfedge]]) {\n            halfedges.splice(iHalfedge, 1);\n          }\n        }\n\n        // Insert any border edges as necessary.\n        iHalfedge = 0, nHalfedges = halfedges.length;\n        while (iHalfedge < nHalfedges) {\n          end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n          start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n          if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {\n            halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n                Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]\n                : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]\n                : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]\n                : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]\n                : null)) - 1);\n            ++nHalfedges;\n          }\n        }\n\n        if (nHalfedges) cover = false;\n      }\n    }\n\n    // If there weren’t any edges, have the closest site cover the extent.\n    // It doesn’t matter which corner of the extent we measure!\n    if (cover) {\n      var dx, dy, d2, dc = Infinity;\n\n      for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n        if (cell = cells[iCell]) {\n          site = cell.site;\n          dx = site[0] - x0;\n          dy = site[1] - y0;\n          d2 = dx * dx + dy * dy;\n          if (d2 < dc) dc = d2, cover = cell;\n        }\n      }\n\n      if (cover) {\n        var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n        cover.halfedges.push(\n          edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n          edges.push(createBorderEdge(site, v01, v11)) - 1,\n          edges.push(createBorderEdge(site, v11, v10)) - 1,\n          edges.push(createBorderEdge(site, v10, v00)) - 1\n        );\n      }\n    }\n\n    // Lastly delete any cells with no edges; these were entirely clipped.\n    for (iCell = 0; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        if (!cell.halfedges.length) {\n          delete cells[iCell];\n        }\n      }\n    }\n  }\n\n  var circlePool = [];\n\n  var firstCircle;\n\n  function Circle() {\n    RedBlackNode(this);\n    this.x =\n    this.y =\n    this.arc =\n    this.site =\n    this.cy = null;\n  }\n\n  function attachCircle(arc) {\n    var lArc = arc.P,\n        rArc = arc.N;\n\n    if (!lArc || !rArc) return;\n\n    var lSite = lArc.site,\n        cSite = arc.site,\n        rSite = rArc.site;\n\n    if (lSite === rSite) return;\n\n    var bx = cSite[0],\n        by = cSite[1],\n        ax = lSite[0] - bx,\n        ay = lSite[1] - by,\n        cx = rSite[0] - bx,\n        cy = rSite[1] - by;\n\n    var d = 2 * (ax * cy - ay * cx);\n    if (d >= -epsilon2$1) return;\n\n    var ha = ax * ax + ay * ay,\n        hc = cx * cx + cy * cy,\n        x = (cy * ha - ay * hc) / d,\n        y = (ax * hc - cx * ha) / d;\n\n    var circle = circlePool.pop() || new Circle;\n    circle.arc = arc;\n    circle.site = cSite;\n    circle.x = x + bx;\n    circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n    arc.circle = circle;\n\n    var before = null,\n        node = circles._;\n\n    while (node) {\n      if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n        if (node.L) node = node.L;\n        else { before = node.P; break; }\n      } else {\n        if (node.R) node = node.R;\n        else { before = node; break; }\n      }\n    }\n\n    circles.insert(before, circle);\n    if (!before) firstCircle = circle;\n  }\n\n  function detachCircle(arc) {\n    var circle = arc.circle;\n    if (circle) {\n      if (!circle.P) firstCircle = circle.N;\n      circles.remove(circle);\n      circlePool.push(circle);\n      RedBlackNode(circle);\n      arc.circle = null;\n    }\n  }\n\n  var beachPool = [];\n\n  function Beach() {\n    RedBlackNode(this);\n    this.edge =\n    this.site =\n    this.circle = null;\n  }\n\n  function createBeach(site) {\n    var beach = beachPool.pop() || new Beach;\n    beach.site = site;\n    return beach;\n  }\n\n  function detachBeach(beach) {\n    detachCircle(beach);\n    beaches.remove(beach);\n    beachPool.push(beach);\n    RedBlackNode(beach);\n  }\n\n  function removeBeach(beach) {\n    var circle = beach.circle,\n        x = circle.x,\n        y = circle.cy,\n        vertex = [x, y],\n        previous = beach.P,\n        next = beach.N,\n        disappearing = [beach];\n\n    detachBeach(beach);\n\n    var lArc = previous;\n    while (lArc.circle\n        && Math.abs(x - lArc.circle.x) < epsilon$3\n        && Math.abs(y - lArc.circle.cy) < epsilon$3) {\n      previous = lArc.P;\n      disappearing.unshift(lArc);\n      detachBeach(lArc);\n      lArc = previous;\n    }\n\n    disappearing.unshift(lArc);\n    detachCircle(lArc);\n\n    var rArc = next;\n    while (rArc.circle\n        && Math.abs(x - rArc.circle.x) < epsilon$3\n        && Math.abs(y - rArc.circle.cy) < epsilon$3) {\n      next = rArc.N;\n      disappearing.push(rArc);\n      detachBeach(rArc);\n      rArc = next;\n    }\n\n    disappearing.push(rArc);\n    detachCircle(rArc);\n\n    var nArcs = disappearing.length,\n        iArc;\n    for (iArc = 1; iArc < nArcs; ++iArc) {\n      rArc = disappearing[iArc];\n      lArc = disappearing[iArc - 1];\n      setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n    }\n\n    lArc = disappearing[0];\n    rArc = disappearing[nArcs - 1];\n    rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n    attachCircle(lArc);\n    attachCircle(rArc);\n  }\n\n  function addBeach(site) {\n    var x = site[0],\n        directrix = site[1],\n        lArc,\n        rArc,\n        dxl,\n        dxr,\n        node = beaches._;\n\n    while (node) {\n      dxl = leftBreakPoint(node, directrix) - x;\n      if (dxl > epsilon$3) node = node.L; else {\n        dxr = x - rightBreakPoint(node, directrix);\n        if (dxr > epsilon$3) {\n          if (!node.R) {\n            lArc = node;\n            break;\n          }\n          node = node.R;\n        } else {\n          if (dxl > -epsilon$3) {\n            lArc = node.P;\n            rArc = node;\n          } else if (dxr > -epsilon$3) {\n            lArc = node;\n            rArc = node.N;\n          } else {\n            lArc = rArc = node;\n          }\n          break;\n        }\n      }\n    }\n\n    createCell(site);\n    var newArc = createBeach(site);\n    beaches.insert(lArc, newArc);\n\n    if (!lArc && !rArc) return;\n\n    if (lArc === rArc) {\n      detachCircle(lArc);\n      rArc = createBeach(lArc.site);\n      beaches.insert(newArc, rArc);\n      newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n      attachCircle(lArc);\n      attachCircle(rArc);\n      return;\n    }\n\n    if (!rArc) { // && lArc\n      newArc.edge = createEdge(lArc.site, newArc.site);\n      return;\n    }\n\n    // else lArc !== rArc\n    detachCircle(lArc);\n    detachCircle(rArc);\n\n    var lSite = lArc.site,\n        ax = lSite[0],\n        ay = lSite[1],\n        bx = site[0] - ax,\n        by = site[1] - ay,\n        rSite = rArc.site,\n        cx = rSite[0] - ax,\n        cy = rSite[1] - ay,\n        d = 2 * (bx * cy - by * cx),\n        hb = bx * bx + by * by,\n        hc = cx * cx + cy * cy,\n        vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n    setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n    newArc.edge = createEdge(lSite, site, null, vertex);\n    rArc.edge = createEdge(site, rSite, null, vertex);\n    attachCircle(lArc);\n    attachCircle(rArc);\n  }\n\n  function leftBreakPoint(arc, directrix) {\n    var site = arc.site,\n        rfocx = site[0],\n        rfocy = site[1],\n        pby2 = rfocy - directrix;\n\n    if (!pby2) return rfocx;\n\n    var lArc = arc.P;\n    if (!lArc) return -Infinity;\n\n    site = lArc.site;\n    var lfocx = site[0],\n        lfocy = site[1],\n        plby2 = lfocy - directrix;\n\n    if (!plby2) return lfocx;\n\n    var hl = lfocx - rfocx,\n        aby2 = 1 / pby2 - 1 / plby2,\n        b = hl / plby2;\n\n    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n    return (rfocx + lfocx) / 2;\n  }\n\n  function rightBreakPoint(arc, directrix) {\n    var rArc = arc.N;\n    if (rArc) return leftBreakPoint(rArc, directrix);\n    var site = arc.site;\n    return site[1] === directrix ? site[0] : Infinity;\n  }\n\n  var epsilon$3 = 1e-6;\n  var epsilon2$1 = 1e-12;\n  var beaches;\n  var cells;\n  var circles;\n  var edges;\n\n  function triangleArea(a, b, c) {\n    return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n  }\n\n  function lexicographic(a, b) {\n    return b[1] - a[1]\n        || b[0] - a[0];\n  }\n\n  function Diagram(sites, extent) {\n    var site = sites.sort(lexicographic).pop(),\n        x,\n        y,\n        circle;\n\n    edges = [];\n    cells = new Array(sites.length);\n    beaches = new RedBlackTree;\n    circles = new RedBlackTree;\n\n    while (true) {\n      circle = firstCircle;\n      if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n        if (site[0] !== x || site[1] !== y) {\n          addBeach(site);\n          x = site[0], y = site[1];\n        }\n        site = sites.pop();\n      } else if (circle) {\n        removeBeach(circle.arc);\n      } else {\n        break;\n      }\n    }\n\n    sortCellHalfedges();\n\n    if (extent) {\n      var x0 = +extent[0][0],\n          y0 = +extent[0][1],\n          x1 = +extent[1][0],\n          y1 = +extent[1][1];\n      clipEdges(x0, y0, x1, y1);\n      clipCells(x0, y0, x1, y1);\n    }\n\n    this.edges = edges;\n    this.cells = cells;\n\n    beaches =\n    circles =\n    edges =\n    cells = null;\n  }\n\n  Diagram.prototype = {\n    constructor: Diagram,\n\n    polygons: function() {\n      var edges = this.edges;\n\n      return this.cells.map(function(cell) {\n        var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n        polygon.data = cell.site.data;\n        return polygon;\n      });\n    },\n\n    triangles: function() {\n      var triangles = [],\n          edges = this.edges;\n\n      this.cells.forEach(function(cell, i) {\n        var site = cell.site,\n            halfedges = cell.halfedges,\n            j = -1,\n            m = halfedges.length,\n            s0,\n            e1 = edges[halfedges[m - 1]],\n            s1 = e1.left === site ? e1.right : e1.left;\n\n        while (++j < m) {\n          s0 = s1;\n          e1 = edges[halfedges[j]];\n          s1 = e1.left === site ? e1.right : e1.left;\n          if (i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n            triangles.push([site.data, s0.data, s1.data]);\n          }\n        }\n      });\n\n      return triangles;\n    },\n\n    links: function() {\n      return this.edges.filter(function(edge) {\n        return edge.right;\n      }).map(function(edge) {\n        return {\n          source: edge.left.data,\n          target: edge.right.data\n        };\n      });\n    }\n  }\n\n  function voronoi() {\n    var x = x$4,\n        y = y$4,\n        extent = null;\n\n    function voronoi(data) {\n      return new Diagram(data.map(function(d, i) {\n        var s = [Math.round(x(d, i, data) / epsilon$3) * epsilon$3, Math.round(y(d, i, data) / epsilon$3) * epsilon$3];\n        s.index = i;\n        s.data = d;\n        return s;\n      }), extent);\n    }\n\n    voronoi.polygons = function(data) {\n      return voronoi(data).polygons();\n    };\n\n    voronoi.links = function(data) {\n      return voronoi(data).links();\n    };\n\n    voronoi.triangles = function(data) {\n      return voronoi(data).triangles();\n    };\n\n    voronoi.x = function(_) {\n      return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$8(+_), voronoi) : x;\n    };\n\n    voronoi.y = function(_) {\n      return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$8(+_), voronoi) : y;\n    };\n\n    voronoi.extent = function(_) {\n      return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n    };\n\n    voronoi.size = function(_) {\n      return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n    };\n\n    return voronoi;\n  }\n\n  function constant$9(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function ZoomEvent(target, type, transform) {\n    this.target = target;\n    this.type = type;\n    this.transform = transform;\n  }\n\n  function Transform(k, x, y) {\n    this.k = k;\n    this.x = x;\n    this.y = y;\n  }\n\n  Transform.prototype = {\n    constructor: Transform,\n    scale: function(k) {\n      return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n    },\n    translate: function(x, y) {\n      return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n    },\n    apply: function(point) {\n      return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n    },\n    applyX: function(x) {\n      return x * this.k + this.x;\n    },\n    applyY: function(y) {\n      return y * this.k + this.y;\n    },\n    invert: function(location) {\n      return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n    },\n    invertX: function(x) {\n      return (x - this.x) / this.k;\n    },\n    invertY: function(y) {\n      return (y - this.y) / this.k;\n    },\n    rescaleX: function(x) {\n      return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n    },\n    rescaleY: function(y) {\n      return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n    },\n    toString: function() {\n      return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n    }\n  };\n\n  var identity$6 = new Transform(1, 0, 0);\n\n  transform.prototype = Transform.prototype;\n\n  function transform(node) {\n    return node.__zoom || identity$6;\n  }\n\n  function nopropagation$1() {\n    exports.event.stopImmediatePropagation();\n  }\n\n  function noevent$1() {\n    exports.event.preventDefault();\n    exports.event.stopImmediatePropagation();\n  }\n\n  // Ignore right-click, since that should open the context menu.\n  function defaultFilter$1() {\n    return !exports.event.button;\n  }\n\n  function defaultExtent() {\n    var e = this, w, h;\n    if (e instanceof SVGElement) {\n      e = e.ownerSVGElement || e;\n      w = e.width.baseVal.value;\n      h = e.height.baseVal.value;\n    } else {\n      w = e.clientWidth;\n      h = e.clientHeight;\n    }\n    return [[0, 0], [w, h]];\n  }\n\n  function defaultTransform() {\n    return this.__zoom || identity$6;\n  }\n\n  function zoom() {\n    var filter = defaultFilter$1,\n        extent = defaultExtent,\n        k0 = 0,\n        k1 = Infinity,\n        x0 = -k1,\n        x1 = k1,\n        y0 = x0,\n        y1 = x1,\n        duration = 250,\n        gestures = [],\n        listeners = dispatch(\"start\", \"zoom\", \"end\"),\n        touchstarting,\n        touchending,\n        touchDelay = 500,\n        wheelDelay = 150;\n\n    function zoom(selection) {\n      selection\n          .on(\"wheel.zoom\", wheeled)\n          .on(\"mousedown.zoom\", mousedowned)\n          .on(\"dblclick.zoom\", dblclicked)\n          .on(\"touchstart.zoom\", touchstarted)\n          .on(\"touchmove.zoom\", touchmoved)\n          .on(\"touchend.zoom touchcancel.zoom\", touchended)\n          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n          .property(\"__zoom\", defaultTransform);\n    }\n\n    zoom.transform = function(collection, transform) {\n      var selection = collection.selection ? collection.selection() : collection;\n      selection.property(\"__zoom\", defaultTransform);\n      if (collection !== selection) {\n        schedule(collection, transform);\n      } else {\n        selection.interrupt().each(function() {\n          gesture(this, arguments)\n              .start()\n              .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n              .end();\n        });\n      }\n    };\n\n    zoom.scaleBy = function(selection, k) {\n      zoom.scaleTo(selection, function() {\n        var k0 = this.__zoom.k,\n            k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n        return k0 * k1;\n      });\n    };\n\n    zoom.scaleTo = function(selection, k) {\n      zoom.transform(selection, function() {\n        var e = extent.apply(this, arguments),\n            t0 = this.__zoom,\n            p0 = centroid(e),\n            p1 = t0.invert(p0),\n            k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n        return constrain(translate(scale(t0, k1), p0, p1), e);\n      });\n    };\n\n    zoom.translateBy = function(selection, x, y) {\n      zoom.transform(selection, function() {\n        return constrain(this.__zoom.translate(\n          typeof x === \"function\" ? x.apply(this, arguments) : x,\n          typeof y === \"function\" ? y.apply(this, arguments) : y\n        ), extent.apply(this, arguments));\n      });\n    };\n\n    function scale(transform, k) {\n      k = Math.max(k0, Math.min(k1, k));\n      return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n    }\n\n    function translate(transform, p0, p1) {\n      var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n      return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n    }\n\n    function constrain(transform, extent) {\n      var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),\n          dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);\n      return dx || dy ? transform.translate(dx, dy) : transform;\n    }\n\n    function centroid(extent) {\n      return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n    }\n\n    function schedule(transition, transform, center) {\n      transition\n          .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n          .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n          .tween(\"zoom\", function() {\n            var that = this,\n                args = arguments,\n                g = gesture(that, args),\n                e = extent.apply(that, args),\n                p = center || centroid(e),\n                w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n                a = that.__zoom,\n                b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n                i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n            return function(t) {\n              if (t === 1) t = b; // Avoid rounding error on end.\n              else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n              g.zoom(null, t);\n            };\n          });\n    }\n\n    function gesture(that, args) {\n      for (var i = 0, n = gestures.length, g; i < n; ++i) {\n        if ((g = gestures[i]).that === that) {\n          return g;\n        }\n      }\n      return new Gesture(that, args);\n    }\n\n    function Gesture(that, args) {\n      this.that = that;\n      this.args = args;\n      this.index = -1;\n      this.active = 0;\n      this.extent = extent.apply(that, args);\n    }\n\n    Gesture.prototype = {\n      start: function() {\n        if (++this.active === 1) {\n          this.index = gestures.push(this) - 1;\n          this.emit(\"start\");\n        }\n        return this;\n      },\n      zoom: function(key, transform) {\n        if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n        if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n        if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n        this.that.__zoom = transform;\n        this.emit(\"zoom\");\n        return this;\n      },\n      end: function() {\n        if (--this.active === 0) {\n          gestures.splice(this.index, 1);\n          this.index = -1;\n          this.emit(\"end\");\n        }\n        return this;\n      },\n      emit: function(type) {\n        customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n      }\n    };\n\n    function wheeled() {\n      if (!filter.apply(this, arguments)) return;\n      var g = gesture(this, arguments),\n          t = this.__zoom,\n          k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),\n          p = mouse(this);\n\n      // If the mouse is in the same location as before, reuse it.\n      // If there were recent wheel events, reset the wheel idle timeout.\n      if (g.wheel) {\n        if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n          g.mouse[1] = t.invert(g.mouse[0] = p);\n        }\n        clearTimeout(g.wheel);\n      }\n\n      // If this wheel event won’t trigger a transform change, ignore it.\n      else if (t.k === k) return;\n\n      // Otherwise, capture the mouse point and location at the start.\n      else {\n        g.mouse = [p, t.invert(p)];\n        interrupt(this);\n        g.start();\n      }\n\n      noevent$1();\n      g.wheel = setTimeout(wheelidled, wheelDelay);\n      g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));\n\n      function wheelidled() {\n        g.wheel = null;\n        g.end();\n      }\n    }\n\n    function mousedowned() {\n      if (touchending || !filter.apply(this, arguments)) return;\n      var g = gesture(this, arguments),\n          v = select(exports.event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n          p = mouse(this);\n\n      dragDisable(exports.event.view);\n      nopropagation$1();\n      g.mouse = [p, this.__zoom.invert(p)];\n      interrupt(this);\n      g.start();\n\n      function mousemoved() {\n        noevent$1();\n        g.moved = true;\n        g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));\n      }\n\n      function mouseupped() {\n        v.on(\"mousemove.zoom mouseup.zoom\", null);\n        dragEnable(exports.event.view, g.moved);\n        noevent$1();\n        g.end();\n      }\n    }\n\n    function dblclicked() {\n      if (!filter.apply(this, arguments)) return;\n      var t0 = this.__zoom,\n          p0 = mouse(this),\n          p1 = t0.invert(p0),\n          k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),\n          t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));\n\n      noevent$1();\n      if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n      else select(this).call(zoom.transform, t1);\n    }\n\n    function touchstarted() {\n      if (!filter.apply(this, arguments)) return;\n      var g = gesture(this, arguments),\n          touches = exports.event.changedTouches,\n          n = touches.length, i, t, p;\n\n      nopropagation$1();\n      for (i = 0; i < n; ++i) {\n        t = touches[i], p = touch(this, touches, t.identifier);\n        p = [p, this.__zoom.invert(p), t.identifier];\n        if (!g.touch0) g.touch0 = p;\n        else if (!g.touch1) g.touch1 = p;\n      }\n      if (touchstarting) {\n        touchstarting = clearTimeout(touchstarting);\n        if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);\n      }\n      if (exports.event.touches.length === n) {\n        touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n        interrupt(this);\n        g.start();\n      }\n    }\n\n    function touchmoved() {\n      var g = gesture(this, arguments),\n          touches = exports.event.changedTouches,\n          n = touches.length, i, t, p, l;\n\n      noevent$1();\n      if (touchstarting) touchstarting = clearTimeout(touchstarting);\n      for (i = 0; i < n; ++i) {\n        t = touches[i], p = touch(this, touches, t.identifier);\n        if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n        else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n      }\n      t = g.that.__zoom;\n      if (g.touch1) {\n        var p0 = g.touch0[0], l0 = g.touch0[1],\n            p1 = g.touch1[0], l1 = g.touch1[1],\n            dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n            dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n        t = scale(t, Math.sqrt(dp / dl));\n        p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n        l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n      }\n      else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n      else return;\n      g.zoom(\"touch\", constrain(translate(t, p, l), g.extent));\n    }\n\n    function touchended() {\n      var g = gesture(this, arguments),\n          touches = exports.event.changedTouches,\n          n = touches.length, i, t;\n\n      nopropagation$1();\n      if (touchending) clearTimeout(touchending);\n      touchending = setTimeout(function() { touchending = null; }, touchDelay);\n      for (i = 0; i < n; ++i) {\n        t = touches[i];\n        if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n        else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n      }\n      if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n      if (!g.touch0) g.end();\n    }\n\n    zoom.filter = function(_) {\n      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$9(!!_), zoom) : filter;\n    };\n\n    zoom.extent = function(_) {\n      return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$9([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n    };\n\n    zoom.scaleExtent = function(_) {\n      return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];\n    };\n\n    zoom.translateExtent = function(_) {\n      return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];\n    };\n\n    zoom.duration = function(_) {\n      return arguments.length ? (duration = +_, zoom) : duration;\n    };\n\n    zoom.on = function() {\n      var value = listeners.on.apply(listeners, arguments);\n      return value === listeners ? zoom : value;\n    };\n\n    return zoom;\n  }\n\n  function constant$10(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function BrushEvent(target, type, selection) {\n    this.target = target;\n    this.type = type;\n    this.selection = selection;\n  }\n\n  function nopropagation$2() {\n    exports.event.stopImmediatePropagation();\n  }\n\n  function noevent$2() {\n    exports.event.preventDefault();\n    exports.event.stopImmediatePropagation();\n  }\n\n  var MODE_DRAG = {name: \"drag\"};\n  var MODE_SPACE = {name: \"space\"};\n  var MODE_HANDLE = {name: \"handle\"};\n  var MODE_CENTER = {name: \"center\"};\n  var X = {\n    name: \"x\",\n    handles: [\"e\", \"w\"].map(type$1),\n    input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },\n    output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n  };\n\n  var Y = {\n    name: \"y\",\n    handles: [\"n\", \"s\"].map(type$1),\n    input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },\n    output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n  };\n\n  var XY = {\n    name: \"xy\",\n    handles: [\"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\"].map(type$1),\n    input: function(xy) { return xy; },\n    output: function(xy) { return xy; }\n  };\n\n  var cursors = {\n    overlay: \"crosshair\",\n    selection: \"move\",\n    n: \"ns-resize\",\n    e: \"ew-resize\",\n    s: \"ns-resize\",\n    w: \"ew-resize\",\n    nw: \"nwse-resize\",\n    ne: \"nesw-resize\",\n    se: \"nwse-resize\",\n    sw: \"nesw-resize\"\n  };\n\n  var flipX = {\n    e: \"w\",\n    w: \"e\",\n    nw: \"ne\",\n    ne: \"nw\",\n    se: \"sw\",\n    sw: \"se\"\n  };\n\n  var flipY = {\n    n: \"s\",\n    s: \"n\",\n    nw: \"sw\",\n    ne: \"se\",\n    se: \"ne\",\n    sw: \"nw\"\n  };\n\n  var signsX = {\n    overlay: +1,\n    selection: +1,\n    n: null,\n    e: +1,\n    s: null,\n    w: -1,\n    nw: -1,\n    ne: +1,\n    se: +1,\n    sw: -1\n  };\n\n  var signsY = {\n    overlay: +1,\n    selection: +1,\n    n: -1,\n    e: null,\n    s: +1,\n    w: null,\n    nw: -1,\n    ne: -1,\n    se: +1,\n    sw: +1\n  };\n\n  function type$1(t) {\n    return {type: t};\n  }\n\n  // Ignore right-click, since that should open the context menu.\n  function defaultFilter$2() {\n    return !exports.event.button;\n  }\n\n  function defaultExtent$1() {\n    var svg = this.ownerSVGElement || this;\n    return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n  }\n\n  // Like d3.local, but with the name “__brush” rather than auto-generated.\n  function local$1(node) {\n    while (!node.__brush) if (!(node = node.parentNode)) return;\n    return node.__brush;\n  }\n\n  function empty$1(extent) {\n    return extent[0][0] === extent[1][0]\n        || extent[0][1] === extent[1][1];\n  }\n\n  function brushSelection(node) {\n    var state = node.__brush;\n    return state ? state.dim.output(state.selection) : null;\n  }\n\n  function brushX() {\n    return brush$1(X);\n  }\n\n  function brushY() {\n    return brush$1(Y);\n  }\n\n  function brush() {\n    return brush$1(XY);\n  }\n\n  function brush$1(dim) {\n    var extent = defaultExtent$1,\n        filter = defaultFilter$2,\n        listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n        handleSize = 6,\n        touchending;\n\n    function brush(group) {\n      var overlay = group\n          .property(\"__brush\", initialize)\n        .selectAll(\".overlay\")\n        .data([type$1(\"overlay\")]);\n\n      overlay.enter().append(\"rect\")\n          .attr(\"class\", \"overlay\")\n          .attr(\"pointer-events\", \"all\")\n          .attr(\"cursor\", cursors.overlay)\n        .merge(overlay)\n          .each(function() {\n            var extent = local$1(this).extent;\n            select(this)\n                .attr(\"x\", extent[0][0])\n                .attr(\"y\", extent[0][1])\n                .attr(\"width\", extent[1][0] - extent[0][0])\n                .attr(\"height\", extent[1][1] - extent[0][1]);\n          });\n\n      group.selectAll(\".selection\")\n        .data([type$1(\"selection\")])\n        .enter().append(\"rect\")\n          .attr(\"class\", \"selection\")\n          .attr(\"cursor\", cursors.selection)\n          .attr(\"fill\", \"#777\")\n          .attr(\"fill-opacity\", 0.3)\n          .attr(\"stroke\", \"#fff\")\n          .attr(\"shape-rendering\", \"crispEdges\");\n\n      var handle = group.selectAll(\".handle\")\n        .data(dim.handles, function(d) { return d.type; });\n\n      handle.exit().remove();\n\n      handle.enter().append(\"rect\")\n          .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n          .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n      group\n          .each(redraw)\n          .attr(\"fill\", \"none\")\n          .attr(\"pointer-events\", \"all\")\n          .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\")\n          .on(\"mousedown.brush touchstart.brush\", started);\n    }\n\n    brush.move = function(group, selection) {\n      if (group.selection) {\n        group\n            .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n            .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n            .tween(\"brush\", function() {\n              var that = this,\n                  state = that.__brush,\n                  emit = emitter(that, arguments),\n                  selection0 = state.selection,\n                  selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                  i = interpolate(selection0, selection1);\n\n              function tween(t) {\n                state.selection = t === 1 && empty$1(selection1) ? null : i(t);\n                redraw.call(that);\n                emit.brush();\n              }\n\n              return selection0 && selection1 ? tween : tween(1);\n            });\n      } else {\n        group\n            .each(function() {\n              var that = this,\n                  args = arguments,\n                  state = that.__brush,\n                  selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                  emit = emitter(that, args).beforestart();\n\n              interrupt(that);\n              state.selection = selection1 == null || empty$1(selection1) ? null : selection1;\n              redraw.call(that);\n              emit.start().brush().end();\n            });\n      }\n    };\n\n    function redraw() {\n      var group = select(this),\n          selection = local$1(this).selection;\n\n      if (selection) {\n        group.selectAll(\".selection\")\n            .style(\"display\", null)\n            .attr(\"x\", selection[0][0])\n            .attr(\"y\", selection[0][1])\n            .attr(\"width\", selection[1][0] - selection[0][0])\n            .attr(\"height\", selection[1][1] - selection[0][1]);\n\n        group.selectAll(\".handle\")\n            .style(\"display\", null)\n            .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n            .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n            .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n            .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n      }\n\n      else {\n        group.selectAll(\".selection,.handle\")\n            .style(\"display\", \"none\")\n            .attr(\"x\", null)\n            .attr(\"y\", null)\n            .attr(\"width\", null)\n            .attr(\"height\", null);\n      }\n    }\n\n    function emitter(that, args) {\n      return that.__brush.emitter || new Emitter(that, args);\n    }\n\n    function Emitter(that, args) {\n      this.that = that;\n      this.args = args;\n      this.state = that.__brush;\n      this.active = 0;\n    }\n\n    Emitter.prototype = {\n      beforestart: function() {\n        if (++this.active === 1) this.state.emitter = this, this.starting = true;\n        return this;\n      },\n      start: function() {\n        if (this.starting) this.starting = false, this.emit(\"start\");\n        return this;\n      },\n      brush: function() {\n        this.emit(\"brush\");\n        return this;\n      },\n      end: function() {\n        if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n        return this;\n      },\n      emit: function(type) {\n        customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n      }\n    };\n\n    function started() {\n      if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }\n      else if (touchending) return;\n      if (!filter.apply(this, arguments)) return;\n\n      var that = this,\n          type = exports.event.target.__data__.type,\n          mode = (exports.event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),\n          signX = dim === Y ? null : signsX[type],\n          signY = dim === X ? null : signsY[type],\n          state = local$1(that),\n          extent = state.extent,\n          selection = state.selection,\n          W = extent[0][0], w0, w1,\n          N = extent[0][1], n0, n1,\n          E = extent[1][0], e0, e1,\n          S = extent[1][1], s0, s1,\n          dx,\n          dy,\n          moving,\n          shifting = signX && signY && exports.event.shiftKey,\n          lockX,\n          lockY,\n          point0 = mouse(that),\n          point = point0,\n          emit = emitter(that, arguments).beforestart();\n\n      if (type === \"overlay\") {\n        state.selection = selection = [\n          [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n          [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n        ];\n      } else {\n        w0 = selection[0][0];\n        n0 = selection[0][1];\n        e0 = selection[1][0];\n        s0 = selection[1][1];\n      }\n\n      w1 = w0;\n      n1 = n0;\n      e1 = e0;\n      s1 = s0;\n\n      var group = select(that)\n          .attr(\"pointer-events\", \"none\");\n\n      var overlay = group.selectAll(\".overlay\")\n          .attr(\"cursor\", cursors[type]);\n\n      if (exports.event.touches) {\n        group\n            .on(\"touchmove.brush\", moved, true)\n            .on(\"touchend.brush touchcancel.brush\", ended, true);\n      } else {\n        var view = select(exports.event.view)\n            .on(\"keydown.brush\", keydowned, true)\n            .on(\"keyup.brush\", keyupped, true)\n            .on(\"mousemove.brush\", moved, true)\n            .on(\"mouseup.brush\", ended, true);\n\n        dragDisable(exports.event.view);\n      }\n\n      nopropagation$2();\n      interrupt(that);\n      redraw.call(that);\n      emit.start();\n\n      function moved() {\n        var point1 = mouse(that);\n        if (shifting && !lockX && !lockY) {\n          if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n          else lockX = true;\n        }\n        point = point1;\n        moving = true;\n        noevent$2();\n        move();\n      }\n\n      function move() {\n        var t;\n\n        dx = point[0] - point0[0];\n        dy = point[1] - point0[1];\n\n        switch (mode) {\n          case MODE_SPACE:\n          case MODE_DRAG: {\n            if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n            if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n            break;\n          }\n          case MODE_HANDLE: {\n            if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n            break;\n          }\n          case MODE_CENTER: {\n            if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n            if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n            break;\n          }\n        }\n\n        if (e1 < w1) {\n          signX *= -1;\n          t = w0, w0 = e0, e0 = t;\n          t = w1, w1 = e1, e1 = t;\n          if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n        }\n\n        if (s1 < n1) {\n          signY *= -1;\n          t = n0, n0 = s0, s0 = t;\n          t = n1, n1 = s1, s1 = t;\n          if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n        }\n\n        selection = state.selection; // May be set by brush.move!\n\n        if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n        if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n        if (selection[0][0] !== w1\n            || selection[0][1] !== n1\n            || selection[1][0] !== e1\n            || selection[1][1] !== s1) {\n          state.selection = [[w1, n1], [e1, s1]];\n          redraw.call(that);\n          emit.brush();\n        }\n      }\n\n      function ended() {\n        nopropagation$2();\n        if (exports.event.touches) {\n          if (exports.event.touches.length) return;\n          if (touchending) clearTimeout(touchending);\n          touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n          group.on(\"touchmove.brush touchend.brush touchcancel.brush\", null);\n        } else {\n          dragEnable(exports.event.view, moving);\n          view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n        }\n        group.attr(\"pointer-events\", \"all\");\n        overlay.attr(\"cursor\", cursors.overlay);\n        if (empty$1(selection)) state.selection = null, redraw.call(that);\n        emit.end();\n      }\n\n      function keydowned() {\n        switch (exports.event.keyCode) {\n          case 16: { // SHIFT\n            shifting = signX && signY;\n            break;\n          }\n          case 18: { // ALT\n            if (mode === MODE_HANDLE) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n              move();\n            }\n            break;\n          }\n          case 32: { // SPACE; takes priority over ALT\n            if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n              if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n              if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n              mode = MODE_SPACE;\n              overlay.attr(\"cursor\", cursors.selection);\n              move();\n            }\n            break;\n          }\n          default: return;\n        }\n        noevent$2();\n      }\n\n      function keyupped() {\n        switch (exports.event.keyCode) {\n          case 16: { // SHIFT\n            if (shifting) {\n              lockX = lockY = shifting = false;\n              move();\n            }\n            break;\n          }\n          case 18: { // ALT\n            if (mode === MODE_CENTER) {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n              move();\n            }\n            break;\n          }\n          case 32: { // SPACE\n            if (mode === MODE_SPACE) {\n              if (exports.event.altKey) {\n                if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n                if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n                mode = MODE_CENTER;\n              } else {\n                if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n                if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n                mode = MODE_HANDLE;\n              }\n              overlay.attr(\"cursor\", cursors[type]);\n              move();\n            }\n            break;\n          }\n          default: return;\n        }\n        noevent$2();\n      }\n    }\n\n    function initialize() {\n      var state = this.__brush || {selection: null};\n      state.extent = extent.apply(this, arguments);\n      state.dim = dim;\n      return state;\n    }\n\n    brush.extent = function(_) {\n      return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;\n    };\n\n    brush.filter = function(_) {\n      return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$10(!!_), brush) : filter;\n    };\n\n    brush.handleSize = function(_) {\n      return arguments.length ? (handleSize = +_, brush) : handleSize;\n    };\n\n    brush.on = function() {\n      var value = listeners.on.apply(listeners, arguments);\n      return value === listeners ? brush : value;\n    };\n\n    return brush;\n  }\n\n  var cos = Math.cos;\n  var sin = Math.sin;\n  var pi$3 = Math.PI;\n  var halfPi$2 = pi$3 / 2;\n  var tau$3 = pi$3 * 2;\n  var max$1 = Math.max;\n\n  function compareValue(compare) {\n    return function(a, b) {\n      return compare(\n        a.source.value + a.target.value,\n        b.source.value + b.target.value\n      );\n    };\n  }\n\n  function chord() {\n    var padAngle = 0,\n        sortGroups = null,\n        sortSubgroups = null,\n        sortChords = null;\n\n    function chord(matrix) {\n      var n = matrix.length,\n          groupSums = [],\n          groupIndex = range(n),\n          subgroupIndex = [],\n          chords = [],\n          groups = chords.groups = new Array(n),\n          subgroups = new Array(n * n),\n          k,\n          x,\n          x0,\n          dx,\n          i,\n          j;\n\n      // Compute the sum.\n      k = 0, i = -1; while (++i < n) {\n        x = 0, j = -1; while (++j < n) {\n          x += matrix[i][j];\n        }\n        groupSums.push(x);\n        subgroupIndex.push(range(n));\n        k += x;\n      }\n\n      // Sort groups…\n      if (sortGroups) groupIndex.sort(function(a, b) {\n        return sortGroups(groupSums[a], groupSums[b]);\n      });\n\n      // Sort subgroups…\n      if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n        d.sort(function(a, b) {\n          return sortSubgroups(matrix[i][a], matrix[i][b]);\n        });\n      });\n\n      // Convert the sum to scaling factor for [0, 2pi].\n      // TODO Allow start and end angle to be specified?\n      // TODO Allow padding to be specified as percentage?\n      k = max$1(0, tau$3 - padAngle * n) / k;\n      dx = k ? padAngle : tau$3 / n;\n\n      // Compute the start and end angle for each group and subgroup.\n      // Note: Opera has a bug reordering object literal properties!\n      x = 0, i = -1; while (++i < n) {\n        x0 = x, j = -1; while (++j < n) {\n          var di = groupIndex[i],\n              dj = subgroupIndex[di][j],\n              v = matrix[di][dj],\n              a0 = x,\n              a1 = x += v * k;\n          subgroups[dj * n + di] = {\n            index: di,\n            subindex: dj,\n            startAngle: a0,\n            endAngle: a1,\n            value: v\n          };\n        }\n        groups[di] = {\n          index: di,\n          startAngle: x0,\n          endAngle: x,\n          value: groupSums[di]\n        };\n        x += dx;\n      }\n\n      // Generate chords for each (non-empty) subgroup-subgroup link.\n      i = -1; while (++i < n) {\n        j = i - 1; while (++j < n) {\n          var source = subgroups[j * n + i],\n              target = subgroups[i * n + j];\n          if (source.value || target.value) {\n            chords.push(source.value < target.value\n                ? {source: target, target: source}\n                : {source: source, target: target});\n          }\n        }\n      }\n\n      return sortChords ? chords.sort(sortChords) : chords;\n    }\n\n    chord.padAngle = function(_) {\n      return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;\n    };\n\n    chord.sortGroups = function(_) {\n      return arguments.length ? (sortGroups = _, chord) : sortGroups;\n    };\n\n    chord.sortSubgroups = function(_) {\n      return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n    };\n\n    chord.sortChords = function(_) {\n      return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n    };\n\n    return chord;\n  }\n\n  var slice$5 = Array.prototype.slice;\n\n  function constant$11(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function defaultSource(d) {\n    return d.source;\n  }\n\n  function defaultTarget(d) {\n    return d.target;\n  }\n\n  function defaultRadius$1(d) {\n    return d.radius;\n  }\n\n  function defaultStartAngle(d) {\n    return d.startAngle;\n  }\n\n  function defaultEndAngle(d) {\n    return d.endAngle;\n  }\n\n  function ribbon() {\n    var source = defaultSource,\n        target = defaultTarget,\n        radius = defaultRadius$1,\n        startAngle = defaultStartAngle,\n        endAngle = defaultEndAngle,\n        context = null;\n\n    function ribbon() {\n      var buffer,\n          argv = slice$5.call(arguments),\n          s = source.apply(this, argv),\n          t = target.apply(this, argv),\n          sr = +radius.apply(this, (argv[0] = s, argv)),\n          sa0 = startAngle.apply(this, argv) - halfPi$2,\n          sa1 = endAngle.apply(this, argv) - halfPi$2,\n          sx0 = sr * cos(sa0),\n          sy0 = sr * sin(sa0),\n          tr = +radius.apply(this, (argv[0] = t, argv)),\n          ta0 = startAngle.apply(this, argv) - halfPi$2,\n          ta1 = endAngle.apply(this, argv) - halfPi$2;\n\n      if (!context) context = buffer = path();\n\n      context.moveTo(sx0, sy0);\n      context.arc(0, 0, sr, sa0, sa1);\n      if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n        context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n        context.arc(0, 0, tr, ta0, ta1);\n      }\n      context.quadraticCurveTo(0, 0, sx0, sy0);\n      context.closePath();\n\n      if (buffer) return context = null, buffer + \"\" || null;\n    }\n\n    ribbon.radius = function(_) {\n      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : radius;\n    };\n\n    ribbon.startAngle = function(_) {\n      return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : startAngle;\n    };\n\n    ribbon.endAngle = function(_) {\n      return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$11(+_), ribbon) : endAngle;\n    };\n\n    ribbon.source = function(_) {\n      return arguments.length ? (source = _, ribbon) : source;\n    };\n\n    ribbon.target = function(_) {\n      return arguments.length ? (target = _, ribbon) : target;\n    };\n\n    ribbon.context = function(_) {\n      return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n    };\n\n    return ribbon;\n  }\n\n  // Adds floating point numbers with twice the normal precision.\n  // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n  // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n  // 305–363 (1997).\n  // Code adapted from GeographicLib by Charles F. F. Karney,\n  // http://geographiclib.sourceforge.net/\n\n  function adder() {\n    return new Adder;\n  }\n\n  function Adder() {\n    this.reset();\n  }\n\n  Adder.prototype = {\n    constructor: Adder,\n    reset: function() {\n      this.s = // rounded value\n      this.t = 0; // exact error\n    },\n    add: function(y) {\n      add$1(temp, y, this.t);\n      add$1(this, temp.s, this.s);\n      if (this.s) this.t += temp.t;\n      else this.s = temp.t;\n    },\n    valueOf: function() {\n      return this.s;\n    }\n  };\n\n  var temp = new Adder;\n\n  function add$1(adder, a, b) {\n    var x = adder.s = a + b,\n        bv = x - a,\n        av = x - bv;\n    adder.t = (a - av) + (b - bv);\n  }\n\n  var epsilon$4 = 1e-6;\n  var epsilon2$2 = 1e-12;\n  var pi$4 = Math.PI;\n  var halfPi$3 = pi$4 / 2;\n  var quarterPi = pi$4 / 4;\n  var tau$4 = pi$4 * 2;\n\n  var degrees$1 = 180 / pi$4;\n  var radians = pi$4 / 180;\n\n  var abs = Math.abs;\n  var atan = Math.atan;\n  var atan2 = Math.atan2;\n  var cos$1 = Math.cos;\n  var ceil = Math.ceil;\n  var exp = Math.exp;\n  var log$1 = Math.log;\n  var pow$1 = Math.pow;\n  var sin$1 = Math.sin;\n  var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\n  var sqrt$1 = Math.sqrt;\n  var tan = Math.tan;\n\n  function acos(x) {\n    return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);\n  }\n\n  function asin$1(x) {\n    return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);\n  }\n\n  function haversin(x) {\n    return (x = sin$1(x / 2)) * x;\n  }\n\n  function noop$2() {}\n\n  function streamGeometry(geometry, stream) {\n    if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n      streamGeometryType[geometry.type](geometry, stream);\n    }\n  }\n\n  var streamObjectType = {\n    Feature: function(feature, stream) {\n      streamGeometry(feature.geometry, stream);\n    },\n    FeatureCollection: function(object, stream) {\n      var features = object.features, i = -1, n = features.length;\n      while (++i < n) streamGeometry(features[i].geometry, stream);\n    }\n  };\n\n  var streamGeometryType = {\n    Sphere: function(object, stream) {\n      stream.sphere();\n    },\n    Point: function(object, stream) {\n      object = object.coordinates;\n      stream.point(object[0], object[1], object[2]);\n    },\n    MultiPoint: function(object, stream) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n    },\n    LineString: function(object, stream) {\n      streamLine(object.coordinates, stream, 0);\n    },\n    MultiLineString: function(object, stream) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) streamLine(coordinates[i], stream, 0);\n    },\n    Polygon: function(object, stream) {\n      streamPolygon(object.coordinates, stream);\n    },\n    MultiPolygon: function(object, stream) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) streamPolygon(coordinates[i], stream);\n    },\n    GeometryCollection: function(object, stream) {\n      var geometries = object.geometries, i = -1, n = geometries.length;\n      while (++i < n) streamGeometry(geometries[i], stream);\n    }\n  };\n\n  function streamLine(coordinates, stream, closed) {\n    var i = -1, n = coordinates.length - closed, coordinate;\n    stream.lineStart();\n    while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n    stream.lineEnd();\n  }\n\n  function streamPolygon(coordinates, stream) {\n    var i = -1, n = coordinates.length;\n    stream.polygonStart();\n    while (++i < n) streamLine(coordinates[i], stream, 1);\n    stream.polygonEnd();\n  }\n\n  function geoStream(object, stream) {\n    if (object && streamObjectType.hasOwnProperty(object.type)) {\n      streamObjectType[object.type](object, stream);\n    } else {\n      streamGeometry(object, stream);\n    }\n  }\n\n  var areaRingSum = adder();\n\n  var areaSum = adder();\n  var lambda00;\n  var phi00;\n  var lambda0;\n  var cosPhi0;\n  var sinPhi0;\n  var areaStream = {\n    point: noop$2,\n    lineStart: noop$2,\n    lineEnd: noop$2,\n    polygonStart: function() {\n      areaRingSum.reset();\n      areaStream.lineStart = areaRingStart;\n      areaStream.lineEnd = areaRingEnd;\n    },\n    polygonEnd: function() {\n      var areaRing = +areaRingSum;\n      areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);\n      this.lineStart = this.lineEnd = this.point = noop$2;\n    },\n    sphere: function() {\n      areaSum.add(tau$4);\n    }\n  };\n\n  function areaRingStart() {\n    areaStream.point = areaPointFirst;\n  }\n\n  function areaRingEnd() {\n    areaPoint(lambda00, phi00);\n  }\n\n  function areaPointFirst(lambda, phi) {\n    areaStream.point = areaPoint;\n    lambda00 = lambda, phi00 = phi;\n    lambda *= radians, phi *= radians;\n    lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);\n  }\n\n  function areaPoint(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n    // Spherical excess E for a spherical triangle with vertices: south pole,\n    // previous point, current point.  Uses a formula derived from Cagnoli’s\n    // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n    var dLambda = lambda - lambda0,\n        sdLambda = dLambda >= 0 ? 1 : -1,\n        adLambda = sdLambda * dLambda,\n        cosPhi = cos$1(phi),\n        sinPhi = sin$1(phi),\n        k = sinPhi0 * sinPhi,\n        u = cosPhi0 * cosPhi + k * cos$1(adLambda),\n        v = k * sdLambda * sin$1(adLambda);\n    areaRingSum.add(atan2(v, u));\n\n    // Advance the previous points.\n    lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n  }\n\n  function area$2(object) {\n    areaSum.reset();\n    geoStream(object, areaStream);\n    return areaSum * 2;\n  }\n\n  function spherical(cartesian) {\n    return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];\n  }\n\n  function cartesian(spherical) {\n    var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n    return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n  }\n\n  function cartesianDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n  }\n\n  function cartesianCross(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  // TODO return a\n  function cartesianAddInPlace(a, b) {\n    a[0] += b[0], a[1] += b[1], a[2] += b[2];\n  }\n\n  function cartesianScale(vector, k) {\n    return [vector[0] * k, vector[1] * k, vector[2] * k];\n  }\n\n  // TODO return d\n  function cartesianNormalizeInPlace(d) {\n    var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n    d[0] /= l, d[1] /= l, d[2] /= l;\n  }\n\nvar   lambda0$1;\n  var phi0;\n  var lambda1;\n  var phi1;\n  var lambda2;\nvar   lambda00$1;\nvar   phi00$1;\n  var p0;\n  var deltaSum = adder();\n  var ranges;\nvar   range$1;\n  var boundsStream = {\n    point: boundsPoint,\n    lineStart: boundsLineStart,\n    lineEnd: boundsLineEnd,\n    polygonStart: function() {\n      boundsStream.point = boundsRingPoint;\n      boundsStream.lineStart = boundsRingStart;\n      boundsStream.lineEnd = boundsRingEnd;\n      deltaSum.reset();\n      areaStream.polygonStart();\n    },\n    polygonEnd: function() {\n      areaStream.polygonEnd();\n      boundsStream.point = boundsPoint;\n      boundsStream.lineStart = boundsLineStart;\n      boundsStream.lineEnd = boundsLineEnd;\n      if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n      else if (deltaSum > epsilon$4) phi1 = 90;\n      else if (deltaSum < -epsilon$4) phi0 = -90;\n      range$1[0] = lambda0$1, range$1[1] = lambda1;\n    }\n  };\n\n  function boundsPoint(lambda, phi) {\n    ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);\n    if (phi < phi0) phi0 = phi;\n    if (phi > phi1) phi1 = phi;\n  }\n\n  function linePoint(lambda, phi) {\n    var p = cartesian([lambda * radians, phi * radians]);\n    if (p0) {\n      var normal = cartesianCross(p0, p),\n          equatorial = [normal[1], -normal[0], 0],\n          inflection = cartesianCross(equatorial, normal);\n      cartesianNormalizeInPlace(inflection);\n      inflection = spherical(inflection);\n      var delta = lambda - lambda2,\n          sign = delta > 0 ? 1 : -1,\n          lambdai = inflection[0] * degrees$1 * sign,\n          phii,\n          antimeridian = abs(delta) > 180;\n      if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n        phii = inflection[1] * degrees$1;\n        if (phii > phi1) phi1 = phii;\n      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n        phii = -inflection[1] * degrees$1;\n        if (phii < phi0) phi0 = phii;\n      } else {\n        if (phi < phi0) phi0 = phi;\n        if (phi > phi1) phi1 = phi;\n      }\n      if (antimeridian) {\n        if (lambda < lambda2) {\n          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n        }\n      } else {\n        if (lambda1 >= lambda0$1) {\n          if (lambda < lambda0$1) lambda0$1 = lambda;\n          if (lambda > lambda1) lambda1 = lambda;\n        } else {\n          if (lambda > lambda2) {\n            if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n          } else {\n            if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n          }\n        }\n      }\n    } else {\n      boundsPoint(lambda, phi);\n    }\n    p0 = p, lambda2 = lambda;\n  }\n\n  function boundsLineStart() {\n    boundsStream.point = linePoint;\n  }\n\n  function boundsLineEnd() {\n    range$1[0] = lambda0$1, range$1[1] = lambda1;\n    boundsStream.point = boundsPoint;\n    p0 = null;\n  }\n\n  function boundsRingPoint(lambda, phi) {\n    if (p0) {\n      var delta = lambda - lambda2;\n      deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n    } else {\n      lambda00$1 = lambda, phi00$1 = phi;\n    }\n    areaStream.point(lambda, phi);\n    linePoint(lambda, phi);\n  }\n\n  function boundsRingStart() {\n    areaStream.lineStart();\n  }\n\n  function boundsRingEnd() {\n    boundsRingPoint(lambda00$1, phi00$1);\n    areaStream.lineEnd();\n    if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);\n    range$1[0] = lambda0$1, range$1[1] = lambda1;\n    p0 = null;\n  }\n\n  // Finds the left-right distance between two longitudes.\n  // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n  // the distance between ±180° to be 360°.\n  function angle(lambda0, lambda1) {\n    return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n  }\n\n  function rangeCompare(a, b) {\n    return a[0] - b[0];\n  }\n\n  function rangeContains(range, x) {\n    return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n  }\n\n  function bounds(feature) {\n    var i, n, a, b, merged, deltaMax, delta;\n\n    phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n    ranges = [];\n    geoStream(feature, boundsStream);\n\n    // First, sort ranges by their minimum longitudes.\n    if (n = ranges.length) {\n      ranges.sort(rangeCompare);\n\n      // Then, merge any ranges that overlap.\n      for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n        b = ranges[i];\n        if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n          if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n          if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n        } else {\n          merged.push(a = b);\n        }\n      }\n\n      // Finally, find the largest gap between the merged ranges.\n      // The final bounding box will be the inverse of this gap.\n      for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n        b = merged[i];\n        if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n      }\n    }\n\n    ranges = range$1 = null;\n\n    return lambda0$1 === Infinity || phi0 === Infinity\n        ? [[NaN, NaN], [NaN, NaN]]\n        : [[lambda0$1, phi0], [lambda1, phi1]];\n  }\n\n  var W0;\n  var W1;\n  var X0;\n  var Y0;\n  var Z0;\n  var X1;\n  var Y1;\n  var Z1;\n  var X2;\n  var Y2;\n  var Z2;\nvar   lambda00$2;\nvar   phi00$2;\n  var x0;\n  var y0;\n  var z0;\n  // previous point\n\n  var centroidStream = {\n    sphere: noop$2,\n    point: centroidPoint,\n    lineStart: centroidLineStart,\n    lineEnd: centroidLineEnd,\n    polygonStart: function() {\n      centroidStream.lineStart = centroidRingStart;\n      centroidStream.lineEnd = centroidRingEnd;\n    },\n    polygonEnd: function() {\n      centroidStream.lineStart = centroidLineStart;\n      centroidStream.lineEnd = centroidLineEnd;\n    }\n  };\n\n  // Arithmetic mean of Cartesian vectors.\n  function centroidPoint(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    var cosPhi = cos$1(phi);\n    centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n  }\n\n  function centroidPointCartesian(x, y, z) {\n    ++W0;\n    X0 += (x - X0) / W0;\n    Y0 += (y - Y0) / W0;\n    Z0 += (z - Z0) / W0;\n  }\n\n  function centroidLineStart() {\n    centroidStream.point = centroidLinePointFirst;\n  }\n\n  function centroidLinePointFirst(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    var cosPhi = cos$1(phi);\n    x0 = cosPhi * cos$1(lambda);\n    y0 = cosPhi * sin$1(lambda);\n    z0 = sin$1(phi);\n    centroidStream.point = centroidLinePoint;\n    centroidPointCartesian(x0, y0, z0);\n  }\n\n  function centroidLinePoint(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    var cosPhi = cos$1(phi),\n        x = cosPhi * cos$1(lambda),\n        y = cosPhi * sin$1(lambda),\n        z = sin$1(phi),\n        w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n    W1 += w;\n    X1 += w * (x0 + (x0 = x));\n    Y1 += w * (y0 + (y0 = y));\n    Z1 += w * (z0 + (z0 = z));\n    centroidPointCartesian(x0, y0, z0);\n  }\n\n  function centroidLineEnd() {\n    centroidStream.point = centroidPoint;\n  }\n\n  // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n  // J. Applied Mechanics 42, 239 (1975).\n  function centroidRingStart() {\n    centroidStream.point = centroidRingPointFirst;\n  }\n\n  function centroidRingEnd() {\n    centroidRingPoint(lambda00$2, phi00$2);\n    centroidStream.point = centroidPoint;\n  }\n\n  function centroidRingPointFirst(lambda, phi) {\n    lambda00$2 = lambda, phi00$2 = phi;\n    lambda *= radians, phi *= radians;\n    centroidStream.point = centroidRingPoint;\n    var cosPhi = cos$1(phi);\n    x0 = cosPhi * cos$1(lambda);\n    y0 = cosPhi * sin$1(lambda);\n    z0 = sin$1(phi);\n    centroidPointCartesian(x0, y0, z0);\n  }\n\n  function centroidRingPoint(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    var cosPhi = cos$1(phi),\n        x = cosPhi * cos$1(lambda),\n        y = cosPhi * sin$1(lambda),\n        z = sin$1(phi),\n        cx = y0 * z - z0 * y,\n        cy = z0 * x - x0 * z,\n        cz = x0 * y - y0 * x,\n        m = sqrt$1(cx * cx + cy * cy + cz * cz),\n        u = x0 * x + y0 * y + z0 * z,\n        v = m && -acos(u) / m, // area weight\n        w = atan2(m, u); // line weight\n    X2 += v * cx;\n    Y2 += v * cy;\n    Z2 += v * cz;\n    W1 += w;\n    X1 += w * (x0 + (x0 = x));\n    Y1 += w * (y0 + (y0 = y));\n    Z1 += w * (z0 + (z0 = z));\n    centroidPointCartesian(x0, y0, z0);\n  }\n\n  function centroid$1(object) {\n    W0 = W1 =\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    geoStream(object, centroidStream);\n\n    var x = X2,\n        y = Y2,\n        z = Z2,\n        m = x * x + y * y + z * z;\n\n    // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n    if (m < epsilon2$2) {\n      x = X1, y = Y1, z = Z1;\n      // If the feature has zero length, fall back to arithmetic mean of point vectors.\n      if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;\n      m = x * x + y * y + z * z;\n      // If the feature still has an undefined ccentroid, then return.\n      if (m < epsilon2$2) return [NaN, NaN];\n    }\n\n    return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];\n  }\n\n  function constant$12(x) {\n    return function() {\n      return x;\n    };\n  }\n\n  function compose(a, b) {\n\n    function compose(x, y) {\n      return x = a(x, y), b(x[0], x[1]);\n    }\n\n    if (a.invert && b.invert) compose.invert = function(x, y) {\n      return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n    };\n\n    return compose;\n  }\n\n  function rotationIdentity(lambda, phi) {\n    return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];\n  }\n\n  rotationIdentity.invert = rotationIdentity;\n\n  function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n    return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n      : rotationLambda(deltaLambda))\n      : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n      : rotationIdentity);\n  }\n\n  function forwardRotationLambda(deltaLambda) {\n    return function(lambda, phi) {\n      return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];\n    };\n  }\n\n  function rotationLambda(deltaLambda) {\n    var rotation = forwardRotationLambda(deltaLambda);\n    rotation.invert = forwardRotationLambda(-deltaLambda);\n    return rotation;\n  }\n\n  function rotationPhiGamma(deltaPhi, deltaGamma) {\n    var cosDeltaPhi = cos$1(deltaPhi),\n        sinDeltaPhi = sin$1(deltaPhi),\n        cosDeltaGamma = cos$1(deltaGamma),\n        sinDeltaGamma = sin$1(deltaGamma);\n\n    function rotation(lambda, phi) {\n      var cosPhi = cos$1(phi),\n          x = cos$1(lambda) * cosPhi,\n          y = sin$1(lambda) * cosPhi,\n          z = sin$1(phi),\n          k = z * cosDeltaPhi + x * sinDeltaPhi;\n      return [\n        atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n        asin$1(k * cosDeltaGamma + y * sinDeltaGamma)\n      ];\n    }\n\n    rotation.invert = function(lambda, phi) {\n      var cosPhi = cos$1(phi),\n          x = cos$1(lambda) * cosPhi,\n          y = sin$1(lambda) * cosPhi,\n          z = sin$1(phi),\n          k = z * cosDeltaGamma - y * sinDeltaGamma;\n      return [\n        atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n        asin$1(k * cosDeltaPhi - x * sinDeltaPhi)\n      ];\n    };\n\n    return rotation;\n  }\n\n  function rotation(rotate) {\n    rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n    function forward(coordinates) {\n      coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n      return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n    }\n\n    forward.invert = function(coordinates) {\n      coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n      return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;\n    };\n\n    return forward;\n  }\n\n  // Generates a circle centered at [0°, 0°], with a given radius and precision.\n  function circleStream(stream, radius, delta, direction, t0, t1) {\n    if (!delta) return;\n    var cosRadius = cos$1(radius),\n        sinRadius = sin$1(radius),\n        step = direction * delta;\n    if (t0 == null) {\n      t0 = radius + direction * tau$4;\n      t1 = radius - step / 2;\n    } else {\n      t0 = circleRadius(cosRadius, t0);\n      t1 = circleRadius(cosRadius, t1);\n      if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;\n    }\n    for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n      point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n      stream.point(point[0], point[1]);\n    }\n  }\n\n  // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\n  function circleRadius(cosRadius, point) {\n    point = cartesian(point), point[0] -= cosRadius;\n    cartesianNormalizeInPlace(point);\n    var radius = acos(-point[1]);\n    return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;\n  }\n\n  function circle$1() {\n    var center = constant$12([0, 0]),\n        radius = constant$12(90),\n        precision = constant$12(6),\n        ring,\n        rotate,\n        stream = {point: point};\n\n    function point(x, y) {\n      ring.push(x = rotate(x, y));\n      x[0] *= degrees$1, x[1] *= degrees$1;\n    }\n\n    function circle() {\n      var c = center.apply(this, arguments),\n          r = radius.apply(this, arguments) * radians,\n          p = precision.apply(this, arguments) * radians;\n      ring = [];\n      rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n      circleStream(stream, r, p, 1);\n      c = {type: \"Polygon\", coordinates: [ring]};\n      ring = rotate = null;\n      return c;\n    }\n\n    circle.center = function(_) {\n      return arguments.length ? (center = typeof _ === \"function\" ? _ : constant$12([+_[0], +_[1]]), circle) : center;\n    };\n\n    circle.radius = function(_) {\n      return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$12(+_), circle) : radius;\n    };\n\n    circle.precision = function(_) {\n      return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant$12(+_), circle) : precision;\n    };\n\n    return circle;\n  }\n\n  function clipBuffer() {\n    var lines = [],\n        line;\n    return {\n      point: function(x, y) {\n        line.push([x, y]);\n      },\n      lineStart: function() {\n        lines.push(line = []);\n      },\n      lineEnd: noop$2,\n      rejoin: function() {\n        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n      },\n      result: function() {\n        var result = lines;\n        lines = [];\n        line = null;\n        return result;\n      }\n    };\n  }\n\n  function clipLine(a, b, x0, y0, x1, y1) {\n    var ax = a[0],\n        ay = a[1],\n        bx = b[0],\n        by = b[1],\n        t0 = 0,\n        t1 = 1,\n        dx = bx - ax,\n        dy = by - ay,\n        r;\n\n    r = x0 - ax;\n    if (!dx && r > 0) return;\n    r /= dx;\n    if (dx < 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    } else if (dx > 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    }\n\n    r = x1 - ax;\n    if (!dx && r < 0) return;\n    r /= dx;\n    if (dx < 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    } else if (dx > 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    }\n\n    r = y0 - ay;\n    if (!dy && r > 0) return;\n    r /= dy;\n    if (dy < 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    } else if (dy > 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    }\n\n    r = y1 - ay;\n    if (!dy && r < 0) return;\n    r /= dy;\n    if (dy < 0) {\n      if (r > t1) return;\n      if (r > t0) t0 = r;\n    } else if (dy > 0) {\n      if (r < t0) return;\n      if (r < t1) t1 = r;\n    }\n\n    if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n    if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n    return true;\n  }\n\n  function pointEqual(a, b) {\n    return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;\n  }\n\n  function Intersection(point, points, other, entry) {\n    this.x = point;\n    this.z = points;\n    this.o = other; // another intersection\n    this.e = entry; // is an entry?\n    this.v = false; // visited\n    this.n = this.p = null; // next & previous\n  }\n\n  // A generalized polygon clipping algorithm: given a polygon that has been cut\n  // into its visible line segments, and rejoins the segments by interpolating\n  // along the clip edge.\n  function clipPolygon(segments, compareIntersection, startInside, interpolate, stream) {\n    var subject = [],\n        clip = [],\n        i,\n        n;\n\n    segments.forEach(function(segment) {\n      if ((n = segment.length - 1) <= 0) return;\n      var n, p0 = segment[0], p1 = segment[n], x;\n\n      // If the first and last points of a segment are coincident, then treat as a\n      // closed ring. TODO if all rings are closed, then the winding order of the\n      // exterior ring should be checked.\n      if (pointEqual(p0, p1)) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n\n      subject.push(x = new Intersection(p0, segment, null, true));\n      clip.push(x.o = new Intersection(p0, null, x, false));\n      subject.push(x = new Intersection(p1, segment, null, false));\n      clip.push(x.o = new Intersection(p1, null, x, true));\n    });\n\n    if (!subject.length) return;\n\n    clip.sort(compareIntersection);\n    link$1(subject);\n    link$1(clip);\n\n    for (i = 0, n = clip.length; i < n; ++i) {\n      clip[i].e = startInside = !startInside;\n    }\n\n    var start = subject[0],\n        points,\n        point;\n\n    while (1) {\n      // Find first unvisited intersection.\n      var current = start,\n          isSubject = true;\n      while (current.v) if ((current = current.n) === start) return;\n      points = current.z;\n      stream.lineStart();\n      do {\n        current.v = current.o.v = true;\n        if (current.e) {\n          if (isSubject) {\n            for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.n.x, 1, stream);\n          }\n          current = current.n;\n        } else {\n          if (isSubject) {\n            points = current.p.z;\n            for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.p.x, -1, stream);\n          }\n          current = current.p;\n        }\n        current = current.o;\n        points = current.z;\n        isSubject = !isSubject;\n      } while (!current.v);\n      stream.lineEnd();\n    }\n  }\n\n  function link$1(array) {\n    if (!(n = array.length)) return;\n    var n,\n        i = 0,\n        a = array[0],\n        b;\n    while (++i < n) {\n      a.n = b = array[i];\n      b.p = a;\n      a = b;\n    }\n    a.n = b = array[0];\n    b.p = a;\n  }\n\n  var clipMax = 1e9;\n  var clipMin = -clipMax;\n  // TODO Use d3-polygon’s polygonContains here for the ring check?\n  // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\n  function clipExtent(x0, y0, x1, y1) {\n\n    function visible(x, y) {\n      return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n    }\n\n    function interpolate(from, to, direction, stream) {\n      var a = 0, a1 = 0;\n      if (from == null\n          || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n          || comparePoint(from, to) < 0 ^ direction > 0) {\n        do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n        while ((a = (a + direction + 4) % 4) !== a1);\n      } else {\n        stream.point(to[0], to[1]);\n      }\n    }\n\n    function corner(p, direction) {\n      return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3\n          : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1\n          : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0\n          : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n    }\n\n    function compareIntersection(a, b) {\n      return comparePoint(a.x, b.x);\n    }\n\n    function comparePoint(a, b) {\n      var ca = corner(a, 1),\n          cb = corner(b, 1);\n      return ca !== cb ? ca - cb\n          : ca === 0 ? b[1] - a[1]\n          : ca === 1 ? a[0] - b[0]\n          : ca === 2 ? a[1] - b[1]\n          : b[0] - a[0];\n    }\n\n    return function(stream) {\n      var activeStream = stream,\n          bufferStream = clipBuffer(),\n          segments,\n          polygon,\n          ring,\n          x__, y__, v__, // first point\n          x_, y_, v_, // previous point\n          first,\n          clean;\n\n      var clipStream = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: polygonStart,\n        polygonEnd: polygonEnd\n      };\n\n      function point(x, y) {\n        if (visible(x, y)) activeStream.point(x, y);\n      }\n\n      function polygonInside() {\n        var winding = 0;\n\n        for (var i = 0, n = polygon.length; i < n; ++i) {\n          for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n            a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n            if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n            else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n          }\n        }\n\n        return winding;\n      }\n\n      // Buffer geometry within a polygon and then clip it en masse.\n      function polygonStart() {\n        activeStream = bufferStream, segments = [], polygon = [], clean = true;\n      }\n\n      function polygonEnd() {\n        var startInside = polygonInside(),\n            cleanInside = clean && startInside,\n            visible = (segments = merge(segments)).length;\n        if (cleanInside || visible) {\n          stream.polygonStart();\n          if (cleanInside) {\n            stream.lineStart();\n            interpolate(null, null, 1, stream);\n            stream.lineEnd();\n          }\n          if (visible) {\n            clipPolygon(segments, compareIntersection, startInside, interpolate, stream);\n          }\n          stream.polygonEnd();\n        }\n        activeStream = stream, segments = polygon = ring = null;\n      }\n\n      function lineStart() {\n        clipStream.point = linePoint;\n        if (polygon) polygon.push(ring = []);\n        first = true;\n        v_ = false;\n        x_ = y_ = NaN;\n      }\n\n      // TODO rather than special-case polygons, simply handle them separately.\n      // Ideally, coincident intersection points should be jittered to avoid\n      // clipping issues.\n      function lineEnd() {\n        if (segments) {\n          linePoint(x__, y__);\n          if (v__ && v_) bufferStream.rejoin();\n          segments.push(bufferStream.result());\n        }\n        clipStream.point = point;\n        if (v_) activeStream.lineEnd();\n      }\n\n      function linePoint(x, y) {\n        var v = visible(x, y);\n        if (polygon) ring.push([x, y]);\n        if (first) {\n          x__ = x, y__ = y, v__ = v;\n          first = false;\n          if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n          }\n        } else {\n          if (v && v_) activeStream.point(x, y);\n          else {\n            var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n                b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n            if (clipLine(a, b, x0, y0, x1, y1)) {\n              if (!v_) {\n                activeStream.lineStart();\n                activeStream.point(a[0], a[1]);\n              }\n              activeStream.point(b[0], b[1]);\n              if (!v) activeStream.lineEnd();\n              clean = false;\n            } else if (v) {\n              activeStream.lineStart();\n              activeStream.point(x, y);\n              clean = false;\n            }\n          }\n        }\n        x_ = x, y_ = y, v_ = v;\n      }\n\n      return clipStream;\n    };\n  }\n\n  function extent$1() {\n    var x0 = 0,\n        y0 = 0,\n        x1 = 960,\n        y1 = 500,\n        cache,\n        cacheStream,\n        clip;\n\n    return clip = {\n      stream: function(stream) {\n        return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);\n      },\n      extent: function(_) {\n        return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n      }\n    };\n  }\n\n  var lengthSum = adder();\nvar   lambda0$2;\nvar   sinPhi0$1;\nvar   cosPhi0$1;\n  var lengthStream = {\n    sphere: noop$2,\n    point: noop$2,\n    lineStart: lengthLineStart,\n    lineEnd: noop$2,\n    polygonStart: noop$2,\n    polygonEnd: noop$2\n  };\n\n  function lengthLineStart() {\n    lengthStream.point = lengthPointFirst;\n    lengthStream.lineEnd = lengthLineEnd;\n  }\n\n  function lengthLineEnd() {\n    lengthStream.point = lengthStream.lineEnd = noop$2;\n  }\n\n  function lengthPointFirst(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);\n    lengthStream.point = lengthPoint;\n  }\n\n  function lengthPoint(lambda, phi) {\n    lambda *= radians, phi *= radians;\n    var sinPhi = sin$1(phi),\n        cosPhi = cos$1(phi),\n        delta = abs(lambda - lambda0$2),\n        cosDelta = cos$1(delta),\n        sinDelta = sin$1(delta),\n        x = cosPhi * sinDelta,\n        y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n        z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n    lengthSum.add(atan2(sqrt$1(x * x + y * y), z));\n    lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n  }\n\n  function length$2(object) {\n    lengthSum.reset();\n    geoStream(object, lengthStream);\n    return +lengthSum;\n  }\n\n  var coordinates = [null, null];\nvar   object$1 = {type: \"LineString\", coordinates: coordinates};\n  function distance(a, b) {\n    coordinates[0] = a;\n    coordinates[1] = b;\n    return length$2(object$1);\n  }\n\n  function graticuleX(y0, y1, dy) {\n    var y = range(y0, y1 - epsilon$4, dy).concat(y1);\n    return function(x) { return y.map(function(y) { return [x, y]; }); };\n  }\n\n  function graticuleY(x0, x1, dx) {\n    var x = range(x0, x1 - epsilon$4, dx).concat(x1);\n    return function(y) { return x.map(function(x) { return [x, y]; }); };\n  }\n\n  function graticule() {\n    var x1, x0, X1, X0,\n        y1, y0, Y1, Y0,\n        dx = 10, dy = dx, DX = 90, DY = 360,\n        x, y, X, Y,\n        precision = 2.5;\n\n    function graticule() {\n      return {type: \"MultiLineString\", coordinates: lines()};\n    }\n\n    function lines() {\n      return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n          .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n          .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))\n          .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).map(y));\n    }\n\n    graticule.lines = function() {\n      return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n    };\n\n    graticule.outline = function() {\n      return {\n        type: \"Polygon\",\n        coordinates: [\n          X(X0).concat(\n          Y(Y1).slice(1),\n          X(X1).reverse().slice(1),\n          Y(Y0).reverse().slice(1))\n        ]\n      };\n    };\n\n    graticule.extent = function(_) {\n      if (!arguments.length) return graticule.extentMinor();\n      return graticule.extentMajor(_).extentMinor(_);\n    };\n\n    graticule.extentMajor = function(_) {\n      if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n      X0 = +_[0][0], X1 = +_[1][0];\n      Y0 = +_[0][1], Y1 = +_[1][1];\n      if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n      return graticule.precision(precision);\n    };\n\n    graticule.extentMinor = function(_) {\n      if (!arguments.length) return [[x0, y0], [x1, y1]];\n      x0 = +_[0][0], x1 = +_[1][0];\n      y0 = +_[0][1], y1 = +_[1][1];\n      if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n      if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n      return graticule.precision(precision);\n    };\n\n    graticule.step = function(_) {\n      if (!arguments.length) return graticule.stepMinor();\n      return graticule.stepMajor(_).stepMinor(_);\n    };\n\n    graticule.stepMajor = function(_) {\n      if (!arguments.length) return [DX, DY];\n      DX = +_[0], DY = +_[1];\n      return graticule;\n    };\n\n    graticule.stepMinor = function(_) {\n      if (!arguments.length) return [dx, dy];\n      dx = +_[0], dy = +_[1];\n      return graticule;\n    };\n\n    graticule.precision = function(_) {\n      if (!arguments.length) return precision;\n      precision = +_;\n      x = graticuleX(y0, y1, 90);\n      y = graticuleY(x0, x1, precision);\n      X = graticuleX(Y0, Y1, 90);\n      Y = graticuleY(X0, X1, precision);\n      return graticule;\n    };\n\n    return graticule\n        .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])\n        .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);\n  }\n\n  function interpolate$2(a, b) {\n    var x0 = a[0] * radians,\n        y0 = a[1] * radians,\n        x1 = b[0] * radians,\n        y1 = b[1] * radians,\n        cy0 = cos$1(y0),\n        sy0 = sin$1(y0),\n        cy1 = cos$1(y1),\n        sy1 = sin$1(y1),\n        kx0 = cy0 * cos$1(x0),\n        ky0 = cy0 * sin$1(x0),\n        kx1 = cy1 * cos$1(x1),\n        ky1 = cy1 * sin$1(x1),\n        d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n        k = sin$1(d);\n\n    var interpolate = d ? function(t) {\n      var B = sin$1(t *= d) / k,\n          A = sin$1(d - t) / k,\n          x = A * kx0 + B * kx1,\n          y = A * ky0 + B * ky1,\n          z = A * sy0 + B * sy1;\n      return [\n        atan2(y, x) * degrees$1,\n        atan2(z, sqrt$1(x * x + y * y)) * degrees$1\n      ];\n    } : function() {\n      return [x0 * degrees$1, y0 * degrees$1];\n    };\n\n    interpolate.distance = d;\n\n    return interpolate;\n  }\n\n  function identity$7(x) {\n    return x;\n  }\n\nvar   areaSum$1 = adder();\nvar   areaRingSum$1 = adder();\n  var x00;\n  var y00;\nvar   x0$1;\nvar   y0$1;\n  var areaStream$1 = {\n    point: noop$2,\n    lineStart: noop$2,\n    lineEnd: noop$2,\n    polygonStart: function() {\n      areaStream$1.lineStart = areaRingStart$1;\n      areaStream$1.lineEnd = areaRingEnd$1;\n    },\n    polygonEnd: function() {\n      areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;\n      areaSum$1.add(abs(areaRingSum$1));\n      areaRingSum$1.reset();\n    },\n    result: function() {\n      var area = areaSum$1 / 2;\n      areaSum$1.reset();\n      return area;\n    }\n  };\n\n  function areaRingStart$1() {\n    areaStream$1.point = areaPointFirst$1;\n  }\n\n  function areaPointFirst$1(x, y) {\n    areaStream$1.point = areaPoint$1;\n    x00 = x0$1 = x, y00 = y0$1 = y;\n  }\n\n  function areaPoint$1(x, y) {\n    areaRingSum$1.add(y0$1 * x - x0$1 * y);\n    x0$1 = x, y0$1 = y;\n  }\n\n  function areaRingEnd$1() {\n    areaPoint$1(x00, y00);\n  }\n\nvar   x0$2 = Infinity;\nvar   y0$2 = x0$2;\n  var x1 = -x0$2;\n  var y1 = x1;\n  var boundsStream$1 = {\n    point: boundsPoint$1,\n    lineStart: noop$2,\n    lineEnd: noop$2,\n    polygonStart: noop$2,\n    polygonEnd: noop$2,\n    result: function() {\n      var bounds = [[x0$2, y0$2], [x1, y1]];\n      x1 = y1 = -(y0$2 = x0$2 = Infinity);\n      return bounds;\n    }\n  };\n\n  function boundsPoint$1(x, y) {\n    if (x < x0$2) x0$2 = x;\n    if (x > x1) x1 = x;\n    if (y < y0$2) y0$2 = y;\n    if (y > y1) y1 = y;\n  }\n\nvar   X0$1 = 0;\nvar   Y0$1 = 0;\nvar   Z0$1 = 0;\nvar   X1$1 = 0;\nvar   Y1$1 = 0;\nvar   Z1$1 = 0;\nvar   X2$1 = 0;\nvar   Y2$1 = 0;\nvar   Z2$1 = 0;\nvar   x00$1;\nvar   y00$1;\nvar   x0$3;\nvar   y0$3;\n  var centroidStream$1 = {\n    point: centroidPoint$1,\n    lineStart: centroidLineStart$1,\n    lineEnd: centroidLineEnd$1,\n    polygonStart: function() {\n      centroidStream$1.lineStart = centroidRingStart$1;\n      centroidStream$1.lineEnd = centroidRingEnd$1;\n    },\n    polygonEnd: function() {\n      centroidStream$1.point = centroidPoint$1;\n      centroidStream$1.lineStart = centroidLineStart$1;\n      centroidStream$1.lineEnd = centroidLineEnd$1;\n    },\n    result: function() {\n      var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n          : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n          : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n          : [NaN, NaN];\n      X0$1 = Y0$1 = Z0$1 =\n      X1$1 = Y1$1 = Z1$1 =\n      X2$1 = Y2$1 = Z2$1 = 0;\n      return centroid;\n    }\n  };\n\n  function centroidPoint$1(x, y) {\n    X0$1 += x;\n    Y0$1 += y;\n    ++Z0$1;\n  }\n\n  function centroidLineStart$1() {\n    centroidStream$1.point = centroidPointFirstLine;\n  }\n\n  function centroidPointFirstLine(x, y) {\n    centroidStream$1.point = centroidPointLine;\n    centroidPoint$1(x0$3 = x, y0$3 = y);\n  }\n\n  function centroidPointLine(x, y) {\n    var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);\n    X1$1 += z * (x0$3 + x) / 2;\n    Y1$1 += z * (y0$3 + y) / 2;\n    Z1$1 += z;\n    centroidPoint$1(x0$3 = x, y0$3 = y);\n  }\n\n  function centroidLineEnd$1() {\n    centroidStream$1.point = centroidPoint$1;\n  }\n\n  function centroidRingStart$1() {\n    centroidStream$1.point = centroidPointFirstRing;\n  }\n\n  function centroidRingEnd$1() {\n    centroidPointRing(x00$1, y00$1);\n  }\n\n  function centroidPointFirstRing(x, y) {\n    centroidStream$1.point = centroidPointRing;\n    centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n  }\n\n  function centroidPointRing(x, y) {\n    var dx = x - x0$3,\n        dy = y - y0$3,\n        z = sqrt$1(dx * dx + dy * dy);\n\n    X1$1 += z * (x0$3 + x) / 2;\n    Y1$1 += z * (y0$3 + y) / 2;\n    Z1$1 += z;\n\n    z = y0$3 * x - x0$3 * y;\n    X2$1 += z * (x0$3 + x);\n    Y2$1 += z * (y0$3 + y);\n    Z2$1 += z * 3;\n    centroidPoint$1(x0$3 = x, y0$3 = y);\n  }\n\n  function PathContext(context) {\n    var pointRadius = 4.5;\n\n    var stream = {\n      point: point,\n\n      // While inside a line, override point to moveTo then lineTo.\n      lineStart: function() { stream.point = pointLineStart; },\n      lineEnd: lineEnd,\n\n      // While inside a polygon, override lineEnd to closePath.\n      polygonStart: function() { stream.lineEnd = lineEndPolygon; },\n      polygonEnd: function() { stream.lineEnd = lineEnd; stream.point = point; },\n\n      pointRadius: function(_) {\n        pointRadius = _;\n        return stream;\n      },\n\n      result: noop$2\n    };\n\n    function point(x, y) {\n      context.moveTo(x + pointRadius, y);\n      context.arc(x, y, pointRadius, 0, tau$4);\n    }\n\n    function pointLineStart(x, y) {\n      context.moveTo(x, y);\n      stream.point = pointLine;\n    }\n\n    function pointLine(x, y) {\n      context.lineTo(x, y);\n    }\n\n    function lineEnd() {\n      stream.point = point;\n    }\n\n    function lineEndPolygon() {\n      context.closePath();\n    }\n\n    return stream;\n  }\n\n  function PathString() {\n    var pointCircle = circle$2(4.5),\n        string = [];\n\n    var stream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointCircle = circle$2(_);\n        return stream;\n      },\n      result: function() {\n        if (string.length) {\n          var result = string.join(\"\");\n          string = [];\n          return result;\n        }\n      }\n    };\n\n    function point(x, y) {\n      string.push(\"M\", x, \",\", y, pointCircle);\n    }\n\n    function pointLineStart(x, y) {\n      string.push(\"M\", x, \",\", y);\n      stream.point = pointLine;\n    }\n\n    function pointLine(x, y) {\n      string.push(\"L\", x, \",\", y);\n    }\n\n    function lineStart() {\n      stream.point = pointLineStart;\n    }\n\n    function lineEnd() {\n      stream.point = point;\n    }\n\n    function lineEndPolygon() {\n      string.push(\"Z\");\n    }\n\n    return stream;\n  }\n\n  function circle$2(radius) {\n    return \"m0,\" + radius\n        + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n        + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n        + \"z\";\n  }\n\n  function index$3() {\n    var pointRadius = 4.5,\n        projection,\n        projectionStream,\n        context,\n        contextStream;\n\n    function path(object) {\n      if (object) {\n        if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n        geoStream(object, projectionStream(contextStream));\n      }\n      return contextStream.result();\n    }\n\n    path.area = function(object) {\n      geoStream(object, projectionStream(areaStream$1));\n      return areaStream$1.result();\n    };\n\n    path.bounds = function(object) {\n      geoStream(object, projectionStream(boundsStream$1));\n      return boundsStream$1.result();\n    };\n\n    path.centroid = function(object) {\n      geoStream(object, projectionStream(centroidStream$1));\n      return centroidStream$1.result();\n    };\n\n    path.projection = function(_) {\n      return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;\n    };\n\n    path.context = function(_) {\n      if (!arguments.length) return context;\n      contextStream = (context = _) == null ? new PathString : new PathContext(_);\n      if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n      return path;\n    };\n\n    path.pointRadius = function(_) {\n      if (!arguments.length) return pointRadius;\n      pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n      return path;\n    };\n\n    return path.projection(null).context(null);\n  }\n\n  var sum$2 = adder();\n\n  function polygonContains(polygon, point) {\n    var lambda = point[0],\n        phi = point[1],\n        normal = [sin$1(lambda), -cos$1(lambda), 0],\n        angle = 0,\n        winding = 0;\n\n    sum$2.reset();\n\n    for (var i = 0, n = polygon.length; i < n; ++i) {\n      if (!(m = (ring = polygon[i]).length)) continue;\n      var ring,\n          m,\n          point0 = ring[m - 1],\n          lambda0 = point0[0],\n          phi0 = point0[1] / 2 + quarterPi,\n          sinPhi0 = sin$1(phi0),\n          cosPhi0 = cos$1(phi0);\n\n      for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n        var point1 = ring[j],\n            lambda1 = point1[0],\n            phi1 = point1[1] / 2 + quarterPi,\n            sinPhi1 = sin$1(phi1),\n            cosPhi1 = cos$1(phi1),\n            delta = lambda1 - lambda0,\n            sign = delta >= 0 ? 1 : -1,\n            absDelta = sign * delta,\n            antimeridian = absDelta > pi$4,\n            k = sinPhi0 * sinPhi1;\n\n        sum$2.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n        angle += antimeridian ? delta + sign * tau$4 : delta;\n\n        // Are the longitudes either side of the point’s meridian (lambda),\n        // and are the latitudes smaller than the parallel (phi)?\n        if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n          var arc = cartesianCross(cartesian(point0), cartesian(point1));\n          cartesianNormalizeInPlace(arc);\n          var intersection = cartesianCross(normal, arc);\n          cartesianNormalizeInPlace(intersection);\n          var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);\n          if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n            winding += antimeridian ^ delta >= 0 ? 1 : -1;\n          }\n        }\n      }\n    }\n\n    // First, determine whether the South pole is inside or outside:\n    //\n    // It is inside if:\n    // * the polygon winds around it in a clockwise direction.\n    // * the polygon does not (cumulatively) wind around it, but has a negative\n    //   (counter-clockwise) area.\n    //\n    // Second, count the (signed) number of times a segment crosses a lambda\n    // from the point to the South pole.  If it is zero, then the point is the\n    // same side as the South pole.\n\n    return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);\n  }\n\n  function clip(pointVisible, clipLine, interpolate, start) {\n    return function(rotate, sink) {\n      var line = clipLine(sink),\n          rotatedStart = rotate.invert(start[0], start[1]),\n          ringBuffer = clipBuffer(),\n          ringSink = clipLine(ringBuffer),\n          polygonStarted = false,\n          polygon,\n          segments,\n          ring;\n\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          clip.point = pointRing;\n          clip.lineStart = ringStart;\n          clip.lineEnd = ringEnd;\n          segments = [];\n          polygon = [];\n        },\n        polygonEnd: function() {\n          clip.point = point;\n          clip.lineStart = lineStart;\n          clip.lineEnd = lineEnd;\n          segments = merge(segments);\n          var startInside = polygonContains(polygon, rotatedStart);\n          if (segments.length) {\n            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n            clipPolygon(segments, compareIntersection, startInside, interpolate, sink);\n          } else if (startInside) {\n            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n            sink.lineStart();\n            interpolate(null, null, 1, sink);\n            sink.lineEnd();\n          }\n          if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n          segments = polygon = null;\n        },\n        sphere: function() {\n          sink.polygonStart();\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n          sink.polygonEnd();\n        }\n      };\n\n      function point(lambda, phi) {\n        var point = rotate(lambda, phi);\n        if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);\n      }\n\n      function pointLine(lambda, phi) {\n        var point = rotate(lambda, phi);\n        line.point(point[0], point[1]);\n      }\n\n      function lineStart() {\n        clip.point = pointLine;\n        line.lineStart();\n      }\n\n      function lineEnd() {\n        clip.point = point;\n        line.lineEnd();\n      }\n\n      function pointRing(lambda, phi) {\n        ring.push([lambda, phi]);\n        var point = rotate(lambda, phi);\n        ringSink.point(point[0], point[1]);\n      }\n\n      function ringStart() {\n        ringSink.lineStart();\n        ring = [];\n      }\n\n      function ringEnd() {\n        pointRing(ring[0][0], ring[0][1]);\n        ringSink.lineEnd();\n\n        var clean = ringSink.clean(),\n            ringSegments = ringBuffer.result(),\n            i, n = ringSegments.length, m,\n            segment,\n            point;\n\n        ring.pop();\n        polygon.push(ring);\n        ring = null;\n\n        if (!n) return;\n\n        // No intersections.\n        if (clean & 1) {\n          segment = ringSegments[0];\n          if ((m = segment.length - 1) > 0) {\n            if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n            sink.lineStart();\n            for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n            sink.lineEnd();\n          }\n          return;\n        }\n\n        // Rejoin connected segments.\n        // TODO reuse ringBuffer.rejoin()?\n        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n        segments.push(ringSegments.filter(validSegment));\n      }\n\n      return clip;\n    };\n  }\n\n  function validSegment(segment) {\n    return segment.length > 1;\n  }\n\n  // Intersections are sorted along the clip edge. For both antimeridian cutting\n  // and circle clipping, the same comparison is used.\n  function compareIntersection(a, b) {\n    return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])\n         - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);\n  }\n\n  var clipAntimeridian = clip(\n    function() { return true; },\n    clipAntimeridianLine,\n    clipAntimeridianInterpolate,\n    [-pi$4, -halfPi$3]\n  );\n\n  // Takes a line and cuts into visible segments. Return values: 0 - there were\n  // intersections or the line was empty; 1 - no intersections; 2 - there were\n  // intersections, and the first and last segments should be rejoined.\n  function clipAntimeridianLine(stream) {\n    var lambda0 = NaN,\n        phi0 = NaN,\n        sign0 = NaN,\n        clean; // no intersections\n\n    return {\n      lineStart: function() {\n        stream.lineStart();\n        clean = 1;\n      },\n      point: function(lambda1, phi1) {\n        var sign1 = lambda1 > 0 ? pi$4 : -pi$4,\n            delta = abs(lambda1 - lambda0);\n        if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole\n          stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);\n          stream.point(sign0, phi0);\n          stream.lineEnd();\n          stream.lineStart();\n          stream.point(sign1, phi0);\n          stream.point(lambda1, phi0);\n          clean = 0;\n        } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian\n          if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies\n          if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;\n          phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n          stream.point(sign0, phi0);\n          stream.lineEnd();\n          stream.lineStart();\n          stream.point(sign1, phi0);\n          clean = 0;\n        }\n        stream.point(lambda0 = lambda1, phi0 = phi1);\n        sign0 = sign1;\n      },\n      lineEnd: function() {\n        stream.lineEnd();\n        lambda0 = phi0 = NaN;\n      },\n      clean: function() {\n        return 2 - clean; // if intersections, rejoin first and last segments\n      }\n    };\n  }\n\n  function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n    var cosPhi0,\n        cosPhi1,\n        sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n    return abs(sinLambda0Lambda1) > epsilon$4\n        ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n            - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n            / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n        : (phi0 + phi1) / 2;\n  }\n\n  function clipAntimeridianInterpolate(from, to, direction, stream) {\n    var phi;\n    if (from == null) {\n      phi = direction * halfPi$3;\n      stream.point(-pi$4, phi);\n      stream.point(0, phi);\n      stream.point(pi$4, phi);\n      stream.point(pi$4, 0);\n      stream.point(pi$4, -phi);\n      stream.point(0, -phi);\n      stream.point(-pi$4, -phi);\n      stream.point(-pi$4, 0);\n      stream.point(-pi$4, phi);\n    } else if (abs(from[0] - to[0]) > epsilon$4) {\n      var lambda = from[0] < to[0] ? pi$4 : -pi$4;\n      phi = direction * lambda / 2;\n      stream.point(-lambda, phi);\n      stream.point(0, phi);\n      stream.point(lambda, phi);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function clipCircle(radius, delta) {\n    var cr = cos$1(radius),\n        smallRadius = cr > 0,\n        notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case\n\n    function interpolate(from, to, direction, stream) {\n      circleStream(stream, radius, delta, direction, from, to);\n    }\n\n    function visible(lambda, phi) {\n      return cos$1(lambda) * cos$1(phi) > cr;\n    }\n\n    // Takes a line and cuts into visible segments. Return values used for polygon\n    // clipping: 0 - there were intersections or the line was empty; 1 - no\n    // intersections 2 - there were intersections, and the first and last segments\n    // should be rejoined.\n    function clipLine(stream) {\n      var point0, // previous point\n          c0, // code for previous point\n          v0, // visibility of previous point\n          v00, // visibility of first point\n          clean; // no intersections\n      return {\n        lineStart: function() {\n          v00 = v0 = false;\n          clean = 1;\n        },\n        point: function(lambda, phi) {\n          var point1 = [lambda, phi],\n              point2,\n              v = visible(lambda, phi),\n              c = smallRadius\n                ? v ? 0 : code(lambda, phi)\n                : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;\n          if (!point0 && (v00 = v0 = v)) stream.lineStart();\n          // Handle degeneracies.\n          // TODO ignore if not clipping polygons.\n          if (v !== v0) {\n            point2 = intersect(point0, point1);\n            if (pointEqual(point0, point2) || pointEqual(point1, point2)) {\n              point1[0] += epsilon$4;\n              point1[1] += epsilon$4;\n              v = visible(point1[0], point1[1]);\n            }\n          }\n          if (v !== v0) {\n            clean = 0;\n            if (v) {\n              // outside going in\n              stream.lineStart();\n              point2 = intersect(point1, point0);\n              stream.point(point2[0], point2[1]);\n            } else {\n              // inside going out\n              point2 = intersect(point0, point1);\n              stream.point(point2[0], point2[1]);\n              stream.lineEnd();\n            }\n            point0 = point2;\n          } else if (notHemisphere && point0 && smallRadius ^ v) {\n            var t;\n            // If the codes for two points are different, or are both zero,\n            // and there this segment intersects with the small circle.\n            if (!(c & c0) && (t = intersect(point1, point0, true))) {\n              clean = 0;\n              if (smallRadius) {\n                stream.lineStart();\n                stream.point(t[0][0], t[0][1]);\n                stream.point(t[1][0], t[1][1]);\n                stream.lineEnd();\n              } else {\n                stream.point(t[1][0], t[1][1]);\n                stream.lineEnd();\n                stream.lineStart();\n                stream.point(t[0][0], t[0][1]);\n              }\n            }\n          }\n          if (v && (!point0 || !pointEqual(point0, point1))) {\n            stream.point(point1[0], point1[1]);\n          }\n          point0 = point1, v0 = v, c0 = c;\n        },\n        lineEnd: function() {\n          if (v0) stream.lineEnd();\n          point0 = null;\n        },\n        // Rejoin first and last segments if there were intersections and the first\n        // and last points were visible.\n        clean: function() {\n          return clean | ((v00 && v0) << 1);\n        }\n      };\n    }\n\n    // Intersects the great circle between a and b with the clip circle.\n    function intersect(a, b, two) {\n      var pa = cartesian(a),\n          pb = cartesian(b);\n\n      // We have two planes, n1.p = d1 and n2.p = d2.\n      // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n      var n1 = [1, 0, 0], // normal\n          n2 = cartesianCross(pa, pb),\n          n2n2 = cartesianDot(n2, n2),\n          n1n2 = n2[0], // cartesianDot(n1, n2),\n          determinant = n2n2 - n1n2 * n1n2;\n\n      // Two polar points.\n      if (!determinant) return !two && a;\n\n      var c1 =  cr * n2n2 / determinant,\n          c2 = -cr * n1n2 / determinant,\n          n1xn2 = cartesianCross(n1, n2),\n          A = cartesianScale(n1, c1),\n          B = cartesianScale(n2, c2);\n      cartesianAddInPlace(A, B);\n\n      // Solve |p(t)|^2 = 1.\n      var u = n1xn2,\n          w = cartesianDot(A, u),\n          uu = cartesianDot(u, u),\n          t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n      if (t2 < 0) return;\n\n      var t = sqrt$1(t2),\n          q = cartesianScale(u, (-w - t) / uu);\n      cartesianAddInPlace(q, A);\n      q = spherical(q);\n\n      if (!two) return q;\n\n      // Two intersection points.\n      var lambda0 = a[0],\n          lambda1 = b[0],\n          phi0 = a[1],\n          phi1 = b[1],\n          z;\n\n      if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n      var delta = lambda1 - lambda0,\n          polar = abs(delta - pi$4) < epsilon$4,\n          meridian = polar || delta < epsilon$4;\n\n      if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n      // Check that the first point is between a and b.\n      if (meridian\n          ? polar\n            ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)\n            : phi0 <= q[1] && q[1] <= phi1\n          : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n        var q1 = cartesianScale(u, (-w + t) / uu);\n        cartesianAddInPlace(q1, A);\n        return [q, spherical(q1)];\n      }\n    }\n\n    // Generates a 4-bit vector representing the location of a point relative to\n    // the small circle's bounding box.\n    function code(lambda, phi) {\n      var r = smallRadius ? radius : pi$4 - radius,\n          code = 0;\n      if (lambda < -r) code |= 1; // left\n      else if (lambda > r) code |= 2; // right\n      if (phi < -r) code |= 4; // below\n      else if (phi > r) code |= 8; // above\n      return code;\n    }\n\n    return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);\n  }\n\n  function transform$1(prototype) {\n    return {\n      stream: transform$2(prototype)\n    };\n  }\n\n  function transform$2(prototype) {\n    function T() {}\n    var p = T.prototype = Object.create(Transform$1.prototype);\n    for (var k in prototype) p[k] = prototype[k];\n    return function(stream) {\n      var t = new T;\n      t.stream = stream;\n      return t;\n    };\n  }\n\n  function Transform$1() {}\n\n  Transform$1.prototype = {\n    point: function(x, y) { this.stream.point(x, y); },\n    sphere: function() { this.stream.sphere(); },\n    lineStart: function() { this.stream.lineStart(); },\n    lineEnd: function() { this.stream.lineEnd(); },\n    polygonStart: function() { this.stream.polygonStart(); },\n    polygonEnd: function() { this.stream.polygonEnd(); }\n  };\n\n  function fit(project, extent, object) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        clip = project.clipExtent && project.clipExtent();\n\n    project\n        .scale(150)\n        .translate([0, 0]);\n\n    if (clip != null) project.clipExtent(null);\n\n    geoStream(object, project.stream(boundsStream$1));\n\n    var b = boundsStream$1.result(),\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n\n    if (clip != null) project.clipExtent(clip);\n\n    return project\n        .scale(k * 150)\n        .translate([x, y]);\n  }\n\n  function fitSize(project) {\n    return function(size, object) {\n      return fit(project, [[0, 0], size], object);\n    };\n  }\n\n  function fitExtent(project) {\n    return function(extent, object) {\n      return fit(project, extent, object);\n    };\n  }\n\n  var maxDepth = 16;\n  var cosMinDistance = cos$1(30 * radians);\n  // cos(minimum angular distance)\n\n  function resample(project, delta2) {\n    return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n  }\n\n  function resampleNone(project) {\n    return transform$2({\n      point: function(x, y) {\n        x = project(x, y);\n        this.stream.point(x[0], x[1]);\n      }\n    });\n  }\n\n  function resample$1(project, delta2) {\n\n    function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n      var dx = x1 - x0,\n          dy = y1 - y0,\n          d2 = dx * dx + dy * dy;\n      if (d2 > 4 * delta2 && depth--) {\n        var a = a0 + a1,\n            b = b0 + b1,\n            c = c0 + c1,\n            m = sqrt$1(a * a + b * b + c * c),\n            phi2 = asin$1(c /= m),\n            lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),\n            p = project(lambda2, phi2),\n            x2 = p[0],\n            y2 = p[1],\n            dx2 = x2 - x0,\n            dy2 = y2 - y0,\n            dz = dy * dx2 - dx * dy2;\n        if (dz * dz / d2 > delta2 // perpendicular projected distance\n            || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n            || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n          resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n          stream.point(x2, y2);\n          resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n        }\n      }\n    }\n    return function(stream) {\n      var lambda00, x00, y00, a00, b00, c00, // first point\n          lambda0, x0, y0, a0, b0, c0; // previous point\n\n      var resampleStream = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n        polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n      };\n\n      function point(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      }\n\n      function lineStart() {\n        x0 = NaN;\n        resampleStream.point = linePoint;\n        stream.lineStart();\n      }\n\n      function linePoint(lambda, phi) {\n        var c = cartesian([lambda, phi]), p = project(lambda, phi);\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n        stream.point(x0, y0);\n      }\n\n      function lineEnd() {\n        resampleStream.point = point;\n        stream.lineEnd();\n      }\n\n      function ringStart() {\n        lineStart();\n        resampleStream.point = ringPoint;\n        resampleStream.lineEnd = ringEnd;\n      }\n\n      function ringPoint(lambda, phi) {\n        linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n        resampleStream.point = linePoint;\n      }\n\n      function ringEnd() {\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n        resampleStream.lineEnd = lineEnd;\n        lineEnd();\n      }\n\n      return resampleStream;\n    };\n  }\n\n  var transformRadians = transform$2({\n    point: function(x, y) {\n      this.stream.point(x * radians, y * radians);\n    }\n  });\n\n  function projection(project) {\n    return projectionMutator(function() { return project; })();\n  }\n\n  function projectionMutator(projectAt) {\n    var project,\n        k = 150, // scale\n        x = 480, y = 250, // translate\n        dx, dy, lambda = 0, phi = 0, // center\n        deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate\n        theta = null, preclip = clipAntimeridian, // clip angle\n        x0 = null, y0, x1, y1, postclip = identity$7, // clip extent\n        delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision\n        cache,\n        cacheStream;\n\n    function projection(point) {\n      point = projectRotate(point[0] * radians, point[1] * radians);\n      return [point[0] * k + dx, dy - point[1] * k];\n    }\n\n    function invert(point) {\n      point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);\n      return point && [point[0] * degrees$1, point[1] * degrees$1];\n    }\n\n    function projectTransform(x, y) {\n      return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];\n    }\n\n    projection.stream = function(stream) {\n      return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));\n    };\n\n    projection.clipAngle = function(_) {\n      return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;\n    };\n\n    projection.clipExtent = function(_) {\n      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n    };\n\n    projection.scale = function(_) {\n      return arguments.length ? (k = +_, recenter()) : k;\n    };\n\n    projection.translate = function(_) {\n      return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n    };\n\n    projection.center = function(_) {\n      return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];\n    };\n\n    projection.rotate = function(_) {\n      return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];\n    };\n\n    projection.precision = function(_) {\n      return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);\n    };\n\n    projection.fitExtent = fitExtent(projection);\n\n    projection.fitSize = fitSize(projection);\n\n    function recenter() {\n      projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);\n      var center = project(lambda, phi);\n      dx = x - center[0] * k;\n      dy = y + center[1] * k;\n      return reset();\n    }\n\n    function reset() {\n      cache = cacheStream = null;\n      return projection;\n    }\n\n    return function() {\n      project = projectAt.apply(this, arguments);\n      projection.invert = project.invert && invert;\n      return recenter();\n    };\n  }\n\n  function conicProjection(projectAt) {\n    var phi0 = 0,\n        phi1 = pi$4 / 3,\n        m = projectionMutator(projectAt),\n        p = m(phi0, phi1);\n\n    p.parallels = function(_) {\n      return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];\n    };\n\n    return p;\n  }\n\n  function conicEqualAreaRaw(y0, y1) {\n    var sy0 = sin$1(y0),\n        n = (sy0 + sin$1(y1)) / 2,\n        c = 1 + sy0 * (2 * n - sy0),\n        r0 = sqrt$1(c) / n;\n\n    function project(x, y) {\n      var r = sqrt$1(c - 2 * n * sin$1(y)) / n;\n      return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n    }\n\n    project.invert = function(x, y) {\n      var r0y = r0 - y;\n      return [atan2(x, r0y) / n, asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n    };\n\n    return project;\n  }\n\n  function conicEqualArea() {\n    return conicProjection(conicEqualAreaRaw)\n        .scale(155.424)\n        .center([0, 33.6442]);\n  }\n\n  function albers() {\n    return conicEqualArea()\n        .parallels([29.5, 45.5])\n        .scale(1070)\n        .translate([480, 250])\n        .rotate([96, 0])\n        .center([-0.6, 38.7]);\n  }\n\n  // The projections must have mutually exclusive clip regions on the sphere,\n  // as this will avoid emitting interleaving lines and polygons.\n  function multiplex(streams) {\n    var n = streams.length;\n    return {\n      point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n      sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n      lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n      lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n      polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n      polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n    };\n  }\n\n  // A composite projection for the United States, configured by default for\n  // 960×500. The projection also works quite well at 960×600 if you change the\n  // scale to 1285 and adjust the translate accordingly. The set of standard\n  // parallels for each region comes from USGS, which is published here:\n  // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\n  function albersUsa() {\n    var cache,\n        cacheStream,\n        lower48 = albers(), lower48Point,\n        alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n        hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n        point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n    function albersUsa(coordinates) {\n      var x = coordinates[0], y = coordinates[1];\n      return point = null,\n          (lower48Point.point(x, y), point)\n          || (alaskaPoint.point(x, y), point)\n          || (hawaiiPoint.point(x, y), point);\n    }\n\n    albersUsa.invert = function(coordinates) {\n      var k = lower48.scale(),\n          t = lower48.translate(),\n          x = (coordinates[0] - t[0]) / k,\n          y = (coordinates[1] - t[1]) / k;\n      return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n          : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n          : lower48).invert(coordinates);\n    };\n\n    albersUsa.stream = function(stream) {\n      return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n    };\n\n    albersUsa.precision = function(_) {\n      if (!arguments.length) return lower48.precision();\n      lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n      return albersUsa;\n    };\n\n    albersUsa.scale = function(_) {\n      if (!arguments.length) return lower48.scale();\n      lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n      return albersUsa.translate(lower48.translate());\n    };\n\n    albersUsa.translate = function(_) {\n      if (!arguments.length) return lower48.translate();\n      var k = lower48.scale(), x = +_[0], y = +_[1];\n\n      lower48Point = lower48\n          .translate(_)\n          .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n          .stream(pointStream);\n\n      alaskaPoint = alaska\n          .translate([x - 0.307 * k, y + 0.201 * k])\n          .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])\n          .stream(pointStream);\n\n      hawaiiPoint = hawaii\n          .translate([x - 0.205 * k, y + 0.212 * k])\n          .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])\n          .stream(pointStream);\n\n      return albersUsa;\n    };\n\n    albersUsa.fitExtent = fitExtent(albersUsa);\n\n    albersUsa.fitSize = fitSize(albersUsa);\n\n    return albersUsa.scale(1070);\n  }\n\n  function azimuthalRaw(scale) {\n    return function(x, y) {\n      var cx = cos$1(x),\n          cy = cos$1(y),\n          k = scale(cx * cy);\n      return [\n        k * cy * sin$1(x),\n        k * sin$1(y)\n      ];\n    }\n  }\n\n  function azimuthalInvert(angle) {\n    return function(x, y) {\n      var z = sqrt$1(x * x + y * y),\n          c = angle(z),\n          sc = sin$1(c),\n          cc = cos$1(c);\n      return [\n        atan2(x * sc, z * cc),\n        asin$1(z && y * sc / z)\n      ];\n    }\n  }\n\n  var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n    return sqrt$1(2 / (1 + cxcy));\n  });\n\n  azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n    return 2 * asin$1(z / 2);\n  });\n\n  function azimuthalEqualArea() {\n    return projection(azimuthalEqualAreaRaw)\n        .scale(124.75)\n        .clipAngle(180 - 1e-3);\n  }\n\n  var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n    return (c = acos(c)) && c / sin$1(c);\n  });\n\n  azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n    return z;\n  });\n\n  function azimuthalEquidistant() {\n    return projection(azimuthalEquidistantRaw)\n        .scale(79.4188)\n        .clipAngle(180 - 1e-3);\n  }\n\n  function mercatorRaw(lambda, phi) {\n    return [lambda, log$1(tan((halfPi$3 + phi) / 2))];\n  }\n\n  mercatorRaw.invert = function(x, y) {\n    return [x, 2 * atan(exp(y)) - halfPi$3];\n  };\n\n  function mercator() {\n    return mercatorProjection(mercatorRaw)\n        .scale(961 / tau$4);\n  }\n\n  function mercatorProjection(project) {\n    var m = projection(project),\n        scale = m.scale,\n        translate = m.translate,\n        clipExtent = m.clipExtent,\n        clipAuto;\n\n    m.scale = function(_) {\n      return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();\n    };\n\n    m.translate = function(_) {\n      return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();\n    };\n\n    m.clipExtent = function(_) {\n      if (!arguments.length) return clipAuto ? null : clipExtent();\n      if (clipAuto = _ == null) {\n        var k = pi$4 * scale(),\n            t = translate();\n        _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];\n      }\n      clipExtent(_);\n      return m;\n    };\n\n    return m.clipExtent(null);\n  }\n\n  function tany(y) {\n    return tan((halfPi$3 + y) / 2);\n  }\n\n  function conicConformalRaw(y0, y1) {\n    var cy0 = cos$1(y0),\n        n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),\n        f = cy0 * pow$1(tany(y0), n) / n;\n\n    if (!n) return mercatorRaw;\n\n    function project(x, y) {\n      if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }\n      else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }\n      var r = f / pow$1(tany(y), n);\n      return [r * sin$1(n * x), f - r * cos$1(n * x)];\n    }\n\n    project.invert = function(x, y) {\n      var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);\n      return [atan2(x, fy) / n, 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];\n    };\n\n    return project;\n  }\n\n  function conicConformal() {\n    return conicProjection(conicConformalRaw)\n        .scale(109.5)\n        .parallels([30, 30]);\n  }\n\n  function equirectangularRaw(lambda, phi) {\n    return [lambda, phi];\n  }\n\n  equirectangularRaw.invert = equirectangularRaw;\n\n  function equirectangular() {\n    return projection(equirectangularRaw)\n        .scale(152.63);\n  }\n\n  function conicEquidistantRaw(y0, y1) {\n    var cy0 = cos$1(y0),\n        n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n        g = cy0 / n + y0;\n\n    if (abs(n) < epsilon$4) return equirectangularRaw;\n\n    function project(x, y) {\n      var gy = g - y, nx = n * x;\n      return [gy * sin$1(nx), g - gy * cos$1(nx)];\n    }\n\n    project.invert = function(x, y) {\n      var gy = g - y;\n      return [atan2(x, gy) / n, g - sign$1(n) * sqrt$1(x * x + gy * gy)];\n    };\n\n    return project;\n  }\n\n  function conicEquidistant() {\n    return conicProjection(conicEquidistantRaw)\n        .scale(131.154)\n        .center([0, 13.9389]);\n  }\n\n  function gnomonicRaw(x, y) {\n    var cy = cos$1(y), k = cos$1(x) * cy;\n    return [cy * sin$1(x) / k, sin$1(y) / k];\n  }\n\n  gnomonicRaw.invert = azimuthalInvert(atan);\n\n  function gnomonic() {\n    return projection(gnomonicRaw)\n        .scale(144.049)\n        .clipAngle(60);\n  }\n\n  function orthographicRaw(x, y) {\n    return [cos$1(y) * sin$1(x), sin$1(y)];\n  }\n\n  orthographicRaw.invert = azimuthalInvert(asin$1);\n\n  function orthographic() {\n    return projection(orthographicRaw)\n        .scale(249.5)\n        .clipAngle(90 + epsilon$4);\n  }\n\n  function stereographicRaw(x, y) {\n    var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n    return [cy * sin$1(x) / k, sin$1(y) / k];\n  }\n\n  stereographicRaw.invert = azimuthalInvert(function(z) {\n    return 2 + atan(z);\n  });\n\n  function stereographic() {\n    return projection(stereographicRaw)\n        .scale(250)\n        .clipAngle(142);\n  }\n\n  function transverseMercatorRaw(lambda, phi) {\n    return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];\n  }\n\n  transverseMercatorRaw.invert = function(x, y) {\n    return [-y, 2 * atan(exp(x)) - halfPi$3];\n  };\n\n  function transverseMercator() {\n    var m = mercatorProjection(transverseMercatorRaw),\n        center = m.center,\n        rotate = m.rotate;\n\n    m.center = function(_) {\n      return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n    };\n\n    m.rotate = function(_) {\n      return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n    };\n\n    return rotate([0, 0, 90])\n        .scale(159.155);\n  }\n\n  exports.version = version;\n  exports.bisect = bisectRight;\n  exports.bisectRight = bisectRight;\n  exports.bisectLeft = bisectLeft;\n  exports.ascending = ascending;\n  exports.bisector = bisector;\n  exports.descending = descending;\n  exports.deviation = deviation;\n  exports.extent = extent;\n  exports.histogram = histogram;\n  exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n  exports.thresholdScott = scott;\n  exports.thresholdSturges = sturges;\n  exports.max = max;\n  exports.mean = mean;\n  exports.median = median;\n  exports.merge = merge;\n  exports.min = min;\n  exports.pairs = pairs;\n  exports.permute = permute;\n  exports.quantile = threshold;\n  exports.range = range;\n  exports.scan = scan;\n  exports.shuffle = shuffle;\n  exports.sum = sum;\n  exports.ticks = ticks;\n  exports.tickStep = tickStep;\n  exports.transpose = transpose;\n  exports.variance = variance;\n  exports.zip = zip;\n  exports.entries = entries;\n  exports.keys = keys;\n  exports.values = values;\n  exports.map = map$1;\n  exports.set = set;\n  exports.nest = nest;\n  exports.randomUniform = uniform;\n  exports.randomNormal = normal;\n  exports.randomLogNormal = logNormal;\n  exports.randomBates = bates;\n  exports.randomIrwinHall = irwinHall;\n  exports.randomExponential = exponential;\n  exports.easeLinear = linear;\n  exports.easeQuad = quadInOut;\n  exports.easeQuadIn = quadIn;\n  exports.easeQuadOut = quadOut;\n  exports.easeQuadInOut = quadInOut;\n  exports.easeCubic = easeCubicInOut;\n  exports.easeCubicIn = cubicIn;\n  exports.easeCubicOut = cubicOut;\n  exports.easeCubicInOut = easeCubicInOut;\n  exports.easePoly = polyInOut;\n  exports.easePolyIn = polyIn;\n  exports.easePolyOut = polyOut;\n  exports.easePolyInOut = polyInOut;\n  exports.easeSin = sinInOut;\n  exports.easeSinIn = sinIn;\n  exports.easeSinOut = sinOut;\n  exports.easeSinInOut = sinInOut;\n  exports.easeExp = expInOut;\n  exports.easeExpIn = expIn;\n  exports.easeExpOut = expOut;\n  exports.easeExpInOut = expInOut;\n  exports.easeCircle = circleInOut;\n  exports.easeCircleIn = circleIn;\n  exports.easeCircleOut = circleOut;\n  exports.easeCircleInOut = circleInOut;\n  exports.easeBounce = bounceOut;\n  exports.easeBounceIn = bounceIn;\n  exports.easeBounceOut = bounceOut;\n  exports.easeBounceInOut = bounceInOut;\n  exports.easeBack = backInOut;\n  exports.easeBackIn = backIn;\n  exports.easeBackOut = backOut;\n  exports.easeBackInOut = backInOut;\n  exports.easeElastic = elasticOut;\n  exports.easeElasticIn = elasticIn;\n  exports.easeElasticOut = elasticOut;\n  exports.easeElasticInOut = elasticInOut;\n  exports.polygonArea = area;\n  exports.polygonCentroid = centroid;\n  exports.polygonHull = hull;\n  exports.polygonContains = contains;\n  exports.polygonLength = length$1;\n  exports.path = path;\n  exports.quadtree = quadtree;\n  exports.queue = queue;\n  exports.arc = arc;\n  exports.area = area$1;\n  exports.line = line;\n  exports.pie = pie;\n  exports.radialArea = radialArea;\n  exports.radialLine = radialLine$1;\n  exports.symbol = symbol;\n  exports.symbols = symbols;\n  exports.symbolCircle = circle;\n  exports.symbolCross = cross$1;\n  exports.symbolDiamond = diamond;\n  exports.symbolSquare = square;\n  exports.symbolStar = star;\n  exports.symbolTriangle = triangle;\n  exports.symbolWye = wye;\n  exports.curveBasisClosed = basisClosed;\n  exports.curveBasisOpen = basisOpen;\n  exports.curveBasis = basis;\n  exports.curveBundle = bundle;\n  exports.curveCardinalClosed = cardinalClosed;\n  exports.curveCardinalOpen = cardinalOpen;\n  exports.curveCardinal = cardinal;\n  exports.curveCatmullRomClosed = catmullRomClosed;\n  exports.curveCatmullRomOpen = catmullRomOpen;\n  exports.curveCatmullRom = catmullRom;\n  exports.curveLinearClosed = linearClosed;\n  exports.curveLinear = curveLinear;\n  exports.curveMonotoneX = monotoneX;\n  exports.curveMonotoneY = monotoneY;\n  exports.curveNatural = natural;\n  exports.curveStep = step;\n  exports.curveStepAfter = stepAfter;\n  exports.curveStepBefore = stepBefore;\n  exports.stack = stack;\n  exports.stackOffsetExpand = expand;\n  exports.stackOffsetNone = none;\n  exports.stackOffsetSilhouette = silhouette;\n  exports.stackOffsetWiggle = wiggle;\n  exports.stackOrderAscending = ascending$1;\n  exports.stackOrderDescending = descending$2;\n  exports.stackOrderInsideOut = insideOut;\n  exports.stackOrderNone = none$1;\n  exports.stackOrderReverse = reverse;\n  exports.color = color;\n  exports.rgb = colorRgb;\n  exports.hsl = colorHsl;\n  exports.lab = lab;\n  exports.hcl = colorHcl;\n  exports.cubehelix = cubehelix;\n  exports.interpolate = interpolate;\n  exports.interpolateArray = array$1;\n  exports.interpolateDate = date;\n  exports.interpolateNumber = interpolateNumber;\n  exports.interpolateObject = object;\n  exports.interpolateRound = interpolateRound;\n  exports.interpolateString = interpolateString;\n  exports.interpolateTransformCss = interpolateTransform$1;\n  exports.interpolateTransformSvg = interpolateTransform$2;\n  exports.interpolateZoom = interpolateZoom;\n  exports.interpolateRgb = interpolateRgb;\n  exports.interpolateRgbBasis = rgbBasis;\n  exports.interpolateRgbBasisClosed = rgbBasisClosed;\n  exports.interpolateHsl = hsl$1;\n  exports.interpolateHslLong = hslLong;\n  exports.interpolateLab = lab$1;\n  exports.interpolateHcl = hcl$1;\n  exports.interpolateHclLong = hclLong;\n  exports.interpolateCubehelix = cubehelix$2;\n  exports.interpolateCubehelixLong = interpolateCubehelixLong;\n  exports.interpolateBasis = basis$2;\n  exports.interpolateBasisClosed = basisClosed$1;\n  exports.quantize = quantize;\n  exports.dispatch = dispatch;\n  exports.dsvFormat = dsv;\n  exports.csvParse = csvParse;\n  exports.csvParseRows = csvParseRows;\n  exports.csvFormat = csvFormat;\n  exports.csvFormatRows = csvFormatRows;\n  exports.tsvParse = tsvParse;\n  exports.tsvParseRows = tsvParseRows;\n  exports.tsvFormat = tsvFormat;\n  exports.tsvFormatRows = tsvFormatRows;\n  exports.request = request;\n  exports.html = html;\n  exports.json = json;\n  exports.text = text;\n  exports.xml = xml;\n  exports.csv = csv$1;\n  exports.tsv = tsv$1;\n  exports.now = now;\n  exports.timer = timer;\n  exports.timerFlush = timerFlush;\n  exports.timeout = timeout$1;\n  exports.interval = interval$1;\n  exports.timeInterval = newInterval;\n  exports.timeMillisecond = millisecond;\n  exports.timeMilliseconds = milliseconds;\n  exports.timeSecond = second;\n  exports.timeSeconds = seconds;\n  exports.timeMinute = minute;\n  exports.timeMinutes = minutes;\n  exports.timeHour = hour;\n  exports.timeHours = hours;\n  exports.timeDay = day;\n  exports.timeDays = days;\n  exports.timeWeek = timeWeek;\n  exports.timeWeeks = sundays;\n  exports.timeSunday = timeWeek;\n  exports.timeSundays = sundays;\n  exports.timeMonday = timeMonday;\n  exports.timeMondays = mondays;\n  exports.timeTuesday = tuesday;\n  exports.timeTuesdays = tuesdays;\n  exports.timeWednesday = wednesday;\n  exports.timeWednesdays = wednesdays;\n  exports.timeThursday = thursday;\n  exports.timeThursdays = thursdays;\n  exports.timeFriday = friday;\n  exports.timeFridays = fridays;\n  exports.timeSaturday = saturday;\n  exports.timeSaturdays = saturdays;\n  exports.timeMonth = month;\n  exports.timeMonths = months;\n  exports.timeYear = year;\n  exports.timeYears = years;\n  exports.utcMillisecond = millisecond;\n  exports.utcMilliseconds = milliseconds;\n  exports.utcSecond = second;\n  exports.utcSeconds = seconds;\n  exports.utcMinute = utcMinute;\n  exports.utcMinutes = utcMinutes;\n  exports.utcHour = utcHour;\n  exports.utcHours = utcHours;\n  exports.utcDay = utcDay;\n  exports.utcDays = utcDays;\n  exports.utcWeek = utcWeek;\n  exports.utcWeeks = utcSundays;\n  exports.utcSunday = utcWeek;\n  exports.utcSundays = utcSundays;\n  exports.utcMonday = utcMonday;\n  exports.utcMondays = utcMondays;\n  exports.utcTuesday = utcTuesday;\n  exports.utcTuesdays = utcTuesdays;\n  exports.utcWednesday = utcWednesday;\n  exports.utcWednesdays = utcWednesdays;\n  exports.utcThursday = utcThursday;\n  exports.utcThursdays = utcThursdays;\n  exports.utcFriday = utcFriday;\n  exports.utcFridays = utcFridays;\n  exports.utcSaturday = utcSaturday;\n  exports.utcSaturdays = utcSaturdays;\n  exports.utcMonth = utcMonth;\n  exports.utcMonths = utcMonths;\n  exports.utcYear = utcYear;\n  exports.utcYears = utcYears;\n  exports.formatLocale = formatLocale;\n  exports.formatDefaultLocale = defaultLocale;\n  exports.formatSpecifier = formatSpecifier;\n  exports.precisionFixed = precisionFixed;\n  exports.precisionPrefix = precisionPrefix;\n  exports.precisionRound = precisionRound;\n  exports.isoFormat = formatIso;\n  exports.isoParse = parseIso;\n  exports.timeFormatLocale = formatLocale$1;\n  exports.timeFormatDefaultLocale = defaultLocale$1;\n  exports.scaleBand = band;\n  exports.scalePoint = point$4;\n  exports.scaleIdentity = identity$4;\n  exports.scaleLinear = linear$2;\n  exports.scaleLog = log;\n  exports.scaleOrdinal = ordinal;\n  exports.scaleImplicit = implicit;\n  exports.scalePow = pow;\n  exports.scaleSqrt = sqrt;\n  exports.scaleQuantile = quantile;\n  exports.scaleQuantize = quantize$1;\n  exports.scaleThreshold = threshold$1;\n  exports.scaleTime = time;\n  exports.scaleUtc = utcTime;\n  exports.schemeCategory10 = category10;\n  exports.schemeCategory20b = category20b;\n  exports.schemeCategory20c = category20c;\n  exports.schemeCategory20 = category20;\n  exports.scaleSequential = sequential;\n  exports.interpolateCubehelixDefault = cubehelix$3;\n  exports.interpolateRainbow = rainbow$1;\n  exports.interpolateWarm = warm;\n  exports.interpolateCool = cool;\n  exports.interpolateViridis = viridis;\n  exports.interpolateMagma = magma;\n  exports.interpolateInferno = inferno;\n  exports.interpolatePlasma = plasma;\n  exports.creator = creator;\n  exports.customEvent = customEvent;\n  exports.local = local;\n  exports.matcher = matcher$1;\n  exports.mouse = mouse;\n  exports.namespace = namespace;\n  exports.namespaces = namespaces;\n  exports.select = select;\n  exports.selectAll = selectAll;\n  exports.selection = selection;\n  exports.selector = selector;\n  exports.selectorAll = selectorAll;\n  exports.touch = touch;\n  exports.touches = touches;\n  exports.window = window;\n  exports.active = active;\n  exports.interrupt = interrupt;\n  exports.transition = transition;\n  exports.axisTop = axisTop;\n  exports.axisRight = axisRight;\n  exports.axisBottom = axisBottom;\n  exports.axisLeft = axisLeft;\n  exports.cluster = cluster;\n  exports.hierarchy = hierarchy;\n  exports.pack = index;\n  exports.packSiblings = siblings;\n  exports.packEnclose = enclose;\n  exports.partition = partition;\n  exports.stratify = stratify;\n  exports.tree = tree;\n  exports.treemap = index$1;\n  exports.treemapBinary = binary;\n  exports.treemapDice = treemapDice;\n  exports.treemapSlice = treemapSlice;\n  exports.treemapSliceDice = sliceDice;\n  exports.treemapSquarify = squarify;\n  exports.treemapResquarify = resquarify;\n  exports.forceCenter = center$1;\n  exports.forceCollide = collide;\n  exports.forceLink = link;\n  exports.forceManyBody = manyBody;\n  exports.forceSimulation = simulation;\n  exports.forceX = x$3;\n  exports.forceY = y$3;\n  exports.drag = drag;\n  exports.dragDisable = dragDisable;\n  exports.dragEnable = dragEnable;\n  exports.voronoi = voronoi;\n  exports.zoom = zoom;\n  exports.zoomIdentity = identity$6;\n  exports.zoomTransform = transform;\n  exports.brush = brush;\n  exports.brushX = brushX;\n  exports.brushY = brushY;\n  exports.brushSelection = brushSelection;\n  exports.chord = chord;\n  exports.ribbon = ribbon;\n  exports.geoAlbers = albers;\n  exports.geoAlbersUsa = albersUsa;\n  exports.geoArea = area$2;\n  exports.geoAzimuthalEqualArea = azimuthalEqualArea;\n  exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\n  exports.geoAzimuthalEquidistant = azimuthalEquidistant;\n  exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\n  exports.geoBounds = bounds;\n  exports.geoCentroid = centroid$1;\n  exports.geoCircle = circle$1;\n  exports.geoClipExtent = extent$1;\n  exports.geoConicConformal = conicConformal;\n  exports.geoConicConformalRaw = conicConformalRaw;\n  exports.geoConicEqualArea = conicEqualArea;\n  exports.geoConicEqualAreaRaw = conicEqualAreaRaw;\n  exports.geoConicEquidistant = conicEquidistant;\n  exports.geoConicEquidistantRaw = conicEquidistantRaw;\n  exports.geoDistance = distance;\n  exports.geoEquirectangular = equirectangular;\n  exports.geoEquirectangularRaw = equirectangularRaw;\n  exports.geoGnomonic = gnomonic;\n  exports.geoGnomonicRaw = gnomonicRaw;\n  exports.geoGraticule = graticule;\n  exports.geoInterpolate = interpolate$2;\n  exports.geoLength = length$2;\n  exports.geoMercator = mercator;\n  exports.geoMercatorRaw = mercatorRaw;\n  exports.geoOrthographic = orthographic;\n  exports.geoOrthographicRaw = orthographicRaw;\n  exports.geoPath = index$3;\n  exports.geoProjection = projection;\n  exports.geoProjectionMutator = projectionMutator;\n  exports.geoRotation = rotation;\n  exports.geoStereographic = stereographic;\n  exports.geoStereographicRaw = stereographicRaw;\n  exports.geoStream = geoStream;\n  exports.geoTransform = transform$1;\n  exports.geoTransverseMercator = transverseMercator;\n  exports.geoTransverseMercatorRaw = transverseMercatorRaw;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/d3/build/d3.js\n ** module id = 156\n ** module chunks = 0 1\n **/","import { $$, Dom } from '../../utils/Dom';\nimport { IResponsiveComponent, ResponsiveComponentsManager, IResponsiveComponentOptions } from './ResponsiveComponentsManager';\nimport { ResponsiveComponentsUtils } from './ResponsiveComponentsUtils';\nimport { Component } from '../Base/Component';\nimport { Logger } from '../../misc/Logger';\nimport { l } from '../../strings/Strings';\nimport { Utils } from '../../utils/Utils';\nimport { Facet } from '../Facet/Facet';\nimport { FacetSlider } from '../FacetSlider/FacetSlider';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\nimport { ResponsiveDropdownContent } from './ResponsiveDropdown/ResponsiveDropdownContent';\nimport { ResponsiveDropdownHeader } from './ResponsiveDropdown/ResponsiveDropdownHeader';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResponsiveComponents } from './ResponsiveComponents';\nimport _ = require('underscore');\n\nexport class ResponsiveFacets implements IResponsiveComponent {\n  public static DEBOUNCE_SCROLL_WAIT = 250;\n\n  private static DROPDOWN_MIN_WIDTH: number = 280;\n  private static DROPDOWN_WIDTH_RATIO: number = 0.35; // Used to set the width relative to the coveo root.\n  private static DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'Filters';\n  private searchInterface: SearchInterface;\n  private facets: Facet[] = [];\n  private facetSliders: FacetSlider[] = [];\n  private preservePositionOriginalValues: boolean[] = [];\n  private breakpoint: number;\n  private logger: Logger;\n  private dropdown: ResponsiveDropdown;\n  private dropdownHeaderLabel: string;\n\n  public static init(root: HTMLElement, component, options: IResponsiveComponentOptions) {\n    if (!$$(root).find('.coveo-facet-column')) {\n      let logger = new Logger('ResponsiveFacets');\n      logger.info('No element with class coveo-facet-column. Responsive facets cannot be enabled');\n      return;\n    }\n    ResponsiveComponentsManager.register(ResponsiveFacets, $$(root), Facet.ID, component, options);\n  }\n\n  constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {\n    this.dropdownHeaderLabel = this.getDropdownHeaderLabel();\n    this.dropdown = this.buildDropdown(responsiveDropdown);\n    this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);\n    this.bindDropdownContentEvents();\n    this.registerOnOpenHandler();\n    this.registerOnCloseHandler();\n    this.registerQueryEvents();\n    this.logger = new Logger(this);\n    if (Utils.isNullOrUndefined(options.responsiveBreakpoint)) {\n      this.breakpoint = this.searchInterface ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : new ResponsiveComponents().getMediumScreenWidth();\n    } else {\n      this.breakpoint = options.responsiveBreakpoint;\n    }\n  }\n\n  public registerComponent(accept: Component) {\n    if (accept instanceof Facet) {\n      this.facets.push(<Facet>accept);\n      this.preservePositionOriginalValues.push((<Facet>accept).options.preservePosition);\n      return true;\n    } else if (accept instanceof FacetSlider) {\n      this.facetSliders.push(<FacetSlider>accept);\n      return false;\n    }\n    return false;\n  }\n\n  public needDropdownWrapper() {\n    return this.needSmallMode();\n  }\n\n  public handleResizeEvent() {\n    if (this.needSmallMode() && !ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n      this.changeToSmallMode();\n    } else if (!this.needSmallMode() && ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {\n      this.changeToLargeMode();\n    }\n    if (this.dropdown.isOpened) {\n      this.dropdown.dropdownContent.positionDropdown();\n    }\n  }\n\n  public dismissFacetSearches() {\n    _.each(this.facets, facet => {\n      if (facet.facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n        facet.facetSearch.completelyDismissSearch();\n      }\n    });\n  }\n\n  public drawFacetSliderGraphs() {\n    _.each(this.facetSliders, facetSlider => facetSlider.drawDelayedGraphData());\n  }\n\n  private needSmallMode(): boolean {\n    return this.coveoRoot.width() <= this.breakpoint;\n  }\n\n  private changeToSmallMode() {\n    this.dropdown.close();\n    this.disableFacetPreservePosition();\n    $$(this.coveoRoot.find(`.${ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS}`)).append(this.dropdown.dropdownHeader.element.el);\n    ResponsiveComponentsUtils.activateSmallFacet(this.coveoRoot);\n  }\n\n  private changeToLargeMode() {\n    this.restoreFacetPreservePositionValue();\n    this.dropdown.cleanUp();\n    ResponsiveComponentsUtils.deactivateSmallFacet(this.coveoRoot);\n  }\n\n  private buildDropdown(responsiveDropdown?: ResponsiveDropdown) {\n    let dropdownContent = this.buildDropdownContent();\n    let dropdownHeader = this.buildDropdownHeader();\n    let dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);\n    return dropdown;\n  }\n\n  private buildDropdownContent(): ResponsiveDropdownContent {\n    let dropdownContentElement = $$(this.coveoRoot.find('.coveo-facet-column'));\n    let filterByContainer = $$('div', { className: 'coveo-facet-header-filter-by-container', style: 'display: none' });\n    let filterBy = $$('div', { className: 'coveo-facet-header-filter-by' });\n    filterBy.text(l('Filter by:'));\n    filterByContainer.append(filterBy.el);\n    dropdownContentElement.prepend(filterByContainer.el);\n    let dropdownContent = new ResponsiveDropdownContent('facet', dropdownContentElement, this.coveoRoot, ResponsiveFacets.DROPDOWN_MIN_WIDTH, ResponsiveFacets.DROPDOWN_WIDTH_RATIO);\n    return dropdownContent;\n  }\n\n  private buildDropdownHeader(): ResponsiveDropdownHeader {\n    let dropdownHeaderElement = $$('a');\n    let content = $$('p');\n    content.text(this.dropdownHeaderLabel);\n    dropdownHeaderElement.el.appendChild(content.el);\n    let dropdownHeader = new ResponsiveDropdownHeader('facet', dropdownHeaderElement);\n    return dropdownHeader;\n  }\n\n  private registerOnOpenHandler() {\n    this.dropdown.registerOnOpenHandler(this.drawFacetSliderGraphs, this);\n  }\n\n  private registerOnCloseHandler() {\n    this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);\n  }\n\n  private registerQueryEvents() {\n    this.coveoRoot.on(QueryEvents.noResults, () => this.handleNoResults());\n    this.coveoRoot.on(QueryEvents.querySuccess, (e: Event, data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data));\n    this.coveoRoot.on(QueryEvents.queryError, () => this.handleQueryError());\n  }\n\n  private bindDropdownContentEvents() {\n    this.dropdown.dropdownContent.element.on('scroll', _.debounce(() => {\n      _.each(this.facets, facet => {\n        let facetSearch = facet.facetSearch;\n        if (facetSearch && facetSearch.currentlyDisplayedResults && !this.isFacetSearchScrolledIntoView(facetSearch.search)) {\n          facet.facetSearch.positionSearchResults(this.dropdown.dropdownContent.element.el);\n        } else if (facetSearch && facet.facetSearch.currentlyDisplayedResults) {\n          facet.facetSearch.positionSearchResults();\n        }\n      });\n    }, ResponsiveFacets.DEBOUNCE_SCROLL_WAIT));\n  }\n\n  private restoreFacetPreservePositionValue() {\n    _.each(this.facets, (facet, index) => facet.options.preservePosition = this.preservePositionOriginalValues[index]);\n  }\n\n  private disableFacetPreservePosition() {\n    _.each(this.facets, facet => facet.options.preservePosition = false);\n  }\n\n  private isFacetSearchScrolledIntoView(facetSearchElement: HTMLElement) {\n    let facetTop = facetSearchElement.getBoundingClientRect().top;\n    let facetBottom = facetSearchElement.getBoundingClientRect().bottom;\n    let dropdownTop = this.dropdown.dropdownContent.element.el.getBoundingClientRect().top;\n    let dropdownBottom = this.dropdown.dropdownContent.element.el.getBoundingClientRect().bottom;\n\n    dropdownTop = dropdownTop >= 0 ? dropdownTop : 0;\n\n    return (facetTop >= dropdownTop) && (facetBottom <= dropdownBottom);\n  }\n\n  private getDropdownHeaderLabel() {\n    let dropdownHeaderLabel: string;\n    let selector = `.${Component.computeCssClassName(Facet)}, .${Component.computeCssClassName(FacetSlider)}`;\n    _.each($$(this.coveoRoot.find('.coveo-facet-column')).findAll(selector), facetElement => {\n      let facet: Facet | FacetSlider;\n      if ($$(facetElement).hasClass(Component.computeCssClassName(Facet))) {\n        facet = <Facet>Component.get(facetElement, Facet);\n      } else {\n        facet = <FacetSlider>Component.get(facetElement, FacetSlider);\n      }\n      if (!dropdownHeaderLabel && facet.options.dropdownHeaderLabel) {\n        dropdownHeaderLabel = facet.options.dropdownHeaderLabel;\n      }\n    });\n\n    if (!dropdownHeaderLabel) {\n      dropdownHeaderLabel = l(ResponsiveFacets.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);\n    }\n\n    return dropdownHeaderLabel;\n  }\n\n  private handleNoResults() {\n    this.dropdown.dropdownHeader.hide();\n  }\n\n  private handleQueryError() {\n    this.dropdown.dropdownHeader.hide();\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (data.results.totalCount === 0) {\n      this.dropdown.dropdownHeader.hide();\n    } else {\n      this.dropdown.dropdownHeader.show();\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveFacets.ts\n **/","/// <reference path=\"../../controllers/HierarchicalFacetQueryController.ts\" />\n/// <reference path=\"../../controllers/FacetQueryController.ts\" />\n/// <reference path=\"FacetSearch.ts\" />\n/// <reference path=\"FacetSettings.ts\" />\n/// <reference path=\"FacetSort.ts\" />\n/// <reference path=\"FacetHeader.ts\" />\n/// <reference path=\"BreadcrumbValueElement.ts\" />\n/// <reference path=\"ValueElementRenderer.ts\" />\n/// <reference path=\"FacetSearchParameters.ts\" />\n/// <reference path=\"../HierarchicalFacet/HierarchicalFacet.ts\" />\n\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { FacetValue, FacetValues } from './FacetValues';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { l } from '../../strings/Strings';\nimport { FacetQueryController } from '../../controllers/FacetQueryController';\nimport { FacetSearch } from './FacetSearch';\nimport { FacetSettings } from './FacetSettings';\nimport { FacetSort } from './FacetSort';\nimport { FacetValuesList } from './FacetValuesList';\nimport { FacetHeader } from './FacetHeader';\nimport { FacetUtils } from './FacetUtils';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { QueryEvents, INewQueryEventArgs, IQuerySuccessEventArgs, IBuildingQueryEventArgs, IDoneBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { ISearchEndpoint } from '../../rest/SearchEndpointInterface';\nimport { $$ } from '../../utils/Dom';\nimport { IAnalyticsFacetMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Utils } from '../../utils/Utils';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { IPopulateBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { BreadcrumbValueElement } from './BreadcrumbValueElement';\nimport { BreadcrumbValueList } from './BreadcrumbValuesList';\nimport { FacetValueElement } from './FacetValueElement';\nimport { FacetSearchValuesList } from './FacetSearchValuesList';\nimport { Defer } from '../../misc/Defer';\nimport { QueryStateModel, IQueryStateIncludedAttribute, IQueryStateExcludedAttribute } from '../../models/QueryStateModel';\nimport { MODEL_EVENTS, IAttributesChangedEventArg } from '../../models/Model';\nimport { OmniboxEvents, IPopulateOmniboxEventArgs } from '../../events/OmniboxEvents';\nimport { OmniboxValueElement } from './OmniboxValueElement';\nimport { OmniboxValuesList } from './OmniboxValuesList';\nimport { IGroupByResult } from '../../rest/GroupByResult';\nimport { IGroupByValue } from '../../rest/GroupByValue';\nimport { ValueElementRenderer } from './ValueElementRenderer';\nimport { FacetSearchParameters } from './FacetSearchParameters';\nimport { IOmniboxDataRow } from '../Omnibox/OmniboxInterface';\nimport { Initialization } from '../Base/Initialization';\nimport { BreadcrumbEvents, IClearBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { ResponsiveFacets } from '../ResponsiveComponents/ResponsiveFacets';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport { IStringMap } from '../../rest/GenericParam';\nimport { FacetValuesOrder } from './FacetValuesOrder';\nimport { ValueElement } from './ValueElement';\nimport { SearchAlertsEvents, ISearchAlertsPopulateMessageEventArgs } from '../../events/SearchAlertEvents';\nimport _ = require('underscore');\n\nexport interface IFacetOptions {\n  title?: string;\n  field?: IFieldOption;\n  isMultiValueField?: boolean;\n  numberOfValues?: number;\n  pageSize?: number;\n  sortCriteria?: string;\n  availableSorts?: string[];\n  injectionDepth?: number;\n  showIcon?: boolean;\n  useAnd?: boolean;\n  enableCollapse?: boolean;\n  enableTogglingOperator?: boolean;\n  enableMoreLess?: boolean;\n  valueCaption?: any;\n  lookupField?: IFieldOption;\n  enableFacetSearch?: boolean;\n  facetSearchDelay?: number;\n  facetSearchIgnoreAccents?: boolean;\n  numberOfValuesInFacetSearch?: number;\n  includeInBreadcrumb?: boolean;\n  includeInOmnibox?: boolean;\n  numberOfValuesInOmnibox?: number;\n  numberOfValuesInBreadcrumb?: number;\n  id?: string;\n  computedField?: IFieldOption;\n  computedFieldOperation?: string;\n  computedFieldFormat?: string;\n  computedFieldCaption?: string;\n  preservePosition?: boolean;\n  scrollContainer?: HTMLElement;\n  paddingContainer?: HTMLElement;\n  customSort?: string[];\n  enableSettings?: boolean;\n  enableSettingsFacetState?: boolean;\n  allowedValues?: string[];\n  headerIcon?: string;\n  valueIcon?: (facetValue: FacetValue) => string;\n  additionalFilter?: string;\n  dependsOn?: string;\n  enableResponsiveMode?: boolean;\n  responsiveBreakpoint?: number;\n  dropdownHeaderLabel?: string;\n}\n\n/**\n * The Facet component displays a *facet* of the results for the current query. A facet consists of a list of values for\n * a given field occurring in the results, ordered using a configurable criteria.\n *\n * The list of values is obtained using an {@link IGroupByRequest} operation performed at the same time as the main\n * query.\n *\n * The Facet component allows the user to drill down inside results by restricting them to certain field values. It also\n * allows filtering out values from the Facet itself, and can provide a search box to look for specific values inside\n * larger sets.\n *\n * This is probably the most complex component in the Coveo JavaScript Search Framework and as such, it allows for many\n * different configuration options.\n *\n * See also {@link FacetRange} and {@link HierarchicalFacet} (which extend this component), and {@link FacetSlider}\n * (which does not properly extend this component, but is very similar).\n */\nexport class Facet extends Component {\n  static ID = 'Facet';\n  static omniboxIndex = 50;\n\n  /**\n   * The possible options for a facet\n   * @componentOptions\n   */\n  static options: IFacetOptions = {\n\n    /**\n     * Specifies the title to display at the top of the Facet.\n     *\n     * Default value is the localized string for `\"NoTitle\"`.\n     */\n    title: ComponentOptions.buildLocalizedStringOption({\n      defaultValue: l('NoTitle'),\n      section: 'Identification',\n      priority: 10\n    }),\n\n    /**\n     * Specifies the index field whose values the Facet should use.\n     *\n     * This requires the given field to be configured correctly in the index as a Facet field (see\n     * [Adding Fields to a Source](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=137)).\n     *\n     * Specifying a value for this option is required for the Facet component to work.\n     */\n    field: ComponentOptions.buildFieldOption({ required: true, groupByField: true, section: 'Identification' }),\n\n    headerIcon: ComponentOptions.buildIconOption({ deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    /**\n     * Specifies a unique identifier for the Facet. Among other things, this identifier serves the purpose of saving the\n     * facet state in the URL hash.\n     *\n     * If you have two facets with the same field on the same page, you should specify an id value for at least one of\n     * those two facets. This id must be unique in the page.\n     *\n     * Default value is the {@link Facet.options.field} option value.\n     */\n    id: ComponentOptions.buildStringOption({\n      postProcessing: (value, options: IFacetOptions) => value || <string>options.field\n    }),\n\n    /**\n     * Specifies whether the field is configured in the index as a multi-value field (semicolon separated values such as\n     * `abc;def;ghi`).\n     *\n     * Default value is `false`.\n     */\n    isMultiValueField: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    lookupField: ComponentOptions.buildFieldOption({ deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    /**\n     * Specifies whether to display the Facet **Settings** menu.\n     *\n     * See also {@link Facet.options.enableSettingsFacetState}, {@link Facet.options.availableSorts} and\n     * {@link Facet.options.enableCollapse}.\n     *\n     * Default value is `true`.\n     */\n    enableSettings: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'SettingsMenu', priority: 9 }),\n\n    /**\n     * If {@link Facet.options.enableSettings} is `true`, specifies whether the **Save state** menu option is available\n     * in the Facet **Settings** menu.\n     *\n     * Default value is `false`.\n     */\n    enableSettingsFacetState: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableSettings' }),\n\n    /**\n     * If {@link Facet.options.enableSettings} is `true`, specifies the sort criteria options to display in the Facet\n     * **Settings** menu.\n     *\n     * Possible values are:\n     * - `\"occurrences\"`\n     * - `\"score\"`\n     * - `\"alphaAscending\"`\n     * - `alphaDescending`\n     * - `\"computedfieldascending\"`\n     * - `\"computedfielddescending\"`\n     * - `\"custom\"`\n     *\n     * Default value is `\"occurrences,score,alphaAscending,alphaDescending\"`.\n     */\n    availableSorts: ComponentOptions.buildListOption<'occurrences' | 'score' | 'alphaascending' | 'alphadescending' | 'computedfieldascending' | 'computedfielddescending' | 'chisquare' | 'nosort'>({\n      defaultValue: ['occurrences', 'score', 'alphaAscending', 'alphaDescending'],\n      values: ['Occurrences', 'Score', 'AlphaAscending', 'AlphaDescending', 'ComputedFieldAscending', 'ComputedFieldDescending', 'ChiSquare', 'NoSort'],\n      depend: 'enableSettings'\n    }),\n\n    /**\n     * Specifies the criteria to use to sort the Facet values.\n     *\n     * See {@link IGroupByRequest} for the list of possible values.\n     *\n     * Default value is the first sort criteria specified in the {@link Facet.options.availableSorts} option, or\n     * `\"occurrences\"` if no sort criteria is specified.\n     */\n    sortCriteria: ComponentOptions.buildStringOption({ postProcessing: (value, options: IFacetOptions) => value || (options.availableSorts.length > 0 ? options.availableSorts[0] : 'occurrences') }),\n\n    /**\n     * Specifies a custom order by which to sort the Facet values.\n     *\n     * For example, you could use this to specify a logical order for support tickets, such as\n     * `customSort : [\"New\",\"Opened\",\"Feedback\",\"Resolved\",\"Feedback\"]`\n     */\n    customSort: ComponentOptions.buildListOption<string>({ section: 'Identification' }),\n\n    /**\n     * Specifies the maximum number of field values to display by default in the Facet before the user\n     * clicks **More**.\n     *\n     * Default value is `5`. Minimum value is `0`.\n     */\n    numberOfValues: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0, section: 'Identification' }),\n\n    /**\n     * Specifies the *injection depth* to use for the {@link IGroupByRequest} operation.\n     *\n     * The injection depth determines how many results to scan in the index to ensure that the facet lists all potential\n     * facet values. Increasing this value enhances the accuracy of the listed values at the cost of performance.\n     *\n     * Default value is `1000`. Minimum value is `0`.\n     */\n    injectionDepth: ComponentOptions.buildNumberOption({ defaultValue: 1000, min: 0 }),\n\n    showIcon: ComponentOptions.buildBooleanOption({ defaultValue: false, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    /**\n     * Specifies whether to use the `AND` operator in the resulting filter when multiple values are selected in the\n     * Facet.\n     *\n     * Setting this option to `true` means that documents must have all of the selected values to match the resulting\n     * query.\n     *\n     * Default value is `false`, which means that the filter uses the `OR` operator. Thus, by default, documents must\n     * have at least one of the selected values to match the query.\n     */\n    useAnd: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to allow the user to toggle between the `OR` and `AND` modes in the Facet.\n     *\n     * Setting this option to `true` displays an icon in the top right corner of the Facet. The user can click this icon\n     * to toggle between between the two modes.\n     *\n     * Default value is `false`.\n     */\n    enableTogglingOperator: ComponentOptions.buildBooleanOption({ defaultValue: false, alias: 'allowTogglingOperator' }),\n\n    /**\n     * Specifies whether to display a search box at the bottom of the Facet for searching among the available values.\n     *\n     * See also {@link Facet.options.facetSearchDelay}, {@link Facet.options.facetSearchIgnoreAccents},\n     * {@link Facet.options.numberOfValuesInFacetSearch}.\n     *\n     * Default value is `true`.\n     */\n    enableFacetSearch: ComponentOptions.buildBooleanOption({ defaultValue: true, section: 'FacetSearch', priority: 8 }),\n\n    /**\n     * If {@link Facet.options.enableFacetSearch} is `true`, specifies the delay (in milliseconds) before sending a\n     * search request to the server when the user starts typing in the Facet search box.\n     *\n     * Specifying a smaller value means results will arrive faster. However, chances of having to cancel many requests\n     * sent to the server will increase as the user keeps on typing new characters.\n     *\n     * Default value is `100`. Minimum value is `0`.\n     */\n    facetSearchDelay: ComponentOptions.buildNumberOption({ defaultValue: 100, min: 0, depend: 'enableFacetSearch' }),\n\n    /**\n     * If {@link Facet.options.enableFacetSearch} is `true`, specifies whether to ignore accents in the Facet search\n     * box.\n     *\n     * Default value is `false`.\n     */\n    facetSearchIgnoreAccents: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableFacetSearch' }),\n\n    /**\n     * If {@link Facet.options.enableFacetSearch} is `true`, specifies the number of values to display in the Facet\n     * search results popup.\n     *\n     * Default value is `15`. Minimum value is `1`.\n     */\n    numberOfValuesInFacetSearch: ComponentOptions.buildNumberOption({ defaultValue: 15, min: 1 }),\n\n    /**\n     * Specifies whether the Facet should push data to the {@link Breadcrumb} component.\n     *\n     * See also {@link Facet.options.numberOfValuesInBreadcrumb}.\n     *\n     * Default value is `true`.\n     */\n    includeInBreadcrumb: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link Facet.options.includeInBreadcrumb} is `true`, specifies the maximum number of values that the Facet\n     * should display in the {@link Breadcrumb} before outputting a **See more** button.\n     *\n     * Default value is `5` on a desktop computer and `3` on a mobile device. Minimum value is `0`.\n     */\n    numberOfValuesInBreadcrumb: ComponentOptions.buildNumberOption({ defaultFunction: () => DeviceUtils.isMobileDevice() ? 3 : 5, min: 0, depend: 'includeInBreadcrumb' }),\n\n    includeInOmnibox: ComponentOptions.buildBooleanOption({ defaultValue: false, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    numberOfValuesInOmnibox: ComponentOptions.buildNumberOption({ defaultFunction: () => DeviceUtils.isMobileDevice() ? 3 : 5, min: 0, depend: 'includeInOmnibox', deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    /**\n     * Specifies the name of a field on which to execute an aggregate operation for all distinct values of the Facet\n     * field.\n     *\n     * The Facet displays the result of the operation along with the number of occurrences for each value.\n     *\n     * You can use this option to compute the sum of a field (like a money amount) for each listed Facet value.\n     *\n     * Works in conjunction with {@link Facet.options.computedFieldOperation},\n     * {@link Facet.options.computedFieldFormat} and {@link Facet.options.computedFieldCaption}.\n     */\n    computedField: ComponentOptions.buildFieldOption({ section: 'ComputedField', priority: 7 }),\n\n    /**\n     * Specifies the type of aggregate operation to perform on the {@link Facet.options.computedField}.\n     *\n     * The possible values are:\n     * - `\"sum\"` - Computes the sum of the computed field values.\n     * - `\"average\"` - Computes the average of the computed field values.\n     * - `\"minimum\"` - Finds the minimum value of the computed field values.\n     * - `\"maximum\"` - Finds the maximum value of the computed field values.\n     *\n     * Default value is `\"sum\"`.\n     */\n    computedFieldOperation: ComponentOptions.buildStringOption({ defaultValue: 'sum', section: 'ComputedField' }),\n\n    /**\n     * Specifies how to format the values resulting from a {@link Facet.options.computedFieldOperation}.\n     *\n     * The Globalize library defines all available formats (see\n     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-)).\n     *\n     * The most commonly used formats are:\n     * - `\"c0\"` - Formats the value as a currency.\n     * - `\"n0\"` - Formats the value as an integer.\n     * - `\"n2\"` - Formats the value as a floating point with 2 decimal digits.\n     *\n     * Default value is `\"c0\"`.\n     */\n    computedFieldFormat: ComponentOptions.buildStringOption({ defaultValue: 'c0', section: 'ComputedField' }),\n\n    /**\n     * Specifies what the caption of the {@link Facet.options.computedField} should be in the settings menu for sorting.\n     *\n     * For example, setting this option to `\"Money\"` will display `\"Money Ascending\"` for computed field ascending.\n     *\n     * Default value is the localized string for `\"ComputedField\"`.\n     */\n    computedFieldCaption: ComponentOptions.buildLocalizedStringOption({ defaultValue: l('ComputedField'), section: 'ComputedField' }),\n\n    /**\n     * Specifies whether the Facet should remain stable in its current position in the viewport while the mouse cursor\n     * is over it.\n     *\n     * Whenever the value selection changes in a facet, the search interface automatically performs a query. This new\n     * query might cause other elements in the page to resize themselves (typically, other facets above or below the\n     * one the user is interacting with).\n     *\n     * This option is responsible for adding the `<div class='coveo-topSpace'>` and\n     * `<div class='coveo-bottomSpace'>` around the Facet container. The Facet adjusts the scroll amount of the page to\n     * ensure that it does not move relatively to the mouse when the results are updated.\n     *\n     * In some cases, the Facet also adds margins to the scrollContainer, if scrolling alone is not enough to\n     * preserve position.\n     *\n     * See also {@link Facet.options.paddingContainer} and {@link Facet.options.scrollContainer}.\n     *\n     * Default value is `true`.\n     */\n    preservePosition: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the parent container of the facets.\n     *\n     * Used by the {@link Facet.options.preservePosition}.\n     *\n     * Default value is `element.parentElement`.\n     */\n    paddingContainer: ComponentOptions.buildSelectorOption({ defaultFunction: (element) => element.parentElement }),\n\n    /**\n     * Specifies the HTML element (through a CSS selector) whose scroll amount the Facet should adjust to preserve its\n     * position when results are updated.\n     *\n     * Used by {@link Facet.options.preservePosition}.\n     *\n     * Default value is `document.body`.\n     */\n    scrollContainer: ComponentOptions.buildSelectorOption({ defaultFunction: (element) => document.body }),\n\n    /**\n     * Specifies whether to enable the **More** and **Less** buttons in the Facet.\n     *\n     * See also {@link Facet.options.pageSize}.\n     *\n     * Default value is `true`.\n     */\n    enableMoreLess: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link Facet.options.enableMoreLess} is `true`, specifies the number of additional results to fetch when\n     * clicking on the **More** button in the Facet.\n     *\n     * Default value is `10`. Minimum value is `1`.\n     */\n    pageSize: ComponentOptions.buildNumberOption({ defaultValue: 10, min: 1, depend: 'enableMoreLess' }),\n\n    /**\n     * If {@link Facet.options.enableSettings} is `true`, specifies whether the **Collapse \\ Expand** menu option is\n     * available in the Facet **Settings** menu.\n     *\n     * Default value is `true`.\n     */\n    enableCollapse: ComponentOptions.buildBooleanOption({ defaultValue: true, depend: 'enableSettings' }),\n\n    /**\n     * Specifies an explicit list of {@link IGroupByRequest.allowedValues} in the {@link IGroupByRequest}.\n     *\n     * This will whitelist the Facet content to some specific values.\n     *\n     * Example: `[\"File\", \"People\"]`.\n     */\n    allowedValues: ComponentOptions.buildListOption<string>(),\n\n    /**\n     * Specifies an additional query expression (query override) to add to each {@link IGroupByRequest} that this Facet\n     * performs.\n     *\n     * Example: `@date>=2014/01/01`\n     */\n    additionalFilter: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies whether this Facet only appears when a value is selected in its \"parent\" Facet.\n     *\n     * To specify the parent Facet, use its [id]{@link Facet.options.id}.\n     *\n     * Remember that by default, a Facet id is the same as its [field]{@link Facet.options.field}.\n     *\n     * **Examples:**\n     *\n     * First case: the \"parent\" Facet has no custom `id`:\n     * ```html\n     * <!-- \"Parent\" Facet: -->\n     * <div class='CoveoFacet' data-field='@myfield' data-title='My Parent Facet'></div>\n     *\n     * <!-- The \"dependent\" Facet must refer to the default `id` of its \"parent\" Facet, which is the name of its field. -->\n     * <div class='CoveoFacet' data-field='@myotherfield' data-title='My Dependent Facet' data-depends-on='@myfield'></div>\n     * ```\n     *\n     * Second case: the \"parent\" Facet has a custom `id`:\n     * ```html\n     * <!-- \"Parent\" Facet: -->\n     * <div class='CoveoFacet' data-field='@myfield' data-title='My Parent Facet' data-id='myParentCustomId'></div>\n     *\n     * <!-- The \"dependent\" Facet must refer to the custom `id` of its \"parent\" Facet, which is 'myParentCustomId'. -->\n     * <div class='CoveoFacet' data-field='@myotherfield data-title='My Dependent Facet' data-depends-on='myParentCustomId'></div>\n     * ```\n     *\n     * Default value is `undefined`\n     */\n    dependsOn: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies a JSON object describing a mapping of Facet values to their desired captions.\n     *\n     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * Example:\n     * ```\n     * // Using a Facet for file types\n     * var myValueCaption = {  \"txt\": \"Text files\",\"html\": \"Web page\", [ etc ... ]};\n     *\n     * // You can set the option in the 'init' call using 'pure' JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    Facet : {\n     *      valueCaption: myValueCaption\n     *    }\n     * })\n     *\n     * // Or  the jQuery extension\n     * $(\"#search\").coveo(\"init\", {\n     *    Facet: {\n     *      valueCaption: myValueCaption\n     *    }\n     * })\n     * ```\n     */\n    valueCaption: ComponentOptions.buildCustomOption<IStringMap<string>>(() => {\n      return null;\n    }),\n\n    /**\n     * Specifies whether to enable *responsive mode* for facets. Setting this options to `false` on any Facet or\n     * {@link FacetSlider} in a search interface disables responsive mode for all other facets in the search interface.\n     *\n     * Responsive mode displays all facets under a single dropdown button whenever the width of the HTML element which\n     * the search interface is bound to reaches or falls behind a certain threshold (see\n     * {@link SearchInterface.responsiveComponents}).\n     *\n     * See also {@link Facet.options.dropdownHeaderLabel}.\n     *\n     * Default value is `true`.\n     */\n    enableResponsiveMode: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    responsiveBreakpoint: ComponentOptions.buildNumberOption({ defaultValue: 800, deprecated: 'This option is exposed for legacy reasons, and the recommendation is to not use this option.' }),\n\n    /**\n     * If {@link Facet.options.enableResponsiveMode} is `true` for all facets and\n     * {@link FacetSlider.options.enableResponsiveMode} is also `true` for all sliders, specifies the label of the\n     * dropdown button that allows to display the facets when in responsive mode.\n     *\n     * If more than one Facet or {@link FacetSlider} in the search interface specifies a value for this option, then the\n     * framework uses the first occurrence of the option.\n     *\n     * Default value is `Filters`.\n     */\n    dropdownHeaderLabel: ComponentOptions.buildLocalizedStringOption()\n  };\n\n  public facetQueryController: FacetQueryController;\n  public keepDisplayedValuesNextTime: boolean = false;\n  public values = new FacetValues();\n  public currentPage: number = 0;\n  public numberOfValues: number;\n  public firstQuery = true;\n  public operatorAttributeId: string;\n\n  /**\n   * Renders and handles the Facet **Search** part of the component.\n   */\n  public facetSearch: FacetSearch;\n\n  /**\n   * Renders and handles the Facet **Settings** part of the component\n   */\n  public facetSettings: FacetSettings;\n  public facetSort: FacetSort;\n  public facetValuesList: FacetValuesList;\n  public facetHeader: FacetHeader;\n\n  protected omniboxZIndex;\n  protected moreElement: HTMLElement;\n  protected lessElement: HTMLElement;\n\n  protected headerElement: HTMLElement;\n  protected footerElement: HTMLElement;\n  private canFetchMore: boolean = true;\n  private nbAvailableValues: number;\n\n  private showingWaitAnimation = false;\n  private pinnedViewportPosition: number;\n  private unpinnedViewportPosition: number;\n  private pinnedTopSpace: HTMLElement;\n  private pinnedBottomSpace: HTMLElement;\n\n  private componentStateId: string;\n  private includedAttributeId: string;\n  private excludedAttributeId: string;\n  private lookupValueAttributeId: string;\n  private listenToQueryStateChange = true;\n\n  private resize: (...args: any[]) => void;\n\n  /**\n   * Creates a new Facet component. Binds multiple query events as well.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Facet component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param facetClassId The ID to use for this facet (as Facet inherited from by other component\n   * (e.g.: {@link FacetRange}). Default value is `Facet`.\n   */\n  constructor(public element: HTMLElement, public options: IFacetOptions, bindings?: IComponentBindings, facetClassId: string = Facet.ID) {\n    super(element, facetClassId, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Facet, options);\n\n    if (this.options.valueCaption != null) {\n      this.options.availableSorts = _.filter(this.options.availableSorts, (sort: string) => !/^alpha.*$/.test(sort));\n    }\n\n    ResponsiveFacets.init(this.root, this, this.options);\n\n    // Serves as a way to render facet in the omnibox in the order in which they are instantiated\n    this.omniboxZIndex = Facet.omniboxIndex;\n    Facet.omniboxIndex--;\n\n    this.checkForComputedFieldAndSort();\n    this.checkForValueCaptionType();\n    this.checkForCustomSort();\n    this.initFacetQueryController();\n    this.initQueryEvents();\n    this.initQueryStateEvents();\n    this.initComponentStateEvents();\n    this.initOmniboxEvents();\n    this.initBreadCrumbEvents();\n    this.initSearchAlertEvents();\n    this.updateNumberOfValues();\n\n    this.resize = () => {\n      if (!this.disabled) {\n        FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this);\n      }\n    };\n    window.addEventListener('resize', _.debounce(this.resize, 200));\n    this.bind.onRootElement(InitializationEvents.nuke, () => this.handleNuke());\n\n    this.bind.oneRootElement(QueryEvents.querySuccess, () => {\n      this.firstQuery = false;\n    });\n  }\n\n  public createDom() {\n    this.initBottomAndTopSpacer();\n    this.buildFacetContent();\n    this.updateAppearanceDependingOnState();\n    // After the facet has been created (and before the first query is applied)\n    // Try to load a state from the setting, if it's available\n    // Execute only _.once (only the first query, or the first time the user switch to a tab that contains a newly set of active facet)\n    if (this.facetSettings && this.options.enableSettingsFacetState) {\n      let loadOnce = <(args: INewQueryEventArgs) => any>_.once(() => {\n        this.facetSettings.loadSavedState.apply(this.facetSettings);\n      });\n      this.bind.onRootElement(QueryEvents.newQuery, loadOnce);\n    }\n  }\n\n  /**\n   * Selects a single value.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param value Can be a {@link FacetValue} or a string (e.g., `selectValue('foobar')` or\n   * `selectValue(new FacetValue('foobar'))`).\n   */\n  public selectValue(value: FacetValue): void;\n  public selectValue(value: string): void;\n  public selectValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Selecting facet value', this.facetValuesList.select(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Selects multiple values.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param values Can be an array of {@link FacetValue} or a string array.\n   */\n  public selectMultipleValues(values: FacetValue[]): void;\n  public selectMultipleValues(values: string[]): void;\n  public selectMultipleValues(values: any[]): void {\n    Assert.exists(values);\n    this.ensureDom();\n    _.each(values, (value) => {\n      this.logger.info('Selecting facet value', this.facetValuesList.select(value));\n    });\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Deselects a single value.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param value Can be a {@link FacetValue} or a string (e.g., `deselectValue('foobar')` or\n   * `deselectValue(new FacetValue('foobar'))`).\n   */\n  public deselectValue(value: FacetValue): void;\n  public deselectValue(value: string): void;\n  public deselectValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Deselecting facet value', this.facetValuesList.unselect(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Deselects multiple values.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param values Can be an array of {@link FacetValue} or a string array.\n   */\n  public deselectMultipleValues(values: FacetValue[]): void\n  public deselectMultipleValues(values: string[]): void\n  public deselectMultipleValues(values: any[]): void {\n    Assert.exists(values);\n    this.ensureDom();\n    _.each(values, (value) => {\n      this.logger.info('Deselecting facet value', this.facetValuesList.unselect(value));\n    });\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Excludes a single value.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param value Can be a {@link FacetValue} or a string (e.g., `excludeValue('foobar')` or\n   * `excludeValue(new FacetValue('foobar'))`).\n   */\n  public excludeValue(value: FacetValue): void;\n  public excludeValue(value: string): void;\n  public excludeValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Excluding facet value', this.facetValuesList.exclude(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Excludes multiple values.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param values Can be an array of {@link FacetValue} or a string array.\n   */\n  public excludeMultipleValues(values: FacetValue[]): void;\n  public excludeMultipleValues(values: string[]): void;\n  public excludeMultipleValues(values: any[]): void {\n    Assert.exists(values);\n    this.ensureDom();\n    _.each(values, (value) => {\n      this.logger.info('Excluding facet value', this.facetValuesList.exclude(value));\n    });\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Unexcludes a single value.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param value Can be a {@link FacetValue} or a string.\n   */\n  public unexcludeValue(value: FacetValue): void;\n  public unexcludeValue(value: string): void;\n  public unexcludeValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Unexcluding facet value', this.facetValuesList.unExclude(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Unexcludes multiple values.\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param values Can be an array of {@link FacetValue} or a string array.\n   */\n  public unexcludeMultipleValues(values: FacetValue[]): void;\n  public unexcludeMultipleValues(values: string[]): void;\n  public unexcludeMultipleValues(values: any[]): void {\n    Assert.exists(values);\n    this.ensureDom();\n    _.each(values, (value) => {\n      this.logger.info('Unexcluding facet value', this.facetValuesList.unExclude(value));\n    });\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Toggles the selection state of a single value (selects the value if it is not already selected; un-selects the\n   * value if it is already selected).\n   *\n   * Does not trigger a query automatically.\n   * @param value Can be a {@link FacetValue} or a string.\n   */\n  public toggleSelectValue(value: FacetValue): void;\n  public toggleSelectValue(value: string): void;\n  public toggleSelectValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Toggle select facet value', this.facetValuesList.toggleSelect(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Toggles the exclusion state of a single value (excludes the value if it is not already excluded; un-excludes the\n   * value if it is already excluded).\n   *\n   * Does not trigger a query automatically.\n   *\n   * @param value Can be a {@link FacetValue} or a string.\n   */\n  public toggleExcludeValue(value: FacetValue): void;\n  public toggleExcludeValue(value: string): void;\n  public toggleExcludeValue(value: any): void {\n    Assert.exists(value);\n    this.ensureDom();\n    this.logger.info('Toggle exclude facet value', this.facetValuesList.toggleExclude(value));\n    this.facetValueHasChanged();\n  }\n\n  /**\n   * Returns the currently displayed values as a string array.\n   *\n   * @returns {any[]} The currently displayed values.\n   */\n  public getDisplayedValues(): string[] {\n    return _.pluck(this.getDisplayedFacetValues(), 'value');\n  }\n\n  /**\n   * Returns the currently displayed values as an array of {@link FacetValue}.\n   *\n   * @returns {T[]} The currently displayed values.\n   */\n  public getDisplayedFacetValues(): FacetValue[] {\n    this.ensureDom();\n    let displayed = this.facetValuesList.getAllCurrentlyDisplayed();\n    return _.map(displayed, (value: ValueElement) => {\n      return value.facetValue;\n    });\n  }\n\n  /**\n   * Returns the currently selected values as an array of string.\n   * @returns {string[]} The currently selected values.\n   */\n  public getSelectedValues(): string[] {\n    this.ensureDom();\n    return _.map(this.values.getSelected(), (value: FacetValue) => value.value);\n  }\n\n  /**\n   * Returns the currently excluded values as an array of string.\n   * @returns {string[]} The currently excluded values.\n   */\n  public getExcludedValues(): string[] {\n    this.ensureDom();\n    return _.map(this.values.getExcluded(), (value: FacetValue) => value.value);\n  }\n\n  /**\n   * Resets the Facet by un-selecting all values, une-xcluding all values, and redrawing the Facet.\n   */\n  public reset(): void {\n    this.ensureDom();\n    this.values.reset();\n    this.rebuildValueElements();\n    this.updateAppearanceDependingOnState();\n    this.updateQueryStateModel();\n  }\n\n  /**\n   * Switches the Facet to `AND` mode.\n   *\n   * See {@link Facet.options.useAnd} and {@link Facet.options.enableTogglingOperator}.\n   */\n  public switchToAnd(): void {\n    this.ensureDom();\n    this.logger.info('Switching to AND');\n    this.facetHeader.switchToAnd();\n  }\n\n  /**\n   * Switches the Facet to `OR` mode.\n   *\n   * See {@link Facet.options.useAnd} and {@link Facet.options.enableTogglingOperator}.\n   */\n  public switchToOr(): void {\n    this.ensureDom();\n    this.logger.info('Switching to OR');\n    this.facetHeader.switchToOr();\n  }\n\n  /**\n   * Returns the endpoint for the Facet.\n   * @returns {ISearchEndpoint} The endpoint for the Facet.\n   */\n  public getEndpoint(): ISearchEndpoint {\n    return this.queryController.getEndpoint();\n  }\n\n  /**\n   * Changes the sort parameter for the Facet.\n   *\n   * See {@link Facet.options.availableSorts} for the list of possible values.\n   *\n   * Also triggers a new query.\n   *\n   * @param criteria The new sort parameter for the Facet.\n   */\n  public updateSort(criteria: string): void {\n    this.ensureDom();\n    if (this.options.sortCriteria != criteria) {\n      this.options.sortCriteria = criteria;\n      this.triggerNewQuery();\n    }\n  }\n\n  public unfadeInactiveValuesInMainList(): void {\n    $$(this.element).removeClass('coveo-facet-fade');\n  }\n\n  public fadeInactiveValuesInMainList(delay: number): void {\n    $$(this.element).addClass('coveo-facet-fade');\n  }\n\n  /**\n   * Shows a waiting animation in the Facet header (a spinner).\n   */\n  public showWaitingAnimation() {\n    this.ensureDom();\n    if (!this.showingWaitAnimation) {\n      // in old design : icon before the facet title needs to be hidden to show animation\n      // new design : no need to hide this icon since it's not there\n      if (!this.searchInterface.isNewDesign()) {\n        $$(this.headerElement).find('.coveo-icon').style.display = 'none';\n        $$(this.headerElement).find('.coveo-facet-header-wait-animation').style.display = '';\n      } else {\n        $$(this.headerElement).find('.coveo-facet-header-wait-animation').style.visibility = 'visible';\n      }\n      this.showingWaitAnimation = true;\n    }\n  }\n\n  /**\n   * Hides the waiting animation in the Facet header.\n   */\n  public hideWaitingAnimation(): void {\n    this.ensureDom();\n    if (this.showingWaitAnimation) {\n      $$(this.headerElement).find('.coveo-icon').style.display = '';\n      if (!this.searchInterface.isNewDesign()) {\n        $$(this.headerElement).find('.coveo-facet-header-wait-animation').style.display = 'none';\n      } else {\n        $$(this.headerElement).find('.coveo-facet-header-wait-animation').style.visibility = 'hidden';\n      }\n      this.showingWaitAnimation = false;\n    }\n  }\n\n  public processFacetSearchAllResultsSelected(facetValues: FacetValue[]): void {\n    let valuesForAnalytics = [];\n    _.each(facetValues, (facetValue) => {\n      this.ensureFacetValueIsInList(facetValue);\n      valuesForAnalytics.push(facetValue.value);\n    });\n    // Calculate the correct number of values from the current selected/excluded values (those will stay no matter what next rendering)\n    // add the new one that will be selected (and are not already selected in the facet)\n    // The minimum number of values is the number of values set in the option\n    let valuesThatStays = this.values.getSelected().concat(this.values.getExcluded());\n    this.numberOfValues = valuesThatStays.length + _.difference(valuesThatStays, facetValues).length;\n    this.numberOfValues = Math.max(this.numberOfValues, this.options.numberOfValues);\n    // Then, we set current page as the last \"full\" page (math.floor)\n    // This is so there is no additional values displayed requested to fill the current page\n    // Also, when the user hit more, it will request the current page and fill it with more values\n    this.currentPage = Math.floor((this.numberOfValues - this.options.numberOfValues) / this.options.pageSize);\n\n    this.updateQueryStateModel();\n    this.triggerNewQuery(() => this.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.facetSelectAll, {\n      facetId: this.options.id,\n      facetTitle: this.options.title\n    }));\n  }\n\n  public pinFacetPosition() {\n    if (this.options.preservePosition) {\n      this.pinnedViewportPosition = this.element.getBoundingClientRect().top;\n    }\n  }\n\n  /**\n   * Returns the configured caption for the given {@link FacetValue}.\n   *\n   * @param facetValue The FacetValue whose caption the method should return.\n   */\n  public getValueCaption(facetValue: IIndexFieldValue): string;\n  public getValueCaption(facetValue: FacetValue): string;\n  public getValueCaption(facetValue: any): string {\n    Assert.exists(facetValue);\n    let lookupValue = facetValue.lookupValue || facetValue.value;\n    let ret = lookupValue;\n    ret = FacetUtils.tryToGetTranslatedCaption(<string>this.options.field, lookupValue);\n\n    if (Utils.exists(this.options.valueCaption)) {\n      if (typeof this.options.valueCaption == 'object') {\n        ret = this.options.valueCaption[lookupValue] || ret;\n      }\n      if (typeof this.options.valueCaption == 'function') {\n        this.values.get(lookupValue);\n        ret = this.options.valueCaption.call(this, this.facetValuesList.get(lookupValue).facetValue);\n      }\n    }\n    return ret;\n  }\n\n  /**\n   * Shows the next page of results in the Facet.\n   *\n   * Triggers a query if needed, or displays the already available values.\n   */\n  public showMore() {\n    this.currentPage++;\n    this.updateNumberOfValues();\n    if (this.nbAvailableValues >= this.numberOfValues || !this.canFetchMore) {\n      this.rebuildValueElements();\n    } else {\n      this.triggerMoreQuery();\n    }\n  }\n\n  /**\n   * Shows less elements in the Facet (up to the original number of values).\n   *\n   * See {@link Facet.options.numberOfValues}.\n   */\n  public showLess() {\n    $$(this.lessElement).removeClass('coveo-active');\n    this.currentPage = 0;\n    this.updateNumberOfValues();\n    $$(this.moreElement).addClass('coveo-active');\n    this.values.sortValuesDependingOnStatus(this.numberOfValues);\n    this.rebuildValueElements();\n  }\n\n  /**\n   * Collapses the Facet.\n   */\n  public collapse() {\n    this.ensureDom();\n    if (this.facetHeader) {\n      this.facetHeader.collapseFacet();\n    }\n  }\n\n  /**\n   * Expands the facet.\n   */\n  public expand() {\n    this.ensureDom();\n    if (this.facetHeader) {\n      this.facetHeader.expandFacet();\n    }\n  }\n\n  public triggerNewQuery(beforeExecuteQuery?: () => void) {\n    if (!beforeExecuteQuery) {\n      this.queryController.executeQuery({ ignoreWarningSearchEvent: true });\n    } else {\n      this.queryController.executeQuery({ beforeExecuteQuery: beforeExecuteQuery });\n    }\n    this.showWaitingAnimation();\n  }\n\n  protected handleDeferredQuerySuccess(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    this.unfadeInactiveValuesInMainList();\n    this.hideWaitingAnimation();\n    this.updateVisibilityBasedOnDependsOn();\n    let groupByResult = data.results.groupByResults[this.facetQueryController.lastGroupByRequestIndex];\n    this.facetQueryController.lastGroupByResult = groupByResult;\n    if (!groupByResult) {\n      this.keepDisplayedValuesNextTime = false;\n    }\n    this.processNewGroupByResults(groupByResult);\n  }\n\n  protected handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs) {\n    Assert.exists(args);\n\n    if (this.values.hasSelectedOrExcludedValues()) {\n      let element = new BreadcrumbValueList(this, this.values.getSelected().concat(this.values.getExcluded()), BreadcrumbValueElement).build();\n      args.breadcrumbs.push({\n        element: element\n      });\n    }\n  }\n\n  protected handlePopulateSearchAlerts(args: ISearchAlertsPopulateMessageEventArgs) {\n    if (this.values.hasSelectedOrExcludedValues()) {\n      let excludedValues = this.values.getExcluded();\n      let selectedValues = this.values.getSelected();\n\n      if (!_.isEmpty(excludedValues)) {\n        args.text.push({\n          value: new BreadcrumbValueList(this, excludedValues, BreadcrumbValueElement).buildAsString(),\n          lineThrough: true\n        });\n      }\n\n      if (!_.isEmpty(selectedValues)) {\n        args.text.push({\n          value: new BreadcrumbValueList(this, selectedValues, BreadcrumbValueElement).buildAsString(),\n          lineThrough: false\n        });\n      }\n    }\n  }\n\n  protected initFacetQueryController() {\n    this.facetQueryController = new FacetQueryController(this);\n  }\n\n  protected initFacetValuesList() {\n    this.facetValuesList = new FacetValuesList(this, FacetValueElement);\n    this.element.appendChild(this.facetValuesList.build());\n  }\n\n  protected initFacetSearch() {\n    this.facetSearch = new FacetSearch(this, FacetSearchValuesList, this.root);\n    this.element.appendChild(this.facetSearch.build());\n  }\n\n  protected facetValueHasChanged() {\n    this.updateQueryStateModel();\n    this.rebuildValueElements();\n    Defer.defer(() => {\n      this.updateAppearanceDependingOnState();\n    });\n  }\n\n  protected updateAppearanceDependingOnState() {\n    $$(this.element).toggleClass('coveo-active', this.values.hasSelectedOrExcludedValues());\n    $$(this.element).toggleClass('coveo-facet-empty', !this.isAnyValueCurrentlyDisplayed());\n    if (this.searchInterface.isNewDesign()) {\n      $$(this.facetHeader.eraserElement).toggleClass('coveo-facet-header-eraser-visible', this.values.hasSelectedOrExcludedValues());\n    } else {\n      $$(this.facetHeader.eraserElement).toggle(this.values.hasSelectedOrExcludedValues());\n    }\n\n  }\n\n  protected initQueryEvents() {\n    this.bind.onRootElement(QueryEvents.duringQuery, () => this.handleDuringQuery());\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.doneBuildingQuery, (args: IDoneBuildingQueryEventArgs) => this.handleDoneBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.deferredQuerySuccess, (args: IQuerySuccessEventArgs) => this.handleDeferredQuerySuccess(args));\n  }\n\n  protected initQueryStateEvents() {\n    this.includedAttributeId = QueryStateModel.getFacetId(this.options.id);\n    this.excludedAttributeId = QueryStateModel.getFacetId(this.options.id, false);\n    this.operatorAttributeId = QueryStateModel.getFacetOperator(this.options.id);\n    this.lookupValueAttributeId = QueryStateModel.getFacetLookupValue(this.options.id);\n\n    this.queryStateModel.registerNewAttribute(this.includedAttributeId, []);\n    this.queryStateModel.registerNewAttribute(this.excludedAttributeId, []);\n    this.queryStateModel.registerNewAttribute(this.operatorAttributeId, '');\n    this.queryStateModel.registerNewAttribute(this.lookupValueAttributeId, {});\n\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE, undefined, (args: IAttributesChangedEventArg) => this.handleQueryStateChanged(args));\n  }\n\n  protected initComponentStateEvents() {\n    this.componentStateId = QueryStateModel.getFacetId(this.options.id);\n    this.componentStateModel.registerComponent(this.componentStateId, this);\n  }\n\n  protected initOmniboxEvents() {\n    if (this.options.includeInOmnibox) {\n      this.bind.onRootElement(OmniboxEvents.populateOmnibox, (args: IPopulateOmniboxEventArgs) => this.handlePopulateOmnibox(args));\n    }\n  }\n\n  protected initBreadCrumbEvents() {\n    if (this.options.includeInBreadcrumb) {\n      this.bind.onRootElement(BreadcrumbEvents.populateBreadcrumb, (args: IPopulateBreadcrumbEventArgs) => this.handlePopulateBreadcrumb(args));\n      this.bind.onRootElement(BreadcrumbEvents.clearBreadcrumb, (args: IClearBreadcrumbEventArgs) => this.handleClearBreadcrumb());\n    }\n  }\n\n  protected initSearchAlertEvents() {\n    this.bind.onRootElement(SearchAlertsEvents.searchAlertsPopulateMessage, (args: ISearchAlertsPopulateMessageEventArgs) => this.handlePopulateSearchAlerts(args));\n  }\n\n  protected handleOmniboxWithStaticValue(eventArg: IPopulateOmniboxEventArgs) {\n    let regex = new RegExp('^' + eventArg.completeQueryExpression.regex.source, 'i');\n    let match = _.first(_.filter(this.getDisplayedValues(), (displayedValue: string) => {\n      let value = this.getValueCaption(this.facetValuesList.get(displayedValue).facetValue);\n      return regex.test(value);\n    }), this.options.numberOfValuesInOmnibox);\n    let facetValues = _.map(match, (gotAMatch: string) => {\n      return this.facetValuesList.get(gotAMatch).facetValue;\n    });\n    let element = new OmniboxValuesList(this, facetValues, eventArg, OmniboxValueElement).build();\n    eventArg.rows.push({\n      element: element,\n      zIndex: this.omniboxZIndex\n    });\n  }\n\n  protected processNewGroupByResults(groupByResult: IGroupByResult) {\n    this.logger.trace('Displaying group by results', groupByResult);\n    if (groupByResult != undefined && groupByResult.values != undefined) {\n      this.nbAvailableValues = groupByResult.values.length;\n    }\n    let newFacetValues = new FacetValues(groupByResult);\n    this.updateValues(newFacetValues);\n    this.canFetchMore = this.numberOfValues < this.nbAvailableValues;\n\n    if (this.values.hasSelectedOrExcludedValues() && !this.options.useAnd && this.options.isMultiValueField) {\n      this.triggerUpdateDeltaQuery(_.filter(this.values.getAll(), (facetValue: FacetValue) => {\n        return !facetValue.selected && !facetValue.excluded;\n      }));\n    } else if (this.values.getSelected().length > 0 && !this.options.useAnd) {\n      this.values.updateDeltaWithFilteredFacetValues(new FacetValues());\n    }\n    if (!this.values.hasSelectedOrExcludedValues() || this.options.useAnd || !this.options.isMultiValueField) {\n      this.rebuildValueElements();\n      this.updateAppearanceDependingOnState();\n      this.ensurePinnedFacetHasntMoved();\n    }\n    this.keepDisplayedValuesNextTime = false;\n  }\n\n  protected updateQueryStateModel() {\n    this.listenToQueryStateChange = false;\n    this.updateExcludedQueryStateModel();\n    this.updateIncludedQueryStateModel();\n    this.facetHeader.updateOperatorQueryStateModel();\n    this.updateLookupValueQueryStateModel();\n    this.listenToQueryStateChange = true;\n  }\n\n  protected rebuildValueElements() {\n    this.updateNumberOfValues();\n    this.facetValuesList.rebuild(this.numberOfValues);\n    if (this.searchInterface.isNewDesign()) {\n      if (this.shouldRenderMoreLess()) {\n        this.updateMoreLess();\n        if (this.shouldRenderFacetSearch()) {\n          this.updateSearchInNewDesign(this.nbAvailableValues > this.numberOfValues);\n        }\n      } else if (this.shouldRenderFacetSearch()) {\n        this.updateSearchInNewDesign();\n      }\n    } else {\n      if (this.shouldRenderMoreLess()) {\n        this.updateMoreLess();\n      }\n    }\n  }\n\n  protected updateSearchInNewDesign(moreValuesAvailable = true) {\n    if (this.searchInterface.isNewDesign() && moreValuesAvailable) {\n      let renderer = new ValueElementRenderer(this, FacetValue.create(l('Search')));\n      let searchButton = renderer.build().withNo([renderer.excludeIcon, renderer.icon]);\n      $$(searchButton.listItem).addClass('coveo-facet-search-button');\n      searchButton.stylishCheckbox.removeAttribute('tabindex');\n\n      // Mobile do not like label. Use click event\n      if (DeviceUtils.isMobileDevice()) {\n        $$(searchButton.label).on('click', (e: Event) => {\n          if (searchButton.checkbox.getAttribute('checked')) {\n            searchButton.checkbox.removeAttribute('checked');\n          } else {\n            searchButton.checkbox.setAttribute('checked', 'checked');\n          }\n          $$(searchButton.checkbox).trigger('change');\n          e.stopPropagation();\n          e.preventDefault();\n        });\n      }\n\n      $$(searchButton.checkbox).on('change', () => {\n        $$(this.element).addClass('coveo-facet-searching');\n        this.facetSearch.focus();\n      });\n      this.facetValuesList.valueContainer.appendChild(searchButton.listItem);\n    }\n  }\n\n  protected updateMoreLess(lessElementIsShown = this.getMinimumNumberOfValuesToDisplay() < this.numberOfValues, moreValuesAvailable = this.nbAvailableValues > this.numberOfValues) {\n    if (lessElementIsShown) {\n      $$(this.lessElement).addClass('coveo-active');\n    } else {\n      $$(this.lessElement).removeClass('coveo-active');\n    }\n\n    if (moreValuesAvailable) {\n      $$(this.moreElement).addClass('coveo-active');\n    } else {\n      $$(this.moreElement).removeClass('coveo-active');\n    }\n\n    if (lessElementIsShown || moreValuesAvailable) {\n      $$(this.footerElement).removeClass('coveo-facet-empty');\n    } else {\n      $$(this.footerElement).addClass('coveo-facet-empty');\n    }\n  }\n\n  protected handleClickMore(): void {\n    this.showMore();\n  }\n\n  protected handleClickLess() {\n    this.showLess();\n  }\n\n  private handleNuke() {\n    window.removeEventListener('resize', this.resize);\n  }\n\n  private checkForComputedFieldAndSort() {\n    if (this.options.sortCriteria.toLowerCase().indexOf('computedfield') != -1 && Utils.isNullOrUndefined(this.options.computedField)) {\n      this.logger.warn('Sort criteria is specified as ComputedField, but the facet uses no computed field. Facet will always be empty !', this);\n    }\n  }\n\n  private checkForValueCaptionType() {\n    if (this.options.valueCaption && typeof this.options.valueCaption == 'function') {\n      this.options.enableFacetSearch = false;\n      this.options.includeInOmnibox = false;\n      this.logger.warn('Using a function as valueCaption is now deprecated. Use a json key value pair instead. Facet search and omnibox has been disabled for this facet', this);\n    }\n  }\n\n  private checkForCustomSort() {\n    if (this.options.customSort != undefined && !_.contains(this.options.availableSorts, 'custom')) {\n      this.options.availableSorts.unshift('custom');\n    }\n    if (this.options.availableSorts[0] == 'custom') {\n      this.options.sortCriteria = 'nosort';\n    }\n  }\n\n  private initBottomAndTopSpacer() {\n    let bottomSpace = $$(this.options.paddingContainer).find('.coveo-bottomSpace');\n    let topSpace = $$(this.options.paddingContainer).find('.coveo-topSpace');\n    if (this.options.preservePosition) {\n      $$(this.options.paddingContainer).on('mouseleave', () => this.unpinFacetPosition());\n\n      this.pinnedTopSpace = topSpace;\n      this.pinnedBottomSpace = bottomSpace;\n\n      if (!this.pinnedTopSpace) {\n        this.pinnedTopSpace = document.createElement('div');\n        $$(this.pinnedTopSpace).addClass('coveo-topSpace');\n        $$(this.pinnedTopSpace).insertBefore(<HTMLElement>this.options.paddingContainer.firstChild);\n      }\n      if (!this.pinnedBottomSpace) {\n        this.pinnedBottomSpace = document.createElement('div');\n        $$(this.pinnedBottomSpace).addClass('coveo-bottomSpace');\n        this.options.paddingContainer.appendChild(this.pinnedBottomSpace);\n      }\n    }\n  }\n\n  private updateIncludedQueryStateModel() {\n    let selectedValues: IQueryStateIncludedAttribute = {\n      included: this.getSelectedValues(),\n      title: this.includedAttributeId\n    };\n    this.queryStateModel.set(this.includedAttributeId, selectedValues.included);\n  }\n\n  private updateExcludedQueryStateModel() {\n    let excludedValues: IQueryStateExcludedAttribute = {\n      title: this.excludedAttributeId,\n      excluded: this.getExcludedValues()\n    };\n\n    this.queryStateModel.set(this.excludedAttributeId, excludedValues.excluded);\n  }\n\n  private updateLookupValueQueryStateModel() {\n    if (this.options.lookupField) {\n      let valueToSet = {};\n      _.each(this.values.getSelected().concat(this.values.getExcluded()), (value) => {\n        valueToSet[value.value] = value.lookupValue;\n      });\n      this.queryStateModel.set(this.lookupValueAttributeId, valueToSet);\n    }\n  }\n\n  private handleQueryStateChangedOperator(operator: string) {\n    if (operator == 'and') {\n      this.switchToAnd();\n    } else if (operator == 'or') {\n      this.switchToOr();\n    }\n  }\n\n  private handleQueryStateChangedIncluded(includedChanged) {\n    let toUnSelect = _.difference(this.getSelectedValues(), includedChanged);\n    if (Utils.isNonEmptyArray(toUnSelect)) {\n      this.deselectMultipleValues(toUnSelect);\n    }\n    if (!Utils.arrayEqual(this.getSelectedValues(), includedChanged, false)) {\n      this.selectMultipleValues(includedChanged);\n    }\n  }\n\n  private handleQueryStateChangedExcluded(excludedChanged) {\n    let toUnExclude = _.difference(this.getExcludedValues(), excludedChanged);\n    if (Utils.isNonEmptyArray(toUnExclude)) {\n      this.unexcludeMultipleValues(toUnExclude);\n    }\n    if (!Utils.arrayEqual(this.getExcludedValues(), excludedChanged, false)) {\n      this.excludeMultipleValues(excludedChanged);\n    }\n  }\n\n  private handleLookupvalueChanged(lookupFieldChanged: { [value: string]: string }) {\n    _.each(lookupFieldChanged, (lookupvalue, value) => {\n      this.facetValuesList.get(decodeURIComponent(value)).facetValue.lookupValue = decodeURIComponent(lookupvalue);\n    });\n  }\n\n  private handleQueryStateChanged(data: IAttributesChangedEventArg) {\n    Assert.exists(data);\n    this.ensureDom();\n\n    let queryStateAttributes = data.attributes;\n    let includedChanged = queryStateAttributes[this.includedAttributeId];\n    let excludedChanged = queryStateAttributes[this.excludedAttributeId];\n    let operator = queryStateAttributes[this.operatorAttributeId];\n    let lookupValueChanged = queryStateAttributes[this.lookupValueAttributeId];\n\n    if (this.listenToQueryStateChange) {\n      if (!Utils.isNullOrEmptyString(operator)) {\n        this.handleQueryStateChangedOperator(operator);\n      }\n      if (!Utils.isNullOrUndefined(includedChanged)) {\n        this.handleQueryStateChangedIncluded(includedChanged);\n      }\n      if (!Utils.isNullOrUndefined(excludedChanged)) {\n        this.handleQueryStateChangedExcluded(excludedChanged);\n      }\n      if (!Utils.isNullOrUndefined(lookupValueChanged)) {\n        this.handleLookupvalueChanged(lookupValueChanged);\n      }\n    }\n  }\n\n  private handlePopulateOmnibox(data: IPopulateOmniboxEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.completeQueryExpression);\n\n    // The omnibox calls can come in before a first query was executed (atypical, but\n    // if no query is auto-triggered on initialization). To ensure that we've got the\n    // proper filters, we ensure that at least a dumbshow query builder run occured\n    // before proceeding.\n    this.queryController.ensureCreatedQueryBuilder();\n\n    if (this.canFetchMore) {\n      this.handleOmniboxWithSearchInFacet(data);\n    } else {\n      this.handleOmniboxWithStaticValue(data);\n    }\n  }\n\n  private handleOmniboxWithSearchInFacet(eventArg: IPopulateOmniboxEventArgs) {\n    let regex = new RegExp('^' + eventArg.completeQueryExpression.regex.source, 'i');\n\n    let promise = new Promise<IOmniboxDataRow>((resolve, reject) => {\n      let searchParameters = new FacetSearchParameters(this);\n      searchParameters.setValueToSearch(eventArg.completeQueryExpression.word);\n      searchParameters.nbResults = this.options.numberOfValuesInOmnibox;\n      this.facetQueryController.search(searchParameters).then((fieldValues) => {\n        let facetValues = _.map(_.filter(fieldValues, (fieldValue: IIndexFieldValue) => {\n          return regex.test(fieldValue.lookupValue);\n        }), (fieldValue) => {\n          return this.values.get(fieldValue.lookupValue) || FacetValue.create(fieldValue);\n        });\n        let element = new OmniboxValuesList(this, facetValues, eventArg, OmniboxValueElement).build();\n        resolve({\n          element: element,\n          zIndex: this.omniboxZIndex\n        });\n      }).catch(() => {\n        resolve({ element: undefined });\n      });\n    });\n    eventArg.rows.push({ deferred: promise });\n  }\n\n  private handleDuringQuery() {\n    this.ensureDom();\n    if (!this.keepDisplayedValuesNextTime) {\n      this.fadeInactiveValuesInMainList(this.options.facetSearchDelay);\n    }\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.queryBuilder);\n\n    this.facetQueryController.prepareForNewQuery();\n    if (this.values.hasSelectedOrExcludedValues()) {\n      let expression = this.facetQueryController.computeOurFilterExpression();\n      this.logger.trace('Putting filter in query', expression);\n      data.queryBuilder.advancedExpression.add(expression);\n    }\n  }\n\n  private handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.queryBuilder);\n    let queryBuilder = data.queryBuilder;\n    this.facetQueryController.putGroupByIntoQueryBuilder(queryBuilder);\n  }\n\n  private handleClearBreadcrumb() {\n    this.reset();\n  }\n\n  private updateValues(facetValues: FacetValues) {\n    Assert.exists(facetValues);\n    if (this.keepDisplayedValuesNextTime) {\n      this.values.updateCountsFromNewValues(facetValues);\n    } else {\n      facetValues.importActiveValuesFromOtherList(this.values);\n      facetValues.sortValuesDependingOnStatus(this.numberOfValues);\n      this.values = facetValues;\n    }\n\n    this.updateNumberOfValues();\n  }\n\n  private ensureFacetValueIsInList(facetValue: FacetValue) {\n    Assert.exists(facetValue);\n    if (!this.values.contains(facetValue.value)) {\n      this.values.add(facetValue);\n    }\n  }\n\n  private isAnyValueCurrentlyDisplayed(): boolean {\n    return !this.values.isEmpty();\n  }\n\n  private buildFacetContent() {\n    this.headerElement = this.buildHeader();\n    this.element.appendChild(this.headerElement);\n    this.initFacetValuesList();\n    if (this.shouldRenderFacetSearch()) {\n      this.initFacetSearch();\n    }\n    if (this.shouldRenderMoreLess()) {\n      this.moreElement = this.buildMore();\n      this.lessElement = this.buildLess();\n    }\n    this.footerElement = this.buildFooter();\n    this.element.appendChild(this.footerElement);\n    if (this.searchInterface.isNewDesign() && this.lessElement && this.moreElement) {\n      this.footerElement.appendChild(this.lessElement);\n      this.footerElement.appendChild(this.moreElement);\n    } else if (this.moreElement && this.lessElement) {\n      this.footerElement.appendChild(this.moreElement);\n      this.footerElement.appendChild(this.lessElement);\n    }\n  }\n\n  private buildHeader() {\n    let icon = this.options.headerIcon;\n    if (this.searchInterface.isNewDesign() && this.options.headerIcon == this.options.field) {\n      icon = undefined;\n    }\n    this.facetHeader = new FacetHeader({\n      facetElement: this.element,\n      title: this.options.title,\n      icon: icon,\n      field: <string>this.options.field,\n      enableClearElement: true,\n      enableCollapseElement: this.options.enableCollapse,\n      facet: this,\n      settingsKlass: this.options.enableSettings ? FacetSettings : undefined,\n      sortKlass: FacetSort,\n      availableSorts: this.options.availableSorts,\n      isNewDesign: this.getBindings().searchInterface.isNewDesign()\n    });\n    let built = this.facetHeader.build();\n    this.facetSettings = this.facetHeader.settings;\n    this.facetSort = this.facetHeader.sort;\n    return built;\n  }\n\n  private unpinFacetPosition() {\n    if (this.shouldFacetUnpin() && this.options.preservePosition) {\n      $$(this.pinnedTopSpace).addClass('coveo-with-animation');\n      $$(this.pinnedBottomSpace).addClass('coveo-with-animation');\n      this.pinnedTopSpace.style.height = '0px';\n      this.pinnedBottomSpace.style.height = '0px';\n    }\n    this.unpinnedViewportPosition = undefined;\n    this.pinnedViewportPosition = undefined;\n  }\n\n  private isFacetPinned(): boolean {\n    return Utils.exists(this.pinnedViewportPosition);\n  }\n\n  private shouldFacetUnpin(): boolean {\n    return Utils.exists(this.unpinnedViewportPosition);\n  }\n\n  private ensurePinnedFacetHasntMoved(): void {\n    if (this.isFacetPinned()) {\n      Assert.exists(this.pinnedViewportPosition);\n      $$(this.pinnedTopSpace).removeClass('coveo-with-animation');\n      $$(this.pinnedBottomSpace).removeClass('coveo-with-animation');\n      this.pinnedTopSpace.style.height = '0px';\n      this.pinnedBottomSpace.style.height = '0px';\n\n      // Under firefox scrolling the body doesn't work, but window does\n      // on all browser, so we substitute those here when needed.\n      let elementToScroll: any = this.options.scrollContainer == document.body ? window : this.options.scrollContainer;\n      let currentViewportPosition = this.element.getBoundingClientRect().top;\n      let offset = currentViewportPosition - this.pinnedViewportPosition;\n      let scrollToOffset = () => {\n        if (elementToScroll instanceof Window) {\n          window.scrollTo(0, window.scrollY + offset);\n        } else {\n          (<HTMLElement>elementToScroll).scrollTop = elementToScroll.scrollTop + offset;\n        }\n      };\n      // First try to adjust position by scrolling the page\n      scrollToOffset();\n      currentViewportPosition = this.element.getBoundingClientRect().top;\n      offset = currentViewportPosition - this.pinnedViewportPosition;\n\n      // If scrolling has worked (offset == 0), we're good to go, nothing to do anymore.\n      // Otherwise try other voodoo magic.\n      if (offset < 0) {\n        // This means the facet element is scrolled up in the viewport,\n        // scroll it down by adding space in the top container\n        this.pinnedTopSpace.style.height = (offset * -1) + 'px';\n      } else {\n        // Here, this means the facet element is scrolled down in the viewport,\n        // and there is not enough scroll space in the page / window to scroll far enough\n        // we need to add space at the bottom so that we can finally scroll there.\n        _.defer(() => {\n          let heightBottom = 0;\n          let attempts = 0;\n          while (offset > 0 && attempts++ < 100) {\n            heightBottom += 100;\n            this.pinnedBottomSpace.style.height = heightBottom + 'px';\n            currentViewportPosition = this.element.getBoundingClientRect().top;\n            offset = currentViewportPosition - this.pinnedViewportPosition;\n            scrollToOffset();\n          }\n        });\n      }\n      this.unpinnedViewportPosition = this.pinnedViewportPosition;\n      this.pinnedViewportPosition = null;\n    }\n  }\n\n  private buildFooter(): HTMLElement {\n    return $$('div', { className: 'coveo-facet-footer' }).el;\n  }\n\n  private buildMore(): HTMLElement {\n    let more: HTMLElement;\n    if (this.searchInterface.isNewDesign()) {\n      more = $$('div', { className: 'coveo-facet-more', tabindex: 0 },\n        $$('span', { className: 'coveo-icon' })).el;\n    } else {\n      more = $$('a', { className: 'coveo-facet-more' }, l('More')).el;\n    }\n    const moreAction = () => this.handleClickMore();\n    $$(more).on('click', moreAction);\n    $$(more).on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, moreAction));\n    return more;\n  }\n\n  private buildLess(): HTMLElement {\n    let less: HTMLElement;\n    if (this.searchInterface.isNewDesign()) {\n      less = $$('div', { className: 'coveo-facet-less', tabindex: 0 },\n        $$('span', { className: 'coveo-icon' })).el;\n    } else {\n      less = $$('a', { className: 'coveo-facet-less' }, l('Less')).el;\n    }\n    const lessAction = () => this.handleClickLess();\n    $$(less).on('click', lessAction);\n    $$(less).on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, lessAction));\n    return less;\n  }\n\n  private triggerMoreQuery() {\n    this.logger.info('Triggering new facet more query');\n    this.showWaitingAnimation();\n    // fetch 1 more value than we need, so we can see if there is more value to fetch still or if we have reached\n    // the end of the availables values\n    this.facetQueryController.fetchMore(this.numberOfValues + 1).then((queryResults?) => {\n      let facetValues = new FacetValues(queryResults.groupByResults[0]);\n\n      facetValues.importActiveValuesFromOtherList(this.values);\n      facetValues.sortValuesDependingOnStatus(this.numberOfValues);\n      this.values = facetValues;\n\n      this.nbAvailableValues = this.values.size();\n\n      this.updateNumberOfValues();\n      this.canFetchMore = this.numberOfValues < this.nbAvailableValues;\n\n      if (this.values.hasSelectedOrExcludedValues() && !this.options.useAnd && this.options.isMultiValueField) {\n        this.triggerUpdateDeltaQuery(_.filter(this.values.getAll(), (facetValue: FacetValue) => !facetValue.selected && !facetValue.excluded));\n      } else {\n        if (this.values.hasSelectedOrExcludedValues() && !this.options.useAnd) {\n          this.values.updateDeltaWithFilteredFacetValues(new FacetValues());\n          this.hideWaitingAnimation();\n        } else {\n          this.hideWaitingAnimation();\n        }\n\n        this.rebuildValueElements();\n      }\n    }).catch(() => this.hideWaitingAnimation());\n  }\n\n  protected triggerUpdateDeltaQuery(facetValues: FacetValue[]): void {\n    this.showWaitingAnimation();\n    this.facetQueryController.searchInFacetToUpdateDelta(facetValues).then((queryResults?) => {\n      let values: FacetValues = new FacetValues();\n      _.each(queryResults.groupByResults, (groupByResult: IGroupByResult) => {\n        _.each(groupByResult.values, (groupByValue: IGroupByValue) => {\n          if (!values.contains(groupByValue.value)) {\n            values.add(FacetValue.createFromGroupByValue(groupByValue));\n          }\n        });\n      });\n      this.values.updateDeltaWithFilteredFacetValues(values);\n      this.rebuildValueElements();\n      this.hideWaitingAnimation();\n    });\n  }\n\n  protected updateNumberOfValues() {\n    if (this.currentPage <= 0) {\n      // We're on the first page, let's reset the number of values to a minimum.\n      this.currentPage = 0;\n      this.numberOfValues = 0;\n    } else {\n      // Calculate the number of value with the current page.\n      this.numberOfValues = this.options.numberOfValues + (this.currentPage * this.options.pageSize);\n    }\n\n    // Make sure we have at least the absolute minimum of value to display.\n    this.numberOfValues = Math.max(this.numberOfValues, this.getMinimumNumberOfValuesToDisplay());\n  }\n\n  private getMinimumNumberOfValuesToDisplay() {\n    // The min value is the number of used values.\n    let minValue = this.values.getExcluded().length + this.values.getSelected().length;\n\n    // When using a custom sort, we have to show all values between the selected ones.\n    // Thus, we must find the last selected value after a reorder and use that value as the number of value.\n    if (this.options.customSort != null && this.facetSort != null && this.options.customSort.length > 0) {\n      let lastSelectedValueIndex = -1;\n      new FacetValuesOrder(this, this.facetSort).reorderValues(this.values.getAll()).forEach((facetValue, index) => {\n        if (facetValue.selected) {\n          lastSelectedValueIndex = index;\n        }\n      });\n      minValue = lastSelectedValueIndex + 1;\n    }\n    return Math.max(minValue, this.options.numberOfValues);\n  }\n\n  private updateVisibilityBasedOnDependsOn() {\n    if (Utils.isNonEmptyString(this.options.dependsOn)) {\n      $$(this.element).toggleClass('coveo-facet-dependent', !this.doesParentFacetHasSelectedValue() && !this.values.hasSelectedOrExcludedValues());\n    }\n  }\n\n  private doesParentFacetHasSelectedValue(): boolean {\n    let id = QueryStateModel.getFacetId(this.options.dependsOn);\n    let values = this.queryStateModel.get(id);\n    return values != null && values.length != 0;\n  }\n\n  private shouldRenderFacetSearch() {\n    return this.options.enableFacetSearch;\n  }\n\n  private shouldRenderMoreLess() {\n    return this.options.enableMoreLess;\n  }\n\n  public debugInfo() {\n    let info: any = {};\n    info[this['constructor']['ID']] = {\n      component: this,\n      groupByRequest: this.facetQueryController.lastGroupByRequest,\n      groupByResult: this.facetQueryController.lastGroupByResult\n    };\n    return info;\n  }\n}\nInitialization.registerAutoCreateComponent(Facet);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/Facet.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { IGroupByValue } from '../../rest/GroupByValue';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { IGroupByResult } from '../../rest/GroupByResult';\nimport Globalize = require('globalize');\nimport _ = require('underscore');\n\n/**\n * A class which holds information and operation available on a single facet value returned by a {@link IGroupByRequest}.<br/>\n * This class is used extensibely in the {@link Facet} component.\n */\nexport class FacetValue {\n  value: string;\n  lookupValue: string;\n  occurrences: number;\n  computedField: number;\n  delta: number;\n  score: number;\n  selected: boolean = false;\n  excluded: boolean = false;\n  waitingForDelta: boolean = false;\n\n  reset() {\n    this.selected = false;\n    this.excluded = false;\n  }\n\n  updateCountsFromNewValue(newValue: FacetValue) {\n    Assert.exists(newValue);\n    this.occurrences = newValue.occurrences;\n    this.delta = newValue.delta;\n    this.computedField = newValue.computedField;\n  }\n\n  cloneWithZeroOccurrences(): FacetValue {\n    this.occurrences = 0;\n    this.computedField = undefined;\n    this.delta = undefined;\n    return this;\n  }\n\n  cloneWithDelta(count: number, delta: number): FacetValue {\n    Assert.isLargerOrEqualsThan(0, count);\n    var clone = this.cloneWithZeroOccurrences();\n    clone.delta = delta;\n    clone.occurrences = count;\n    return clone;\n  }\n\n  getFormattedCount() {\n    var count: string = undefined;\n    if (Utils.exists(this.delta) && this.delta > 0) {\n      count = '+' + Globalize.format(this.delta, 'n0');\n    } else {\n      if (this.occurrences > 0) {\n        count = Globalize.format(this.occurrences, 'n0');\n      }\n    }\n    return count;\n  }\n\n  getFormattedComputedField(format: string) {\n    if (this.computedField != 0) {\n      return Globalize.format(this.computedField, format);\n    } else {\n      return undefined;\n    }\n  }\n\n  static create(value: any): FacetValue {\n    if (_.isString(value)) {\n      return FacetValue.createFromValue(value);\n    } else if (_.isObject(value)) {\n      if ('computedFieldResults' in value) {\n        return FacetValue.createFromGroupByValue(value);\n      } else {\n        return FacetValue.createFromFieldValue(value);\n      }\n    } else {\n      throw new Error('Can\\'t create value from ' + value);\n    }\n  }\n\n  static createFromValue(value: string): FacetValue {\n    Assert.isNonEmptyString(value);\n\n    var facetValue = new FacetValue();\n    facetValue.value = value;\n    facetValue.lookupValue = value;\n\n    return facetValue;\n  }\n\n  static createFromGroupByValue(groupByValue: IGroupByValue): FacetValue {\n    Assert.exists(groupByValue);\n\n    Assert.exists(groupByValue);\n\n    var facetValue = new FacetValue();\n    facetValue.value = groupByValue.value;\n    facetValue.lookupValue = Utils.exists(groupByValue.lookupValue) ? groupByValue.lookupValue : groupByValue.value;\n    facetValue.occurrences = groupByValue.numberOfResults;\n    facetValue.computedField = Utils.isNonEmptyArray(groupByValue.computedFieldResults) ? groupByValue.computedFieldResults[0] : undefined;\n    facetValue.score = groupByValue.score;\n\n    return facetValue;\n  }\n\n  static createFromFieldValue(fieldValue: IIndexFieldValue): FacetValue {\n    Assert.exists(fieldValue);\n\n    var facetValue = new FacetValue();\n    facetValue.value = fieldValue.value;\n    facetValue.lookupValue = fieldValue.lookupValue;\n    facetValue.occurrences = fieldValue.numberOfResults;\n\n    return facetValue;\n  }\n}\n\nexport class FacetValues {\n  private values: FacetValue[];\n\n  constructor(groupByResult?: IGroupByResult) {\n    if (Utils.exists(groupByResult)) {\n      this.values = _.map(groupByResult.values, groupByValue => FacetValue.createFromGroupByValue(groupByValue));\n    } else {\n      this.values = [];\n    }\n  }\n\n  add(facetValue: FacetValue) {\n    Assert.exists(facetValue);\n    Assert.check(!this.contains(facetValue.value));\n    this.values.push(facetValue);\n  }\n\n  remove(value: string) {\n    Assert.isNonEmptyString(value);\n    value = value;\n    this.values = _.filter(this.values, (elem: FacetValue) => elem.value != value);\n  }\n\n  size(): number {\n    return this.values.length;\n  }\n\n  isEmpty(): boolean {\n    return this.values.length == 0;\n  }\n\n  at(index: number): FacetValue {\n    Assert.isLargerOrEqualsThan(0, index);\n    Assert.isSmallerThan(this.values.length, index);\n    return this.values[index];\n  }\n\n  get(value: string): FacetValue {\n    return _.find(this.values, (elem: FacetValue) => elem.value.toLowerCase() == value.toLowerCase());\n  }\n\n  contains(value: string): boolean {\n    return Utils.exists(this.get(value));\n  }\n\n  getAll(): FacetValue[] {\n    return this.values;\n  }\n\n  getSelected(): FacetValue[] {\n    return _.filter(this.values, (value: FacetValue) => value.selected);\n  }\n\n  getExcluded(): FacetValue[] {\n    return _.filter(this.values, (value: FacetValue) => value.excluded);\n  }\n\n  hasSelectedOrExcludedValues(): boolean {\n    return this.getSelected().length != 0 || this.getExcluded().length != 0;\n  }\n\n  reset() {\n    _.each(this.values, (elem: FacetValue) => elem.reset());\n  }\n\n  importActiveValuesFromOtherList(other: FacetValues) {\n    Assert.exists(other);\n\n    _.each(other.getSelected(), (otherValue: FacetValue) => {\n      var myValue = this.get(otherValue.value);\n      if (Utils.exists(myValue)) {\n        myValue.selected = true;\n      } else {\n        this.values.push(otherValue.cloneWithZeroOccurrences());\n      }\n    });\n\n    _.each(other.getExcluded(), (otherValue: FacetValue) => {\n      var myValue = this.get(otherValue.value);\n      if (Utils.exists(myValue)) {\n        myValue.excluded = true;\n      } else if (otherValue.occurrences != 0) {\n        var occurrences = otherValue.occurrences;\n        var clone = otherValue.cloneWithZeroOccurrences();\n        clone.occurrences = occurrences;\n        this.values.push(clone);\n      } else {\n        this.values.push(otherValue.cloneWithZeroOccurrences());\n      }\n    });\n  }\n\n  updateCountsFromNewValues(newValues: FacetValues) {\n    Assert.exists(newValues);\n\n    this.values = _.map(this.values, (myValue: FacetValue) => {\n      var newValue = newValues.get(myValue.value);\n      if (Utils.exists(newValue)) {\n        myValue.updateCountsFromNewValue(newValue);\n        return myValue;\n      } else {\n        return myValue.cloneWithZeroOccurrences();\n      }\n    });\n  }\n\n  updateDeltaWithFilteredFacetValues(filtered: FacetValues) {\n    Assert.exists(filtered);\n    _.each(this.values, (unfilteredValue: FacetValue) => {\n      var filteredValue = filtered.get(unfilteredValue.value);\n      unfilteredValue.waitingForDelta = false;\n      if (Utils.exists(filteredValue)) {\n        if (unfilteredValue.occurrences - filteredValue.occurrences > 0) {\n          unfilteredValue.delta = unfilteredValue.occurrences - filteredValue.occurrences;\n        } else {\n          unfilteredValue.delta = null;\n        }\n      } else if (!unfilteredValue.selected && !unfilteredValue.excluded) {\n        unfilteredValue.delta = unfilteredValue.occurrences;\n      }\n    });\n  }\n\n  mergeWithUnfilteredFacetValues(unfiltered: FacetValues) {\n    Assert.exists(unfiltered);\n\n    var values: FacetValue[] = [];\n    _.each(unfiltered.values, (unfilteredValue: FacetValue) => {\n      var filteredValue = this.get(unfilteredValue.value);\n      if (Utils.exists(filteredValue)) {\n        if (filteredValue.occurrences == unfilteredValue.occurrences) {\n          values.push(filteredValue);\n        } else {\n          values.push(unfilteredValue.cloneWithDelta(unfilteredValue.occurrences, unfilteredValue.occurrences - filteredValue.occurrences));\n        }\n      } else {\n        values.push(unfilteredValue.cloneWithDelta(unfilteredValue.occurrences, unfilteredValue.occurrences));\n      }\n    });\n\n    var index = 0;\n    _.each(this.values, (value: FacetValue) => {\n      var unfilteredValue = unfiltered.get(value.value);\n      if (!Utils.exists(unfilteredValue)) {\n        if (value.selected || value.excluded) {\n          values.splice(index, 0, value);\n          index++;\n        }\n      } else {\n        for (var i = 0; i < values.length; i++) {\n          if (values[i].value == value.value) {\n            index = i + 1;\n            break;\n          }\n        }\n      }\n    });\n    this.values = values;\n  }\n\n  sortValuesDependingOnStatus(excludeLastIndex?: number) {\n    this.values = _.sortBy(this.values, (value: FacetValue) => {\n      if (value.selected) {\n        return 1;\n      } else if (value.excluded) {\n        return 3;\n      } else {\n        return 2;\n      }\n    });\n    if (excludeLastIndex != null && excludeLastIndex < this.values.length) {\n      var nbExclude = this.getExcluded().length;\n      var excludes = this.values.splice(this.values.length - nbExclude, nbExclude);\n      Array.prototype.splice.apply(this.values, (<any[]>[excludeLastIndex - nbExclude, 0]).concat(excludes));\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetValues.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { Facet } from './Facet';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { EventsUtils } from '../../utils/EventsUtils';\nimport { FacetSearchParameters } from './FacetSearchParameters';\nimport { IAnalyticsFacetMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { IEndpointError } from '../../rest/EndpointError';\nimport { Component } from '../Base/Component';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { PopupUtils, HorizontalAlignment, VerticalAlignment } from '../../utils/PopupUtils';\nimport { l } from '../../strings/Strings';\nimport { Assert } from '../../misc/Assert';\nimport { KEYBOARD } from '../../utils/KeyboardUtils';\nimport { FacetUtils } from './FacetUtils';\nimport { FacetValue } from './FacetValues';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { IFacetSearchValuesListKlass } from './FacetSearchValuesList';\nimport { FacetValueElement } from './FacetValueElement';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResponsiveComponentsUtils } from '../ResponsiveComponents/ResponsiveComponentsUtils';\nimport { FacetValuesOrder } from './FacetValuesOrder';\nimport _ = require('underscore');\n\n/**\n * Used by the {@link Facet} component to render and handle the facet search part of each facet.\n */\nexport class FacetSearch {\n  public currentlyDisplayedResults: string[];\n  public searchResults: HTMLElement;\n  public search: HTMLElement;\n\n  private magnifier: HTMLElement;\n  private wait: HTMLElement;\n  private clearIcon: HTMLElement;\n  private clear: HTMLElement;\n  private middle: HTMLElement;\n  private input: HTMLInputElement;\n  private facetSearchTimeout: number;\n  private showingFacetSearchWaitAnimation = false;\n  private facetSearchPromise: Promise<IIndexFieldValue[]>;\n  private moreValuesToFetch = true;\n  private onResize: (...args: any[]) => void;\n  private onDocumentClick: (e: Event) => void;\n  private searchBarIsAnimating: boolean = false;\n  private lastSearchWasEmpty = true;\n\n  constructor(public facet: Facet, public facetSearchValuesListKlass: IFacetSearchValuesListKlass, private root: HTMLElement) {\n    this.searchResults = document.createElement('ul');\n    $$(this.searchResults).addClass('coveo-facet-search-results');\n    this.onResize = _.debounce(() => {\n      // Mitigate issues in UT where the window in phantom js might get resized in the scope of another test.\n      // These would point to random instance of a test karma object, and not a real search interface.\n      if (this.facet instanceof Facet && this.facet.searchInterface instanceof SearchInterface) {\n        if (this.shouldPositionSearchResults()) {\n          this.positionSearchResults();\n        }\n      }\n    }, 250);\n    this.onDocumentClick = (e: Event) => {\n      this.handleClickElsewhere(e);\n    };\n    window.addEventListener('resize', () => this.onResize());\n    document.addEventListener('click', (e: Event) => this.onDocumentClick(e));\n    $$(facet.root).on(InitializationEvents.nuke, () => this.handleNuke());\n  }\n\n  public isMobileDevice() {\n    return DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign();\n  }\n\n  /**\n   * Build the search component and return an `HTMLElement` which can be appended to the {@link Facet}.\n   * @returns {HTMLElement}\n   */\n  public build(): HTMLElement {\n    if (this.isMobileDevice()) {\n      return this.buildSearchMobile();\n    } else {\n      return this.buildBaseSearch();\n    }\n  }\n\n  /**\n   * Position the search results at the footer of the facet.\n   */\n  public positionSearchResults(nextTo: HTMLElement = this.search) {\n    if (this.searchResults != null) {\n      if (!this.isMobileDevice()) {\n        this.searchResults.style.display = 'block';\n        this.searchResults.style.width = this.facet.element.clientWidth - 40 + 'px';\n      }\n\n      if ($$(this.searchResults).css('display') == 'none') {\n        this.searchResults.style.display = '';\n      }\n      let searchBar = $$(this.search);\n      if (searchBar.css('display') == 'none' || this.searchBarIsAnimating) {\n        if ($$(this.searchResults).css('display') == 'none') {\n          this.searchResults.style.display = '';\n        }\n        let self = this;\n        EventsUtils.addPrefixedEvent(this.search, 'AnimationEnd', function (evt) {\n          PopupUtils.positionPopup(self.searchResults, nextTo, self.root,\n            { horizontal: HorizontalAlignment.CENTER, vertical: VerticalAlignment.BOTTOM }\n          );\n          EventsUtils.removePrefixedEvent(self.search, 'AnimationEnd', this);\n        });\n      } else {\n        PopupUtils.positionPopup(this.searchResults, nextTo, this.root,\n          { horizontal: HorizontalAlignment.CENTER, vertical: VerticalAlignment.BOTTOM }\n        );\n      }\n    }\n  }\n\n  /**\n   * Dismiss the search results\n   */\n  public completelyDismissSearch() {\n    this.cancelAnyPendingSearchOperation();\n    this.facet.unfadeInactiveValuesInMainList();\n    $$(this.searchResults).empty();\n    this.moreValuesToFetch = true;\n    $$(this.search).removeClass('coveo-facet-search-no-results');\n    $$(this.facet.element).removeClass('coveo-facet-searching');\n    this.hideSearchResultsElement();\n    this.input.value = '';\n    $$(this.clear).hide();\n    this.currentlyDisplayedResults = undefined;\n  }\n\n  /**\n   * Trigger a new facet search, and display the results.\n   * @param params\n   */\n  public triggerNewFacetSearch(params: FacetSearchParameters) {\n    this.cancelAnyPendingSearchOperation();\n    this.showFacetSearchWaitingAnimation();\n\n    this.facet.logger.info('Triggering new facet search');\n\n    this.facetSearchPromise = this.facet.facetQueryController.search(params);\n\n    if (this.facetSearchPromise) {\n      this.facetSearchPromise.then((fieldValues: IIndexFieldValue[]) => {\n        this.facet.usageAnalytics.logCustomEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.facetSearch, {\n          facetId: this.facet.options.id,\n          facetTitle: this.facet.options.title\n        }, this.facet.root);\n        this.facet.logger.debug('Received field values', fieldValues);\n        this.processNewFacetSearchResults(fieldValues, params);\n        this.hideFacetSearchWaitingAnimation();\n        this.facetSearchPromise = undefined;\n      }).catch((error: IEndpointError) => {\n        // The request might be normally cancelled if another search is triggered.\n        // In this case we do not hide the animation to prevent flicking.\n        if (Utils.exists(error)) {\n          this.facet.logger.error('Error while retrieving facet values', error);\n          this.hideFacetSearchWaitingAnimation();\n        }\n        this.facetSearchPromise = undefined;\n        return null;\n      });\n    }\n  }\n\n  /**\n   * Trigger the event associated with the focus of the search input.\n   */\n  public focus(): void {\n    this.input.focus();\n    this.handleFacetSearchFocus();\n  }\n\n  private shouldPositionSearchResults(): boolean {\n    return !this.isMobileDevice() && !ResponsiveComponentsUtils.isSmallFacetActivated($$(this.root))\n      && $$(this.facet.element).hasClass('coveo-facet-searching');\n  }\n\n  private buildBaseSearch(): HTMLElement {\n    this.search = document.createElement('div');\n    $$(this.search).addClass('coveo-facet-search');\n\n    this.magnifier = document.createElement('div');\n    $$(this.magnifier).addClass('coveo-facet-search-magnifier');\n    this.search.appendChild(this.magnifier);\n\n    this.wait = document.createElement('div');\n    $$(this.wait).addClass('coveo-facet-search-wait-animation');\n    this.search.appendChild(this.wait);\n    this.hideFacetSearchWaitingAnimation();\n\n    this.clear = document.createElement('div');\n    $$(this.clear).addClass('coveo-facet-search-clear');\n    this.clear.setAttribute('title', l('Clear', l('Search')));\n    this.clear.style.display = 'none';\n    this.search.appendChild(this.clear);\n\n\n    this.clearIcon = document.createElement('span');\n    $$(this.clearIcon).addClass('coveo-icon');\n    this.clear.appendChild(this.clearIcon);\n\n    this.middle = document.createElement('div');\n    $$(this.middle).addClass('coveo-facet-search-middle');\n    this.search.appendChild(this.middle);\n\n    this.input = document.createElement('input');\n    this.input.setAttribute('type', 'text');\n    this.input.setAttribute('autocapitalize', 'off');\n    this.input.setAttribute('autocorrect', 'off');\n    this.input.setAttribute('placeholder', this.facet.searchInterface.isNewDesign() ? '' : l('SearchIn', this.facet.options.title));\n    $$(this.input).addClass('coveo-facet-search-input');\n    Component.pointElementsToDummyForm(this.input);\n    this.middle.appendChild(this.input);\n\n    $$(this.input).on('keyup', (e: KeyboardEvent) => this.handleFacetSearchKeyUp(e));\n    $$(this.clear).on('click', (e: Event) => this.handleFacetSearchClear());\n    $$(this.input).on('focus', (e: Event) => this.handleFacetSearchFocus());\n\n    this.detectSearchBarAnimation();\n    this.root.appendChild(this.searchResults);\n    this.searchResults.style.display = 'none';\n\n    return this.search;\n  }\n\n  private buildSearchMobile() {\n    let button = document.createElement('div');\n    $$(button).addClass('coveo-facet-search-button-mobile');\n    $$(button).text(l('Search'));\n    this.search = this.buildBaseSearch();\n    $$(button).on('click', () => {\n      let toOpen = document.createElement('div');\n      toOpen.appendChild(this.search);\n\n      ModalBox.open(toOpen, {\n        title: DomUtils.getPopUpCloseButton(l('Close'), l('SearchIn', this.facet.options.title)),\n        validation: () => {\n          this.completelyDismissSearch();\n          return true;\n        },\n        className: 'coveo-mobile-facet-search',\n        titleClose: true\n      });\n      this.input.value = '';\n      this.input.focus();\n    });\n    return button;\n  }\n\n  private handleFacetSearchKeyUp(event: KeyboardEvent) {\n    Assert.exists(event);\n    let isEmpty = this.input.value.trim() == '';\n    this.showOrHideClearElement(isEmpty);\n\n    if (!this.isMobileDevice()) {\n      this.handleKeyboardNavigation(event, isEmpty);\n    } else {\n      this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n    }\n  }\n\n  private handleNuke() {\n    window.removeEventListener('resize', this.onResize);\n    document.removeEventListener('click', this.onDocumentClick);\n  }\n\n\n  private handleFacetSearchFocus() {\n    if (!this.isMobileDevice()) {\n      if (this.facet.searchInterface.isNewDesign()) {\n        // Trigger a query only if the results are not already rendered.\n        // Protect against the case where user can \"focus\" out of the search box by clicking not directly on a search results\n        // Then re-focusing the search box\n        if (this.currentlyDisplayedResults == null) {\n          this.startNewSearchTimeout(this.buildParamsForExcludingCurrentlyDisplayedValues());\n        }\n      } else {\n        this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n      }\n    }\n  }\n\n  private handleClickElsewhere(event: Event) {\n    if (this.currentlyDisplayedResults && !this.isMobileDevice() && this.search != event.target && this.searchResults != event.target && this.input != event.target) {\n      this.completelyDismissSearch();\n    }\n  }\n\n  private handleFacetSearchClear() {\n    this.input.value = '';\n    $$(this.clear).hide();\n    this.completelyDismissSearch();\n  }\n\n  private showOrHideClearElement(isEmpty: boolean) {\n    if (!isEmpty) {\n      $$(this.clear).show();\n    } else {\n      $$(this.clear).hide();\n      $$(this.search).removeClass('coveo-facet-search-no-results');\n    }\n  }\n\n  private handleKeyboardNavigation(event: KeyboardEvent, isEmpty: boolean) {\n    switch (event.which) {\n      case KEYBOARD.ENTER:\n        this.keyboardNavigationEnterPressed(event, isEmpty);\n        break;\n      case KEYBOARD.DELETE:\n        this.keyboardNavigationDeletePressed(event);\n        break;\n      case KEYBOARD.ESCAPE:\n        this.completelyDismissSearch();\n        break;\n      case KEYBOARD.DOWN_ARROW:\n        this.moveCurrentResultDown();\n        break;\n      case KEYBOARD.UP_ARROW:\n        this.moveCurrentResultUp();\n        break;\n      default:\n        this.moreValuesToFetch = true;\n        this.highlightCurrentQueryWithinSearchResults();\n        if (!isEmpty) {\n          this.lastSearchWasEmpty = false;\n          this.startNewSearchTimeout(this.buildParamsForNormalSearch());\n        } else if (!this.lastSearchWasEmpty) {\n          // This normally happen if a user delete the search box content to go back to \"empty\" state.\n          this.currentlyDisplayedResults = undefined;\n          $$(this.searchResults).empty();\n          this.lastSearchWasEmpty = true;\n          this.startNewSearchTimeout(this.buildParamsForFetchingMore());\n\n        }\n\n        break;\n    }\n  }\n\n  private keyboardNavigationEnterPressed(event: KeyboardEvent, isEmpty: boolean) {\n    if (event.shiftKey) {\n      this.triggerNewFacetSearch(this.buildParamsForNormalSearch());\n    } else {\n      if (this.searchResults.style.display != 'none') {\n        this.performSelectActionOnCurrentSearchResult();\n        this.completelyDismissSearch();\n      } else if ($$(this.search).is('.coveo-facet-search-no-results') && !isEmpty) {\n        this.selectAllValuesMatchingSearch();\n      }\n    }\n  }\n\n  private keyboardNavigationDeletePressed(event: KeyboardEvent) {\n    if (event.shiftKey) {\n      this.performExcludeActionOnCurrentSearchResult();\n      this.completelyDismissSearch();\n      this.input.value = '';\n    }\n  }\n\n  private startNewSearchTimeout(params: FacetSearchParameters) {\n    this.cancelAnyPendingSearchOperation();\n    this.facetSearchTimeout = setTimeout(() => {\n      let valueInInput = this.getValueInInputForFacetSearch();\n      if (valueInInput == '') {\n        if (params.searchEvenIfEmpty) {\n          this.triggerNewFacetSearch(params);\n        } else {\n          this.completelyDismissSearch();\n        }\n      } else {\n        this.triggerNewFacetSearch(params);\n      }\n    }, this.facet.options.facetSearchDelay);\n  }\n\n  private cancelAnyPendingSearchOperation() {\n    if (Utils.exists(this.facetSearchTimeout)) {\n      clearTimeout(this.facetSearchTimeout);\n      this.facetSearchTimeout = undefined;\n    }\n    if (Utils.exists(this.facetSearchPromise)) {\n      Promise.reject(this.facetSearchPromise).catch(() => {\n      });\n      this.facetSearchPromise = undefined;\n    }\n\n    this.hideFacetSearchWaitingAnimation();\n  }\n\n  private processNewFacetSearchResults(fieldValues: IIndexFieldValue[], facetSearchParameters: FacetSearchParameters) {\n    Assert.exists(fieldValues);\n    fieldValues = new FacetValuesOrder(this.facet, this.facet.facetSort).reorderValues(fieldValues);\n    if (fieldValues.length > 0) {\n      $$(this.search).removeClass('coveo-facet-search-no-results');\n      this.facet.fadeInactiveValuesInMainList(this.facet.options.facetSearchDelay);\n      this.rebuildSearchResults(fieldValues, facetSearchParameters);\n      if (!facetSearchParameters.fetchMore) {\n        this.showSearchResultsElement();\n      }\n      this.highlightCurrentQueryWithinSearchResults();\n      FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.facet, true);\n      this.makeFirstSearchResultTheCurrentOne();\n    } else {\n      if (facetSearchParameters.fetchMore) {\n        this.moreValuesToFetch = false;\n      } else {\n        this.hideSearchResultsElement();\n        $$(this.search).addClass('coveo-facet-search-no-results');\n      }\n    }\n  }\n\n  private rebuildSearchResults(fieldValues: IIndexFieldValue[], facetSearchParameters: FacetSearchParameters) {\n    Assert.exists(fieldValues);\n    if (!facetSearchParameters.fetchMore) {\n      $$(this.searchResults).empty();\n    }\n    let selectAll = document.createElement('li');\n    if (Utils.isNonEmptyString(facetSearchParameters.valueToSearch)) {\n      $$(selectAll).addClass(['coveo-facet-selectable', 'coveo-facet-search-selectable', 'coveo-facet-search-select-all']);\n      $$(selectAll).text(l('SelectAll'));\n      $$(selectAll).on('click', () => this.selectAllValuesMatchingSearch());\n      if (!this.isMobileDevice()) {\n        this.searchResults.appendChild(selectAll);\n      }\n    }\n    let facetValues = _.map(fieldValues, (fieldValue) => {\n      return FacetValue.create(fieldValue);\n    });\n    _.each(new this.facetSearchValuesListKlass(this.facet, FacetValueElement).build(facetValues), (listElement: HTMLElement) => {\n      this.searchResults.appendChild(listElement);\n    });\n    if (this.currentlyDisplayedResults) {\n      this.currentlyDisplayedResults = this.currentlyDisplayedResults.concat(_.pluck(facetValues, 'value'));\n    } else {\n      this.currentlyDisplayedResults = _.pluck(facetValues, 'value');\n    }\n\n    if (this.isMobileDevice()) {\n      let selectAllMobile = document.createElement('span');\n      $$(selectAllMobile).addClass('coveo-mobile-facet-search-select-all');\n      selectAll.appendChild(selectAllMobile);\n      this.searchResults.appendChild(selectAll);\n    }\n    _.each($$(this.searchResults).findAll('.coveo-facet-selectable'), (elem: HTMLElement) => {\n      $$(elem).addClass('coveo-facet-search-selectable');\n      this.setupFacetSearchResultsEvents(elem);\n    });\n\n    if (this.facet.searchInterface.isNewDesign()) {\n      $$(this.searchResults).on('scroll', () => this.handleFacetSearchResultsScroll());\n    }\n  }\n\n  private setupFacetSearchResultsEvents(elem: HTMLElement) {\n    $$(elem).on('mousemove', () => {\n      this.makeCurrentResult(elem);\n    });\n\n    // Prevent closing the search results on the end of a touch drag\n    let touchDragging = false;\n    let mouseDragging = false;\n    $$(elem).on('mousedown', () => mouseDragging = false);\n    $$(elem).on('mousemove', () => mouseDragging = true);\n    $$(elem).on('touchmove', () => touchDragging = true);\n\n    $$(elem).on('mouseup touchend', () => {\n      if (!touchDragging && !mouseDragging) {\n        setTimeout(() => {\n          this.completelyDismissSearch();\n        }, 0); // setTimeout is to give time to trigger the click event before hiding the search menu.\n      }\n      touchDragging = false;\n      mouseDragging = false;\n    });\n  }\n\n  private handleFacetSearchResultsScroll() {\n    if (this.facetSearchPromise || this.getValueInInputForFacetSearch() != '' || !this.moreValuesToFetch) {\n      return;\n    }\n\n    let elementHeight = this.searchResults.clientHeight;\n    let scrollHeight = this.searchResults.scrollHeight;\n    let bottomPosition = this.searchResults.scrollTop + elementHeight;\n    if ((scrollHeight - bottomPosition) < elementHeight / 2) {\n      this.triggerNewFacetSearch(this.buildParamsForFetchingMore());\n    }\n  }\n\n  private buildParamsForNormalSearch() {\n    let params = new FacetSearchParameters(this.facet);\n    params.setValueToSearch(this.getValueInInputForFacetSearch());\n    params.fetchMore = false;\n    return params;\n  }\n\n  private buildParamsForFetchingMore() {\n    let params = this.buildParamsForExcludingCurrentlyDisplayedValues();\n    params.fetchMore = true;\n    return params;\n  }\n\n  protected buildParamsForExcludingCurrentlyDisplayedValues() {\n    let params = new FacetSearchParameters(this.facet);\n    params.excludeCurrentlyDisplayedValuesInSearch(this.searchResults);\n    params.setValueToSearch(this.getValueInInputForFacetSearch());\n    return params;\n  }\n\n  private showSearchResultsElement() {\n    this.positionSearchResults();\n  }\n\n  private hideSearchResultsElement() {\n    this.searchResults.style.display = 'none';\n  }\n\n  private highlightCurrentQueryWithinSearchResults() {\n    let captions = $$(this.searchResults).findAll('.coveo-facet-value-caption');\n    _.each(captions, (captionElement: HTMLElement) => {\n      let search = this.getValueInInputForFacetSearch();\n      let regex = new RegExp('(' + StringUtils.wildcardsToRegex(search, this.facet.options.facetSearchIgnoreAccents) + ')', 'ig');\n\n      let text = $$(captionElement).text();\n      let highlighted = text.replace(regex, '<span class=\"coveo-highlight\">$1</span>');\n      captionElement.innerHTML = highlighted;\n    });\n  }\n\n  private makeFirstSearchResultTheCurrentOne() {\n    this.makeCurrentResult(this.getSelectables()[0]);\n  }\n\n  private makeCurrentResult(result: HTMLElement) {\n    _.each(this.getSelectables(), (selectable: HTMLElement) => {\n      $$(selectable).removeClass('coveo-current');\n    });\n    $$(result).addClass('coveo-current');\n  }\n\n  private moveCurrentResultDown() {\n    let current = $$(this.searchResults).find('.coveo-current');\n    _.each(this.getSelectables(), (selectable: HTMLElement) => {\n      $$(selectable).removeClass('coveo-current');\n    });\n    let allSelectables = this.getSelectables();\n    let idx = _.indexOf(allSelectables, current);\n    let target: Dom;\n    if (idx < allSelectables.length - 1) {\n      target = $$(allSelectables[idx + 1]);\n    } else {\n      target = $$(allSelectables[0]);\n    }\n    this.highlightAndShowCurrentResultWithKeyboard(target);\n  }\n\n  private moveCurrentResultUp() {\n    let current = $$(this.searchResults).find('.coveo-current');\n    _.each($$(this.searchResults).findAll('.coveo-facet-selectable'), (s) => {\n      $$(s).removeClass('coveo-current');\n    });\n\n    let allSelectables = this.getSelectables();\n    let idx = _.indexOf(allSelectables, current);\n    let target: Dom;\n    if (idx > 0) {\n      target = $$(allSelectables[idx - 1]);\n    } else {\n      target = $$(allSelectables[allSelectables.length - 1]);\n    }\n    this.highlightAndShowCurrentResultWithKeyboard(target);\n  }\n\n  private highlightAndShowCurrentResultWithKeyboard(target: Dom) {\n    target.addClass('coveo-current');\n    this.searchResults.scrollTop = target.el.offsetTop;\n  }\n\n  private getSelectables(target = this.searchResults) {\n    return $$(target).findAll('.coveo-facet-selectable');\n  }\n\n  private performSelectActionOnCurrentSearchResult() {\n    let current = $$(this.searchResults).find('.coveo-current');\n    Assert.check(current != undefined);\n\n    let checkbox = <HTMLInputElement>$$(current).find('input[type=\"checkbox\"]');\n    if (checkbox != undefined) {\n      checkbox.checked = true;\n      $$(checkbox).trigger('change');\n    } else {\n      current.click();\n    }\n  }\n\n  private performExcludeActionOnCurrentSearchResult() {\n    let current = $$(this.searchResults).find('.coveo-current');\n    Assert.check(current != null);\n    let valueCaption = $$(current).find('.coveo-facet-value-caption');\n    let valueElement = this.facet.facetValuesList.get($$(valueCaption).text());\n\n    valueElement.toggleExcludeWithUA();\n  }\n\n  public getValueInInputForFacetSearch() {\n    return this.input.value.trim();\n  }\n\n  protected selectAllValuesMatchingSearch() {\n    this.facet.showWaitingAnimation();\n\n    let searchParameters = new FacetSearchParameters(this.facet);\n    searchParameters.nbResults = 1000;\n    searchParameters.setValueToSearch(this.getValueInInputForFacetSearch());\n    this.facet.facetQueryController.search(searchParameters).then((fieldValues: IIndexFieldValue[]) => {\n      this.completelyDismissSearch();\n      ModalBox.close(true);\n      let facetValues = _.map(fieldValues, (fieldValue) => {\n        let facetValue = this.facet.values.get(fieldValue.value);\n        if (!Utils.exists(facetValue)) {\n          facetValue = FacetValue.create(fieldValue);\n        }\n        facetValue.selected = true;\n        facetValue.excluded = false;\n        return facetValue;\n      });\n      this.facet.processFacetSearchAllResultsSelected(facetValues);\n    });\n    this.completelyDismissSearch();\n  }\n\n  private showFacetSearchWaitingAnimation() {\n    $$(this.magnifier).hide();\n    $$(this.wait).show();\n    this.showingFacetSearchWaitAnimation = true;\n  }\n\n  private hideFacetSearchWaitingAnimation() {\n    $$(this.magnifier).show();\n    $$(this.wait).hide();\n    this.showingFacetSearchWaitAnimation = false;\n  }\n\n  private detectSearchBarAnimation() {\n    EventsUtils.addPrefixedEvent(this.search, 'AnimationStart', (event) => {\n      if (event.animationName == 'grow') {\n        this.searchBarIsAnimating = true;\n      }\n    });\n\n    EventsUtils.addPrefixedEvent(this.search, 'AnimationEnd', (event) => {\n      if (event.animationName == 'grow') {\n        this.searchBarIsAnimating = false;\n      }\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetSearch.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { $$ } from '../../utils/Dom';\nimport { ValueElement } from './ValueElement';\n\n\nexport interface IFacetValueElementKlass {\n  new (facet: Facet, facetValue: FacetValue, displayNextTime?: boolean): FacetValueElement;\n}\n\nexport class FacetValueElement extends ValueElement {\n  private firstQuery = true;\n\n  constructor(public facet: Facet, public facetValue: FacetValue, public keepDisplayedValueNextTime: boolean) {\n    super(facet, facetValue);\n    // The analytics code expect a first query to be made to link the user action with a query UID\n    $$(facet.root).one(QueryEvents.querySuccess, () => {\n      this.firstQuery = false;\n    });\n  }\n\n  public bindEvent() {\n    super.bindEvent({ displayNextTime: this.keepDisplayedValueNextTime, pinFacet: this.facet.options.preservePosition });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetValueElement.ts\n **/","/// <reference path=\"Facet.ts\" />\nimport { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { IPopulateOmniboxObject } from '../Omnibox/OmniboxInterface';\nimport { ValueElementRenderer } from './ValueElementRenderer';\nimport { Utils } from '../../utils/Utils';\nimport { IAnalyticsActionCause, analyticsActionCauseList, IAnalyticsFacetMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { $$ } from '../../utils/Dom';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { Defer } from '../../misc/Defer';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\n\nexport interface IValueElementKlass {\n  new (facet: Facet, facetValue: FacetValue): ValueElement;\n}\n\nexport interface IValueElementEventsBinding {\n  displayNextTime: boolean;\n  pinFacet: boolean;\n  omniboxObject?: IPopulateOmniboxObject;\n}\n\nexport class ValueElement {\n  public renderer: ValueElementRenderer;\n  private isOmnibox: boolean;\n\n  constructor(public facet: Facet, public facetValue: FacetValue, public onSelect?: (elem: ValueElement, cause: IAnalyticsActionCause) => void, public onExclude?: (elem: ValueElement, cause: IAnalyticsActionCause) => void) {\n  }\n\n  public build(): ValueElement {\n    this.renderer = new ValueElementRenderer(this.facet, this.facetValue).build();\n    this.bindEvent({ displayNextTime: true, pinFacet: this.facet.options.preservePosition });\n    return this;\n  }\n\n  public bindEvent(eventBindings: IValueElementEventsBinding) {\n    if (!Utils.isNullOrUndefined(eventBindings.omniboxObject)) {\n      this.isOmnibox = true;\n    } else {\n      this.isOmnibox = false;\n    }\n    this.handleEventForCheckboxChange(eventBindings);\n    if (this.facetValue.excluded) {\n      this.handleEventForExcludedValueElement(eventBindings);\n    } else {\n      this.handleEventForValueElement(eventBindings);\n    }\n  }\n\n  public select() {\n    this.facetValue.selected = true;\n    this.facetValue.excluded = false;\n    this.renderer.setCssClassOnListValueElement();\n  }\n\n  public unselect() {\n    this.facetValue.selected = false;\n    this.facetValue.excluded = false;\n    this.renderer.setCssClassOnListValueElement();\n  }\n\n  public exclude() {\n    this.facetValue.selected = false;\n    this.facetValue.excluded = true;\n    this.renderer.setCssClassOnListValueElement();\n  }\n\n  public unexclude() {\n    this.facetValue.selected = false;\n    this.facetValue.excluded = false;\n    this.renderer.setCssClassOnListValueElement();\n  }\n\n  public toggleExcludeWithUA() {\n    let actionCause: IAnalyticsActionCause;\n    if (this.facetValue.excluded) {\n      actionCause = this.isOmnibox ? analyticsActionCauseList.omniboxFacetUnexclude : analyticsActionCauseList.facetUnexclude;\n    } else {\n      actionCause = this.isOmnibox ? analyticsActionCauseList.omniboxFacetExclude : analyticsActionCauseList.facetExclude;\n    }\n\n    this.facet.toggleExcludeValue(this.facetValue);\n\n    if (this.onExclude) {\n      this.facet.triggerNewQuery(() => this.onExclude(this, actionCause));\n    } else {\n      this.facet.triggerNewQuery(() => this.facet.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(actionCause, this.getAnalyticsFacetMeta()));\n    }\n  }\n\n  protected handleSelectValue(eventBindings: IValueElementEventsBinding) {\n    this.facet.keepDisplayedValuesNextTime = eventBindings.displayNextTime && !this.facet.options.useAnd;\n    var actionCause: IAnalyticsActionCause;\n    if (this.facetValue.excluded) {\n      actionCause = this.isOmnibox ? analyticsActionCauseList.omniboxFacetUnexclude : analyticsActionCauseList.facetUnexclude;\n      this.facet.unexcludeValue(this.facetValue);\n    } else {\n      if (this.facetValue.selected) {\n        actionCause = this.isOmnibox ? analyticsActionCauseList.omniboxFacetDeselect : analyticsActionCauseList.facetDeselect;\n      } else {\n        actionCause = this.isOmnibox ? analyticsActionCauseList.omniboxFacetSelect : analyticsActionCauseList.facetSelect;\n      }\n      this.facet.toggleSelectValue(this.facetValue);\n    }\n    if (this.onSelect) {\n      this.facet.triggerNewQuery(() => this.onSelect(this, actionCause));\n    } else {\n      this.facet.triggerNewQuery(() => this.facet.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(actionCause, this.getAnalyticsFacetMeta()));\n    }\n  }\n\n  protected handleExcludeClick(eventBindings: IValueElementEventsBinding) {\n    this.facet.keepDisplayedValuesNextTime = eventBindings.displayNextTime && !this.facet.options.useAnd;\n    this.toggleExcludeWithUA();\n  }\n\n  protected handleEventForExcludedValueElement(eventBindings: IValueElementEventsBinding) {\n    let clickEvent = (event: Event) => {\n      if (eventBindings.pinFacet) {\n        this.facet.pinFacetPosition();\n      }\n      if (eventBindings.omniboxObject) {\n        this.omniboxCloseEvent(eventBindings.omniboxObject);\n      }\n      this.handleSelectValue(eventBindings);\n      return false;\n    };\n\n    $$(this.renderer.label).on('click', e => {\n      e.stopPropagation();\n      clickEvent(e);\n    });\n\n    $$(this.renderer.stylishCheckbox).on('keydown', KeyboardUtils.keypressAction([\n      KEYBOARD.SPACEBAR,\n      KEYBOARD.ENTER\n    ], clickEvent));\n  }\n\n  protected handleEventForValueElement(eventBindings: IValueElementEventsBinding) {\n    let excludeAction = (event: Event) => {\n      if (eventBindings.omniboxObject) {\n        this.omniboxCloseEvent(eventBindings.omniboxObject);\n      }\n\n      this.handleExcludeClick(eventBindings);\n\n      if (this.facet && this.facet.facetSearch && this.facet.facetSearch.completelyDismissSearch) {\n        this.facet.facetSearch.completelyDismissSearch();\n      }\n      event.stopPropagation();\n      event.preventDefault();\n    };\n    $$(this.renderer.excludeIcon).on('click', excludeAction);\n\n    $$(this.renderer.excludeIcon).on('keydown', KeyboardUtils.keypressAction([\n      KEYBOARD.SPACEBAR,\n      KEYBOARD.ENTER\n    ], excludeAction));\n\n    let selectAction = (event: Event) => {\n      if (eventBindings.pinFacet) {\n        this.facet.pinFacetPosition();\n      }\n\n      $$(this.renderer.checkbox).trigger('change');\n      event.preventDefault();\n    };\n\n    $$(this.renderer.label).on('click', selectAction);\n\n    $$(this.renderer.stylishCheckbox).on('keydown', KeyboardUtils.keypressAction([\n      KEYBOARD.SPACEBAR,\n      KEYBOARD.ENTER\n    ], selectAction));\n  }\n\n  protected handleEventForCheckboxChange(eventBindings: IValueElementEventsBinding) {\n    $$(this.renderer.checkbox).on('change', () => {\n      if (eventBindings.omniboxObject) {\n        this.omniboxCloseEvent(eventBindings.omniboxObject);\n      }\n\n      this.handleSelectValue(eventBindings);\n      if (DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign() && this.facet.options.enableFacetSearch) {\n        Defer.defer(() => {\n          ModalBox.close(true);\n          this.facet.facetSearch.completelyDismissSearch();\n        });\n      }\n    });\n  }\n\n  protected omniboxCloseEvent(eventArg: IPopulateOmniboxObject) {\n    eventArg.closeOmnibox();\n    eventArg.clear();\n  }\n\n  private getAnalyticsFacetMeta(): IAnalyticsFacetMeta {\n    return {\n      facetId: this.facet.options.id,\n      facetValue: this.facetValue.value,\n      facetTitle: this.facet.options.title\n    };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/ValueElement.ts\n **/","import { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { l } from '../../strings/Strings';\nimport { Component } from '../Base/Component';\nimport _ = require('underscore');\n\nexport class ValueElementRenderer {\n  public listItem: HTMLElement;\n  public label: HTMLElement;\n  public checkbox: HTMLElement;\n  public stylishCheckbox: HTMLElement;\n  public valueCaption: HTMLElement;\n  public valueCount: HTMLElement;\n  public icon: HTMLElement;\n  public excludeIcon: HTMLElement;\n  public computedField: HTMLElement;\n\n  constructor(public facet: Facet, public facetValue: FacetValue) {\n  }\n\n  public withNo(element: HTMLElement[]): ValueElementRenderer;\n  public withNo(element: HTMLElement): ValueElementRenderer;\n  public withNo(element: any): ValueElementRenderer {\n    if (_.isArray(element)) {\n      _.each(element, (e: HTMLElement) => {\n        if (e) {\n          $$(e).detach();\n        }\n      });\n    } else {\n      if (element) {\n        $$(element).detach();\n      }\n    }\n    return this;\n  }\n\n  public build(): ValueElementRenderer {\n    this.listItem = $$('li', {\n      className: 'coveo-facet-value coveo-facet-selectable'\n    }).el;\n    this.listItem.setAttribute('data-value', this.facetValue.value);\n    if (!this.facet.searchInterface.isNewDesign()) {\n      this.excludeIcon = this.buildExcludeIcon();\n      this.listItem.appendChild(this.excludeIcon);\n    }\n    this.label = $$('label', {\n      className: 'coveo-facet-value-label'\n    }).el;\n    this.listItem.appendChild(this.label);\n\n    if (this.facet.searchInterface.isNewDesign()) {\n      this.excludeIcon = this.buildExcludeIcon();\n      this.listItem.appendChild(this.excludeIcon);\n\n      $$(this.excludeIcon).on('mouseover', () => {\n        $$(this.listItem).addClass('coveo-facet-value-will-exclude');\n      });\n\n      $$(this.excludeIcon).on('mouseout', () => {\n        $$(this.listItem).removeClass('coveo-facet-value-will-exclude');\n      });\n    }\n    if (Utils.exists(this.facetValue.computedField)) {\n      this.computedField = this.buildValueComputedField();\n      if (this.computedField) {\n        this.label.appendChild(this.computedField);\n      }\n      $$(this.label).addClass('coveo-with-computed-field');\n    }\n    var labelDiv = $$('div', {\n      className: 'coveo-facet-value-label-wrapper'\n    }).el;\n    this.label.appendChild(labelDiv);\n    this.checkbox = this.buildValueCheckbox();\n    labelDiv.appendChild(this.checkbox);\n\n    this.stylishCheckbox = this.buildValueStylishCheckbox();\n    labelDiv.appendChild(this.stylishCheckbox);\n\n    if (this.facet.options.showIcon && !this.facet.searchInterface.isNewDesign()) {\n      this.icon = this.buildValueIcon();\n      labelDiv.appendChild(this.icon);\n    }\n    if (this.facet.searchInterface.isNewDesign()) {\n      this.valueCount = this.buildValueCount();\n      if (this.valueCount) {\n        labelDiv.appendChild(this.valueCount);\n      }\n      this.valueCaption = this.buildValueCaption();\n      labelDiv.appendChild(this.valueCaption);\n    } else {\n      this.valueCaption = this.buildValueCaption();\n      labelDiv.appendChild(this.valueCaption);\n      this.valueCount = this.buildValueCount();\n      if (this.valueCount) {\n        labelDiv.appendChild(this.valueCount);\n      }\n    }\n\n    this.setCssClassOnListValueElement();\n    return this;\n  }\n\n  public setCssClassOnListValueElement(): void {\n    $$(this.listItem).toggleClass('coveo-selected', this.facetValue.selected);\n    $$(this.listItem).toggleClass('coveo-excluded', this.facetValue.excluded);\n  }\n\n  protected buildExcludeIcon(): HTMLElement {\n    let excludeIcon = $$('div', {\n      title: l('Exclude', this.facet.getValueCaption(this.facetValue)),\n      className: 'coveo-facet-value-exclude',\n      tabindex: 0\n    }).el;\n    this.addFocusAndBlurEventListeners(excludeIcon);\n\n    if (this.facet.searchInterface.isNewDesign()) {\n      excludeIcon.appendChild($$('span', {\n        className: 'coveo-icon'\n      }).el);\n    }\n    if (Utils.exists(this.facetValue.computedField)) {\n      $$(excludeIcon).addClass('coveo-facet-value-exclude-with-computed-field');\n    }\n    return excludeIcon;\n  }\n\n  protected buildValueComputedField(): HTMLElement {\n    var computedField = this.facetValue.getFormattedComputedField(this.facet.options.computedFieldFormat);\n    if (Utils.isNonEmptyString(computedField)) {\n      var elem = $$('span', {\n        className: 'coveo-facet-value-computed-field'\n      }).el;\n      $$(elem).text(computedField);\n      return elem;\n    } else {\n      return undefined;\n    }\n  }\n\n  protected buildValueCheckbox(): HTMLElement {\n    var checkbox = $$('input', {\n      type: 'checkbox'\n    }).el;\n    if (this.facetValue.selected) {\n      checkbox.setAttribute('checked', 'checked');\n    } else {\n      checkbox.removeAttribute('checked');\n    }\n    if (this.facetValue.excluded) {\n      checkbox.setAttribute('disabled', 'disabled');\n    } else {\n      checkbox.removeAttribute('disabled');\n    }\n    Component.pointElementsToDummyForm(checkbox);\n    return checkbox;\n  }\n\n  protected buildValueStylishCheckbox(): HTMLElement {\n    let checkbox = $$('div', {\n      className: 'coveo-facet-value-checkbox',\n      tabindex: 0\n    }, $$('span')).el;\n    this.addFocusAndBlurEventListeners(checkbox);\n    return checkbox;\n  }\n\n  protected buildValueIcon(): HTMLElement {\n    var icon = this.getValueIcon();\n    if (Utils.exists(icon)) {\n      return $$('img', {\n        className: 'coveo-facet-value-icon coveo-icon',\n        src: this.getValueIcon()\n      }).el;\n    } else {\n      return this.buildValueIconFromSprite();\n    }\n  }\n\n  protected getValueIcon(): string {\n    if (Utils.exists(this.facet.options.valueIcon)) {\n      return this.facet.options.valueIcon(this.facetValue);\n    } else {\n      return undefined;\n    }\n  }\n\n  protected buildValueIconFromSprite(): HTMLElement {\n    return $$('div', {\n      className: 'coveo-facet-value-icon coveo-icon ' + this.facet.options.field.substr(1) + ' ' + this.facetValue.value\n    }).el;\n  }\n\n  protected buildValueCaption(): HTMLElement {\n    var caption = this.facet.getValueCaption(this.facetValue);\n    var valueCaption = $$('span', {\n      className: 'coveo-facet-value-caption',\n      title: caption\n    }).el;\n\n    $$(valueCaption).text(caption);\n    return valueCaption;\n  }\n\n  protected buildValueCount(): HTMLElement {\n    var count = this.facetValue.getFormattedCount();\n    if (Utils.isNonEmptyString(count)) {\n      var countElement = $$('span', {\n        className: 'coveo-facet-value-count'\n      }).el;\n      $$(countElement).text(count);\n      return countElement;\n    } else {\n      return undefined;\n    }\n  }\n\n  private addFocusAndBlurEventListeners(elem: HTMLElement) {\n    $$(elem).on('focus', () => $$(this.listItem).addClass('coveo-focused'));\n    $$(elem).on('blur', () => $$(this.listItem).removeClass('coveo-focused'));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/ValueElementRenderer.ts\n **/","import { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { FacetSort } from './FacetSort';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport _ = require('underscore');\n\nexport class FacetValuesOrder {\n  constructor(public facet: Facet, public facetSort: FacetSort) {\n\n  }\n\n  public reorderValues(facetValues: IIndexFieldValue[]): IIndexFieldValue[];\n  public reorderValues(facetValues: FacetValue[]): FacetValue[];\n  public reorderValues(facetValues: any[]): FacetValue[] | IIndexFieldValue[] {\n    if (this.facetSort && this.facetSort.activeSort) {\n      if (this.facetSort.activeSort.name == 'custom' && this.facet.options.customSort != undefined) {\n        return this.reorderValuesWithCustomOrder(facetValues);\n      } else if (this.facetSort.activeSort.name.indexOf('alpha') != -1) {\n        return this.reorderValuesWithCustomCaption(facetValues);\n      }\n    }\n    return facetValues;\n  }\n\n  private reorderValuesWithCustomOrder(facetValues: FacetValue[]) {\n    let customSortsLowercase = _.map(this.facet.options.customSort, (customSort) => customSort.toLowerCase());\n    let valueIndexPair = _.map(facetValues, (facetValue, i) => {\n      // Get the index of the current value in the custom sort array.\n      // If it's not found, put it's index to it's original value + the length of customSort so that's always after the specified custom sort order.\n      let index = _.findIndex(customSortsLowercase, (customSort) => {\n        return StringUtils.equalsCaseInsensitive(<string>customSort, facetValue.value) || (facetValue.lookupValue != null && StringUtils.equalsCaseInsensitive(<string>customSort, facetValue.lookupValue));\n      });\n      if (index == -1) {\n        index = i + customSortsLowercase.length;\n      }\n      return { facetValue: facetValue, index: index };\n    });\n    let sorted = _.sortBy(valueIndexPair, 'index');\n    sorted = this.facetSort.customSortDirection == 'ascending' ? sorted : sorted.reverse();\n    return _.pluck(sorted, 'facetValue');\n  }\n\n  private reorderValuesWithCustomCaption(facetValues: FacetValue[]) {\n    let sorted = _.sortBy(facetValues, (facetValue: FacetValue) => {\n      return this.facet.getValueCaption(facetValue).toLowerCase();\n    });\n    if (this.facetSort.activeSort.name.indexOf('descending') != -1) {\n      sorted = sorted.reverse();\n    }\n    return sorted;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetValuesOrder.ts\n **/","import { Facet } from './Facet';\nimport { FacetSort } from './FacetSort';\nimport { $$ } from '../../utils/Dom';\nimport { LocalStorageUtils } from '../../utils/LocalStorageUtils';\nimport { IFacetSortDescription } from './FacetSort';\nimport { Utils } from '../../utils/Utils';\nimport { l } from '../../strings/Strings';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { IAnalyticsFacetMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { PopupUtils, HorizontalAlignment, VerticalAlignment } from '../../utils/PopupUtils';\nimport _ = require('underscore');\n\nexport interface IFacetSettingsKlass {\n  new (sorts: string[], facet: Facet): FacetSettings;\n}\n\nexport interface IFacetState {\n  included: string[];\n  excluded: string[];\n  operator: string;\n}\n\n/**\n * Handle the rendering of the {@link Facet} settings menu (typically the ... in the facet header).\n */\nexport class FacetSettings extends FacetSort {\n  public loadedFromSettings: { [attribute: string]: any };\n\n  private facetStateLocalStorage: LocalStorageUtils<IFacetState>;\n  private includedStateAttribute: string;\n  private excludedStateAttribute: string;\n  private operatorStateAttribute: string;\n\n  private settingsPopup: HTMLElement;\n  private settingsIcon: HTMLElement;\n  private settingsButton: HTMLElement;\n  private directionSection: HTMLElement[];\n  private saveStateSection: HTMLElement;\n  private clearStateSection: HTMLElement;\n  private hideSection: HTMLElement;\n  private showSection: HTMLElement;\n  private sortSection: { element: HTMLElement; sortItems: HTMLElement[] };\n  private customSortDirectionChange = false;\n\n  private enabledSortsIgnoreRenderBecauseOfPairs: IFacetSortDescription[] = [];\n\n  constructor(public sorts: string[], public facet: Facet) {\n    super(sorts, facet);\n    this.filterDuplicateForRendering();\n  }\n\n  /**\n   * Build the menu, hook click events.\n   * @returns {HTMLElement}\n   */\n  public build() {\n    this.settingsButton = $$('div', {\n      className: 'coveo-facet-header-settings',\n      title: l('Settings'),\n    }).el;\n\n    this.settingsIcon = $$('span', { className: 'coveo-icon' }).el;\n\n    this.settingsButton.appendChild(this.settingsIcon);\n\n    this.settingsPopup = $$('div', { className: 'coveo-facet-settings-popup' }).el;\n\n    if (Utils.isNonEmptyArray(this.enabledSorts)) {\n      this.sortSection = this.buildSortSection();\n\n      if (this.enabledSortsAllowDirection()) {\n        this.directionSection = this.buildDirectionSection();\n      }\n    }\n    if (this.facet.options.enableSettingsFacetState) {\n      this.saveStateSection = this.buildSaveStateSection();\n      this.clearStateSection = this.buildClearStateSection();\n    }\n    if (this.facet.options.enableCollapse) {\n      this.hideSection = this.buildHideSection();\n      this.showSection = this.buildShowSection();\n    }\n\n    var appendCommon = () => {\n      this.appendIfNotUndefined(this.saveStateSection);\n      this.appendIfNotUndefined(this.clearStateSection);\n      this.appendIfNotUndefined(this.hideSection);\n      this.appendIfNotUndefined(this.showSection);\n    };\n\n    this.handleMouseEventOnButton(this.sortSection);\n    if (Utils.isNonEmptyArray(this.enabledSorts)) {\n      this.settingsPopup.appendChild(this.sortSection.element);\n      _.each(this.directionSection, (d) => {\n        this.appendIfNotUndefined(d);\n      });\n      appendCommon();\n    } else {\n      appendCommon();\n    }\n    return this.settingsButton;\n  }\n\n  /**\n   * Restore the facet state from local storage, and apply it in the query state model.\n   */\n  public loadSavedState() {\n    if (this.facetStateLocalStorage) {\n      // set the state from the settings only if there is nothing\n      // in the query state model for the current facet\n      var state = this.facetStateLocalStorage.load();\n      var currentStateIncluded = this.facet.queryStateModel.get(this.includedStateAttribute);\n      var currentStateExcluded = this.facet.queryStateModel.get(this.excludedStateAttribute);\n      var currentStateOperator = this.facet.queryStateModel.get(this.operatorStateAttribute);\n      if (!Utils.isNullOrUndefined(state)\n        && Utils.isEmptyArray(currentStateIncluded)\n        && Utils.isEmptyArray(currentStateExcluded)\n        && !Utils.isNonEmptyString(currentStateOperator)) {\n        var toSet: { [key: string]: any } = {};\n        toSet[this.includedStateAttribute] = state.included;\n        toSet[this.excludedStateAttribute] = state.excluded;\n        toSet[this.operatorStateAttribute] = state.operator;\n        this.facet.queryStateModel.setMultiple(toSet);\n        this.loadedFromSettings = toSet;\n      }\n    } else {\n      this.facet.logger.info('Facet state local storage not enabled : See Facet.options.enableSettingsFacetState');\n    }\n  }\n\n  /**\n   * Take the current state of the facet and save it in the local storage.\n   */\n  public saveState() {\n    if (this.facetStateLocalStorage) {\n      this.facetStateLocalStorage.save({\n        included: this.facet.queryStateModel.get(this.includedStateAttribute),\n        excluded: this.facet.queryStateModel.get(this.excludedStateAttribute),\n        operator: this.facet.queryStateModel.get(this.operatorStateAttribute),\n      });\n    } else {\n      this.facet.logger.info('Facet state local storage not enabled : See Facet.options.enableSettingsFacetState');\n    }\n\n  }\n\n  /**\n   * Close the settings menu\n   */\n  public close() {\n    $$(this.settingsPopup).detach();\n  }\n\n  /**\n   * Open the settings menu\n   */\n  public open() {\n    PopupUtils.positionPopup(\n      this.settingsPopup,\n      this.settingsButton,\n      this.facet.root,\n      this.getPopupAlignment(), this.facet.root);\n\n    if (this.hideSection && this.showSection) {\n      $$(this.hideSection).toggle(!$$(this.facet.element).hasClass('coveo-facet-collapsed'));\n      $$(this.showSection).toggle($$(this.facet.element).hasClass('coveo-facet-collapsed'));\n    }\n\n    if (this.facet.options.enableSettingsFacetState) {\n      $$(this.clearStateSection).toggle(!Utils.isNullOrUndefined(this.facetStateLocalStorage.load()));\n    }\n    _.each(this.enabledSorts, (criteria: IFacetSortDescription, i) => {\n      if (!Utils.isNullOrUndefined(this.sortSection.sortItems[i])) {\n        if (this.activeSort.name == criteria.name.toLowerCase() || this.activeSort.relatedSort == criteria.name.toLowerCase()) {\n          this.selectItem(this.sortSection.sortItems[i]);\n        } else {\n          this.unselectItem(this.sortSection.sortItems[i]);\n        }\n      }\n    });\n  }\n\n  private buildSortSection() {\n    var sortSection = this.buildSection('coveo-facet-settings-section-sort');\n    var sortSectionIcon = this.buildIcon();\n    var sortSectionItems = this.buildItems();\n    if (this.facet.searchInterface.isNewDesign()) {\n      var sortTitle = document.createElement('div');\n      $$(sortTitle).addClass('coveo-facet-settings-section-sort-title');\n      $$(sortTitle).text(l('SortBy') + ' :');\n      sortSectionItems.appendChild(sortTitle);\n    }\n    var sortItems = this.buildSortSectionItems();\n    _.each(sortItems, (s) => {\n      sortSectionItems.appendChild(s);\n    });\n    sortSection.appendChild(sortSectionIcon);\n    sortSection.appendChild(sortSectionItems);\n    return { element: sortSection, sortItems: sortItems };\n  }\n\n  private buildSortSectionItems() {\n    var elems = _.map(this.enabledSorts, (enabledSort) => {\n      if (_.contains(this.enabledSortsIgnoreRenderBecauseOfPairs, enabledSort)) {\n        return undefined;\n      } else {\n        var elem = this.buildItem(l(enabledSort.label), enabledSort.description);\n        $$(elem).on('click', (e: Event) => this.handleClickSortButton(e, enabledSort));\n        return elem;\n      }\n    });\n    elems = _.compact(elems);\n    return elems;\n  }\n\n  private closePopupAndUpdateSort() {\n    this.close();\n    if (this.activeSort.name != 'custom') {\n      this.facet.updateSort(this.activeSort.name);\n    } else {\n      this.facet.updateSort('nosort');\n      if (this.customSortDirectionChange) {\n        this.customSortDirectionChange = false;\n        this.facet.queryController.executeQuery();\n      }\n    }\n  }\n\n  private enabledSortsAllowDirection() {\n    return _.some(this.enabledSorts, (facetSortDescription: IFacetSortDescription) => {\n      return facetSortDescription.directionToggle;\n    });\n  }\n\n\n  private buildDirectionSection() {\n    if (this.facet.searchInterface.isNewDesign()) {\n      var directionAscendingSection = this.buildAscendingOrDescendingSection('Ascending');\n      var iconAscending = this.buildIcon();\n      var iconDescending = this.buildIcon();\n      var directionItemsAscending = this.buildItems();\n      var ascending = this.buildAscendingOrDescending('Ascending');\n\n      directionItemsAscending.appendChild(ascending);\n      directionAscendingSection.appendChild(iconAscending);\n      directionAscendingSection.appendChild(directionItemsAscending);\n      $$(directionAscendingSection).on('click', (e: Event) => this.handleDirectionClick(e, 'ascending'));\n\n      var directionDescendingSection = this.buildAscendingOrDescendingSection('Descending');\n      var directionItemsDescending = this.buildItems();\n      var descending = this.buildAscendingOrDescending('Descending');\n\n      directionItemsDescending.appendChild(descending);\n      directionDescendingSection.appendChild(iconDescending);\n      directionDescendingSection.appendChild(directionItemsDescending);\n      $$(directionDescendingSection).on('click', (e: Event) => this.handleDirectionClick(e, 'descending'));\n\n      if (!this.activeSort.directionToggle) {\n        $$(directionAscendingSection).addClass('coveo-facet-settings-disabled');\n        $$(directionDescendingSection).addClass('coveo-facet-settings-disabled');\n      } else {\n        this.selectItem(this.getItems(directionAscendingSection)[0]);\n      }\n      return [directionAscendingSection, directionDescendingSection];\n\n    } else {\n      var directionSection = this.buildSection('coveo-facet-settings-section-direction');\n      var icon = this.buildIcon();\n\n      var directionItems = this.buildItems();\n      var ascending = this.buildAscendingOrDescending('Ascending');\n      $$(ascending).on('click', (e: Event) => this.handleDirectionClick(e, 'ascending'));\n\n      var descending = this.buildAscendingOrDescending('Descending');\n      $$(descending).on('click', (e: Event) => this.handleDirectionClick(e, 'descending'));\n\n      directionItems.appendChild(ascending);\n      directionItems.appendChild(descending);\n      directionSection.appendChild(icon);\n      directionSection.appendChild(directionItems);\n\n      if (!this.activeSort.directionToggle) {\n        $$(directionSection).addClass('coveo-facet-settings-disabled');\n      } else {\n        this.selectItem(this.getCurrentDirectionItem([directionSection]));\n      }\n      return [directionSection];\n    }\n  }\n\n  private buildSaveStateSection() {\n    var saveStateSection = this.buildSection('coveo-facet-settings-section-save-state');\n    var icon = this.buildIcon();\n    var saveStateItems = this.buildItems();\n\n    this.facetStateLocalStorage = new LocalStorageUtils<IFacetState>('facet-state-' + this.facet.options.id);\n    this.includedStateAttribute = QueryStateModel.getFacetId(this.facet.options.id);\n    this.excludedStateAttribute = QueryStateModel.getFacetId(this.facet.options.id, false);\n    this.operatorStateAttribute = QueryStateModel.getFacetOperator(this.facet.options.id);\n\n    var saveStateItem = document.createElement('div');\n    $$(saveStateItem).addClass('coveo-facet-settings-item');\n    saveStateItem.setAttribute('title', _.escape(l('SaveFacetState')));\n    $$(saveStateItem).text(_.escape(l('SaveFacetState')));\n    saveStateItems.appendChild(saveStateItem);\n\n    saveStateSection.appendChild(icon);\n    saveStateSection.appendChild(saveStateItems);\n    $$(saveStateSection).on('click', (e: Event) => this.handleSaveStateClick());\n    return saveStateSection;\n  }\n\n  private buildClearStateSection() {\n    var clearStateSection = this.buildSection('coveo-facet-settings-section-clear-state');\n    var icon = this.buildIcon();\n    var clearStateItems = this.buildItems();\n    var clearStateItem = this.buildItem(l('ClearFacetState'));\n    clearStateItems.appendChild(clearStateItem);\n    clearStateSection.appendChild(icon);\n    clearStateSection.appendChild(clearStateItems);\n    $$(clearStateSection).on('click', (e: Event) => this.handleClearStateClick());\n    return clearStateSection;\n  }\n\n  private buildHideSection() {\n    var hideSection = this.buildSection('coveo-facet-settings-section-hide');\n    var icon = this.buildIcon();\n    var hideItems = this.buildItems();\n    var hideItem = this.buildItem(l('Collapse'));\n    hideItems.appendChild(hideItem);\n\n    hideSection.appendChild(icon);\n    hideSection.appendChild(hideItems);\n    $$(hideSection).on('click', (e: Event) => {\n      this.facet.facetHeader.collapseFacet();\n      this.close();\n    });\n    return hideSection;\n  }\n\n  private buildShowSection() {\n    var showSection = this.buildSection('coveo-facet-settings-section-show');\n    var icon = this.buildIcon();\n    var showItems = this.buildItems();\n    var showItem = this.buildItem(l('Expand'));\n    showItems.appendChild(showItem);\n\n    showSection.appendChild(icon);\n    showSection.appendChild(showItems);\n    $$(showSection).on('click', (e: Event) => {\n      this.facet.facetHeader.expandFacet();\n      this.close();\n    });\n    return showSection;\n  }\n\n  private buildIcon() {\n    if (this.facet.searchInterface.isNewDesign()) {\n      var icon = document.createElement('div');\n      $$(icon).addClass('coveo-icon-container');\n      var insideIcon = document.createElement('div');\n      $$(insideIcon).addClass('coveo-icon');\n      icon.appendChild(insideIcon);\n      return icon;\n    } else {\n      var icon = document.createElement('div');\n      $$(icon).addClass('coveo-icon');\n      return icon;\n    }\n  }\n\n  private buildAscendingOrDescending(direction: string) {\n    var elem = this.buildItem(l(direction));\n    elem.setAttribute('data-direction', direction.toLowerCase());\n    return elem;\n  }\n\n  private buildAscendingOrDescendingSection(direction: string) {\n    return this.buildSection('coveo-facet-settings-section-direction-' + direction.toLowerCase());\n  }\n\n  private buildItem(label: string, title = label) {\n    return $$('div', {\n      className: 'coveo-facet-settings-item',\n      title: _.escape(title),\n    }, _.escape(label)).el;\n  }\n\n  private buildItems() {\n    var elem = document.createElement('div');\n    $$(elem).addClass('coveo-facet-settings-items');\n    return elem;\n  }\n\n  private buildSection(className: string) {\n    var section = document.createElement('div');\n    $$(section).addClass(['coveo-facet-settings-section', className]);\n    return section;\n  }\n\n  private handleClickSettingsButtons(event: Event, sortSection?: { element: HTMLElement; sortItems: HTMLElement[] }) {\n    if (!Utils.isNullOrUndefined(this.settingsPopup.parentElement)) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  private handleClickSortButton(e: Event, enabledSort: IFacetSortDescription) {\n    if (this.activeSort != enabledSort && this.activeSort.relatedSort != enabledSort.name) {\n      this.activeSort = enabledSort;\n      if (enabledSort.directionToggle && _.contains(this.enabledSorts, FacetSettings.availableSorts[this.activeSort.relatedSort])) {\n        this.activateDirectionSection();\n      } else {\n        this.disableDirectionSection();\n      }\n      this.selectItem(<HTMLElement>e.target);\n      this.closePopupAndUpdateSort();\n    }\n  }\n\n  private handleDirectionClick(e: Event, direction: string) {\n    if (!$$((<HTMLElement>e.target).parentElement.parentElement).hasClass('coveo-facet-settings-disabled') && this.activeSort.name.indexOf(direction) == -1) {\n      this.activeSort = FacetSettings.availableSorts[this.activeSort.relatedSort];\n      _.each(this.directionSection, (d) => {\n        this.unselectSection(d);\n      });\n      this.selectItem(<HTMLElement>e.target);\n      if (this.activeSort.name == 'custom' && this.customSortDirection != direction) {\n        this.customSortDirection = direction;\n        this.customSortDirectionChange = true;\n      }\n      this.closePopupAndUpdateSort();\n    }\n  }\n\n  private handleSaveStateClick() {\n    this.saveState();\n    this.close();\n  }\n\n  private handleClearStateClick() {\n    this.facetStateLocalStorage.remove();\n    this.facet.reset();\n    this.close();\n    this.facet.triggerNewQuery(() => this.facet.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.facetClearAll, {\n      facetId: this.facet.options.id,\n      facetTitle: this.facet.options.title\n    }));\n  }\n\n  private handleMouseEventOnButton(sortSection: { element: HTMLElement; sortItems: HTMLElement[] }) {\n    var closeTimeout: number;\n    $$(this.settingsButton).on('click', (e: Event) => this.handleClickSettingsButtons(e, sortSection));\n\n    var mouseLeave = () => {\n      closeTimeout = setTimeout(() => {\n        this.close();\n      }, 300);\n    };\n    var mouseEnter = () => {\n      clearTimeout(closeTimeout);\n    };\n\n    $$(this.settingsIcon).on('mouseleave', mouseLeave);\n    $$(this.settingsPopup).on('mouseleave', mouseLeave);\n    $$(this.settingsIcon).on('mouseenter', mouseEnter);\n    $$(this.settingsPopup).on('mouseenter', mouseEnter);\n  }\n\n  public getCurrentDirectionItem(directionSection = this.directionSection) {\n    var found: HTMLElement;\n    _.each(directionSection, (direction) => {\n      if (!found) {\n        found = _.find(this.getItems(direction), (direction: HTMLElement) => {\n          return this.activeSort.name.indexOf(direction.getAttribute('data-direction')) != -1;\n        });\n      }\n    });\n    if (!found) {\n      found = directionSection[0];\n    }\n    return found;\n  }\n\n  private activateDirectionSection() {\n    _.each(this.directionSection, (direction) => {\n      $$(direction).removeClass('coveo-facet-settings-disabled');\n      this.unselectSection(direction);\n    });\n    this.selectItem(this.getCurrentDirectionItem());\n  }\n\n  private disableDirectionSection() {\n    _.each(this.directionSection, (direction) => {\n      $$(direction).addClass('coveo-facet-settings-disabled');\n      this.unselectSection(direction);\n    });\n\n  }\n\n  private getItems(section: HTMLElement) {\n    return $$(section).findAll('.coveo-facet-settings-item');\n  }\n\n  private unselectSection(section: HTMLElement) {\n    _.each(this.getItems(section), (i) => {\n      $$(i).removeClass('coveo-selected');\n    });\n  }\n\n  private selectItem(item: HTMLElement) {\n    $$(item).addClass('coveo-selected');\n  }\n\n  private unselectItem(item: HTMLElement) {\n    $$(item).removeClass('coveo-selected');\n  }\n\n  private getPopupAlignment() {\n    var alignmentHorizontal = DeviceUtils.isMobileDevice() ? HorizontalAlignment.CENTER : HorizontalAlignment.INNERLEFT;\n    var alignmentVertical = VerticalAlignment.BOTTOM;\n    return {\n      horizontal: alignmentHorizontal,\n      vertical: alignmentVertical\n    };\n  }\n\n  private filterDuplicateForRendering() {\n    _.each(this.enabledSorts, (enabledSort: IFacetSortDescription, i: number) => {\n      if (enabledSort.relatedSort != null) {\n        for (var j = i + 1; j < this.enabledSorts.length; j++) {\n          if (this.enabledSorts[j].name == enabledSort.relatedSort) {\n            this.enabledSortsIgnoreRenderBecauseOfPairs.push(this.enabledSorts[j]);\n            break;\n          }\n        }\n      }\n    });\n  }\n\n  private appendIfNotUndefined(toAppend: HTMLElement) {\n    if (!Utils.isNullOrUndefined(toAppend)) {\n      this.settingsPopup.appendChild(toAppend);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetSettings.ts\n **/","/// <reference path=\"Facet.ts\" />\n/// <reference path=\"FacetSettings.ts\" />\nimport { Facet } from './Facet';\nimport { l } from '../../strings/Strings';\nimport { FacetSettings } from './FacetSettings';\nimport { Utils } from '../../utils/Utils';\nimport _ = require('underscore');\n\ndeclare const Coveo;\n\nexport interface IFacetSortKlass {\n  new (sorts: string[], facet: Facet): FacetSort;\n}\n\nexport interface IFacetSortDescription {\n  label: string;\n  directionToggle: boolean;\n  description: string;\n  name: string;\n  relatedSort?: string;\n}\n\nexport class FacetSort {\n  public static availableSorts: { [name: string]: IFacetSortDescription } = {\n    score: {\n      label: l('Score'),\n      directionToggle: false,\n      description: l('ScoreDescription'),\n      name: 'score'\n    },\n    occurrences: {\n      label: l('Occurrences'),\n      directionToggle: false,\n      description: l('OccurrencesDescription'),\n      name: 'occurrences'\n    },\n    alphaascending: {\n      label: l('Label'),\n      directionToggle: true,\n      description: l('LabelDescription'),\n      name: 'alphaascending',\n      relatedSort: 'alphadescending'\n    },\n    alphadescending: {\n      label: l('Label'),\n      directionToggle: true,\n      description: l('LabelDescription'),\n      name: 'alphadescending',\n      relatedSort: 'alphaascending'\n    },\n    computedfieldascending: {\n      label: l('Value'),\n      directionToggle: true,\n      description: l('ValueDescription'),\n      name: 'computedfieldascending',\n      relatedSort: 'computedfielddescending'\n    },\n    computedfielddescending: {\n      label: l('Value'),\n      directionToggle: true,\n      description: l('ValueDescription'),\n      name: 'computedfielddescending',\n      relatedSort: 'computedfieldascending'\n    },\n    chisquare: {\n      label: l('RelativeFrequency'),\n      directionToggle: false,\n      description: l('RelativeFrequencyDescription'),\n      name: 'chisquare'\n    },\n    nosort: {\n      label: l('Nosort'),\n      directionToggle: false,\n      description: l('NosortDescription'),\n      name: 'nosort'\n    },\n    custom: {\n      label: l('Custom'),\n      directionToggle: true,\n      description: l('CustomDescription'),\n      name: 'custom',\n      relatedSort: 'custom'\n    }\n  };\n\n  public enabledSorts: IFacetSortDescription[] = [];\n  public activeSort: IFacetSortDescription;\n  public customSortDirection = 'ascending';\n\n  constructor(sorts: string[], public facet: Facet) {\n    _.each(sorts, (sortToActivate) => {\n      var newSortToEnable = FacetSettings.availableSorts[sortToActivate.toLowerCase()];\n      if (newSortToEnable != undefined) {\n        this.enabledSorts.push(newSortToEnable);\n      }\n    });\n    this.removeEnabledSortsBasedOnFacetType();\n    if (Utils.isNonEmptyArray(this.enabledSorts)) {\n      if (this.facet.options.sortCriteria != undefined) {\n        this.activeSort = _.find<IFacetSortDescription>(this.enabledSorts, (enabledSort) => {\n          return enabledSort.name == this.facet.options.sortCriteria;\n        });\n      }\n      if (!this.activeSort) {\n        this.activeSort = this.enabledSorts[0];\n      }\n    }\n  }\n\n  private removeEnabledSortsBasedOnFacetType() {\n    if (Coveo.FacetRange && this.facet instanceof Coveo.FacetRange) {\n      var facetRange = this.facet;\n      if (facetRange.options['slider']) {\n        this.enabledSorts = [];\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetSort.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { FacetValueElement, IFacetValueElementKlass } from './FacetValueElement';\nimport { Facet } from './Facet';\nimport { $$ } from '../../utils/Dom';\nimport { ValueElement } from './ValueElement';\nimport { FacetValue } from './FacetValues';\nimport { Utils } from '../../utils/Utils';\nimport { FacetUtils } from './FacetUtils';\nimport { FacetValuesOrder } from './FacetValuesOrder';\nimport _ = require('underscore');\n\nexport class FacetValuesList {\n  // Dictionary of values. The key is always in lowercase.\n  private valueList: { [value: string]: FacetValueElement } = {};\n\n  public valueContainer: HTMLElement;\n  private currentlyDisplayed: ValueElement[] = [];\n\n  constructor(public facet: Facet, public facetValueElementKlass: IFacetValueElementKlass) {\n  }\n\n  public build(): HTMLElement {\n    this.valueContainer = document.createElement('ul');\n    $$(this.valueContainer).addClass('coveo-facet-values');\n    return this.valueContainer;\n  }\n\n  public getAllCurrentlyDisplayed(): ValueElement[] {\n    return this.currentlyDisplayed;\n  }\n\n  public getAll(): ValueElement[] {\n    return _.toArray<ValueElement>(this.valueList);\n  }\n\n  public getAllFacetValue(): FacetValue[] {\n    return _.map(this.getAll(), (v: ValueElement) => {\n      return v.facetValue;\n    });\n  }\n\n  public get(value: FacetValue): ValueElement;\n  public get(value: string): ValueElement;\n  public get(value: any): ValueElement {\n    var getter;\n    if (value instanceof FacetValue) {\n      getter = value.value;\n    } else {\n      value = Utils.anyTypeToString(value);\n      getter = value;\n    }\n    this.ensureFacetValueIsInList(value);\n    return this.valueList[getter.toLowerCase()];\n  }\n\n  public select(value: FacetValue): ValueElement;\n  public select(value: string): ValueElement;\n  public select(value: any): ValueElement {\n    var valueElement = this.get(value);\n    valueElement.select();\n    return valueElement;\n  }\n\n  public unselect(value: FacetValue): ValueElement;\n  public unselect(value: string): ValueElement;\n  public unselect(value: any): ValueElement {\n    var valueElement = this.get(value);\n    valueElement.unselect();\n    return valueElement;\n  }\n\n  public exclude(value: FacetValue): ValueElement;\n  public exclude(value: string): ValueElement;\n  public exclude(value: any): ValueElement {\n    var valueElement = this.get(value);\n    valueElement.exclude();\n    return valueElement;\n  }\n\n  public unExclude(value: FacetValue): ValueElement;\n  public unExclude(value: string): ValueElement;\n  public unExclude(value: any): ValueElement {\n    var valueElement = this.get(value);\n    valueElement.unexclude();\n    return valueElement;\n  }\n\n  public toggleSelect(value: FacetValue): ValueElement;\n  public toggleSelect(value: string): ValueElement;\n  public toggleSelect(value: any): ValueElement {\n    var valueElement = this.get(value);\n    if (valueElement.facetValue.selected) {\n      valueElement.unselect();\n    } else {\n      valueElement.select();\n    }\n    return valueElement;\n  }\n\n  public toggleExclude(value: FacetValue): ValueElement;\n  public toggleExclude(value: string): ValueElement;\n  public toggleExclude(value: any): ValueElement {\n    var valueElement = this.get(value);\n    if (valueElement.facetValue.excluded) {\n      valueElement.unexclude();\n    } else {\n      valueElement.exclude();\n    }\n    return valueElement;\n  }\n\n  public rebuild(numberOfValues: number): void {\n    $$(this.valueContainer).empty();\n    this.currentlyDisplayed = [];\n    var allValues = this.getValuesToBuildWith();\n    var toCompare = numberOfValues;\n    let docFragment = document.createDocumentFragment();\n    _.each(allValues, (facetValue: FacetValue, index?: number, list?) => {\n      if (this.facetValueShouldBeRemoved(facetValue)) {\n        this.facet.values.remove(facetValue.value);\n        toCompare += 1;\n      } else if (index < toCompare) {\n        var valueElement = new this.facetValueElementKlass(this.facet, facetValue, true);\n        this.valueList[facetValue.value.toLowerCase()] = valueElement;\n        var valueListElement = valueElement.build().renderer.listItem;\n        docFragment.appendChild(valueListElement);\n        this.currentlyDisplayed.push(valueElement);\n      }\n    });\n    this.valueContainer.appendChild(docFragment);\n\n    FacetUtils.addNoStateCssClassToFacetValues(this.facet, this.valueContainer);\n    FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.facet);\n  }\n\n  protected getValuesToBuildWith() {\n    if (this.facet.facetSort) {\n      return new FacetValuesOrder(this.facet, this.facet.facetSort).reorderValues(this.facet.values.getAll());\n    } else {\n      return this.facet.values.getAll();\n    }\n  }\n\n  private facetValueShouldBeRemoved(facetValue: FacetValue): boolean {\n    return facetValue.occurrences == 0 &&\n      (facetValue.delta == 0 || facetValue.delta == undefined) &&\n      !facetValue.selected &&\n      !facetValue.excluded &&\n      !this.facet.keepDisplayedValuesNextTime;\n  }\n\n  private ensureFacetValueIsInList(value: any) {\n    var facetValue: FacetValue;\n    if (value instanceof FacetValue) {\n      facetValue = this.facet.values.get((<FacetValue>value).value);\n      if (facetValue == null) {\n        this.facet.values.add(value);\n        facetValue = value;\n      }\n    } else {\n      facetValue = this.facet.values.get(value);\n      if (facetValue == null) {\n        facetValue = FacetValue.createFromValue(value);\n        this.facet.values.add(facetValue);\n      }\n    }\n\n    var key = facetValue.value.toLowerCase();\n    var found = this.valueList[key];\n    if (found == undefined) {\n      found = this.valueList[key] = new FacetValueElement(this.facet, facetValue, true);\n      found.build();\n    } else {\n      found.facetValue = facetValue;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetValuesList.ts\n **/","/// <reference path=\"Facet.ts\" />\n/// <reference path=\"FacetSettings.ts\" />\n\nimport { Facet } from './Facet';\nimport { FacetSlider } from '../FacetSlider/FacetSlider';\nimport { IFacetSettingsKlass, FacetSettings } from './FacetSettings';\nimport { IFacetSortKlass, FacetSort } from './FacetSort';\nimport { $$ } from '../../utils/Dom';\nimport { FacetUtils } from './FacetUtils';\nimport { l } from '../../strings/Strings';\nimport { IAnalyticsFacetOperatorMeta, IAnalyticsFacetMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\n\nexport interface IFacetHeaderOptions {\n  facetElement: HTMLElement;\n  title: string;\n  field: string;\n  enableClearElement: boolean;\n  enableCollapseElement: boolean;\n  icon?: string;\n  facet?: Facet;\n  facetSlider?: FacetSlider;\n  settingsKlass?: IFacetSettingsKlass;\n  sortKlass?: IFacetSortKlass;\n  availableSorts?: string[];\n  isNewDesign: boolean;\n}\n\nexport class FacetHeader {\n  public element: HTMLElement;\n  public iconElement: HTMLElement;\n  public waitElement: HTMLElement;\n  public collapseElement: HTMLElement;\n  public expandElement: HTMLElement;\n  public operatorElement: HTMLElement;\n  public eraserElement: HTMLElement;\n  public settings: FacetSettings;\n  public sort: FacetSort;\n\n  constructor(public options: IFacetHeaderOptions) {\n    this.element = document.createElement('div');\n    $$(this.element).addClass('coveo-facet-header');\n  }\n\n  public build(): HTMLElement {\n    if (this.options.isNewDesign) {\n      return this.buildNewDesign();\n    } else {\n      return this.buildOldDesign();\n    }\n  }\n\n\n  public switchToAnd(): void {\n    if (this.options.facet) {\n      this.options.facet.options.useAnd = true;\n      this.rebuildOperatorToggle();\n      this.updateOperatorQueryStateModel();\n    }\n  }\n\n  public switchToOr(): void {\n    if (this.options.facet) {\n      this.options.facet.options.useAnd = false;\n      this.rebuildOperatorToggle();\n      this.updateOperatorQueryStateModel();\n    }\n  }\n\n  public collapseFacet(): void {\n    if (this.collapseElement && this.expandElement) {\n      $$(this.collapseElement).hide();\n      $$(this.expandElement).show();\n    }\n    $$(this.options.facetElement).addClass('coveo-facet-collapsed');\n  }\n\n  public expandFacet(): void {\n    if (this.collapseElement && this.expandElement) {\n      $$(this.expandElement).hide();\n      $$(this.collapseElement).show();\n    }\n    $$(this.options.facetElement).removeClass('coveo-facet-collapsed');\n    if (this.options.facet) {\n      FacetUtils.clipCaptionsToAvoidOverflowingTheirContainer(this.options.facet);\n    }\n  }\n\n  public updateOperatorQueryStateModel(): void {\n    if (this.options.facet && this.options.facet.options.enableTogglingOperator) {\n      var valueToSet = '';\n      if (this.options.facet.getSelectedValues().length != 0 || this.options.facet.getExcludedValues().length != 0) {\n        valueToSet = this.options.facet.options.useAnd ? 'and' : 'or';\n      }\n      this.options.facet.queryStateModel.set(this.options.facet.operatorAttributeId, valueToSet);\n    }\n  }\n\n  private buildNewDesign() {\n    let titleSection = $$('div', {\n      className: 'coveo-facet-header-title-section'\n    });\n    if (this.options.icon != undefined) {\n      this.iconElement = this.buildIcon();\n      titleSection.append(this.iconElement);\n    }\n    titleSection.append(this.buildTitle());\n    this.waitElement = this.buildWaitAnimation();\n    titleSection.append(this.waitElement);\n    this.element.appendChild(titleSection.el);\n\n    let settingsSection = $$('div', {\n      className: 'coveo-facet-header-settings-section'\n    });\n\n    this.eraserElement = this.buildEraser();\n    settingsSection.append(this.eraserElement);\n\n    if (this.options.facet) {\n      this.operatorElement = this.buildOperatorToggle();\n      settingsSection.append(this.operatorElement);\n      $$(this.operatorElement).toggle(this.options.facet.options.enableTogglingOperator);\n    }\n\n    if (this.options.settingsKlass) {\n      this.sort = this.settings = new this.options.settingsKlass(this.options.availableSorts, this.options.facet);\n      settingsSection.append(this.settings.build());\n    } else if (this.options.sortKlass) {\n      this.sort = new this.options.sortKlass(this.options.availableSorts, this.options.facet);\n    }\n    this.element.appendChild(settingsSection.el);\n\n    return this.element;\n  }\n\n  private buildOldDesign() {\n    this.element.appendChild(this.buildIcon());\n    this.element.appendChild(this.buildWaitAnimation());\n\n    if (this.options.settingsKlass) {\n      this.sort = this.settings = new this.options.settingsKlass(this.options.availableSorts, this.options.facet);\n      this.element.appendChild(this.settings.build());\n    } else if (this.options.sortKlass) {\n      this.sort = new this.options.sortKlass(this.options.availableSorts, this.options.facet);\n    }\n\n    if (this.options.enableCollapseElement) {\n      this.collapseElement = this.buildCollapse();\n      this.element.appendChild(this.collapseElement);\n\n      this.expandElement = this.buildExpand();\n      this.element.appendChild(this.expandElement);\n    }\n\n    if (this.options.facet) {\n      this.operatorElement = this.buildOperatorToggle();\n      this.element.appendChild(this.operatorElement);\n      $$(this.operatorElement).toggle(this.options.facet.options.enableTogglingOperator);\n    }\n\n    this.eraserElement = this.buildEraser();\n    this.element.appendChild(this.eraserElement);\n    this.element.appendChild(this.buildTitle());\n\n    return this.element;\n  }\n\n  private rebuildOperatorToggle(): void {\n    var newElement = this.buildOperatorToggle();\n    if (this.operatorElement) {\n      $$(this.operatorElement).replaceWith(newElement);\n    }\n    this.operatorElement = newElement;\n  }\n\n  private buildIcon(): HTMLElement {\n    var cssClassForIcon;\n    if (this.options.icon) {\n      cssClassForIcon = 'coveo-icon-custom ' + this.options.icon;\n    } else {\n      cssClassForIcon = 'coveo-icon ' + this.options.field.substr(1);\n    }\n    this.iconElement = document.createElement('div');\n    $$(this.iconElement).addClass(cssClassForIcon);\n    return this.iconElement;\n  }\n\n  private buildWaitAnimation(): HTMLElement {\n    this.waitElement = document.createElement('div');\n    $$(this.waitElement).addClass('coveo-facet-header-wait-animation');\n\n    if (this.options.isNewDesign) {\n      this.waitElement.style.visibility = 'hidden';\n    } else {\n      $$(this.waitElement).hide();\n    }\n    return this.waitElement;\n  }\n\n  private buildCollapse(): HTMLElement {\n    var icon = document.createElement('span');\n    $$(icon).addClass('coveo-icon');\n\n    var collapse = document.createElement('div');\n    collapse.setAttribute('title', l('Collapse'));\n    $$(collapse).addClass('coveo-facet-header-collapse');\n    collapse.appendChild(icon);\n\n    $$(collapse).on('click', () => this.collapseFacet());\n\n    return collapse;\n  }\n\n  private buildExpand(): HTMLElement {\n    var icon = document.createElement('span');\n    $$(icon).addClass('coveo-icon');\n\n    var expand = document.createElement('div');\n    expand.setAttribute('title', l('Expand'));\n    $$(expand).hide();\n    $$(expand).addClass('coveo-facet-header-expand');\n    expand.appendChild(icon);\n    $$(expand).on('click', () => this.expandFacet());\n    return expand;\n  }\n\n  private buildOperatorToggle(): HTMLElement {\n    var icon = document.createElement('span');\n    $$(icon).addClass(['coveo-' + (this.options.facet.options.useAnd ? 'and' : 'or'), 'coveo-icon']);\n\n    var toggle = document.createElement('div');\n    toggle.setAttribute('title', l('SwitchTo', this.options.facet.options.useAnd ? l('Or') : l('And')));\n    $$(toggle).addClass('coveo-facet-header-operator');\n    toggle.appendChild(icon);\n    $$(toggle).on('click', () => this.handleOperatorClick());\n\n    return toggle;\n  }\n\n  private handleOperatorClick(): void {\n    if (this.options.facet.options.useAnd) {\n      this.options.facet.switchToOr();\n    } else {\n      this.options.facet.switchToAnd();\n    }\n    if (this.options.facet.getSelectedValues().length != 0) {\n      var operatorNow = this.options.facet.options.useAnd ? 'AND' : 'OR';\n      var operatorBefore = this.options.facet.options.useAnd ? 'OR' : 'AND';\n      this.options.facet.triggerNewQuery(() => this.options.facet.usageAnalytics.logSearchEvent<IAnalyticsFacetOperatorMeta>(analyticsActionCauseList.facetToggle, {\n        facetId: this.options.facet.options.id,\n        facetOperatorBefore: operatorBefore,\n        facetOperatorAfter: operatorNow,\n        facetTitle: this.options.title\n      }));\n    }\n  }\n\n  private buildTitle(): HTMLElement {\n    var title = $$('div', {\n      title: this.options.title,\n      className: 'coveo-facet-header-title'\n    });\n    title.text(this.options.title);\n    return title.el;\n  }\n\n  public buildEraser(): HTMLElement {\n    var icon = document.createElement('span');\n    $$(icon).addClass('coveo-icon');\n\n    var eraser = document.createElement('div');\n    eraser.setAttribute('title', l('Clear', this.options.title));\n    eraser.appendChild(icon);\n    $$(eraser).addClass('coveo-facet-header-eraser');\n    $$(eraser).on('click', () => {\n      var cmp = this.options.facet || this.options.facetSlider;\n      cmp.reset();\n      cmp.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.facetClearAll, {\n        facetId: cmp.options.id,\n        facetTitle: cmp.options.title\n      });\n      cmp.queryController.executeQuery();\n    });\n    return eraser;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetHeader.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { FacetValue } from './FacetValues';\nimport { Facet } from './Facet';\nimport { Assert } from '../../misc/Assert';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { IAnalyticsFacetMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { $$, Dom } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IBreadcrumbValueElementKlass {\n  new (facet: Facet, facetValue: FacetValue): BreadcrumbValueElement;\n}\n\nexport class BreadcrumbValueElement {\n  constructor(public facet: Facet, public facetValue: FacetValue) {\n  }\n\n  public build(tooltip = true): Dom {\n    Assert.exists(this.facetValue);\n\n    var elem = DeviceUtils.isMobileDevice() ? $$('div') : $$('span');\n    elem.addClass('coveo-facet-breadcrumb-value');\n    elem.toggleClass('coveo-selected', this.facetValue.selected);\n    elem.toggleClass('coveo-excluded', this.facetValue.excluded);\n    elem.el.setAttribute('title', this.getBreadcrumbTooltip());\n\n    var caption = $$('span', {\n      className: 'coveo-facet-breadcrumb-caption'\n    });\n    caption.text(this.facet.getValueCaption(this.facetValue));\n    elem.el.appendChild(caption.el);\n\n    var clear = $$('span', {\n      className: 'coveo-facet-breadcrumb-clear'\n    });\n    elem.el.appendChild(clear.el);\n\n    var clicked = false;\n    elem.on('click', () => {\n      if (!clicked) {\n        clicked = true;\n        if (this.facetValue.excluded) {\n          this.facet.unexcludeValue(this.facetValue.value);\n        } else {\n          this.facet.deselectValue(this.facetValue.value);\n        }\n        this.facet.triggerNewQuery(() => this.facet.usageAnalytics.logSearchEvent<IAnalyticsFacetMeta>(analyticsActionCauseList.breadcrumbFacet, {\n          facetId: this.facet.options.id,\n          facetValue: this.facetValue.value,\n          facetTitle: this.facet.options.title\n        }));\n      }\n    });\n\n    return elem;\n  }\n\n  public getBreadcrumbTooltip(): string {\n    var tooltipParts = [this.facet.getValueCaption(this.facetValue), this.facetValue.getFormattedCount(), this.facetValue.getFormattedComputedField(this.facet.options.computedFieldFormat)];\n    return _.compact(tooltipParts).join(' ');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/BreadcrumbValueElement.ts\n **/","import { FacetValue } from './FacetValues';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { Facet } from './Facet';\nimport { IBreadcrumbValueElementKlass } from './BreadcrumbValueElement';\nimport { Assert } from '../../misc/Assert';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport * as Globalize from 'globalize';\nimport _ = require('underscore');\n\nexport class BreadcrumbValueList {\n  private expanded: FacetValue[];\n  private collapsed: FacetValue[];\n  protected elem: HTMLElement;\n  private valueContainer: HTMLElement;\n\n  constructor(public facet: Facet, public facetValues: FacetValue[], public breadcrumbValueElementKlass: IBreadcrumbValueElementKlass) {\n    this.setExpandedAndCollapsed();\n    this.elem = $$('div', {\n      className: 'coveo-facet-breadcrumb'\n    }).el;\n\n    let title = $$('span');\n    title.addClass('coveo-facet-breadcrumb-title');\n    title.text(this.facet.options.title + ':');\n    this.elem.appendChild(title.el);\n\n    this.valueContainer = $$('span', {\n      className: 'coveo-facet-breadcrumb-values'\n    }).el;\n    this.elem.appendChild(this.valueContainer);\n  }\n\n  public build(): HTMLElement {\n    this.buildExpanded();\n    if (this.collapsed.length != 0) {\n      this.buildCollapsed();\n    }\n    return this.elem;\n  }\n\n  public buildAsString(): string {\n    this.build();\n    if (this.elem) {\n      return `${this.facet.options.title}: ` + _.map($$(this.elem).findAll('.coveo-facet-breadcrumb-value'), (value: HTMLElement) => {\n        return $$(value).text();\n      }).join(', ');\n    }\n    return '';\n  }\n\n  private buildExpanded() {\n    _.each(this.expanded, (value: FacetValue, index?: number) => {\n      if (index != 0 && !DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign()) {\n        let separator = $$('span', {\n          className: 'coveo-facet-breadcrumb-separator'\n        });\n        separator.text(', ');\n        this.valueContainer.appendChild(separator.el);\n      }\n      var elementBreadcrumb = new this.breadcrumbValueElementKlass(this.facet, value).build();\n      this.valueContainer.appendChild(elementBreadcrumb.el);\n    });\n  }\n\n  private buildCollapsed() {\n    let numberOfSelected = _.filter(this.collapsed, (value: FacetValue) => value.selected).length;\n    let numberOfExcluded = _.filter(this.collapsed, (value: FacetValue) => value.excluded).length;\n    Assert.check(numberOfSelected + numberOfExcluded == this.collapsed.length);\n\n    var elem = $$('div', {\n      className: 'coveo-facet-breadcrumb-value'\n    });\n    if (!DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign()) {\n      let sep = $$('span', {\n        className: 'coveo-separator'\n      });\n      sep.text(', ');\n      elem.el.appendChild(sep.el);\n    }\n    if (numberOfSelected > 0) {\n      let multi = $$('span', {\n        className: 'coveo-facet-breadcrumb-multi-count'\n      });\n      multi.text(l('NMore', Globalize.format(numberOfSelected, 'n0')));\n      elem.el.appendChild(multi.el);\n\n      let multiIcon = $$('div', {\n        className: 'coveo-selected coveo-facet-breadcrumb-multi-icon'\n      });\n      elem.el.appendChild(multiIcon.el);\n    }\n    if (numberOfExcluded > 0) {\n      let multiExcluded = $$('span', {\n        className: 'coveo-facet-breadcrumb-multi-count'\n      });\n      multiExcluded.text(l('NMore', Globalize.format(numberOfExcluded, 'n0')));\n      elem.el.appendChild(multiExcluded.el);\n\n      let multiExcludedIcon = $$('div', {\n        className: 'coveo-excluded coveo-facet-breadcrumb-multi-icon'\n      });\n      elem.el.appendChild(multiExcludedIcon.el);\n    }\n\n    let valueElements = _.map(this.collapsed, (facetValue) => {\n      return new this.breadcrumbValueElementKlass(this.facet, facetValue);\n    });\n\n    let toolTips = _.map(valueElements, (valueElement) => {\n      return valueElement.getBreadcrumbTooltip();\n    });\n\n    elem.el.setAttribute('title', toolTips.join('\\n'));\n    elem.on('click', () => {\n      var elements: HTMLElement[] = [];\n      _.forEach(valueElements, (valueElement) => {\n        if (!DeviceUtils.isMobileDevice() && !this.facet.searchInterface.isNewDesign()) {\n          let separatorsClicked = $$('span', {\n            className: 'coveo-facet-breadcrumb-separator'\n          });\n          separatorsClicked.text(', ');\n          elements.push(separatorsClicked.el);\n        }\n        elements.push(valueElement.build(false).el);\n      });\n      _.each(elements, (el) => {\n        $$(el).insertBefore(elem.el);\n      });\n      elem.detach();\n    });\n\n    this.valueContainer.appendChild(elem.el);\n  }\n\n  private setExpandedAndCollapsed() {\n    if (this.facetValues.length > this.facet.options.numberOfValuesInBreadcrumb) {\n      this.collapsed = _.rest(this.facetValues, this.facet.options.numberOfValuesInBreadcrumb - 1);\n      this.expanded = _.first(this.facetValues, this.facet.options.numberOfValuesInBreadcrumb - 1);\n    } else {\n      this.collapsed = [];\n      this.expanded = this.facetValues;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/BreadcrumbValuesList.ts\n **/","/// <reference path=\"Facet.ts\" />\nimport { Facet } from './Facet';\nimport { IFacetValueElementKlass } from './FacetValueElement';\nimport { FacetValue } from './FacetValues';\nimport _ = require('underscore');\n\nexport interface IFacetSearchValuesListKlass {\n  new (facet: Facet, facetValueElementKlass: IFacetValueElementKlass): FacetSearchValuesList;\n}\n\nexport class FacetSearchValuesList {\n  constructor(public facet: Facet, public facetValueElementKlass: IFacetValueElementKlass) {\n  }\n\n  public build(facetValues: FacetValue[]): HTMLElement[] {\n    var valuesToBuildWith = _.map(facetValues, (facetValue) => {\n      return _.find(this.facet.values.getAll(), (valueAlreadyInFacet: FacetValue) => {\n        return valueAlreadyInFacet.value == facetValue.value;\n      }) || facetValue;\n    });\n    return _.map(valuesToBuildWith, (facetValue) => {\n      return new this.facetValueElementKlass(this.facet, facetValue, this.facet.keepDisplayedValuesNextTime).build().renderer.listItem;\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/FacetSearchValuesList.ts\n **/","/// <reference path=\"Facet.ts\" />\n\nimport { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { IPopulateOmniboxObject } from '../Omnibox/OmniboxInterface';\nimport { ValueElement } from './ValueElement';\nimport { IAnalyticsActionCause } from '../Analytics/AnalyticsActionListMeta';\n\nexport interface IOmniboxValueElementKlass {\n  new (facet: Facet, facetValue: FacetValue, eventArg: IPopulateOmniboxObject, onSelect?: (elem: ValueElement, cause: IAnalyticsActionCause) => void, onExclude?: (elem: ValueElement, cause: IAnalyticsActionCause) => void): OmniboxValueElement;\n}\n\nexport class OmniboxValueElement extends ValueElement {\n  constructor(public facet: Facet, public facetValue: FacetValue, public eventArg: IPopulateOmniboxObject, onSelect?: (elem: ValueElement, cause: IAnalyticsActionCause) => void, onExclude?: (elem: ValueElement, cause: IAnalyticsActionCause) => void) {\n    super(facet, facetValue, onSelect, onExclude);\n  }\n\n  public bindEvent() {\n    super.bindEvent({ displayNextTime: false, pinFacet: false, omniboxObject: this.eventArg });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/OmniboxValueElement.ts\n **/","/// <reference path=\"Facet.ts\" />\nimport { Facet } from './Facet';\nimport { FacetValue } from './FacetValues';\nimport { IPopulateOmniboxObject } from '../Omnibox/OmniboxInterface';\nimport { IOmniboxValueElementKlass } from './OmniboxValueElement';\nimport { ValueElement } from './ValueElement';\nimport { IAnalyticsActionCause, IAnalyticsOmniboxFacetMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { FacetUtils } from './FacetUtils';\nimport _ = require('underscore');\n\nexport class OmniboxValuesList {\n  constructor(public facet: Facet, public facetValues: FacetValue[], public omniboxObject: IPopulateOmniboxObject, public omniboxValueElementKlass: IOmniboxValueElementKlass) {\n  }\n\n  public build() {\n    var rows: HTMLElement[] = [];\n    _.each(this.facetValues, (facetValue: FacetValue) => {\n      rows.push(this.buildOmniboxForOneRow(facetValue, this.omniboxObject));\n    });\n    return this.buildFinalOmniboxElement(rows);\n  }\n\n  private buildOmniboxForOneRow(facetValue: FacetValue, omniboxObject: IPopulateOmniboxObject): HTMLElement {\n    var selectCallback = (elem: ValueElement, cause: IAnalyticsActionCause) => this.logAnalyticsEvent(elem, cause);\n    var excludeCallback = (elem: ValueElement, cause: IAnalyticsActionCause) => this.logAnalyticsEvent(elem, cause);\n    var omniboxValueElement = new this.omniboxValueElementKlass(this.facet, facetValue, omniboxObject, selectCallback, excludeCallback);\n    var omniboxRowContent = omniboxValueElement.build().renderer.listItem;\n\n    var regex = omniboxObject.completeQueryExpression.regex;\n    var valueToSearch = omniboxObject.completeQueryExpression.word;\n    var caption = $$(omniboxRowContent).find('.coveo-facet-value-caption');\n    caption.innerHTML = this.highlightOmniboxMatch(this.facet.getValueCaption(facetValue), regex, valueToSearch);\n\n    var omniboxRow = $$('div', {\n      className: 'coveo-omnibox-selectable coveo-facet-value coveo-omnibox-facet-value'\n    }).el;\n    omniboxRow.appendChild(omniboxRowContent);\n    $$(omniboxRow).on('keyboardSelect', () => {\n      var input = $$(omniboxRowContent).find('input[type=checkbox]');\n      $$(input).trigger('change');\n    });\n    omniboxRow['no-text-suggestion'] = true;\n    return omniboxRow;\n  }\n\n  private buildFinalOmniboxElement(rows: HTMLElement[]) {\n    var header = this.buildOmniboxHeader();\n    if (Utils.isEmptyArray(rows)) {\n      return undefined;\n    } else {\n      var ret = $$('div', {\n        className: 'coveo-omnibox-facet-value'\n      }).el;\n      ret.appendChild(header);\n      _.each(rows, (r) => {\n        ret.appendChild(r);\n      });\n      FacetUtils.addNoStateCssClassToFacetValues(this.facet, ret);\n      return ret;\n    }\n  }\n\n  private buildOmniboxHeader(): HTMLElement {\n    var title = this.facet.options.title;\n    var header = $$('div', {\n      className: 'coveo-omnibox-facet-header'\n    }).el;\n    if (this.facet.searchInterface.isNewDesign()) {\n      $$(header).text(title);\n      return header;\n    } else {\n      var icon = $$('span', {\n        className: 'coveo-icon ' + this.facet.options.field.substr(1)\n      }).el;\n      header.appendChild(icon);\n      $$(header).text(title);\n    }\n    return header;\n  }\n\n  private highlightOmniboxMatch(orignalStr: string, regex: RegExp, valueToSearch: string) {\n    var firstChar = orignalStr.search(regex);\n    var lastChar = firstChar + valueToSearch.length;\n    return orignalStr.slice(0, firstChar) + '<span class=\"coveo-highlight\">' + orignalStr.slice(firstChar, lastChar) + '</span>' + orignalStr.slice(lastChar);\n  }\n\n  private logAnalyticsEvent(elem: ValueElement, cause: IAnalyticsActionCause) {\n    var strippedFacetValues = _.pluck(this.facetValues, 'value');\n    elem.facet.usageAnalytics.logSearchEvent<IAnalyticsOmniboxFacetMeta>(cause, {\n      query: this.omniboxObject.completeQueryExpression.word,\n      facetId: elem.facet.options.id,\n      facetTitle: elem.facet.options.title,\n      facetValue: elem.facetValue.value,\n      suggestions: strippedFacetValues.join(';'),\n      suggestionRanking: _.indexOf(strippedFacetValues, elem.facetValue.value)\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Facet/OmniboxValuesList.ts\n **/","import { LiveAnalyticsClient } from './LiveAnalyticsClient';\nimport { IAnalyticsActionCause, analyticsActionCauseList } from './AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { AnalyticsEndpoint } from '../../rest/AnalyticsEndpoint';\nimport { IAPIAnalyticsEventResponse } from '../../rest/APIAnalyticsEventResponse';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Recommendation } from '../Recommendation/Recommendation';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\n\nexport class RecommendationAnalyticsClient extends LiveAnalyticsClient {\n\n  private recommendation: Recommendation;\n\n  constructor(public endpoint: AnalyticsEndpoint,\n    public rootElement: HTMLElement,\n    public userId: string,\n    public userDisplayName: string,\n    public anonymous: boolean,\n    public splitTestRunName: string,\n    public splitTestRunVersion: string,\n    public originLevel1: string,\n    public sendToCloud: boolean,\n    public bindings: IComponentBindings) {\n    super(endpoint, rootElement, userId, userDisplayName, anonymous, splitTestRunName, splitTestRunVersion, originLevel1, sendToCloud);\n    this.recommendation = <Recommendation>this.bindings.searchInterface;\n  }\n\n  public logSearchEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta) {\n    if (actionCause == analyticsActionCauseList.interfaceLoad) {\n      actionCause = analyticsActionCauseList.recommendationInterfaceLoad;\n    }\n    super.logSearchEvent(actionCause, meta);\n  }\n\n  public logClickEvent<TMeta>(actionCause: IAnalyticsActionCause, meta: TMeta, result: IQueryResult, element: HTMLElement): Promise<IAPIAnalyticsEventResponse | IAPIAnalyticsEventResponse[]> {\n    if (actionCause == analyticsActionCauseList.documentOpen) {\n      actionCause = analyticsActionCauseList.recommendationOpen;\n    }\n\n    const promises = [super.logClickEvent(actionCause, meta, result, element)];\n\n    if (this.recommendation.mainQuerySearchUID && this.recommendation.mainQueryPipeline != null) {\n      // We log a second click associated with the main interface query to tell the analytics that the query was a success.\n      let mainInterface = <SearchInterface>Component.get(this.recommendation.options.mainSearchInterface, SearchInterface);\n      result.queryUid = this.recommendation.mainQuerySearchUID;\n      result.pipeline = this.recommendation.mainQueryPipeline;\n      promises.push(mainInterface.usageAnalytics.logClickEvent(actionCause, meta, result, element));\n    }\n    return Promise.all(promises);\n  }\n\n  protected getOriginLevel2(element: HTMLElement): string {\n    return this.recommendation.getId();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Analytics/RecommendationAnalyticsClient.ts\n **/","import { Initialization } from './Initialization';\nimport _ = require('underscore');\n\ninterface IWindow {\n  $: any;\n}\n\nexport interface IJQuery {\n  fn: any;\n}\n\nexport var jQueryInstance: IJQuery;\n\nif (!initCoveoJQuery()) {\n  // Adding a check in case jQuery was added after the jsSearch\n  // Since this event listener is registered before the Coveo.init call, JQuery should always be initiated before the Coveo.init call\n  document.addEventListener('DOMContentLoaded', () => {\n    initCoveoJQuery();\n  });\n}\n\nexport function initCoveoJQuery() {\n  if (!jQueryIsDefined()) {\n    return false;\n  }\n\n  jQueryInstance = getJQuery();\n\n  if (window['Coveo'] == undefined) {\n    window['Coveo'] = {};\n  }\n  if (window['Coveo']['$'] == undefined) {\n    window['Coveo']['$'] = jQueryInstance;\n  }\n\n  jQueryInstance.fn.coveo = function (...args: any[]) {\n    var returnValue: any;\n    this.each((index: number, element: HTMLElement) => {\n      var returnValueForThisElement: any;\n      if (_.isString(args[0])) {\n        var token = <string>args[0];\n        returnValueForThisElement = Initialization.dispatchNamedMethodCallOrComponentCreation(token, element, args.slice(1));\n      } else {\n        // Invoking with no method name is a shortcut for the 'get' method (from Component).\n        returnValueForThisElement = Initialization.dispatchNamedMethodCall('get', element, args);\n      }\n\n      // Keep only the first return value we encounter\n      returnValue = returnValue || returnValueForThisElement;\n    });\n    return returnValue;\n  };\n\n  return true;\n}\n\nexport function jQueryIsDefined(): boolean {\n  return jQueryDefinedOnWindow() || jQueryDefinedOnCoveoObject();\n}\n\nfunction jQueryDefinedOnCoveoObject(): boolean {\n  return window['Coveo'] != undefined && window['Coveo']['$'] != undefined;\n}\n\nfunction jQueryDefinedOnWindow(): boolean {\n  return window['$'] != undefined && window['$'].fn != undefined && window['$'].fn.jquery != undefined;\n}\n\nfunction getJQuery(): IJQuery {\n  let jQueryInstance: IJQuery;\n  if (window['$']) {\n    jQueryInstance = window['$'];\n  } else {\n    jQueryInstance = window['Coveo']['$'];\n  }\n  return jQueryInstance;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/CoveoJQuery.ts\n **/","export { TemplateHelpers } from './ui/Templates/TemplateHelpers';\nexport { TemplateCache } from './ui/Templates/TemplateCache';\nexport { HtmlTemplate } from './ui/Templates/HtmlTemplate';\nexport { UnderscoreTemplate } from './ui/Templates/UnderscoreTemplate';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/TemplatesModules.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { UnderscoreTemplate } from './UnderscoreTemplate';\nimport { Utils } from '../../utils/Utils';\n\n/**\n * A function that describe a templates.\n *\n * It can take any number of arguments, but needs to return a simple string.\n */\nexport interface ITemplateHelperFunction {\n  (...args: any[]): string;\n}\n\n/**\n * Allow to register and return template helpers (essentially: Utility functions that can be executed in the context of a template to render complex elements).\n */\nexport class TemplateHelpers {\n  private static helpers: { [templateName: string]: ITemplateHelperFunction; } = {};\n  public static fieldHelpers: string[] = [];\n\n  static registerFieldHelper<T1>(name: string, helper: (value: string, options?: any) => string) {\n    TemplateHelpers.fieldHelpers.push(name);\n    TemplateHelpers.registerTemplateHelper(name, helper);\n  }\n\n  static registerTemplateHelper<T1>(name: string, helper: (arg1: T1) => string);\n  static registerTemplateHelper<T1, T2>(name: string, helper: (arg1: T1, arg2: T2) => string);\n  static registerTemplateHelper<T1, T2, T3>(name: string, helper: (arg1: T1, arg2: T2, arg3: T3) => string);\n  static registerTemplateHelper<T1, T2, T3, T4>(name: string, helper: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => string);\n  static registerTemplateHelper<T1, T2, T3, T4, T5>(name: string, helper: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => string);\n  /**\n   * Register a new helper in the framework, that will be available inside all templates execution context.\n   * @param name\n   * @param helper\n   */\n  static registerTemplateHelper(name: string, helper: ITemplateHelperFunction) {\n    Assert.isNonEmptyString(name);\n    Assert.exists(helper);\n\n    TemplateHelpers.registerTemplateHelperInUnderscore(name, helper);\n    TemplateHelpers.helpers[name] = helper;\n  }\n\n  /**\n   * Return a template helper function\n   * @param name\n   * @returns {any}\n   */\n  static getHelper(name: string): ITemplateHelperFunction {\n    return Utils.getCaseInsensitiveProperty(TemplateHelpers.helpers, name);\n  }\n\n  /**\n   * Get all available helpers\n   * @returns {{}}\n   */\n  static getHelpers() {\n    return TemplateHelpers.helpers;\n  }\n\n  private static registerTemplateHelperInUnderscore(name: string, helper: ITemplateHelperFunction) {\n    Assert.isNonEmptyString(name);\n    Assert.exists(helper);\n    UnderscoreTemplate.registerTemplateHelper(name, helper);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/TemplateHelpers.ts\n **/","import { TemplateHelpers, ITemplateHelperFunction } from './TemplateHelpers';\nimport { IHighlight, IHighlightPhrase, IHighlightTerm } from '../../rest/Highlight';\nimport { HighlightUtils, StringAndHoles } from '../../utils/HighlightUtils';\nimport { IStreamHighlightOptions } from '../../utils/StreamHighlightUtils';\nimport { IDateToStringOptions, DateUtils } from '../../utils/DateUtils';\nimport { ICurrencyToStringOptions, CurrencyUtils } from '../../utils/CurrencyUtils';\nimport { IAnchorUtilsOptions, IImageUtilsOptions, AnchorUtils, ImageUtils } from '../../utils/HtmlUtils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IIconOptions, Icon } from '../Icon/Icon';\nimport { Utils } from '../../utils/Utils';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { TimeSpan, ITimeSpanUtilsOptions } from '../../utils/TimeSpanUtils';\nimport { EmailUtils } from '../../utils/EmailUtils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { TemplateCache } from './TemplateCache';\nimport { $$ } from '../../utils/Dom';\nimport { SearchEndpoint } from '../../rest/SearchEndpoint';\nimport { ResultList } from '../ResultList/ResultList';\nimport { StreamHighlightUtils } from '../../utils/StreamHighlightUtils';\nimport { FacetUtils } from '../Facet/FacetUtils';\nimport Globalize = require('globalize');\nimport { IStringMap } from '../../rest/GenericParam';\nimport { Quickview } from '../Quickview/Quickview';\nimport _ = require('underscore');\n\n/**\n * The core template helpers provided by default.\n *\n * Example usage:\n *\n * ### HTML\n * ```\n * <div class=\"CoveoFieldValue\" data-helper=\"helperName\" data-helper-options-optionName=\"option-value\"></div>\n * ```\n *\n * ### Underscore\n * ```\n * <%= helperName(argument1, argument2) %>\n * ```\n */\nexport interface ICoreHelpers {\n  /**\n   * Shortens a string so that its length does not exceed a specific number of\n   * characters. An ellipsis is appended to the string if it exceeds the\n   * maximum length.\n   *\n   * - `value`: The string to shorten.\n   * - `length`: The maximum length of the resulting string.\n   * - `highlights`: Optional. If provided, the string will be highlighted\n   *   using this highlight information.\n   * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n   */\n  shorten: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n  /**\n   * Shortens a string using an algorithm suitable for file paths. The helper\n   * will insert an ellipsis in the string where text has been removed when\n   * the path exceeds the maximum length.\n   *\n   * - `value`: The path to shorten.\n   * - `length`: The maximum length of the resulting string.\n   * - `highlights`: Optional. If provided, the string will be highlighted using\n   *   this highlight information.\n   * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n   */\n  shortenPath: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n  /**\n   * Shortens a string using an algorithm suitable for URIs. The helper will\n   * insert an ellipsis in the string where text has been removed when the URI\n   * exceeds the maximum length.\n   *\n   * - `value`: The URI to shorten.\n   * - `length`: The maximum length of the resulting string.\n   * - `highlights`: Optional. If provided, the string will be highlighted\n   *   using this highlight information.\n   * - `cssClass`: Optional. When highlighting, the name of the CSS class to use.\n   */\n  shortenUri: (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => string;\n  /**\n   * Highlights a string using the provided highlight information.\n   *\n   * - `highlights`: The highlight information to use.\n   * - `cssClass`: Optional. The name of the CSS class to use for highlighting.\n   */\n  highlight: (content: string, highlights?: IHighlight[], cssClass?: string) => string;\n  /**\n   * This helper highlights the provided terms in a given string.<br/>\n   * By default, the terms to highlight are the current query and the\n   * associated stemming words from the index.\n   * The only required parameter is the content, which specify the string that needs to be highlighted.\n   * The other parameters will normally be automatically resolved for you from the current result object.\n   *\n   * - `content`: The string content to highlight\n   * - `termsToHighlight`: Optional. The terms to highlight (see {@link IHighlightTerm})\n   * - `phraseToHighlight`: Optional. The phrases to highlight (see {@link IHighlightPhrase})\n   * - `options`: Optional. The options defined below as {@link IStreamHighlightOptions}\n   */\n  highlightStreamText: (content: string,\n    termsToHighlight: IHighlightTerm,\n    phrasesToHighlight: IHighlightPhrase,\n    options?: IStreamHighlightOptions) => string;\n  /**\n   * This helper operates exactly like the {@link highlightStreamText} helper, except\n   * that it should be used to highlight HTML content. The helper takes care\n   * of not highlighting the HTML markup.\n   *\n   * - `content`: The string content to highlight\n   * - `termsToHighlight`: Optional. The terms to highlight (see {@link IHighlightTerm})\n   * - `phraseToHighlight`: Optional. The phrases to highlight (see {@link IHighlightPhrase})\n   * - `options`: Optional. The options defined below as {@link IStreamHighlightOptions}\n   */\n  highlightStreamHTML: (content: string,\n    termsToHighlight: IHighlightTerm,\n    phrasesToHighlight: IHighlightPhrase,\n    options?: IStreamHighlightOptions) => string;\n  /**\n   * Formats a numeric value using the format string.\n   *\n   * - `value`: The numeric value to format.\n   * - `format`: The format string to use. The options available are defined by\n   *   the [Globalize](https://github.com/klaaspieter/jquery-global#numbers) library.\n   */\n  number: (content: string, format: string) => string;\n  /**\n   * Formats a date value to a date-only string using the specified options.\n   *\n   * - `value`: The Date value to format.\n   * - `options`: The options to use (see IDateToStringOptions).\n   */\n  date: (content: any, options?: IDateToStringOptions) => string;\n  /**\n   * Formats a date value to a time-only string using the sepcified options.\n   *\n   * - `value`: The Date value to format.\n   * - `options`: The options to use (see IDateToStringOptions).\n   */\n  time: (content: any, options?: IDateToStringOptions) => string;\n  /**\n   * Formats a date value to a date and time string using the specified\n   * options.\n   *\n   * - `value`: The Date value to format.\n   * - `options`: The options to use (see IDateToStringOptions).\n   */\n  dateTime: (content: any, options?: IDateToStringOptions) => string;\n  /**\n   * Formats a currency value to a string using the specified options.\n   *\n   * - `value`: The number value to format.\n   * - `options`: The options to use (see ICurrencyToStringOptions).\n   */\n  currency: (content: any, options?: ICurrencyToStringOptions) => string;\n  /**\n   * Formats a date value to a date and time string using options suitable for\n   * email dates\n   *\n   * - `value`: The Date value to format.\n   * - `options`: The options to use (see IDateToStringOptions).\n   */\n  emailDateTime: (content: any, options?: IDateToStringOptions) => string;\n  /**\n   * Renders one or several email values in `mailto:` hyperlinks.\n   *\n   * - `value`: The string or array of string that contains a list of semicolon-separated email\n   *   values. When multiple values are passed, each value is displayed in a\n   *   separate hyperlink.\n   * - `companyDomain`: The string that contains your own domain (e.g.:\n   *   coveo.com). When specified, this parameter allows email addresses\n   *   coming from your own domain to be displayed in a shortened format\n   *   (e.g.: Full Name), whereas email addresses coming from an external\n   *   domain will be displayed in an extended format (e.g.: Full Name\n   *   (domain.com)). If this parameter is not specified, then the shortened\n   *   format will automatically be used.\n   * - `me`: The string that contains the current username. If it is\n   *   specified, then the email address containing the current username will\n   *   be replaced by the localized string 'Me'.\n   * - `lengthLimit`: The number of email addresses that you want to display\n   *   before an ellipse is added (e.g.: 'From Joe, John and 5 others').<br/>\n   *   The default value is 2.\n   * - `truncateName`: When the username is available from the email address,\n   *   then you can specify if you want to truncate the full name. (e.g.:\n   *   'John S.' instead of 'John Smith').<br/>\n   *   The default value is `false`.\n   */\n  email: (value: string | string[], companyDomain?: string, me?: string, lengthLimit?: number, truncateName?: boolean) => string;\n  /**\n   * Formats a clickable HTML link (`<a>`).\n   *\n   * - `href`: The link URI\n   * - `options`: The options to use (see {@link IAnchorUtilsOptions})\n   */\n  anchor: (href: string, options?: IAnchorUtilsOptions) => string;\n  /**\n   * Formats an HTML image tag (`<img>`).\n   *\n   * - `src`: The image source URI\n   * - `options`: The options to use (see {@link IImageUtilsOptions})\n   */\n  image: (src: string, options?: IImageUtilsOptions) => string;\n  /**\n   * Formats an HTML image tag (`<img>`), and automatically uses the result\n   * object to query the REST API to get the thumbnail for this result. For\n   * example, this can be used to great effect when designing a template\n   * showing users or preview of files.\n   * - `result`: The current result object inside your template. In\n   *   underscore, it is referenced as `obj`. Optional, by default the result\n   *   will be resolved automatically from your current template function (\n   *   Meaning the nearest result in the current call stack execution inside\n   *   your template)\n   * - `endpoint`: Optional. The name of the endpoint to use for your\n   *   thumbnail. Default is default.\n   * - `options`: The options to use (see {@link IImageUtilsOptions}).\n   */\n  thumbnail: (result?: IQueryResult, endpoint?: string, options?: IImageUtilsOptions) => string;\n  /**\n   * Generates an icon based on the file type of the current result. The icon\n   * will be contained inside a `<span>` element with the appropriate CSS\n   * class.\n   *\n   * - `result`: The current result object inside your template. In\n   *   underscore, it is referenced as `obj`. *Optional*, by default the result\n   *   will be resolved automatically from your current template function (\n   *   Meaning the nearest result in the current call stack execution inside\n   *   your template)\n   * - `options`: The options to use (see {@link IIconOptions}).\n   */\n  fromFileTypeToIcon: (result?: IQueryResult, options?: IIconOptions) => string;\n  /**\n   * Loads a partial template in the current template, by passing the ID of\n   * the template to load, the condition for which this template should be\n   * loaded, and the context object (the object that the loaded template will\n   * use as its data). By default, the context object will be the same as the\n   * template that called this helper function. So, for example, in a\n   * ResultList Component, the contextObject would, by default, be the Query\n   * Results.\n   *\n   * - `templateId`: the ID of the template to load.\n   * - `condition`: The boolean condition to determine if this template should\n   *   load for this result set. Most of the time this would be a condition of\n   *   the type if raw.somefield == 'something'.\n   * - `contextObject`: The object that should be used by the loaded template\n   *   as its contextObject.\n   */\n  loadTemplate: (templateId: string, condition?: boolean, contextObject?: any) => string;\n  /**\n   * Given a number, either in millisecond or second, convert to a HH:MM:SS format.\n   *\n   * eg:\n   *\n   * `timeSpan(1, {isMilliseconds: false}) => '00:01'`\n   *\n   * `timeSpan(1000, {isMilliseconds: true}) => '00:01'`\n   *\n   * - `value`: The number to convert to a timespan\n   * - `options` : The options to use (see {@link ITimeSpanUtilsOptions})\n   */\n  timeSpan: (value: number, options: ITimeSpanUtilsOptions) => string;\n  /**\n   * Given a number, which represent a file size in bytes, format the value into a logical unit size.\n   *\n   * eg:\n   *\n   * `size(1024) => 1024 B`\n   *\n   * `size(1025) => 1 KB`\n   *\n   * `size(10240) => 10 KB`\n   */\n  size: (value: number, options?: ISizeOptions) => string;\n  /**\n   * Given a filetype value, try to return a translated and human readable version.\n   *\n   * If the filetype is known and recognized by the framework, a translated value will be returned.\n   *\n   * eg:\n   *\n   * `translatedCaption('doc') => Document`\n   *\n   * `translatedCaption('xls') => Spreadsheet Document`\n   */\n  translatedCaption: (value: string) => string;\n  /**\n   * Replace all carriage return in a string by a &lt;br /&gt; tag\n   */\n  encodeCarriageReturn: (value: string) => string;\n  /**\n   * Detect if the results is being rendered in a mobile device.\n   *\n   * If it's not a mobile device, the helper return null ;\n   *\n   * If it's a mobile device, return the type of device (Android, iPhone, iPad) etc.\n   */\n  isMobileDevice: () => string;\n\n}\n\n\n/**\n * Available options for the size templateHelpers.\n */\nexport interface ISizeOptions {\n  /**\n   * The base into which to format the value.\n   */\n  base?: number;\n  /**\n   * The precision to use to format the size.\n   */\n  precision?: number;\n}\n\nexport class CoreHelpers {\n  public constructor() {\n  }\n\n  /**\n   * For backward compatibility reason, the \"global\" template helper should be available under the\n   * coveo namespace.\n   * @param scope\n   */\n  public static exportAllHelpersGlobally(scope: IStringMap<any>) {\n    _.each(TemplateHelpers.getHelpers(), (helper: ITemplateHelperFunction, name: string) => {\n      if (scope[name] == undefined) {\n        scope[name] = helper;\n      }\n    });\n  }\n}\n\nTemplateHelpers.registerFieldHelper('javascriptEncode', (value: string) => {\n  return Utils.exists(value) ? StringUtils.javascriptEncode(value) : undefined;\n});\n\nTemplateHelpers.registerTemplateHelper('shorten', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n  var strAndHoles = StringAndHoles.shortenString(content, length, '...');\n\n  if (Utils.exists(highlights)) {\n    return HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n  } else {\n    return strAndHoles.value;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('shortenPath', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n  var strAndHoles = StringAndHoles.shortenPath(content, length);\n\n  if (Utils.exists(highlights)) {\n    return HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n  } else {\n    return strAndHoles.value;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('shortenUri', (content: string, length: number, highlights?: IHighlight[], cssClass?: string) => {\n  var strAndHoles = StringAndHoles.shortenUri(content, length);\n\n  if (Utils.exists(highlights)) {\n    return HighlightUtils.highlightString(strAndHoles.value, highlights, strAndHoles.holes, cssClass || 'highlight');\n  } else {\n    return strAndHoles.value;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('highlight', (content: string, highlights: IHighlight[], cssClass?: string) => {\n  if (Utils.exists(content)) {\n    if (Utils.exists(highlights)) {\n      return HighlightUtils.highlightString(content, highlights, null, cssClass || 'highlight');\n    } else {\n      return content;\n    }\n  } else {\n    return undefined;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('highlightStreamText', (content: string, termsToHighlight = resolveTermsToHighlight(), phrasesToHighlight = resolvePhrasesToHighlight(), opts?: IStreamHighlightOptions) => {\n  if (Utils.exists(content) && Utils.exists(termsToHighlight) && Utils.exists(phrasesToHighlight)) {\n    if (termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight)) {\n      return StreamHighlightUtils.highlightStreamText(content, termsToHighlight, phrasesToHighlight, opts);\n    } else {\n      return content;\n    }\n  } else {\n    return undefined;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('highlightStreamHTML', (content: string, termsToHighlight = resolveTermsToHighlight(), phrasesToHighlight = resolvePhrasesToHighlight(), opts?: IStreamHighlightOptions) => {\n  if (Utils.exists(content) && Utils.exists(termsToHighlight) && Utils.exists(phrasesToHighlight)) {\n    if (termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight)) {\n      return StreamHighlightUtils.highlightStreamHTML(content, termsToHighlight, phrasesToHighlight, opts);\n    } else {\n      return content;\n    }\n  } else {\n    return undefined;\n  }\n});\n\nTemplateHelpers.registerFieldHelper('number', (value: any, options?: any) => {\n  var numberValue = Number(value);\n  if (Utils.exists(value)) {\n    if (_.isString(options)) {\n      return StringUtils.htmlEncode(Globalize.format(numberValue, <string>options));\n    } else {\n      return StringUtils.htmlEncode(numberValue.toString());\n    }\n  } else {\n    return undefined;\n  }\n});\n\nTemplateHelpers.registerFieldHelper('date', (value: any, options?: IDateToStringOptions) => {\n  return DateUtils.dateToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('time', (value: any, options?: IDateToStringOptions) => {\n  return DateUtils.timeToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('dateTime', (value: any, options?: IDateToStringOptions) => {\n  return DateUtils.dateTimeToString(DateUtils.convertFromJsonDateIfNeeded(value), options);\n});\n\nTemplateHelpers.registerFieldHelper('emailDateTime', (value: any, options?: IDateToStringOptions) => {\n  var defaultOptions = <IDateToStringOptions>{};\n  defaultOptions.includeTimeIfThisWeek = true;\n  var optionsToUse = <IDateToStringOptions>_.extend(options, defaultOptions);\n  return value ? DateUtils.dateTimeToString(DateUtils.convertFromJsonDateIfNeeded(value), optionsToUse) : undefined;\n});\n\nTemplateHelpers.registerFieldHelper('currency', (value: any, options?: ICurrencyToStringOptions) => {\n  return CurrencyUtils.currencyToString(value, options);\n});\n\nTemplateHelpers.registerFieldHelper('timeSpan', (value: any, options: ITimeSpanUtilsOptions = { isMilliseconds: false }) => {\n  return new TimeSpan(value, options.isMilliseconds).getHHMMSS();\n});\n\nTemplateHelpers.registerFieldHelper('email', (value: string | string[], ...args: any[]) => {\n  // support old arguments (value: any, companyDomain: string, me: string, lengthLimit = 2, truncateName = false)\n  var companyDomain: string;\n  var me: string;\n  var lengthLimit: number;\n  var truncateName: boolean;\n  if (_.isObject(args[0])) {\n    companyDomain = args[0]['companyDomain'];\n    me = args[0]['me'];\n    lengthLimit = args[0]['lengthLimit'];\n    truncateName = args[0]['truncateName'];\n  } else {\n    companyDomain = args[0];\n    me = args[1];\n    lengthLimit = args[2];\n    truncateName = args[3];\n  }\n  if (lengthLimit == undefined) {\n    lengthLimit = 2;\n  }\n  if (truncateName == undefined) {\n    truncateName = false;\n  }\n  if (_.isString(value)) {\n    var listOfAddresses = EmailUtils.splitSemicolonSeparatedListOfEmailAddresses(<string>value);\n    return EmailUtils.emailAddressesToHyperlinks(listOfAddresses, companyDomain, me, lengthLimit, truncateName);\n  } else if (_.isArray(value)) {\n    return EmailUtils.emailAddressesToHyperlinks(<string[]>value, companyDomain, me, lengthLimit, truncateName);\n  } else {\n    return undefined;\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('excessEmailToggle', (target: HTMLElement) => {\n  $$(target).removeClass('coveo-active');\n  if ($$(target).hasClass('coveo-emails-excess-collapsed')) {\n    _.each($$(target).siblings('.coveo-emails-excess-expanded'), (sibling) => {\n      $$(sibling).addClass('coveo-active');\n    });\n  } else if ($$(target).hasClass('coveo-hide-expanded')) {\n    $$(target.parentElement).addClass('coveo-inactive');\n    _.each($$(target.parentElement).siblings('.coveo-emails-excess-collapsed'), (sibling) => {\n      $$(sibling).addClass('coveo-active');\n    });\n  }\n  return undefined;\n});\n\nTemplateHelpers.registerFieldHelper('anchor', (href: string, options?: IAnchorUtilsOptions) => {\n  return AnchorUtils.buildAnchor(href, options);\n});\n\nTemplateHelpers.registerFieldHelper('image', (src: string, options?: IImageUtilsOptions) => {\n  return ImageUtils.buildImage(src, options);\n});\n\nTemplateHelpers.registerTemplateHelper('thumbnail', (result: IQueryResult = resolveQueryResult(), endpoint: string = 'default', options?: IImageUtilsOptions) => {\n  if (QueryUtils.hasThumbnail(result)) {\n    return ImageUtils.buildImageFromResult(result, SearchEndpoint.endpoints[endpoint], options);\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('fromFileTypeToIcon', (result: IQueryResult = resolveQueryResult(), options: IIconOptions = {}) => {\n  return Icon.createIcon(result, options).outerHTML;\n});\n\nTemplateHelpers.registerTemplateHelper('attrEncode', (value: string) => {\n  return ('' + value)/* Forces the conversion to string. */\n    .replace(/&/g, '&amp;')/* This MUST be the 1st replacement. */\n    .replace(/'/g, '&apos;')/* The 4 other predefined entities, required. */\n    .replace(/'/g, '&quot;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n});\n\nTemplateHelpers.registerTemplateHelper('loadTemplates', (templatesToLoad: { [id: string]: any }, once = true) => {\n  var ret = '';\n  var data = resolveQueryResult();\n  var atLeastOneWasLoaded = false;\n  var toLoad = templatesToLoad;\n  var defaultTmpl;\n  _.each(templatesToLoad, (value, key?, obj?) => {\n    if (value == 'default') {\n      defaultTmpl = key;\n    }\n  });\n  if (defaultTmpl != undefined) {\n    toLoad = _.omit(templatesToLoad, defaultTmpl);\n  }\n  _.each(toLoad, (condition, id?, obj?) => {\n    if (!atLeastOneWasLoaded || !once) {\n      atLeastOneWasLoaded = atLeastOneWasLoaded || condition;\n      ret += TemplateHelpers.getHelper('loadTemplate')(id, condition, data);\n    }\n  });\n  if (!atLeastOneWasLoaded && defaultTmpl != undefined) {\n    ret += TemplateHelpers.getHelper('loadTemplate')(defaultTmpl, true, data);\n  }\n  return ret;\n});\n\nconst byteMeasure = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB'];\n\nTemplateHelpers.registerFieldHelper('size', (value: any, options?: ISizeOptions) => {\n  var size = parseInt(value, 10);\n  var precision = (options != null && options.precision != null ? options.precision : 2);\n  var base = (options != null && options.base != null ? options.base : 0);\n  while (size > 1024 && base + 1 < byteMeasure.length) {\n    size /= 1024;\n    base++;\n  }\n  size = Math.floor(size * Math.pow(10, precision)) / Math.pow(10, precision);\n  return size + ' ' + byteMeasure[base];\n});\n\nTemplateHelpers.registerFieldHelper('translatedCaption', (value: string) => {\n  return FacetUtils.tryToGetTranslatedCaption('@filetype', value);\n});\n\nTemplateHelpers.registerTemplateHelper('loadTemplate', (id: string, condition: boolean = true, data?: any) => {\n  if (Utils.isNullOrUndefined(data)) {\n    data = resolveQueryResult();\n  }\n  if (condition) {\n    return TemplateCache.getTemplate(id).instantiateToString(data, {\n      checkCondition: false\n    });\n  }\n  return '';\n});\n\nTemplateHelpers.registerTemplateHelper('encodeCarriageReturn', (data: string) => {\n  if (Utils.isNullOrUndefined(data)) {\n    return undefined;\n  } else {\n    return StringUtils.encodeCarriageReturn(data);\n  }\n});\n\nTemplateHelpers.registerTemplateHelper('isMobileDevice', () => {\n  return DeviceUtils.isMobileDevice() ? DeviceUtils.getDeviceName() : null;\n});\n\nfunction resolveQueryResult(): IQueryResult {\n  return ResultList.resultCurrentlyBeingRendered || Quickview.resultCurrentlyBeingRendered;\n}\n\nfunction resolveTermsToHighlight(): IHighlightTerm {\n  let currentQueryResult = resolveQueryResult();\n  if (currentQueryResult) {\n    return currentQueryResult.termsToHighlight;\n  }\n}\n\nfunction resolvePhrasesToHighlight(): IHighlightPhrase {\n  let currentQueryResult = resolveQueryResult();\n  if (currentQueryResult) {\n    return currentQueryResult.phrasesToHighlight;\n  }\n}\n\nfunction termsToHighlightAreDefined(termsToHighlight, phrasesToHighlight) {\n  return Utils.isNonEmptyArray(_.keys(termsToHighlight)) || Utils.isNonEmptyArray(_.keys(phrasesToHighlight));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/CoreHelpers.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { Utils } from '../../utils/Utils';\nimport { FileTypes, IFileTypeInfo } from '../Misc/FileTypes';\nimport { Quickview } from '../Quickview/Quickview';\nimport { $$ } from '../../utils/Dom';\n\n/**\n * Available options for the {@link Icon} component.\n */\nexport interface IIconOptions {\n  value?: string;\n  small?: boolean;\n  withLabel?: boolean;\n  labelValue?: string;\n}\n\n/**\n * The Icon component outputs the corresponding icon for a given file type. The component searches for a suitable icon\n * from those available in the Coveo JavaScript Search Framework. If the component finds no suitable icon, it instead\n * outputs a generic icon.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class Icon extends Component {\n  static ID = 'Icon';\n\n  /**\n   * The options for the Icon\n   * @componentOptions\n   */\n  static options: IIconOptions = {\n\n    /**\n     * Specifies the value that the Icon component should output as its CSS class instead of the auto-selected value.\n     *\n     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework outputs a suitable icon\n     * depending on the result file type.\n     */\n    value: ComponentOptions.buildIconOption(),\n\n    /**\n     * Specifies whether the Icon component should output the smaller version of the icon instead of the regular one.\n     *\n     * Default value is `undefined`.\n     */\n    small: ComponentOptions.buildBooleanOption(),\n\n    /**\n     * Specifies whether the Icon component should force the output icon to display its caption/label.\n     *\n     * **Note:**\n     *\n     * > Due to limited screen real estate, setting this option to `true` has no effect on icons used inside Coveo for\n     * > Salesforce Insight Panels.\n     *\n     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework determines whether the icon\n     * needs to display a caption/label depending on the result file type.\n     */\n    withLabel: ComponentOptions.buildBooleanOption(),\n\n    /**\n     * Specifies what text to display as the icon caption/label.\n     *\n     * Default value is `undefined`, which means that the Coveo JavaScript Search Framework determines what text the icon\n     * needs to display depending on the result file type.\n     */\n    labelValue: ComponentOptions.buildLocalizedStringOption()\n  };\n\n  static fields = [\n    'objecttype',\n    'filetype',\n  ];\n\n  /**\n   * Creates a new Icon component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Icon component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IIconOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, Icon.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Icon, options);\n    this.result = this.result || this.resolveResult();\n    Assert.exists(this.result);\n\n    var possibleInternalQuickview = $$(this.element).find('.' + Component.computeCssClassNameForType(Quickview.ID));\n    if (!Utils.isNullOrUndefined(possibleInternalQuickview) && QueryUtils.hasHTMLVersion(this.result)) {\n      $$(this.element).addClass('coveo-with-quickview');\n      $$(this.element).on('click', () => {\n        var qv: Quickview = <Quickview>Component.get(possibleInternalQuickview);\n        qv.open();\n      });\n    }\n\n    Icon.createIcon(this.result, this.options, element, bindings);\n  }\n\n  static createIcon(result: IQueryResult, options: IIconOptions = {}, element: HTMLElement = $$('div').el, bindings?: IComponentBindings) {\n    var info = FileTypes.get(result);\n\n\n    if (!bindings && result.searchInterface) {\n      // try to resolve results bindings automatically\n      bindings = result.searchInterface.getBindings();\n    }\n    info = Icon.preprocessIconInfo(options, info);\n    $$(element).toggleClass('coveo-small', options.small === true);\n\n    if (options.value != undefined) {\n      if (options.small === true) {\n        if (options.value.indexOf('-small') == -1) {\n          info.icon += '-small';\n        }\n      }\n      if (options.small === false) {\n        if (options.value.indexOf('-small') != -1) {\n          info.icon = info.icon.replace('-small', '');\n        }\n      }\n    }\n    $$(element).addClass(info.icon);\n    element.setAttribute('title', info.caption);\n\n    if (Icon.shouldDisplayLabel(options, bindings)) {\n      element.appendChild($$('span', {\n        className: 'coveo-icon-caption-overlay'\n      }, info.caption).el);\n      $$(element).addClass('coveo-icon-with-caption-overlay');\n      $$(element).setAttribute('data-with-label', 'true');\n    }\n    return element;\n  }\n\n  static shouldDisplayLabel(options: IIconOptions, bindings: IComponentBindings) {\n    // Display only in new design.\n    // If withLabel is explicitely set to false, the label will never display\n    // If withLabel is explicitely set to true, the label will always display\n    // If withLabel is set to default value (not a hard true or false), the label will display based on ./core/filetypes/**.json\n    // with the property shouldDisplayLabel set on each file type/ objecttype\n    // In this case, the generated css will take care of outputting the correct css to display : block\n    return bindings && bindings.searchInterface.isNewDesign() && options.withLabel !== false;\n  }\n\n  static preprocessIconInfo(options: IIconOptions, info: IFileTypeInfo) {\n    if (options.labelValue != null) {\n      info.caption = options.labelValue;\n    }\n    if (options.value != null) {\n      info.icon = 'coveo-icon ' + options.value;\n    }\n    if (info.caption == null) {\n      info.caption = '';\n    }\n    if (info.icon == null) {\n      info.icon = 'coveo-icon coveo-sprites-custom';\n    }\n    return info;\n  }\n}\nInitialization.registerAutoCreateComponent(Icon);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Icon/Icon.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, ComponentOptionsType } from '../Base/ComponentOptions';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { Template } from '../Templates/Template';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { $$, Dom } from '../../utils/Dom';\nimport { DefaultQuickviewTemplate } from './DefaultQuickviewTemplate';\nimport { ResultListEvents } from '../../events/ResultListEvents';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { QuickviewDocument } from './QuickviewDocument';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { QuickviewEvents } from '../../events/QuickviewEvents';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport { ModalBox as ModalBoxModule } from '../../ExternalModulesShim';\n\nexport interface IQuickviewOptions {\n  title?: string;\n  showDate?: boolean;\n  contentTemplate?: Template;\n  enableLoadingAnimation?: boolean;\n  loadingAnimation?: HTMLElement;\n  alwaysShow?: boolean;\n  size?: string;\n}\n\ninterface IQuickviewOpenerObject {\n  content: Dom;\n  loadingAnimation: HTMLElement;\n}\n\n/**\n * This component is meant to exist within a result template.\n * It allows to create a button/link inside the result list that opens a modal box for a given result.\n *\n * Most of the time, this component will reference a {@link QuickviewDocument} in its content template.\n *\n * ## Choosing what to display for the Quickview\n * The Quick View uses any HTML structure you put inside its tag and uses that as the content of the dialog box. This content can thus be any element you decide, using your CSS and your structure.\n *\n * ## Example\n * - You can change the appearance of the Quick View link by adding HTML inside the body of the div.\n *\n * - You can change the content of the Quick View link by specifying a template ID.\n *\n * - You can use the methods of the [CoreHelpers]{@link ICoreHelpers} in the template.\n *\n * ```html\n * <!-- This would change the appearance of the quickview button itself in the result. -->\n * <div class=\"CoveoQuickview\" data-template-id=\"TemplateId\">\n *   <span>Click here for Quickview</span>\n * </div>\n *\n * <!-- This would modify the content of the quickview when it is opened in the modal box -->\n * <script class='result-template' type='text/underscore' id='TemplateId' >\n *   <div>\n *     <span>This is the content that will be displayed when you open the Quick View. You can also include any other Coveo components.</span>\n *     <table class=\"CoveoFieldTable\">\n *       <tr data-field=\"@liboardshorttitle\" data-caption=\"Board\" />\n *       <tr data-field=\"@licategoryshorttitle\" data-caption=\"Category\" />\n *       <tr data-field=\"@sysauthor\" data-caption=\"Author\" />\n *     </table>\n *   </div>\n * </script>\n *\n * <!-- Note that this is all optional: Just including a <div class='CoveoQuickview'></div> will do the job most of the time, and will include a default template and default button appearance -->\n * ```\n */\nexport class Quickview extends Component {\n  static ID = 'Quickview';\n\n  static fields = [\n    'urihash', // analytics\n    'collection', // analytics\n    'source', // analytics,\n    'author' // analytics\n  ];\n\n  /**\n   * @componentOptions\n   */\n  static options: IQuickviewOptions = {\n    /**\n     * Specifies whether the quickview is always shown, even when the index body for a document is empty.<br/>\n     * In such cases, the {@link Quickview.options.contentTemplate} specifies what appears in the quickview.<br/>\n     * If there is no quickview for the document, you *MUST* specify a contentTemplate otherwise the component will throw an error when opened.\n     */\n    alwaysShow: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n    /**\n     * Specifies the title of your choice that appears at the top of the Quick View modal window.\n     */\n    title: ComponentOptions.buildStringOption(),\n    /**\n     * Specifies whether to show the document date in the Quick View modal window header.<br/>\n     * The default value is `true`.\n     */\n    showDate: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    enableLoadingAnimation: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    /**\n     * Specifies the template to use to present the Quick View content in the modal window.<br/>\n     * e.g.: <br/>\n     *     <div class=\"CoveoQuickview\" data-template-id=\"TemplateId\"></div>\n     *     <div class=\"CoveoQuickview\" data-template-selector=\".templateSelector\"></div>\n     */\n    contentTemplate: ComponentOptions.buildTemplateOption({\n      selectorAttr: 'data-template-selector',\n      idAttr: 'data-template-id'\n    }),\n    loadingAnimation: ComponentOptions.buildOption<HTMLElement>(ComponentOptionsType.NONE, (element: HTMLElement) => {\n      let loadingAnimationSelector = element.getAttribute('data-loading-animation-selector');\n      if (loadingAnimationSelector != null) {\n        let loadingAnimation = $$(document.documentElement).find(loadingAnimationSelector);\n        if (loadingAnimation != null) {\n          $$(loadingAnimation).detach();\n          return loadingAnimation;\n        }\n      }\n      let id = element.getAttribute('data-loading-animation-template-id');\n      if (id != null) {\n        let loadingAnimationTemplate = ComponentOptions.loadResultTemplateFromId(id);\n        if (loadingAnimationTemplate) {\n          return loadingAnimationTemplate.instantiateToElement(undefined, {\n            checkCondition: false\n          });\n        }\n      }\n      return DomUtils.getBasicLoadingAnimation();\n    }),\n    /**\n     * Specifies the Quick View modal window size (width and height) relative to the full window.<br/>\n     * The default value is 95% on a desktop and 100% on a mobile device.\n     */\n    size: ComponentOptions.buildStringOption({ defaultValue: DeviceUtils.isMobileDevice() ? '100%' : '95%' })\n  };\n\n  public static resultCurrentlyBeingRendered: IQueryResult = null;\n\n  private modalbox: Coveo.ModalBox.ModalBox;\n  private bindedHandleEscapeEvent = this.handleEscapeEvent.bind(this);\n\n  constructor(public element: HTMLElement, public options?: IQuickviewOptions, public bindings?: IResultsComponentBindings, public result?: IQueryResult, private ModalBox = ModalBoxModule) {\n    super(element, Quickview.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Quickview, options);\n\n    if (this.options.contentTemplate == null) {\n      this.options.contentTemplate = new DefaultQuickviewTemplate();\n    }\n\n    // If there is no content inside the Quickview div,\n    // we need to add something that will show up in the result template itself\n    if (/^\\s*$/.test(this.element.innerHTML)) {\n      let iconForQuickview = $$('div');\n      iconForQuickview.addClass('coveo-icon-for-quickview');\n      if (this.searchInterface.isNewDesign()) {\n        let captionForQuickview = $$(\n          'div',\n          { className: 'coveo-caption-for-quickview', tabindex: 0 },\n          'Quickview'.toLocaleString()\n        ).el;\n        let div = $$('div');\n        div.append(iconForQuickview.el);\n        div.append(captionForQuickview);\n        $$(this.element).append(div.el);\n      } else {\n        iconForQuickview.text('Quickview'.toLocaleString());\n        $$(this.element).append(iconForQuickview.el);\n      }\n    }\n\n    this.bindClick(result);\n    if (this.bindings.resultElement) {\n      this.bind.on(this.bindings.resultElement, ResultListEvents.openQuickview, () => this.open());\n    }\n  }\n\n  /**\n   * Open the quickview\n   */\n  public open() {\n    if (this.modalbox == null) {\n      // To prevent the keyboard from opening on mobile if the search bar has focus\n      Quickview.resultCurrentlyBeingRendered = this.result;\n      $$(<HTMLElement>document.activeElement).trigger('blur');\n\n      let openerObject = this.prepareOpenQuickviewObject();\n      this.createModalBox(openerObject);\n      this.bindQuickviewEvents(openerObject);\n      this.animateAndOpen();\n      this.queryStateModel.set(QueryStateModel.attributesEnum.quickview, this.getHashId());\n      Quickview.resultCurrentlyBeingRendered = null;\n    }\n  }\n\n  /**\n   * Close the quickview\n   */\n  public close() {\n    if (this.modalbox != null) {\n      this.modalbox.close();\n      this.modalbox = null;\n      $$(document.body).off('keyup', this.bindedHandleEscapeEvent);\n    }\n  }\n\n  public getHashId() {\n    return this.result.queryUid + '.' + this.result.index + '.' + StringUtils.hashCode(this.result.uniqueId);\n  }\n\n  private bindClick(result: IQueryResult) {\n    if (typeof result.hasHtmlVersion == 'undefined' || result.hasHtmlVersion || this.options.alwaysShow) {\n      const clickAction = () => this.open();\n      $$(this.element).on('click', clickAction);\n      this.bind.on(this.element, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clickAction));\n    } else {\n      this.element.style.display = 'none';\n    }\n  }\n\n  private bindQuickviewEvents(openerObject: IQuickviewOpenerObject) {\n\n    let closeButton = $$(this.modalbox.wrapper).find('.coveo-quickview-close-button');\n    $$(closeButton).on('click', () => {\n      this.closeQuickview();\n      this.close();\n    });\n\n    $$(this.modalbox.overlay).on('click', () => {\n      this.closeQuickview();\n    });\n\n    $$(this.modalbox.content).on(QuickviewEvents.quickviewLoaded, () => {\n      $$(openerObject.loadingAnimation).remove();\n      this.bindIFrameEscape();\n    });\n\n    this.bindEscape();\n  }\n\n  private animateAndOpen() {\n    let animationDuration = this.modalbox.wrapper.style.animationDuration;\n    let quickviewDocument = $$(this.modalbox.modalBox).find('.' + Component.computeCssClassName(QuickviewDocument));\n    if (quickviewDocument) {\n      if (animationDuration) {\n        let duration = /^(.+)(ms|s)$/.exec(animationDuration);\n        let durationMs = Number(duration[1]) * (duration[2] == 's' ? 1000 : 1);\n        // open the QuickviewDocument\n        setTimeout(() => {\n          if (this.modalbox != null) {\n            Initialization.dispatchNamedMethodCallOrComponentCreation('open', quickviewDocument, null);\n          }\n        }, durationMs);\n      } else {\n        Initialization.dispatchNamedMethodCallOrComponentCreation('open', quickviewDocument, null);\n      }\n    }\n  }\n\n  private createModalBox(openerObject: IQuickviewOpenerObject) {\n    let computedModalBoxContent = $$('div');\n    computedModalBoxContent.append(openerObject.content.el);\n    this.modalbox = this.ModalBox.open(computedModalBoxContent.el, {\n      title: DomUtils.getQuickviewHeader(this.result, {\n        showDate: this.options.showDate,\n        title: this.options.title\n      }, this.bindings).el.outerHTML,\n      className: 'coveo-quick-view',\n      validation: () => true,\n      body: this.element.ownerDocument.body\n    });\n    this.setQuickviewSize();\n  }\n\n  private prepareOpenQuickviewObject() {\n    let loadingAnimation = this.options.loadingAnimation;\n    return {\n      loadingAnimation: loadingAnimation,\n      content: this.prepareQuickviewContent(loadingAnimation)\n    };\n  }\n\n  private prepareQuickviewContent(loadingAnimation: HTMLElement) {\n    let content = $$(this.options.contentTemplate.instantiateToElement(this.result));\n    let initOptions = this.searchInterface.options;\n    let initParameters: IInitializationParameters = {\n      options: initOptions,\n      bindings: this.getBindings(),\n      result: this.result\n    };\n    Initialization.automaticallyCreateComponentsInside(content.el, initParameters);\n    if (content.find('.' + Component.computeCssClassName(QuickviewDocument)) != undefined && this.options.enableLoadingAnimation) {\n      content.prepend(loadingAnimation);\n    }\n    return content;\n  }\n\n  private bindEscape() {\n    $$(document.body).on('keyup', this.bindedHandleEscapeEvent);\n  }\n\n  private bindIFrameEscape() {\n    let quickviewDocument = $$(this.modalbox.content).find('.' + Component.computeCssClassName(QuickviewDocument));\n    quickviewDocument = $$(quickviewDocument).find('iframe');\n    let body = (<HTMLIFrameElement>quickviewDocument).contentWindow.document.body;\n    $$(body).on('keyup', this.bindedHandleEscapeEvent);\n  }\n\n  private closeQuickview() {\n    this.queryStateModel.set(QueryStateModel.attributesEnum.quickview, '');\n  }\n\n  private setQuickviewSize() {\n    let wrapper = $$($$(this.modalbox.modalBox).find('.coveo-wrapper'));\n    wrapper.el.style.width = this.options.size;\n    wrapper.el.style.height = this.options.size;\n    wrapper.el.style.maxWidth = this.options.size;\n    wrapper.el.style.maxHeight = this.options.size;\n  }\n\n  private handleEscapeEvent(e: KeyboardEvent) {\n    if (e.keyCode == KEYBOARD.ESCAPE) {\n      this.closeQuickview();\n      this.close();\n    }\n  }\n}\nInitialization.registerAutoCreateComponent(Quickview);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Quickview/Quickview.ts\n **/","import { Template } from '../Templates/Template';\nimport { IQueryResult } from '../../rest/QueryResult';\n\nexport class DefaultQuickviewTemplate extends Template {\n\n  constructor() {\n    super();\n  }\n\n  instantiateToString(queryResult?: IQueryResult): string {\n    return '<div class=\"coveo-quick-view-full-height\"><div class=\"CoveoQuickviewDocument\"></div></div>';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Quickview/DefaultQuickviewTemplate.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { $$, Dom } from '../../utils/Dom';\nimport { IOpenQuickviewEventArgs } from '../../events/ResultListEvents';\nimport { QuickviewEvents, IQuickviewLoadedEventArgs } from '../../events/QuickviewEvents';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { Utils } from '../../utils/Utils';\nimport { ColorUtils } from '../../utils/ColorUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { IQuery } from '../../rest/Query';\nimport { IViewAsHtmlOptions } from '../../rest/SearchEndpointInterface';\nimport { AjaxError } from '../../rest/AjaxError';\nimport { l } from '../../strings/Strings';\nimport _ = require('underscore');\n\nconst HIGHLIGHT_PREFIX = 'CoveoHighlight';\n\nexport interface IQuickviewDocumentOptions {\n  maximumDocumentSize?: number;\n}\n\ninterface IWord {\n  text: string;\n  count: number;\n  index: number;\n  termsCount: number;\n  element: HTMLElement;\n  occurence: number;\n}\n\ninterface IWordState {\n  word: IWord;\n  color: string;\n  currentIndex: number;\n  index: number;\n}\n\n/**\n * The QuickviewDocument component is meant to exist within Result Templates, more specifically inside a {@link Quickview} component.\n * The sole purpose of this component is to include an iframe which will load the correct HTML version of the current document.\n * By default, this component is included in the default template for a {@link Quickview} component.\n */\nexport class QuickviewDocument extends Component {\n  static ID = 'QuickviewDocument';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IQuickviewDocumentOptions = {\n    /**\n     * Specifies the maximum document size (the preview) that should be returned by the index.\n     *\n     * By default its value is 0, and the whole preview is returned.\n     */\n    maximumDocumentSize: ComponentOptions.buildNumberOption({ defaultValue: 0, min: 0 }),\n  };\n\n  private iframe: Dom;\n  private header: Dom;\n  private termsToHighlightWereModified: boolean;\n  private keywordsState: IWordState[];\n\n  /**\n   * Create a new instance of the component\n   * @param element\n   * @param options\n   * @param bindings\n   * @param result\n   */\n  constructor(public element: HTMLElement, public options?: IQuickviewDocumentOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, QuickviewDocument.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, QuickviewDocument, options);\n    this.result = result || this.resolveResult();\n    this.termsToHighlightWereModified = false;\n    Assert.exists(this.result);\n  }\n\n  public createDom() {\n    let container = $$('div');\n    container.addClass('coveo-quickview-document');\n    this.element.appendChild(container.el);\n\n    this.header = this.buildHeader();\n    this.iframe = this.buildIFrame();\n\n    container.append(this.header.el);\n    container.append(this.iframe.el);\n  }\n\n  public open() {\n    this.ensureDom();\n    let documentURL = $$(this.element).getAttribute('href');\n    if (documentURL == undefined || documentURL == '') {\n      documentURL = this.result.clickUri;\n    }\n    this.usageAnalytics.logClickEvent(analyticsActionCauseList.documentQuickview, {\n      author: Utils.getFieldValue(this.result, 'author'),\n      documentURL: documentURL,\n      documentTitle: this.result.title\n    }, this.result, this.queryController.element);\n    let beforeLoad = (new Date()).getTime();\n    let iframe = <HTMLIFrameElement>this.iframe.find('iframe');\n    iframe.src = 'about:blank';\n    let endpoint = this.queryController.getEndpoint();\n\n    let termsToHighlight = _.keys(this.result.termsToHighlight);\n    let dataToSendOnOpenQuickView: IOpenQuickviewEventArgs = {\n      termsToHighlight: termsToHighlight\n    };\n\n    $$(this.element).trigger(QuickviewEvents.openQuickview, dataToSendOnOpenQuickView);\n    this.checkIfTermsToHighlightWereModified(dataToSendOnOpenQuickView.termsToHighlight);\n\n    let queryObject = _.extend({}, this.getBindings().queryController.getLastQuery());\n\n    if (this.termsToHighlightWereModified) {\n      this.handleTermsToHighlight(dataToSendOnOpenQuickView.termsToHighlight, queryObject);\n    }\n\n    let callOptions: IViewAsHtmlOptions = {\n      queryObject: queryObject,\n      requestedOutputSize: this.options.maximumDocumentSize\n    };\n\n    endpoint.getDocumentHtml(this.result.uniqueId, callOptions)\n      .then((html: HTMLDocument) => {\n        // If the contentDocument is null at this point it means that the Quick View\n        // was closed before we've finished loading it. In this case do nothing.\n        if (iframe.contentDocument == null) {\n          return;\n        }\n\n        this.renderHTMLDocument(iframe, html);\n        this.triggerQuickviewLoaded(beforeLoad);\n      })\n      .catch((error: AjaxError) => {\n        // If the contentDocument is null at this point it means that the Quick View\n        // was closed before we've finished loading it. In this case do nothing.\n        if (iframe.contentDocument == null) {\n          return;\n        }\n\n        if (error.status != 0) {\n          this.renderErrorReport(iframe, error.status);\n          this.triggerQuickviewLoaded(beforeLoad);\n        } else {\n          iframe.onload = () => {\n            this.triggerQuickviewLoaded(beforeLoad);\n          };\n          iframe.src = endpoint.getViewAsHtmlUri(this.result.uniqueId, callOptions);\n        }\n      });\n  }\n\n  protected renderHTMLDocument(iframe: HTMLIFrameElement, html: HTMLDocument) {\n    iframe.onload = () => {\n      this.computeHighlights(iframe.contentWindow);\n\n      // Remove white border for new Quickview\n      if (this.isNewQuickviewDocument(iframe.contentWindow)) {\n        let body = $$(this.element).closest('.coveo-body');\n        body.style.padding = '0';\n        let header = $$(this.element).find('.coveo-quickview-header');\n        header.style.paddingTop = '10';\n        header.style.paddingLeft = '10';\n      }\n\n      if ($$(this.element).find('.coveo-quickview-header').innerHTML == '') {\n        $$(this.element).find('.coveo-quickview-header').style.display = 'none';\n      }\n    };\n\n    this.writeToIFrame(iframe, html);\n    this.wrapPreElementsInIframe(iframe);\n  }\n\n\n  private renderErrorReport(iframe: HTMLIFrameElement, errorStatus: number) {\n    let errorString = '';\n    if (errorStatus == 400) {\n      errorString = 'NoQuickview';\n    } else {\n      errorString = 'OopsError';\n    }\n    let errorMessage = `<html><body style='font-family: Arimo, \\'Helvetica Neue\\', Helvetica, Arial, sans-serif; -webkit-text-size-adjust: none;' >${l(errorString)} </body></html>`;\n    this.writeToIFrame(iframe, errorMessage);\n  }\n\n  private writeToIFrame(iframe: HTMLIFrameElement, content: HTMLDocument);\n  private writeToIFrame(iframe: HTMLIFrameElement, content: String);\n  private writeToIFrame(iframe: HTMLIFrameElement, content: any) {\n    let toWrite = content;\n    // This sucks because we can't do instanceof HTMLDocument\n    // lib.d.ts declare HTMLDocument as an interface, not an actual object\n    if (typeof content == 'object') {\n      toWrite = content.getElementsByTagName('html')[0].outerHTML;\n    }\n\n    iframe.contentWindow.document.open();\n    iframe.contentWindow.document.write(toWrite);\n    iframe.contentWindow.document.close();\n  }\n\n  private wrapPreElementsInIframe(iframe: HTMLIFrameElement) {\n    try {\n      let style = document.createElement('style');\n      style.type = 'text/css';\n\n      // This CSS forces <pre> tags used in some emails to wrap by default\n      let cssText = 'html pre { white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; }';\n\n      // Some people react strongly when presented with their browser's default font, so let's fix that\n      cssText += 'body, html { font-family: Arimo, \\'Helvetica Neue\\', Helvetica, Arial, sans-serif; -webkit-text-size-adjust: none; }';\n\n      if (DeviceUtils.isIos()) {\n        // Safari on iOS forces resize iframes to fit their content, even if an explicit size\n        // is set on the iframe. Isn't that great? By chance there is a trick around it: by\n        // setting a very small size on the body and instead using min-* to set the size to\n        // 100% we're able to trick Safari from thinking it must expand the iframe. Amazed.\n        // The 'scrolling' part is required otherwise the hack doesn't work.\n        //\n        // http://stackoverflow.com/questions/23083462/how-to-get-an-iframe-to-be-responsive-in-ios-safari\n        cssText += 'body, html { height: 1px !important; min-height: 100%; width: 1px !important; min-width: 100%; overflow: scroll; }';\n        $$(iframe).setAttribute('scrolling', 'no');\n\n        // Some content is cropped on iOs if a margin is present\n        // We remove it and add one on the iframe wrapper.\n        cssText += 'body, html {margin: auto}';\n        iframe.parentElement.style.margin = '0 0 5px 5px';\n      }\n\n      if ('styleSheet' in style) {\n        style['styleSheet'].cssText = cssText;\n      } else {\n        style.appendChild(document.createTextNode(cssText));\n      }\n      let head = iframe.contentWindow.document.head;\n      head.appendChild(style);\n    } catch (e) {\n      // if not allowed\n    }\n  }\n\n  private triggerQuickviewLoaded(beforeLoad: number) {\n    let afterLoad = (new Date()).getTime();\n    let eventArgs: IQuickviewLoadedEventArgs = { duration: afterLoad - beforeLoad };\n    $$(this.element).trigger(QuickviewEvents.quickviewLoaded, eventArgs);\n  }\n\n  // An highlighted term looks like:\n  //\n  //     <span id='CoveoHighlight:X.Y.Z'>a</span>\n  //\n  // The id has 3 components:\n  // - X: the term\n  // - Y: the term occurence\n  // - Z: the term part\n  //\n  // For the 'Z' component, if the term 'foo bar' is found in multiple elements, we will see:\n  //\n  //     <span id='CoveoHighlight:1.1.1'>foo</span>\n  //     <span id='CoveoHighlight:1.1.2'>bar</span>\n  //\n  // Highlighted words can overlap, which looks like:\n  //\n  //     <span id='CoveoHighlight:1.Y.Z'>\n  //         a\n  //         <coveotaggedword id='CoveoHighlight:2.Y.Z'>b</coveotaggedword>\n  //     </span>\n  //     <span id='CoveoHighlight:2.Y.Z'>c</span>\n  //\n  // In the previous example, the words 'ab' and 'bc' are highlighted.\n  //\n  // One thing important to note is that the id of all 'coveotaggedword' for\n  // the same word AND the first 'span' for that word will have the same id.\n  //\n  // Example:\n  //\n  //     <span id='CoveoHighlight:1.1.1'>\n  //         a\n  //         <coveotaggedword id='CoveoHighlight:2.1.1'>b</coveotaggedword>\n  //     </span>\n  //     <span id='CoveoHighlight:1.1.2'>\n  //         c\n  //         <coveotaggedword id='CoveoHighlight:2.1.1'>d</coveotaggedword>\n  //     </span>\n  //     <span id='CoveoHighlight:2.1.1'>e</span>\n  //     <span id='CoveoHighlight:2.1.2'>f</span>\n  //\n  // In the previous example, the words 'abcd' and 'bcdef' are highlighted.\n  //\n  // This method is public for testing purposes.\n  public computeHighlights(window: Window): string[] {\n    $$(this.header).empty();\n    this.keywordsState = [];\n\n    let words: { [index: string]: IWord } = {};\n    let highlightsCount = 0;\n    _.each($$(window.document.body).findAll('[id^=\"' + HIGHLIGHT_PREFIX + '\"]'), (element: HTMLElement, index: number) => {\n      let idParts = this.getHighlightIdParts(element);\n\n      if (idParts) {\n        let idIndexPart = idParts[1];                    // X\n        let idOccurencePart = parseInt(idParts[2], 10);  // Y\n        let idTermPart = parseInt(idParts[3], 10);       // Z in <span id='CoveoHighlight:X.Y.Z'>a</span>\n\n        let word = words[idIndexPart];\n\n        // The 'idTermPart' check is to circumvent a bug from the index\n        // where an highlight of an empty string start with an idTermPart > 1.\n        if (word == null && idTermPart == 1) {\n          words[idIndexPart] = word = {\n            text: this.getHighlightInnerText(element),\n            count: 1,\n            index: parseInt(idIndexPart, 10),\n\n            // Here I try to be clever.\n            // An overlaping word:\n            // 1) always start with a 'coveotaggedword' element.\n            // 2) then other 'coveotaggedword' elements may follow\n            // 3) then a 'span' element may follow.\n            //\n            // All 1), 2) and 3) will have the same id so I consider them as\n            // a whole having the id 0 instead of 1.\n            termsCount: element.nodeName.toLowerCase() == 'coveotaggedword' ? 0 : 1,\n            element: element,\n            occurence: idOccurencePart\n          };\n        } else if (word) {\n          if (word.occurence == idOccurencePart) {\n            if (element.nodeName.toLowerCase() == 'coveotaggedword') {\n              word.text += this.getHighlightInnerText(element);\n              // Doesn't count as a term part (see method description for more info).\n            } else if (word.termsCount < idTermPart) {\n              word.text += this.getHighlightInnerText(element);\n              word.termsCount += 1;\n            }\n          }\n\n          word.count = Math.max(word.count, idOccurencePart);\n          highlightsCount += 1;\n        }\n\n        // See the method description to understand why this code let us\n        // create the word 'bcdef' instead of 'bdef'.\n        if (word && word.occurence == idOccurencePart && element.nodeName.toLowerCase() == 'span') {\n          let embeddedWordParts = this.getHightlightEmbeddedWordIdParts(element);\n          let embeddedWord = embeddedWordParts ? words[embeddedWordParts[1]] : null;\n\n          if (embeddedWord && embeddedWord.occurence == parseInt(embeddedWordParts[2], 10)) {\n            embeddedWord.text += element.childNodes[0].nodeValue || ''; // only immediate text without children.\n          }\n        }\n      }\n    });\n\n    if (highlightsCount == 0) {\n      this.header.el.style.minHeight = '0';\n    }\n\n    let resolvedWords = [];\n\n    _.each(words, (word) => {\n      // When possible, take care to find the original term from the query instead of the\n      // first highlighted version we encounter. This relies on a recent feature by the\n      // Search API, but will fallback properly on older versions.\n      word.text = this.resolveOriginalTermFromHighlight(word.text);\n\n      let state = {\n        word: word,\n        color: word.element.style.backgroundColor,\n        currentIndex: 0,\n        index: word.index\n      };\n\n      this.keywordsState.push(state);\n      $$(this.header).append(this.buildWordButton(state, window));\n\n      resolvedWords.push(word.text);\n    });\n\n    return resolvedWords;\n  }\n\n  private getHighlightIdParts(element: HTMLElement): string[] {\n    let parts = element\n      .id\n      .substr(HIGHLIGHT_PREFIX.length + 1)\n      .match(/^([0-9]+)\\.([0-9]+)\\.([0-9]+)$/);\n\n    return (parts && parts.length > 3) ? parts : null;\n  }\n\n  private getHighlightInnerText(element: HTMLElement): string {\n    if (element.nodeName.toLowerCase() == 'coveotaggedword') {\n      // only immediate text without children.\n      return element.childNodes.length >= 1 ? (element.childNodes.item(0).textContent || '') : '';\n    } else {\n      return element.textContent || '';\n    }\n  }\n\n  private getHightlightEmbeddedWordIdParts(element: HTMLElement): string[] {\n    let embedded = element.getElementsByTagName('coveotaggedword')[0];\n\n    return embedded ? this.getHighlightIdParts(<HTMLElement>embedded) : null;\n  }\n\n  private resolveOriginalTermFromHighlight(highlight: string): string {\n    let found = highlight;\n\n    // Beware, terms to highlight is only set by recent search APIs.\n    if (this.result.termsToHighlight) {\n      // We look for the term expansion and we'll return the corresponding\n      // original term is one is found.\n      found = _.find(_.keys(this.result.termsToHighlight), (originalTerm: string) => {\n        // The expansions do NOT include the original term (makes sense), so be sure to check\n        // the original term for a match too.\n        return (originalTerm.toLowerCase() == highlight.toLowerCase()) ||\n          (_.find(this.result.termsToHighlight[originalTerm], (expansion: string) => expansion.toLowerCase() == highlight.toLowerCase()) != undefined);\n      }) || found;\n    }\n    return found;\n  }\n\n  private buildWordButton(wordState: IWordState, window: Window): HTMLElement {\n    let wordHtml = $$('span');\n    wordHtml.addClass('coveo-term-for-quickview');\n\n    let quickviewName = $$('span');\n    quickviewName.addClass('coveo-term-for-quickview-name');\n    quickviewName.setHtml(wordState.word.text);\n    quickviewName.on('click', () => {\n      this.navigate(wordState, false, window);\n    });\n    wordHtml.append(quickviewName.el);\n\n    let quickviewUpArrow = $$('span');\n    quickviewUpArrow.addClass('coveo-term-for-quickview-up-arrow');\n    let quickviewUpArrowIcon = $$('span');\n    quickviewUpArrowIcon.addClass('coveo-term-for-quickview-up-arrow-icon');\n    quickviewUpArrow.append(quickviewUpArrowIcon.el);\n    quickviewUpArrow.on('click', () => {\n      this.navigate(wordState, true, window);\n    });\n    wordHtml.append(quickviewUpArrow.el);\n\n    let quickviewDownArrow = $$('span');\n    quickviewDownArrow.addClass('coveo-term-for-quickview-down-arrow');\n    let quickviewDownArrowIcon = $$('span');\n    quickviewDownArrowIcon.addClass('coveo-term-for-quickview-down-arrow-icon');\n    quickviewDownArrow.append(quickviewDownArrowIcon.el);\n    quickviewDownArrow.on('click', () => {\n      this.navigate(wordState, false, window);\n    });\n    wordHtml.append(quickviewDownArrow.el);\n\n    wordHtml.el.style.backgroundColor = wordState.color;\n    wordHtml.el.style.borderColor = this.getSaturatedColor(wordState.color);\n    quickviewDownArrow.el.style.borderColor = this.getSaturatedColor(wordState.color);\n\n    return wordHtml.el;\n  }\n\n  private navigate(state: IWordState, backward: boolean, window: Window) {\n    let fromIndex = state.currentIndex;\n    let toIndex: number;\n    if (!backward) {\n      toIndex = fromIndex == state.word.count ? 1 : fromIndex + 1;\n    } else {\n      toIndex = fromIndex <= 1 ? state.word.count : fromIndex - 1;\n    }\n\n    let scroll = this.getScrollingElement(window);\n\n    // Un-highlight any currently selected element\n    let current = $$(scroll).find('[id^=\"' + HIGHLIGHT_PREFIX + ':' + state.word.index + '.' + fromIndex + '\"]');\n    if (current) {\n      current.style.border = '';\n    }\n\n    // Find and highlight the new element.\n    let element = $$(window.document.body).find('[id^=\"' + HIGHLIGHT_PREFIX + ':' + state.word.index + '.' + toIndex + '\"]');\n    element.style.border = '1px dotted #333';\n    state.currentIndex = toIndex;\n\n    // pdf2html docs hide the non-visible frames by default, to speed up browsers.\n    // But this prevents keyword navigation from working so we must force show it. This\n    // is done by adding the 'opened' class to it (defined by pdf2html).\n    if (this.isNewQuickviewDocument(window)) {\n      let pdf = $$(element).closest('.pc');\n      $$(pdf).addClass('opened');\n    }\n\n\n    element.scrollIntoView();\n\n    // iOS on Safari might scroll the whole modal box body when we do this,\n    // so give it a nudge in the right direction.\n    let body = this.iframe.closest('.coveo-body');\n    body.scrollLeft = 0;\n    body.scrollTop = 0;\n  }\n\n  private buildHeader(): Dom {\n    let header = $$('div');\n    header.addClass('coveo-quickview-header');\n    return header;\n  }\n\n  private buildIFrame(): Dom {\n    let iFrame = $$('iframe');\n    iFrame.setAttribute('sandbox', 'allow-same-origin');\n    let iFrameWrapper = $$('div');\n    iFrameWrapper.addClass('coveo-iframeWrapper');\n    iFrameWrapper.el.appendChild(iFrame.el);\n    return iFrameWrapper;\n  }\n\n  private getScrollingElement(iframeWindow: Window): HTMLElement {\n    let found: HTMLElement;\n\n    if (this.isNewQuickviewDocument(iframeWindow)) {\n      // 'New' quick views have a #page-container element generated by the pdf2html thing.\n      // This is the element we want to scroll on.\n      found = $$(iframeWindow.document.body).find('#page-container');\n    }\n\n    // If all else fails, we use the body\n    if (!found) {\n      found = $$(iframeWindow.document.body).el;\n    }\n\n    return found;\n  }\n\n  private isNewQuickviewDocument(iframeWindow: Window): boolean {\n    let meta = $$(iframeWindow.document.head).find('meta[name=\\'generator\\']');\n    return meta && meta.getAttribute('content') == 'pdf2htmlEX';\n  }\n\n  private handleTermsToHighlight(termsToHighlight: Array<string>, queryObject: IQuery) {\n    for (let term in this.result.termsToHighlight) {\n      delete this.result.termsToHighlight[term];\n    }\n    let query = '';\n    _.each(termsToHighlight, (term) => {\n      query += term + ' ';\n      this.result.termsToHighlight[term] = new Array<string>(term);\n    });\n    query = query.substring(0, query.length - 1);\n    queryObject.q = query;\n  }\n\n  private checkIfTermsToHighlightWereModified(termsToHighlight: Array<string>) {\n    if (!Utils.arrayEqual(termsToHighlight, _.keys(this.result.termsToHighlight))) {\n      this.termsToHighlightWereModified = true;\n    }\n  }\n\n  private getSaturatedColor(color: string): string {\n    let r = parseInt(color.substring(4, 7));\n    let g = parseInt(color.substring(9, 12));\n    let b = parseInt(color.substring(14, 17));\n    let hsv = ColorUtils.rgbToHsv(r, g, b);\n    hsv[1] *= 2;\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    }\n    let rgb = ColorUtils.hsvToRgb(hsv[0], hsv[1], hsv[2]);\n    return 'rgb(' + rgb[0].toString() + ', ' + rgb[1].toString() + ', ' + rgb[2].toString() + ')';\n  }\n}\n\nInitialization.registerAutoCreateComponent(QuickviewDocument);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Quickview/QuickviewDocument.ts\n **/","import { Template } from '../Templates/Template';\nimport { DefaultResultTemplate } from '../Templates/DefaultResultTemplate';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, INewQueryEventArgs, IBuildingQueryEventArgs, IQuerySuccessEventArgs, IDuringQueryEventArgs, IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { MODEL_EVENTS } from '../../models/Model';\nimport { QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { $$, Win, Doc } from '../../utils/Dom';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { Defer } from '../../misc/Defer';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { ResultListEvents, IDisplayedNewResultEventArgs, IChangeLayoutEventArgs } from '../../events/ResultListEvents';\nimport { ResultLayoutEvents } from '../../events/ResultLayoutEvents';\nimport { Utils } from '../../utils/Utils';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { Recommendation } from '../Recommendation/Recommendation';\nimport { DefaultRecommendationTemplate } from '../Templates/DefaultRecommendationTemplate';\nimport { ValidLayout } from '../ResultLayout/ResultLayout';\nimport { TemplateList } from '../Templates/TemplateList';\nimport { TemplateCache } from '../Templates/TemplateCache';\nimport { ResponsiveDefaultResultTemplate } from '../ResponsiveComponents/ResponsiveDefaultResultTemplate';\nimport _ = require('underscore');\nimport { get } from '../Base/RegisteredNamedMethods';\n\nexport interface IResultListOptions {\n  resultContainer?: HTMLElement;\n  resultTemplate?: Template;\n  resultOptions?: {};\n  waitAnimationContainer?: HTMLElement;\n  enableInfiniteScroll?: boolean;\n  infiniteScrollPageSize?: number;\n  infiniteScrollContainer?: HTMLElement | Window;\n  waitAnimation?: string;\n  mobileScrollContainer?: HTMLElement;\n  enableInfiniteScrollWaitingAnimation?: boolean;\n  fieldsToInclude?: IFieldOption[];\n  autoSelectFieldsToInclude?: boolean;\n  layout?: string;\n}\n\n/**\n * The ResultList component is responsible for displaying the results of the current query using one or more result\n * templates (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n *\n * This component supports many additional features, such as infinite scrolling.\n */\nexport class ResultList extends Component {\n\n  private static getDefaultTemplate(e: HTMLElement): Template {\n    const template = ResultList.loadTemplatesFromCache();\n    if (template != null) {\n      return template;\n    }\n\n    let component = <ResultList>Component.get(e);\n    if (component.searchInterface instanceof Recommendation) {\n      return new DefaultRecommendationTemplate();\n    }\n    return new DefaultResultTemplate();\n  }\n\n  private static loadTemplatesFromCache(): Template {\n    var pageTemplateNames = TemplateCache.getResultListTemplateNames();\n    if (pageTemplateNames.length > 0) {\n      return new TemplateList(_.compact(_.map(pageTemplateNames, (templateName) => TemplateCache.getTemplate(templateName))));\n    }\n\n    return null;\n  }\n\n  static ID = 'ResultList';\n  /**\n   * The options for the ResultList\n   * @componentOptions\n   */\n  static options: IResultListOptions = {\n\n    /**\n     * Specifies the element within which to insert the rendered templates for results.\n     *\n     * Performing a new query clears the content of this element.\n     *\n     * You can change the container by specifying its selector (e.g.,\n     * `data-result-container-selector='#someCssSelector'`).\n     *\n     * If you specify no value for this option, a `div` element will be dynamically created and appended to the result\n     * list. This element will then be used as a result container.\n     */\n    resultContainer: ComponentOptions.buildChildHtmlElementOption({\n      defaultFunction: (element: HTMLElement) => {\n        let d = document.createElement('div');\n        element.appendChild(d);\n        return d;\n      }\n    }),\n    resultTemplate: ComponentOptions.buildTemplateOption({ defaultFunction: ResultList.getDefaultTemplate }),\n\n    /**\n     * Specifies the type of animation to display while waiting for a query to return.\n     *\n     * The possible values are:\n     * - `fade`: Fades out the current list of results while the query is executing.\n     * - `spinner`: Shows a spinning animation while the query is executing.\n     * - `none`: Use no animation during queries.\n     *\n     * See also {@link ResultList.options.waitAnimationContainer}.\n     *\n     * Default value is `none`.\n     */\n    waitAnimation: ComponentOptions.buildStringOption({ defaultValue: 'none' }),\n\n    /**\n     * Specifies the element inside which to display the {@link ResultList.options.waitAnimation}.\n     *\n     * You can change this by specifying a CSS selector (e.g.,\n     * `data-wait-animation-container-selector='#someCssSelector'`).\n     *\n     * Default value is the value of {@link ResultList.options.resultContainer}.\n     */\n    waitAnimationContainer: ComponentOptions.buildChildHtmlElementOption({ postProcessing: (value, options: IResultListOptions) => value || options.resultContainer }),\n\n    /**\n     * Specifies whether to automatically retrieve an additional page of results and append it to the\n     * results that the ResultList is currently displaying when the user scrolls down to the bottom of the infinite\n     * scroll container.\n     *\n     * See also {@link ResultList.options.infiniteScrollPageSize}, {@link ResultList.options.infiniteScrollContainer}\n     * and {@link ResultList.options.enableInfiniteScrollWaitingAnimation}.\n     *\n     * It is important to specify the {@link ResultList.options.infiniteScrollContainer} manually if you want the scrolling\n     * element to be something else than the default `window` element.\n     * Otherwise, you might get in a weird state where the framework will rapidly trigger multiple successive query.\n     *\n     * Default value is `false`.\n     */\n    enableInfiniteScroll: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies the number of additional results to fetch\n     * when the user scrolls down to the bottom of the {@link ResultList.options.infiniteScrollContainer}.\n     *\n     * Default value is `10`. Minimum value is `1`.\n     */\n    infiniteScrollPageSize: ComponentOptions.buildNumberOption({ defaultValue: 10, min: 1, depend: 'enableInfiniteScroll' }),\n\n    /**\n     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies the element that triggers the fetching of\n     * additional results when the end user scrolls down to its bottom.\n     *\n     * You can change the container by specifying its selector (e.g.,\n     * `data-infinite-scroll-container-selector='#someCssSelector'`).\n     *\n     * By default, the framework uses the first vertically scrollable parent element it finds, starting from the\n     * ResultList element itself. A vertically scrollable element is an element whose CSS `overflow-y` attribute is\n     * `scroll`.\n     *\n     * This implies that if the framework can find no scrollable parent, it uses the window itself as a scrollable\n     * container.\n     *\n     * This heuristic is not perfect, for technical reasons. There are always some corner case CSS combination which the framework will\n     * not be able to detect correctly as 'scrollable'.\n     *\n     * It is highly recommended that you manually set this option if you wish to have something else than `window` be the scrollable element.\n     */\n    infiniteScrollContainer: ComponentOptions.buildChildHtmlElementOption({ depend: 'enableInfiniteScroll', defaultFunction: (element) => ComponentOptions.findParentScrolling(element) }),\n\n    /**\n     * If {@link ResultList.options.enableInfiniteScroll} is `true`, specifies whether to display the\n     * {@link ResultList.options.waitAnimation} while fetching additional results.\n     *\n     * Default value is `true`.\n     */\n    enableInfiniteScrollWaitingAnimation: ComponentOptions.buildBooleanOption({ depend: 'enableInfiniteScroll', defaultValue: true }),\n    mobileScrollContainer: ComponentOptions.buildSelectorOption({ defaultFunction: () => <HTMLElement>document.querySelector('.coveo-results-column') }),\n\n    /**\n     * Specifies a list of fields to include in the query.\n     *\n     * Specifying a list of values for this option ensures that the Search API does not send fields that are unnecessary\n     * for the UI to function.\n     *\n     * See also {@link ResultList.options.autoSelectFieldsToInclude}.\n     *\n     * Default value is `undefined`.\n     */\n    fieldsToInclude: ComponentOptions.buildFieldsOption({ includeInResults: true }),\n\n    /**\n     * Specifies whether the ResultList should scan its template and discover which fields it needs to render all\n     * results.\n     *\n     * Setting this option to `true` ensures that the Search API does not send fields that are unnecessary for the UI to\n     * function.\n     *\n     * See also {@link ResultList.options.fieldsToInclude}.\n     *\n     * Default value is `false`.\n     *\n     * **Note:**\n     * > Many interfaces created with the Interface Editor explicitly set this option to `true`.\n     */\n    autoSelectFieldsToInclude: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies the layout to use for displaying the results within this ResultList. Specifying a value for this option\n     * automatically populates a {@link ResultLayout} component with a switcher for the layout.\n     *\n     * For example, if there are two {@link ResultList} components in the page, one with its\n     * {@link ResultList.options.layout} set to `list` and the other with the same option set to `card`, then the\n     * ResultLayout component will render two buttons respectively titled **List** and **Card**.\n     *\n     * See the {@link ValidLayout} type for the list of possible values.\n     *\n     * Default value is `list`.\n     */\n    layout: ComponentOptions.buildStringOption({\n      defaultValue: 'list',\n      required: true,\n    })\n  };\n\n  public static resultCurrentlyBeingRendered: IQueryResult = null;\n  public currentlyDisplayedResults: IQueryResult[] = [];\n  private fetchingMoreResults: Promise<IQueryResults>;\n  private reachedTheEndOfResults = false;\n\n  // This variable serves to block some setup where the framework fails to correctly identify the \"real\" scrolling container.\n  // Since it's not technically feasible to correctly identify the scrolling container in every possible scenario without some very complex logic, we instead try to add some kind of mechanism to\n  // block runaway requests where UI will keep asking more results in the index, eventually bringing the browser to it's knee.\n  // Those successive request are needed in \"displayMoreResults\" to ensure we fill the scrolling container correctly.\n  // Since the container is not identified correctly, it is never \"full\", so we keep asking for more.\n  // It is reset every time the user actually scroll the container manually.\n  private successiveScrollCount = 0;\n  private static MAX_AMOUNT_OF_SUCESSIVE_REQUESTS = 5;\n\n  /**\n   * Creates a new ResultList component. Binds various event related to queries (e.g., on querySuccess ->\n   * renderResults). Binds scroll event if {@link ResultList.options.enableInfiniteScroll} is `true`.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultList component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param elementClassId The class that this component should instantiate. Components that extend the base ResultList\n   * use this. Default value is `CoveoResultList`.\n   */\n  constructor(public element: HTMLElement, public options?: IResultListOptions, public bindings?: IComponentBindings, elementClassId: string = ResultList.ID) {\n    super(element, elementClassId, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ResultList, options);\n\n\n    Assert.exists(element);\n    Assert.exists(this.options);\n    Assert.exists(this.options.resultContainer);\n    Assert.exists(this.options.resultTemplate);\n    Assert.exists(this.options.waitAnimationContainer);\n    Assert.exists(this.options.infiniteScrollContainer);\n\n    this.showOrHideElementsDependingOnState(false, false);\n\n\n    this.bind.onRootElement<INewQueryEventArgs>(QueryEvents.newQuery, (args: INewQueryEventArgs) => this.handleNewQuery());\n    this.bind.onRootElement<IBuildingQueryEventArgs>(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement<IQuerySuccessEventArgs>(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement<IDuringQueryEventArgs>(QueryEvents.duringQuery, (args: IDuringQueryEventArgs) => this.handleDuringQuery());\n    this.bind.onRootElement<IQueryErrorEventArgs>(QueryEvents.queryError, (args: IQueryErrorEventArgs) => this.handleQueryError());\n    $$(this.root).on(ResultListEvents.changeLayout, (e: Event, args: IChangeLayoutEventArgs) => this.handleChangeLayout(args));\n\n    if (this.options.enableInfiniteScroll) {\n      this.handlePageChanged();\n      this.bind.on(<HTMLElement>this.options.infiniteScrollContainer, 'scroll', (e: Event) => {\n        this.successiveScrollCount = 0;\n        this.handleScrollOfResultList();\n      });\n    }\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.FIRST, () => this.handlePageChanged());\n\n    $$(this.options.resultContainer).addClass('coveo-result-list-container');\n    if (this.searchInterface.isNewDesign()) {\n      this.setupTemplatesVersusLayouts();\n      $$(this.root).on(ResultLayoutEvents.populateResultLayout, (e, args) => args.layouts.push(this.options.layout));\n    }\n  }\n\n  /**\n   * Get the fields needed to be automatically included in the query for this result list.\n   * @returns {string[]}\n   */\n  public getAutoSelectedFieldsToInclude(): string[] {\n\n    return _.chain(this.options.resultTemplate.getFields())\n      .concat(this.getMinimalFieldsToInclude())\n      .compact()\n      .unique()\n      .value();\n  }\n\n  private setupTemplatesVersusLayouts() {\n    let layoutClassToAdd = `coveo-${this.options.layout}-layout-container`;\n    $$(this.options.resultContainer).addClass(layoutClassToAdd);\n\n    // A TemplateList is the scenario where the result template are directly embedded inside the ResultList\n    // This is the typical scenario when a page gets created by the interface editor, for example.\n    // In that case, we try to stick closely that what is actually configured inside the page, and do no \"special magic\".\n    // Stick to the \"hardcoded\" configuration present in the page.\n    // We only add the correct layout options if it has not been set manually.\n    if (this.options.resultTemplate instanceof TemplateList) {\n      _.each((<TemplateList>this.options.resultTemplate).templates, (tmpl: Template) => {\n        if (!tmpl.layout) {\n          tmpl.layout = <ValidLayout>this.options.layout;\n        }\n      });\n    } else if (this.options.resultTemplate instanceof DefaultResultTemplate && this.options.layout == 'list') {\n      ResponsiveDefaultResultTemplate.init(this.root, this, this.options);\n    }\n  }\n\n  /**\n   * Empties the current result list content and appends the given array of HTMLElement.\n   *\n   * Can append to existing elements in the result list, or replace them.\n   *\n   * Triggers the `newResultsDisplayed` and `newResultDisplayed` events.\n   * @param resultsElement\n   * @param append\n   */\n  public renderResults(resultsElement: HTMLElement[], append = false) {\n    if (!append) {\n      this.options.resultContainer.innerHTML = '';\n    }\n    _.each(resultsElement, (resultElement) => {\n      this.options.resultContainer.appendChild(resultElement);\n      this.triggerNewResultDisplayed(Component.getResult(resultElement), resultElement);\n    });\n    if (this.options.layout == 'card' && !this.options.enableInfiniteScroll) {\n      // Used to prevent last card from spanning the grid's whole width\n      _.times(3, () => this.options.resultContainer.appendChild($$('div').el));\n    }\n    this.triggerNewResultsDisplayed();\n  }\n\n  /**\n   * Builds and returns an array of HTMLElement with the given result set.\n   * @param results the result set to build an array of HTMLElement from.\n   */\n  public buildResults(results: IQueryResults): HTMLElement[] {\n    let res: HTMLElement[] = [];\n    _.each(results.results, (result: IQueryResult) => {\n      let resultElement = this.buildResult(result);\n      if (resultElement != null) {\n        res.push(resultElement);\n      }\n    });\n    ResultList.resultCurrentlyBeingRendered = null;\n    return res;\n  }\n\n  /**\n   * Builds and returns an HTMLElement for the given result.\n   * @param result the result to build an HTMLElement from.\n   * @returns {HTMLElement}\n   */\n  public buildResult(result: IQueryResult): HTMLElement {\n    Assert.exists(result);\n    QueryUtils.setStateObjectOnQueryResult(this.queryStateModel.get(), result);\n    QueryUtils.setSearchInterfaceObjectOnQueryResult(this.searchInterface, result);\n    ResultList.resultCurrentlyBeingRendered = result;\n    let resultElement = this.options.resultTemplate.instantiateToElement(result, {\n      wrapInDiv: true,\n      checkCondition: true,\n      currentLayout: <ValidLayout>this.options.layout,\n      responsiveComponents: this.searchInterface.responsiveComponents\n    });\n    if (resultElement != null) {\n      Component.bindResultToElement(resultElement, result);\n      $$(resultElement).addClass('');\n    }\n    this.autoCreateComponentsInsideResult(resultElement, result);\n    return resultElement;\n  }\n\n  /**\n   * Executes a query to fetch new results. After the query returns, renders the new results.\n   *\n   * Asserts that there are more results to display by verifying whether the last query has returned as many results as\n   * requested.\n   *\n   * Asserts that the ResultList is not currently fetching results.\n   * @param count The number of results to fetch and display.\n   */\n  public displayMoreResults(count: number) {\n    Assert.isLargerOrEqualsThan(1, count);\n\n    if (this.isCurrentlyFetchingMoreResults()) {\n      this.logger.warn('Ignoring request to display more results since we\\'re already doing so');\n      return;\n    }\n    if (!this.hasPotentiallyMoreResultsToDisplay()) {\n      this.logger.warn('Ignoring request to display more results since we know there aren\\'t more to display');\n      return;\n    }\n\n    if (this.options.enableInfiniteScrollWaitingAnimation) {\n      this.showWaitingAnimationForInfiniteScrolling();\n    }\n\n    this.fetchingMoreResults = this.queryController.fetchMore(count);\n    this.fetchingMoreResults.then((data: IQueryResults) => {\n      Assert.exists(data);\n      this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.pagerScrolling, {}, this.element);\n      let results = data.results;\n      this.reachedTheEndOfResults = count > data.results.length;\n      this.renderResults(this.buildResults(data), true);\n      _.each(results, (result) => {\n        this.currentlyDisplayedResults.push(result);\n      });\n      this.triggerNewResultsDisplayed();\n    });\n\n    this.fetchingMoreResults.then(() => {\n      this.hideWaitingAnimationForInfiniteScrolling();\n      this.fetchingMoreResults = undefined;\n      Defer.defer(() => {\n        this.successiveScrollCount++;\n        if (this.successiveScrollCount <= ResultList.MAX_AMOUNT_OF_SUCESSIVE_REQUESTS) {\n          this.handleScrollOfResultList();\n        } else {\n          this.logger.info(`Result list has triggered 5 consecutive queries to try and fill up the scrolling container, but it is still unable to do so`);\n          this.logger.info(`Try explicitly setting the 'data-infinite-scroll-container-selector' option on the result list. See : https://coveo.github.io/search-ui/components/resultlist.html#options.infinitescrollcontainer`);\n        }\n      });\n    });\n  }\n\n  /**\n   * Gets the list of currently displayed result.\n   * @returns {IQueryResult[]}\n   */\n  public getDisplayedResults(): IQueryResult[] {\n    return this.currentlyDisplayedResults;\n  }\n\n  /**\n   * Gets the list of currently displayed result HTMLElement.\n   * @returns {HTMLElement[]}\n   */\n  public getDisplayedResultsElements(): HTMLElement[] {\n    return $$(this.options.resultContainer).findAll('.CoveoResult');\n  }\n\n  public enable() {\n    super.enable();\n    $$(this.element).removeClass('coveo-hidden');\n  }\n  public disable() {\n    super.disable();\n    $$(this.element).addClass('coveo-hidden');\n  }\n\n  protected autoCreateComponentsInsideResult(element: HTMLElement, result: IQueryResult) {\n    Assert.exists(element);\n\n    let initOptions = this.searchInterface.options.originalOptionsObject;\n    let resultComponentBindings: IResultsComponentBindings = _.extend({}, this.getBindings(), {\n      resultElement: element\n    });\n    let initParameters: IInitializationParameters = {\n      options: initOptions,\n      bindings: resultComponentBindings,\n      result: result\n    };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters);\n  }\n\n  protected triggerNewResultDisplayed(result: IQueryResult, resultElement: HTMLElement) {\n    let args: IDisplayedNewResultEventArgs = {\n      result: result,\n      item: resultElement\n    };\n    $$(this.element).trigger(ResultListEvents.newResultDisplayed, args);\n  }\n\n  protected triggerNewResultsDisplayed() {\n    $$(this.element).trigger(ResultListEvents.newResultsDisplayed, {});\n  }\n\n  private handleDuringQuery() {\n    this.logger.trace('Emptying the result container');\n    this.cancelFetchingMoreResultsIfNeeded();\n    this.showWaitingAnimation();\n    this.showOrHideElementsDependingOnState(false, false);\n  }\n\n  private handleQueryError() {\n    this.hideWaitingAnimation();\n    $$(this.options.resultContainer).empty();\n    this.currentlyDisplayedResults = [];\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.results);\n    let results = data.results;\n    this.logger.trace('Received query results from new query', results);\n    this.hideWaitingAnimation();\n    ResultList.resultCurrentlyBeingRendered = undefined;\n    this.currentlyDisplayedResults = [];\n    this.renderResults(this.buildResults(data.results));\n    this.currentlyDisplayedResults = results.results;\n    this.reachedTheEndOfResults = false;\n    this.showOrHideElementsDependingOnState(true, this.currentlyDisplayedResults.length != 0);\n\n    if (DeviceUtils.isMobileDevice() && this.options.mobileScrollContainer != undefined) {\n      this.options.mobileScrollContainer.scrollTop = 0;\n    }\n\n    if (this.options.enableInfiniteScroll && results.results.length == data.queryBuilder.numberOfResults) {\n      // This will check right away if we need to add more results to make the scroll container full & scrolling.\n      this.scrollBackToTop();\n      this.handleScrollOfResultList();\n    }\n  }\n\n  private handleScrollOfResultList() {\n    if (this.isCurrentlyFetchingMoreResults() || !this.options.enableInfiniteScroll) {\n      return;\n    }\n    if (this.isScrollingOfResultListAlmostAtTheBottom() && this.hasPotentiallyMoreResultsToDisplay()) {\n      this.displayMoreResults(this.options.infiniteScrollPageSize);\n    }\n  }\n\n  private handlePageChanged() {\n    this.bind.onRootElement(QueryEvents.deferredQuerySuccess, () => {\n      setTimeout(() => {\n        this.scrollBackToTop();\n      }, 0);\n    });\n  }\n\n  private scrollBackToTop() {\n    if (this.options.infiniteScrollContainer instanceof Window) {\n      let win = <Window>this.options.infiniteScrollContainer;\n      win.scrollTo(0, 0);\n    } else {\n      let el = <HTMLElement>this.options.infiniteScrollContainer;\n      el.scrollTop = 0;\n    }\n  }\n\n  private handleNewQuery() {\n    $$(this.element).removeClass('coveo-hidden');\n    ResultList.resultCurrentlyBeingRendered = undefined;\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs) {\n    if (this.options.fieldsToInclude != null) {\n      // remove the @\n      args.queryBuilder.addFieldsToInclude(_.map(this.options.fieldsToInclude, (field) => field.substr(1)));\n    }\n    if (this.options.autoSelectFieldsToInclude) {\n      const otherResultListsElements = _.reject($$(this.root).findAll(`.${Component.computeCssClassName(ResultList)}`), resultListElement => resultListElement == this.element);\n      const otherFields = _.flatten(_.map(otherResultListsElements, (otherResultListElement) => {\n        const otherResultListInstance = <ResultList>get(otherResultListElement);\n        if (otherResultListInstance) {\n          return otherResultListInstance.getAutoSelectedFieldsToInclude();\n        } else {\n          return [];\n        }\n      }));\n\n      args.queryBuilder.addRequiredFields(_.unique(otherFields.concat(this.getAutoSelectedFieldsToInclude())));\n      args.queryBuilder.includeRequiredFields = true;\n    }\n  }\n\n  private handleChangeLayout(args: IChangeLayoutEventArgs) {\n    if (args.layout === this.options.layout) {\n      this.enable();\n      this.options.resultTemplate.layout = <ValidLayout>this.options.layout;\n      if (args.results) {\n        Defer.defer(() => {\n          this.renderResults(this.buildResults(args.results));\n        });\n      }\n    } else {\n      this.disable();\n    }\n  }\n\n  private isCurrentlyFetchingMoreResults(): boolean {\n    return Utils.exists(this.fetchingMoreResults);\n  }\n\n  private getMinimalFieldsToInclude() {\n    // these fields are needed for analytics click event\n    return ['author', 'language', 'urihash', 'objecttype', 'collection', 'source', 'language', 'permanentid'];\n  }\n\n  private isScrollingOfResultListAlmostAtTheBottom(): boolean {\n    // this is in a try catch because the unit test fail otherwise (Window does not exist for phantom js in the console)\n    let isWindow;\n    try {\n      isWindow = this.options.infiniteScrollContainer instanceof Window;\n    } catch (e) {\n      isWindow = false;\n    }\n    return isWindow ? this.isScrollAtBottomForWindowElement() : this.isScrollAtBottomForHtmlElement();\n  }\n\n  private isScrollAtBottomForWindowElement() {\n    let win = new Win(window);\n    let windowHeight = win.height();\n    let scrollTop = win.scrollY();\n    let bodyHeight = new Doc(document).height();\n    return bodyHeight - (windowHeight + scrollTop) < windowHeight / 2;\n  }\n\n  private isScrollAtBottomForHtmlElement() {\n    let el = <HTMLElement>this.options.infiniteScrollContainer;\n    let elementHeight = el.clientHeight;\n    let scrollHeight = el.scrollHeight;\n    let bottomPosition = el.scrollTop + elementHeight;\n    return (scrollHeight - bottomPosition) < elementHeight / 2;\n  }\n\n  public hasPotentiallyMoreResultsToDisplay(): boolean {\n    return this.currentlyDisplayedResults.length > 0 && !this.reachedTheEndOfResults;\n  }\n\n  private cancelFetchingMoreResultsIfNeeded() {\n    if (this.isCurrentlyFetchingMoreResults()) {\n      this.logger.trace('Cancelling fetching more results');\n      Promise.reject(this.fetchingMoreResults);\n      this.fetchingMoreResults = undefined;\n    }\n  }\n\n  private showOrHideElementsDependingOnState(hasQuery: boolean, hasResults: boolean) {\n    let showIfQuery = $$(this.element).findAll('.coveo-show-if-query');\n    let showIfNoQuery = $$(this.element).findAll('.coveo-show-if-no-query');\n    let showIfResults = $$(this.element).findAll('.coveo-show-if-results');\n    let showIfNoResults = $$(this.element).findAll('.coveo-show-if-no-results');\n\n    _.each(showIfQuery, (s: HTMLElement) => {\n      $$(s).toggle(hasQuery);\n    });\n    _.each(showIfNoQuery, (s: HTMLElement) => {\n      $$(s).toggle(!hasQuery);\n    });\n    _.each(showIfResults, (s: HTMLElement) => {\n      $$(s).toggle(hasQuery && hasResults);\n    });\n    _.each(showIfNoResults, (s: HTMLElement) => {\n      $$(s).toggle(hasQuery && !hasResults);\n    });\n  }\n\n  private showWaitingAnimation() {\n    switch (this.options.waitAnimation.toLowerCase()) {\n      case 'fade':\n        $$(this.options.waitAnimationContainer).addClass('coveo-fade-out');\n        break;\n      case 'spinner':\n        _.each(this.options.resultContainer.children, (child: HTMLElement) => {\n          $$(child).hide();\n        });\n        if ($$(this.options.waitAnimationContainer).find('.coveo-wait-animation') == undefined) {\n          this.options.waitAnimationContainer.appendChild(DomUtils.getBasicLoadingAnimation());\n        }\n        break;\n    }\n  }\n\n  private hideWaitingAnimation() {\n    switch (this.options.waitAnimation.toLowerCase()) {\n      case 'fade':\n        $$(this.options.waitAnimationContainer).removeClass('coveo-fade-out');\n        break;\n      case 'spinner':\n        let spinner = $$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n        if (spinner) {\n          $$(spinner).detach();\n        }\n        break;\n    }\n  }\n\n  private showWaitingAnimationForInfiniteScrolling() {\n    let spinner = DomUtils.getLoadingSpinner();\n    if (this.options.layout == 'card' && this.options.enableInfiniteScroll) {\n      let spinnerContainer = $$('div', {\n        className: 'coveo-loading-spinner-container'\n      });\n      spinnerContainer.append(spinner);\n      this.options.waitAnimationContainer.appendChild(spinnerContainer.el);\n    } else {\n      this.options.waitAnimationContainer.appendChild(DomUtils.getLoadingSpinner());\n    }\n\n  }\n\n  private hideWaitingAnimationForInfiniteScrolling() {\n    let spinner = $$(this.options.waitAnimationContainer).find('.coveo-loading-spinner');\n    if (spinner) {\n      $$(spinner).detach();\n    }\n  }\n}\n\n\nInitialization.registerAutoCreateComponent(ResultList);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultList/ResultList.ts\n **/","import { Template } from './Template';\nimport { IQueryResult } from '../../rest/QueryResult';\n\nexport class DefaultRecommendationTemplate extends Template {\n\n  instantiateToString(object?: IQueryResult): string {\n    var template =\n      `<div class=\"coveo-result-frame\">\n        <div class=\"coveo-result-row\">\n          <div class=\"coveo-result-cell\" style=\"width:40px;text-align:center;vertical-align:middle;\">\n            <span class=\"CoveoIcon\" data-small=\"true\">\n            </span>\n          </div>\n          <div class=\"coveo-result-cell\" style=\"padding:0 0 3px 5px;vertical-align:middle\">\n            <div class=\"coveo-result-row\">\n              <div class=\"coveo-result-cell\" style=\"font-size:10pt;\">\n                <a class=\"CoveoResultLink\" style=\"display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis\">\n                </a>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>`;\n    return template;\n  }\n\n  instantiateToElement(object?: IQueryResult): HTMLElement {\n    var div = document.createElement('div');\n    div.innerHTML = this.instantiateToString(object);\n    return div;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Templates/DefaultRecommendationTemplate.ts\n **/","import {\n  IResponsiveComponent, IResponsiveComponentOptions,\n  ResponsiveComponentsManager\n} from './ResponsiveComponentsManager';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport { ResultList } from '../ResultList/ResultList';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Component } from '../Base/Component';\nimport { Logger } from '../../misc/Logger';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\n\nexport class ResponsiveDefaultResultTemplate implements IResponsiveComponent {\n  private searchInterface: SearchInterface;\n  private resultList: ResultList;\n\n  private currentMode: string;\n\n  public static init(root: HTMLElement, component: ResultList, options: IResponsiveComponentOptions) {\n    if (!$$(root).find(`.${Component.computeCssClassName(ResultList)}`)) {\n      let logger = new Logger('ResponsiveDefaultResultTemplate');\n      logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n      return;\n    }\n    ResponsiveComponentsManager.register(ResponsiveDefaultResultTemplate, $$(root), ResultList.ID, component, options);\n  }\n\n  constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {\n    this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);\n    this.currentMode = 'large';\n  }\n\n  public registerComponent(accept: ResultList) {\n    if (accept instanceof ResultList) {\n      this.resultList = accept;\n      return true;\n    }\n    return false;\n  }\n\n  public handleResizeEvent() {\n    let lastResults = this.resultList.queryController.getLastResults();\n    if (this.needSmallMode()) {\n      $$(this.resultList.options.resultContainer).addClass('coveo-card-layout-container');\n      $$(this.resultList.options.resultContainer).removeClass(`coveo-list-layout-container`);\n      if (this.currentMode != 'small') {\n        if (lastResults) {\n          this.resultList.renderResults(this.resultList.buildResults(lastResults));\n        }\n        this.currentMode = 'small';\n      }\n    } else {\n      $$(this.resultList.options.resultContainer).removeClass('coveo-card-layout-container');\n      $$(this.resultList.options.resultContainer).addClass(`coveo-list-layout-container`);\n      if (this.currentMode != 'large') {\n        if (lastResults) {\n          this.resultList.renderResults(this.resultList.buildResults(lastResults));\n        }\n        this.currentMode = 'large';\n      }\n    }\n  }\n\n  private needSmallMode(): boolean {\n    return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveDefaultResultTemplate.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { QueryEvents, IBuildingQueryEventArgs, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { IGroupByRequest } from '../../rest/GroupByRequest';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport Globalize = require('globalize');\nimport _ = require('underscore');\n\nexport interface IAggregateOptions {\n  field: IFieldOption;\n  operation?: string;\n  format?: string;\n}\n\n/**\n * The Aggregate component allows to display the result on an aggregate operation on the index.\n *\n * It hooks itself to the query to add a new {@link IGroupByRequest}, then displays the result.\n */\nexport class Aggregate extends Component {\n  static ID = 'Aggregate';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IAggregateOptions = {\n\n    /**\n     * Specifies the field on which to do the aggregate operation. This parameter is mandatory.\n     */\n    field: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies the aggregate operation to perform.\n     *\n     * The possible values are:\n     * - `sum` - Computes the sum of the computed field values.\n     * - `average` - Computes the average of the computed field values.\n     * - `minimum` - Finds the minimum value of the computed field values.\n     * - `maximum` - Finds the maximum value of the computed field values.\n     *\n     * Default value is `sum`.\n     */\n    operation: ComponentOptions.buildStringOption({ defaultValue: 'sum' }),\n\n    /**\n     * Specifies how to format the value.\n     *\n     * The available formats are defined in the Globalize library (see\n     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-).\n     *\n     * The most commonly used formats are:\n     * - `c0` - Formats the value as a currency.\n     * - `n0` - Formats the value as an integer.\n     * - `n2` - Formats the value as a floating point with 2 decimal digits.\n     *\n     * Default value is `c0`.\n     */\n    format: ComponentOptions.buildStringOption({ defaultValue: 'c0' })\n  };\n\n  private index: number;\n\n  /**\n   * Creates a new Aggregate component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Aggregate component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IAggregateOptions, bindings?: IComponentBindings) {\n    super(element, Aggregate.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Aggregate, options);\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    $$(this.element).hide();\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs) {\n    var request: IGroupByRequest = {\n      field: <string>this.options.field,\n      maximumNumberOfValues: 0,\n      computedFields: [{\n        field: <string>this.options.field,\n        operation: this.options.operation\n      }]\n    };\n\n    this.index = args.queryBuilder.groupByRequests.length;\n    args.queryBuilder.groupByRequests.push(request);\n  }\n\n  private handleQuerySuccess(args: IQuerySuccessEventArgs) {\n    if (_.isNumber(this.index) && args.results.groupByResults.length != 0) {\n      var gbr = args.results.groupByResults[this.index];\n      var aggregate = gbr.globalComputedFieldResults[0];\n      $$(this.element).text(Globalize.format(aggregate, this.options.format));\n      $$(this.element).show();\n    } else {\n      $$(this.element).hide();\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(Aggregate);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Aggregate/Aggregate.ts\n **/","import { Initialization } from '../Base/Initialization';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { MODEL_EVENTS, IAttributeChangedEventArg } from '../../models/Model';\nimport { QUERY_STATE_ATTRIBUTES, QueryStateModel } from '../../models/QueryStateModel';\nimport { StandaloneSearchInterfaceEvents } from '../../events/StandaloneSearchInterfaceEvents';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { $$ } from '../../utils/Dom';\nimport { Assert } from '../../misc/Assert';\nimport { QueryboxQueryParameters } from './QueryboxQueryParameters';\n\nexport interface IQueryboxOptions {\n  enableSearchAsYouType?: boolean;\n  searchAsYouTypeDelay?: number;\n  enableQuerySyntax?: boolean;\n  enableWildcards?: boolean;\n  enableQuestionMarks?: boolean;\n  enableLowercaseOperators?: boolean;\n  enablePartialMatch?: boolean;\n  partialMatchKeywords?: number;\n  partialMatchThreshold?: string;\n  autoFocus?: boolean;\n  placeholder?: string;\n  triggerQueryOnClear?: boolean;\n}\n\n/**\n * The Querybox component renders an input that the end user can interact with to enter and submit a query.\n *\n * When the user submits a query by hitting the **Enter** key, the Querybox component triggers a query and logs the\n * corresponding usage analytics data.\n *\n * For technical reasons, it is necessary to instantiate this component on a `div` element rather than directly on an\n * `input` element (i.e., `<div class='CoveoQuerybox'></div>` will work, but `<input class='CoveoQuerybox'></input>`\n * will not).\n *\n * See also the {@link Searchbox} component, which can automatically instantiate a Querybox component along with an\n * optional {@link SearchButton} component.\n */\nexport class Querybox extends Component {\n  static ID = 'Querybox';\n\n  /**\n   * The options for the Querybox.\n   * @componentOptions\n   */\n  public static options: IQueryboxOptions = {\n\n    /**\n     * Specifies whether to enable the search-as-you-type feature.\n     *\n     * Default value is `false`.\n     */\n    enableSearchAsYouType: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * If {@link Querybox.options.enableSearchAsYouType} is `true`, specifies the delay (in milliseconds) between a\n     * key press and a query being triggered.\n     *\n     * Default value is `500`. Minimum value is `0`\n     */\n    searchAsYouTypeDelay: ComponentOptions.buildNumberOption({ defaultValue: 500, min: 0 }),\n\n    /**\n     * Specifies whether the Coveo Platform should try to interpret special query syntax such as field references in the\n     * query that the user enters in the Querybox (see\n     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n     *\n     * Setting this option to `true` also causes the query syntax in the Querybox to highlight.\n     *\n     * Default value is `true`.\n     */\n    enableQuerySyntax: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether the Coveo Platform should expand keywords containing wildcard characters (`*`) to the possible\n     * matching keywords in order to broaden the query (see\n     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n     *\n     * Default value is `false`.\n     */\n    enableWildcards: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether the Coveo Platform should expand keywords containing question mark characters (`?`) to the\n     * possible matching keywords in order to broaden the query (see\n     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n     *\n     * Default value is `false`.\n     */\n    enableQuestionMarks: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to treat the `AND`, `NOT`, `OR` and\n     * `NEAR` keywords in the Querybox as query operators in the query even when the end user types them in lowercase.\n     * This option applies to all query operators (see\n     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n     *\n     * Default value is `false`.\n     *\n     * **Example:**\n     * > If this option and the enableQuerySyntax option are both `true`, then the Coveo Platform interprets the `near`\n     * > keyword in a query such as `service center near me` as a query operator (not as a query term).\n     *\n     * > Otherwise, if the enableQuerySyntax option is `true` and this option is `false`, the end user has to type the\n     * > `NEAR` keyword in uppercase in order for the Coveo Platform to interpret it as a query operator.\n     */\n    enableLowercaseOperators: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to automatically convert a basic expression containing at least a certain number of keywords\n     * (see {@link Querybox.options.partialMatchKeywords}) to a partial match expression, so that documents containing\n     * at least a certain subset of those keywords (see {@link Querybox.options.partialMatchThreshold}) will match the\n     * query.\n     *\n     * Default value is `false`.\n     *\n     * **Example:**\n     *\n     * With the following markup configuration, if a basic expression contains at least 4 keywords, then documents\n     * containing at least 75% of those keywords (round up) will match the query.\n     *\n     * For instance, if the basic expression is `Coveo custom component configuration help`, then documents containing\n     * all 5 of those keywords, or 4 of them (75% of 5 rounded up) will match the query.\n     *\n     * ```html\n     * <div class='CoveoQuerybox' data-enable-partial-match='true' data-partial-match-keywords='4' data-partial-match-threshold='75%'></div>\n     * ```\n     */\n    enablePartialMatch: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * When {@link Querybox.options.enablePartialMatch} is `true`, specifies the minimum number of keywords that need to\n     * be present in the basic expression to convert this expression to a partial match expression.\n     *\n     * See also {@link Querybox.options.partialMatchThreshold}.\n     *\n     * Default value is `5`.\n     *\n     * **Note:**\n     * > Only the basic expression of the query (see {@link q}) can be converted to a partial match expression.\n     *\n     * **Example:**\n     * > If the partialMatchKeywords option is `7`, the basic expression will have to contain at least 7 keywords\n     * > to be converted to a partial match expression.\n     */\n    partialMatchKeywords: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 }),\n\n    /**\n     * When {@link Querybox.options.enablePartialMatch} is `true`, specifies an absolute or relative (percentage) value\n     * indicating the minimum number of partial match expression keywords a document must contain in order to match the\n     * query.\n     *\n     * See also {@link Querybox.options.partialMatchKeywords}.\n     *\n     * Default value is `50%`.\n     *\n     * **Note:**\n     * > The relative threshold is always rounded up to the nearest integer.\n     *\n     * **Examples:**\n     * > If the partialMatchThreshold option is `50%` and the partial match expression contains exactly 9 keywords, then\n     * > documents will have to contain at least 5 of those keywords to match the query (50% of 9, rounded up).\n     *\n     * > With the same configuration, if the partial match expression contains exactly 12 keywords, then documents will\n     * > have to contain at least 6 of those keywords to match the query (50% of 12).\n     *\n     * > If the partialMatchThreshold option is `2`, then documents will always have to contain at least 2 of the\n     * > partial match expression keywords to match the query, no matter how many keywords the partial match expression\n     * > actually contains.\n     */\n    partialMatchThreshold: ComponentOptions.buildStringOption({ defaultValue: '50%' }),\n\n    /**\n     * Specifies whether to trigger a query when the Querybox is cleared.\n     *\n     * Default value is `true`.\n     */\n    triggerQueryOnClear: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether the Querybox should get auto focus and selection upon initialization.\n     *\n     * Default value is `true`.\n     */\n    autoFocus: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  public magicBox: Coveo.MagicBox.Instance;\n  private lastQuery: string;\n  private searchAsYouTypeTimeout: number;\n\n  /**\n   * Creates a new Querybox. Creates a new `Coveo.Magicbox` instance and wraps the Magicbox methods (`onblur`,\n   * `onsubmit` etc.). Binds event on `buildingQuery` and on redirection (for standalone box).\n   * @param element The HTMLElement on which to instantiate the component. This cannot be an HTMLInputElement for\n   * technical reasons.\n   * @param options The options for the ResultLayout component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IQueryboxOptions, public bindings?: IComponentBindings) {\n    super(element, Querybox.ID, bindings);\n\n    if (element instanceof HTMLInputElement) {\n      this.logger.error('Querybox cannot be used on an HTMLInputElement');\n    }\n\n    this.options = ComponentOptions.initComponentOptions(element, Querybox, options);\n\n    this.magicBox = Coveo.MagicBox.create(element, new Coveo.MagicBox.Grammar('Query', {\n      Query: '[Term*][Spaces?]',\n      Term: '[Spaces?][Word]',\n      Spaces: / +/,\n      Word: /[^ ]+/\n    }), {\n        inline: true\n      });\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(StandaloneSearchInterfaceEvents.beforeRedirect, () => this.updateQueryState());\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.Q, (args: IAttributeChangedEventArg) => this.handleQueryStateChanged(args));\n\n    if (this.options.enableSearchAsYouType) {\n      $$(this.element).addClass('coveo-search-as-you-type');\n      this.magicBox.onchange = () => {\n        this.searchAsYouType();\n      };\n    }\n\n    this.magicBox.onsubmit = () => {\n      this.submit();\n    };\n\n    this.magicBox.onblur = () => {\n      this.updateQueryState();\n    };\n\n    this.magicBox.onclear = () => {\n      this.updateQueryState();\n      if (this.options.triggerQueryOnClear) {\n        this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxClear, {});\n        this.triggerNewQuery(false);\n      }\n    };\n\n    if (this.options.autoFocus) {\n      this.magicBox.focus();\n    }\n  }\n\n  /**\n   * Adds the current content of the input to the query and triggers a query if the current content of the input has\n   * changed since last submit.\n   *\n   * Also logs the `serachboxSubmit` event in the usage analytics.\n   */\n  public submit(): void {\n    this.magicBox.clearSuggestion();\n    this.updateQueryState();\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxSubmit, {});\n    this.triggerNewQuery(false);\n  }\n\n  /**\n   * Sets the content of the input.\n   *\n   * @param text The string to set in the input.\n   */\n  public setText(text: string): void {\n    this.magicBox.setText(text);\n    this.updateQueryState();\n  }\n\n  /**\n   * Clears the content of the input.\n   */\n  public clear(): void {\n    this.magicBox.clear();\n  }\n\n  /**\n   * Gets the content of the input.\n   *\n   * @returns {string} The content of the input.\n   */\n  public getText(): string {\n    return this.magicBox.getText();\n  }\n\n  /**\n   * Gets the result from the input.\n   *\n   * @returns {Result} The result.\n   */\n  public getResult() {\n    return this.magicBox.getResult();\n  }\n\n  /**\n   * Gets the displayed result from the input.\n   *\n   * @returns {Result} The displayed result.\n   */\n  public getDisplayedResult() {\n    return this.magicBox.getDisplayedResult();\n  }\n\n  /**\n   * Gets the current cursor position in the input.\n   *\n   * @returns {number} The cursor position (index starts at 0).\n   */\n  public getCursor(): number {\n    return this.magicBox.getCursor();\n  }\n\n  /**\n   * Gets the result at cursor position.\n   *\n   * @param match {string | { (result): boolean }} The match condition.\n   *\n   * @returns {Result[]} The result.\n   */\n  public resultAtCursor(match?: string | { (result): boolean; }) {\n    return this.magicBox.resultAtCursor(match);\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs): void {\n    Assert.exists(args);\n    Assert.exists(args.queryBuilder);\n\n    this.updateQueryState();\n    this.lastQuery = this.magicBox.getText();\n    new QueryboxQueryParameters(this.options).addParameters(args.queryBuilder, this.lastQuery);\n  }\n\n  private triggerNewQuery(searchAsYouType: boolean): void {\n    clearTimeout(this.searchAsYouTypeTimeout);\n    let text = this.magicBox.getText();\n    if (this.lastQuery != text && text != null) {\n      this.lastQuery = text;\n      this.queryController.executeQuery({\n        searchAsYouType: searchAsYouType,\n        logInActionsHistory: true\n      });\n    }\n  }\n\n  private updateQueryState(): void {\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, this.magicBox.getText());\n  }\n\n  private handleQueryStateChanged(args: IAttributeChangedEventArg): void {\n    Assert.exists(args);\n    let q = <string>args.value;\n    if (q != this.magicBox.getText()) {\n      this.magicBox.setText(q);\n    }\n  }\n\n  private searchAsYouType(): void {\n    clearTimeout(this.searchAsYouTypeTimeout);\n    this.searchAsYouTypeTimeout = setTimeout(() => {\n      this.usageAnalytics.logSearchAsYouType<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxAsYouType, {});\n      this.triggerNewQuery(true);\n    }, this.options.searchAsYouTypeDelay);\n  }\n}\nInitialization.registerAutoCreateComponent(Querybox);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Querybox/Querybox.ts\n **/","import { IQueryboxOptions } from './Querybox';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport _ = require('underscore');\n\nexport class QueryboxQueryParameters {\n  constructor(private options: IQueryboxOptions) {\n  }\n\n  public addParameters(queryBuilder: QueryBuilder, lastQuery: string) {\n    if (this.options.enableWildcards) {\n      queryBuilder.enableWildcards = true;\n    }\n\n    if (this.options.enableQuestionMarks) {\n      queryBuilder.enableQuestionMarks = true;\n    }\n\n    if (this.options.enableLowercaseOperators) {\n      queryBuilder.enableLowercaseOperators = true;\n    }\n\n    if (!_.isEmpty(lastQuery)) {\n      queryBuilder.disableQuerySyntax = !this.options.enableQuerySyntax;\n      queryBuilder.expression.add(lastQuery);\n      if (this.options.enablePartialMatch) {\n        queryBuilder.enablePartialMatch = this.options.enablePartialMatch;\n        if (this.options.partialMatchKeywords) {\n          queryBuilder.partialMatchKeywords = this.options.partialMatchKeywords;\n        }\n        if (this.options.partialMatchThreshold) {\n          queryBuilder.partialMatchThreshold = this.options.partialMatchThreshold;\n        }\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Querybox/QueryboxQueryParameters.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\n\nexport interface ISearchButtonOptions {\n}\n\n/**\n * The SearchButton component renders a search icon that the end user can click to trigger a new query.\n *\n * See also the {@link Searchbox} component, which can automatically instantiate a SearchButton component along with a\n * {@link Querybox} component or an {@link Omnibox} component.\n */\nexport class SearchButton extends Component {\n  static ID = 'SearchButton';\n\n  static options: ISearchButtonOptions = {};\n\n  /**\n   * Creates a new SearchButton. Binds a `click` event on the element. Adds a search icon on the element.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the SearchButton component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ISearchButtonOptions, bindings?: IComponentBindings) {\n    super(element, SearchButton.ID, bindings);\n\n    this.bind.on(element, 'click', () => this.handleClick());\n    // Provide a magnifier icon if element contains nothing\n    if (Utils.trim($$(this.element).text()) == '') {\n      element.innerHTML = '<span class=\\'coveo-icon\\'>' + l('Search') + '</span>';\n    }\n  }\n\n  /**\n   * Triggers the `click` event handler, which logs a `searchboxSubmit` event in the usage analytics and executes a\n   * query.\n   */\n  public click() {\n    this.handleClick();\n  }\n\n  private handleClick() {\n    this.logger.debug('Performing query following button click');\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxSubmit, {});\n    this.queryController.executeQuery();\n  }\n}\n\nInitialization.registerAutoCreateComponent(SearchButton);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/SearchButton/SearchButton.ts\n **/","import { IOmniboxOptions } from '../Omnibox/Omnibox';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Omnibox } from '../Omnibox/Omnibox';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { SearchButton } from '../SearchButton/SearchButton';\nimport { Querybox } from '../Querybox/Querybox';\nimport { $$ } from '../../utils/Dom';\nimport { Initialization } from '../Base/Initialization';\nimport _ = require('underscore');\n\nexport interface ISearchboxOptions extends IOmniboxOptions {\n  addSearchButton?: boolean;\n  enableOmnibox?: boolean;\n}\n\n/**\n * The Searchbox component can conveniently create two components that are frequently used together to allow the end\n * user to input and submit queries.\n *\n * This component attaches itself to a `div` element and takes care of instantiating either a {@link Querybox} component\n * or an {@link Omnibox} component, depending on its configuration. Optionally, the Searchbox component can also\n * instantiate a {@link SearchButton} component and append it inside the same `div`.\n */\nexport class Searchbox extends Component {\n  static ID = 'Searchbox';\n  static parent = Omnibox;\n\n  /**\n   * Possible options for the {@link Searchbox}\n   * @componentOptions\n   */\n  static options: ISearchboxOptions = {\n\n    /**\n     * Specifies whether to instantiate a {@link SearchButton} component.\n     *\n     * Default value is `true`.\n     */\n    addSearchButton: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to instantiate an {@link Omnibox} component.\n     *\n     * When this option is `false`, the Searchbox component instantiates a {@link Querybox} component instead of an\n     * Omnibox component.\n     *\n     * **Note:**\n     * > You can use configuration options specific to the component that the Searchbox instantiates.\n     *\n     * **Examples:**\n     *\n     * In this first case, the Searchbox will instantiate a Querybox component. It is therefore possible to configure\n     * that Querybox instance using any of the Querybox component options such as\n     * {@link Querybox.options.triggerQueryOnClear}.\n     * ```html\n     * <div class='CoveoSearchbox' data-trigger-query-on-clear='true'></div>\n     * ```\n     *\n     * In this second case, the Searchbox will instantiate an Omnibox component. It is therefore possible to configure\n     * that Omnibox instance using any of the Omnibox component options such as {@link Omnibox.options.placeholder}.\n     * Moreover, since the Omnibox component inherits all of the Querybox component options, the\n     * `data-trigger-query-on-clear` option will also work on that Omnibox instance.\n     * ```html\n     * <div class='CoveoSearchbox' data-enableOmnibox='true' data-place-holder='Please enter a query'></div>\n     * ```\n     *\n     * Default value is `false`.\n     */\n    enableOmnibox: ComponentOptions.buildBooleanOption({ defaultValue: false })\n  };\n\n  /**\n   * The {@link SearchButton} instance.\n   */\n  public searchButton: SearchButton;\n\n  /**\n   * The instance of the component that allows the end user to input queries.\n   *\n   * Can be either a {@link Querybox} component or an {@link Omnibox} component, depending on the value of\n   * {@link Searchbox.options.enableOmnibox}.\n   */\n  public searchbox: Querybox | Omnibox;\n\n  /**\n   * Creates a new Searchbox. Creates a new Coveo.Magicbox instance and wraps magic box methods (on blur, on submit\n   * etc.). Binds event on `buildingQuery` and on redirection (for standalone box).\n   * @param element The HTMLElement on which to instantiate the component. This cannot be an `HTMLInputElement` for\n   * technical reasons.\n   * @param options The options for the Searchbox component. These will merge with the options from the component set\n   * directly on the `HTMLElement`.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ISearchboxOptions, bindings?: IComponentBindings) {\n    super(element, Searchbox.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Searchbox, options);\n\n    if (this.options.inline) {\n      $$(element).addClass('coveo-inline');\n    }\n\n    if (this.options.addSearchButton) {\n      var anchor = document.createElement('a');\n      this.element.appendChild(anchor);\n      this.searchButton = new SearchButton(anchor, undefined, bindings);\n    }\n\n    var div = document.createElement('div');\n    this.element.appendChild(div);\n\n    if (this.options.enableOmnibox) {\n      this.searchbox = new Omnibox(div, this.options, bindings);\n    } else {\n      this.searchbox = new Querybox(div, this.options, bindings);\n    }\n  }\n}\n\nSearchbox.options = _.extend({}, Searchbox.options, Omnibox.options, Querybox.options);\n\n// Only parse omnibox option if omnibox is enabled\n_.each(<any>Searchbox.options, (value, key: string) => {\n  if (key in Omnibox.options && !(key in Querybox.options)) {\n    Searchbox.options[key] = _.extend({ depend: 'enableOmnibox' }, value);\n  }\n});\n\nInitialization.registerAutoCreateComponent(Searchbox);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Searchbox/Searchbox.ts\n **/","///<reference path=\"FieldAddon.ts\" />\n///<reference path=\"QueryExtensionAddon.ts\" />\n///<reference path=\"RevealQuerySuggestAddon.ts\" />\n///<reference path=\"OldOmniboxAddon.ts\" />\nimport { IQueryboxOptions } from '../Querybox/Querybox';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { StandaloneSearchInterfaceEvents } from '../../events/StandaloneSearchInterfaceEvents';\nimport { MODEL_EVENTS, IAttributeChangedEventArg } from '../../models/Model';\nimport { QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { IAnalyticsNoMeta, analyticsActionCauseList, IAnalyticsOmniboxSuggestionMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { OmniboxEvents, IOmniboxPreprocessResultForQueryEventArgs } from '../../events/OmniboxEvents';\nimport { $$ } from '../../utils/Dom';\nimport { Assert } from '../../misc/Assert';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport { Querybox } from '../Querybox/Querybox';\nimport { FieldAddon } from './FieldAddon';\nimport { QueryExtensionAddon } from './QueryExtensionAddon';\nimport { RevealQuerySuggestAddon } from './RevealQuerySuggestAddon';\nimport { OldOmniboxAddon } from './OldOmniboxAddon';\nimport { QueryboxQueryParameters } from '../Querybox/QueryboxQueryParameters';\nimport { IAnalyticsActionCause } from '../Analytics/AnalyticsActionListMeta';\nimport { IDuringQueryEventArgs } from '../../events/QueryEvents';\nimport { PendingSearchAsYouTypeSearchEvent } from '../Analytics/PendingSearchAsYouTypeSearchEvent';\nimport { Utils } from '../../utils/Utils';\nimport { MagicBox } from '../../ExternalModulesShim';\nimport { StandaloneSearchInterface } from '../SearchInterface/SearchInterface';\nimport _ = require('underscore');\n\nexport interface IPopulateOmniboxSuggestionsEventArgs {\n  omnibox: Omnibox;\n  suggestions: Array<Coveo.MagicBox.Suggestion[] | Promise<Coveo.MagicBox.Suggestion[]>>;\n}\n\nexport interface IOmniboxSuggestion extends Coveo.MagicBox.Suggestion {\n  executableConfidence?: number;\n}\n\nexport interface IOmniboxOptions extends IQueryboxOptions {\n  inline?: boolean;\n  enableFieldAddon?: boolean;\n  enableSimpleFieldAddon?: boolean;\n  listOfFields?: IFieldOption[];\n  fieldAlias?: { [alias: string]: IFieldOption };\n  enableRevealQuerySuggestAddon?: boolean;\n  enableQueryExtensionAddon?: boolean;\n  omniboxTimeout?: number;\n  placeholder?: string;\n  grammar?: (grammar: { start: string; expressions: { [id: string]: Coveo.MagicBox.ExpressionDef }; }) => { start: string; expressions: { [id: string]: Coveo.MagicBox.ExpressionDef } };\n}\n\nconst MINIMUM_EXECUTABLE_CONFIDENCE = 0.8;\n\n/**\n * The Omnibox component is very similar to the simpler {@link Querybox} component. It supports all of the same options\n * and behaviors.\n *\n * The Omnibox component takes care of adding type-ahead capability to the search input. Custom components can extend\n * and customize the type-ahead and the suggestions it provides.\n *\n * The type-ahead is configurable by activating addons, which the Coveo JavaScript Search Framework provides OOTB\n * (facets, analytics suggestions, Coveo Machine Learning suggestions and advanced Coveo syntax suggestions).\n *\n * It is also possible for external code to provide type-ahead suggestions.\n *\n * See also the {@link Searchbox} component, which can automatically instantiate an Omnibox component along with an\n * optional {@link SearchButton} component.\n */\nexport class Omnibox extends Component {\n  public static ID = 'Omnibox';\n\n  /**\n   * The options for the omnibox\n   * @componentOptions\n   */\n  static options: IOmniboxOptions = {\n\n    /**\n     * Specifies whether suggestions appearing in the Omnibox should push the result down instead of appearing over the\n     * results.\n     *\n     * Set this option as well as {@link Omnibox.options.enableSearchAsYouType} and\n     * {@link Omnibox.options.enableRevealQuerySuggestAddon} to `true` for a cool effect!\n     *\n     * Default value is `false`.\n     */\n    inline: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to automatically trigger a new query whenever the end user types new text inside the Omnibox.\n     *\n     * Set this option as well a {@link Omnibox.options.inline} and\n     * {@link Omnibox.options.enableRevealQuerySuggestAddon} to `true` for a cool effect!\n     *\n     * Default value is `false`.\n     */\n    enableSearchAsYouType: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * If {@link Omnibox.options.enableSearchAsYouType} is `true`, specifies the delay (in milliseconds) before\n     * triggering a new query when the user types new text inside the Omnibox.\n     *\n     * Default value is `2000`. Minimum value is `0`.\n     */\n    searchAsYouTypeDelay: ComponentOptions.buildNumberOption({\n      defaultValue: 2000,\n      min: 0,\n      depend: 'enableSearchAsYouType'\n    }),\n\n    /**\n     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to enable the `field` addon.\n     *\n     * The `field` addon allows the search box to highlight and complete field syntax.\n     *\n     * **Example:**\n     *\n     * > Suppose you want to filter on a certain file type. You start typing `@sysf` in the input. The Omnibox provides\n     * > you with several matching fields. You select the `@sysfiletype` suggestion and type `=`. If this option is set\n     * > to `true`, then the Omnibox provides you with suggestions for available matching file types.\n     *\n     * Default value is `false`.\n     */\n    enableFieldAddon: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableQuerySyntax' }),\n    enableSimpleFieldAddon: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableFieldAddon' }),\n    listOfFields: ComponentOptions.buildFieldsOption({ depend: 'enableFieldAddon' }),\n\n    /**\n     * Specifies whether to enable the Coveo Machine Learning (Coveo ML) query suggestions.\n     *\n     * This implies that you have a proper Coveo ML integration configured (see\n     * [Coveo Machine Learning](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=177)).\n     *\n     * Default value is `true`.\n     */\n    enableRevealQuerySuggestAddon: ComponentOptions.buildBooleanOption({ defaultValue: true, alias: 'enableTopQueryAddon' }),\n\n    /**\n     * If {@link Querybox.options.enableQuerySyntax} is `true`, specifies whether to enable the `query extension` addon.\n     *\n     * The `query extension` addon allows the Omnibox to complete the syntax for query extensions.\n     *\n     * Default value is `false`.\n     */\n    enableQueryExtensionAddon: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'enableQuerySyntax' }),\n\n    /**\n     * Specifies a placeholder for the input.\n     */\n    placeholder: ComponentOptions.buildLocalizedStringOption(),\n\n    /**\n     * Specifies a timeout (in milliseconds) before rejecting suggestions in the Omnibox.\n     *\n     * Default value is `2000`. Minimum value is `0`.\n     */\n    omniboxTimeout: ComponentOptions.buildNumberOption({ defaultValue: 2000, min: 0 })\n  };\n\n  public magicBox: Coveo.MagicBox.Instance;\n  private partialQueries: string[] = [];\n  private lastSuggestions: IOmniboxSuggestion[] = [];\n  private lastQuery: string;\n  private modifyEventTo: IAnalyticsActionCause;\n  private movedOnce = false;\n  private searchAsYouTypeTimeout: number;\n  private skipRevealAutoSuggest = false;\n\n  /**\n   * Creates a new Omnibox component. Also enables necessary addons and binds events on various query events.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Omnibox component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IOmniboxOptions, bindings?: IComponentBindings) {\n    super(element, Omnibox.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Omnibox, options);\n\n    let grammar: { start: string; expressions: { [id: string]: Coveo.MagicBox.ExpressionDef } };\n\n    if (this.options.enableQuerySyntax) {\n      grammar = MagicBox.Grammars.Expressions(MagicBox.Grammars.Complete);\n\n      if (this.options.enableFieldAddon) {\n        new FieldAddon(this);\n      }\n      if (this.options.fieldAlias != null) {\n        this.options.listOfFields = this.options.listOfFields || [];\n        this.options.listOfFields = this.options.listOfFields.concat(_.keys(this.options.fieldAlias));\n      }\n      if (this.options.enableQueryExtensionAddon) {\n        new QueryExtensionAddon(this);\n      }\n    } else {\n      grammar = { start: 'Any', expressions: { Any: /.*/ } };\n    }\n\n    if (this.options.enableRevealQuerySuggestAddon) {\n      new RevealQuerySuggestAddon(this);\n    }\n\n    new OldOmniboxAddon(this);\n\n    if (this.options.grammar != null) {\n      grammar = this.options.grammar(grammar);\n    }\n\n    this.magicBox = MagicBox.create(element, new MagicBox.Grammar(grammar.start, grammar.expressions), {\n      inline: this.options.inline,\n      selectableSuggestionClass: 'coveo-omnibox-selectable',\n      selectedSuggestionClass: 'coveo-omnibox-selected',\n      suggestionTimeout: this.options.omniboxTimeout\n    });\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(StandaloneSearchInterfaceEvents.beforeRedirect, () => this.handleBeforeRedirect());\n    this.bind.onRootElement(QueryEvents.querySuccess, () => this.handleQuerySuccess());\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.Q, (args: IAttributeChangedEventArg) => this.handleQueryStateChanged(args));\n    if (this.isRevealAutoSuggestion()) {\n      this.bind.onRootElement(QueryEvents.duringQuery, (args: IDuringQueryEventArgs) => this.handleDuringQuery(args));\n    }\n    this.setupMagicBox();\n  }\n\n  /**\n   * Adds the current content of the input to the query and triggers a query if the current content of the input has\n   * changed since last submit.\n   *\n   * Also logs a `searchboxSubmit` event in the usage analytics.\n   */\n  public submit() {\n    this.magicBox.clearSuggestion();\n    this.updateQueryState();\n    this.triggerNewQuery(false, () => {\n      this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxSubmit, {});\n    });\n  }\n\n  /**\n   * Gets the current content of the input.\n   * @returns {string} The current content of the input.\n   */\n  public getText() {\n    return this.magicBox.getText();\n  }\n\n  /**\n   * Sets the content of the input\n   * @param text The string to set in the input.\n   */\n  public setText(text: string) {\n    this.magicBox.setText(text);\n    this.updateQueryState();\n  }\n\n  /**\n   * Clears the content of the input.\n   */\n  public clear() {\n    this.magicBox.clear();\n  }\n\n  /**\n   * Gets the `HTMLInputElement` of the Omnibox.\n   */\n  public getInput() {\n    return <HTMLInputElement>this.magicBox.element.querySelector('input');\n  }\n\n  public getResult() {\n    return this.magicBox.getResult();\n  }\n\n  public getDisplayedResult() {\n    return this.magicBox.getDisplayedResult();\n  }\n\n  public getCursor() {\n    return this.magicBox.getCursor();\n  }\n\n  public resultAtCursor(match?: string | { (result: Coveo.MagicBox.Result): boolean; }) {\n    return this.magicBox.resultAtCursor(match);\n  }\n\n  private setupMagicBox() {\n    this.magicBox.onmove = () => {\n      // We assume that once the user has moved its selection, it becomes an explicit omnibox analytics event\n      if (this.isRevealAutoSuggestion()) {\n        this.modifyEventTo = this.getOmniboxAnalyticsEventCause();\n      }\n      this.movedOnce = true;\n    };\n\n    this.magicBox.onfocus = () => {\n      if (this.isRevealAutoSuggestion()) {\n        // This flag is used to block the automatic query when the UI is loaded with a query (#q=foo)\n        // and then the input is focused. We want to block that query, even if it match the suggestion\n        // Only when there is an actual change in the input (user typing something) is when we want the automatic query to kick in\n        this.skipRevealAutoSuggest = true;\n      }\n    };\n\n    this.magicBox.onsuggestions = (suggestions: IOmniboxSuggestion[]) => {\n      // If text is empty, this can mean that user selected text from the search box\n      // and hit \"delete\" : Reset the partial queries in this case\n      if (Utils.isEmptyString(this.getText())) {\n        this.partialQueries = [];\n      }\n      this.movedOnce = false;\n      this.lastSuggestions = suggestions;\n      if (this.isRevealAutoSuggestion() && !this.skipRevealAutoSuggest) {\n        this.searchAsYouType();\n      }\n    };\n\n    if (this.options.enableSearchAsYouType) {\n      $$(this.element).addClass('coveo-magicbox-search-as-you-type');\n    }\n\n    this.magicBox.onchange = () => {\n      this.skipRevealAutoSuggest = false;\n      let text = this.getText();\n      if (text != undefined && text != '') {\n        if (this.isRevealAutoSuggestion()) {\n          if (this.movedOnce) {\n            this.searchAsYouType(true);\n          }\n        } else if (this.options.enableSearchAsYouType) {\n          this.searchAsYouType(true);\n        }\n      } else {\n        this.clear();\n      }\n\n    };\n\n    if (this.options.placeholder) {\n      (<HTMLInputElement>this.magicBox.element.querySelector('input')).placeholder = this.options.placeholder;\n    }\n    this.magicBox.onsubmit = () => {\n      this.magicBox.clearSuggestion();\n      this.updateQueryState();\n      this.triggerNewQuery(false, () => {\n        this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxSubmit, {});\n      });\n      this.magicBox.blur();\n    };\n\n    this.magicBox.onselect = (suggestion: IOmniboxSuggestion) => {\n      let index = _.indexOf(this.lastSuggestions, suggestion);\n      let suggestions = _.compact(_.map(this.lastSuggestions, (suggestion) => suggestion.text));\n      this.magicBox.clearSuggestion();\n      this.updateQueryState();\n      // A bit tricky here : When it's reveal auto suggestions\n      // the mouse selection and keyboard selection acts differently :\n      // keyboard selection will automatically do the query (which will log a search as you type event -> further modified by this.modifyEventTo if needed)\n      // mouse selection will not \"auto\" send the query.\n      // the movedOnce variable detect the keyboard movement, and is used to differentiate mouse vs keyboard\n      if (!this.isRevealAutoSuggestion()) {\n        this.usageAnalytics.cancelAllPendingEvents();\n        this.triggerNewQuery(false, () => {\n          this.usageAnalytics.logSearchEvent<IAnalyticsOmniboxSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(index, suggestions));\n        });\n      } else if (this.isRevealAutoSuggestion() && this.movedOnce) {\n        this.handleRevealAutoSuggestionWithKeyboard(index, suggestions);\n      } else if (this.isRevealAutoSuggestion() && !this.movedOnce) {\n        this.handleRevealAutoSuggestionsWithMouse(index, suggestions);\n      }\n\n      // Consider a selection like a reset of the partial queries (it's the end of a suggestion pattern)\n      if (this.isRevealAutoSuggestion()) {\n        this.partialQueries = [];\n      }\n    };\n\n    this.magicBox.onblur = () => {\n      if (this.options.enableSearchAsYouType && !this.options.inline) {\n        this.setText(this.lastQuery);\n      } else {\n        this.updateQueryState();\n      }\n      if (this.isRevealAutoSuggestion()) {\n        this.usageAnalytics.sendAllPendingEvents();\n      }\n    };\n\n    this.magicBox.onclear = () => {\n      this.updateQueryState();\n      if (this.options.triggerQueryOnClear) {\n        this.triggerNewQuery(false, () => {\n          this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxClear, {});\n        });\n      }\n    };\n\n    if (this.options.autoFocus) {\n      this.magicBox.focus();\n    }\n\n    this.magicBox.ontabpress = () => {\n      this.handleTabPress();\n    };\n\n\n    this.magicBox.getSuggestions = () => this.handleSuggestions();\n  }\n\n  private handleRevealAutoSuggestionWithKeyboard(index: number, suggestions: string[]) {\n    if (this.searchAsYouTypeTimeout) {\n      // Here, there is currently a search as you typed queued up :\n      // Think : user typed very quickly, then very quickly selected a suggestion (without waiting for the search as you type)\n      // Cancel the search as you type query, then immediately do the query with the selection (+analytics event with the selection)\n      this.usageAnalytics.cancelAllPendingEvents();\n      clearTimeout(this.searchAsYouTypeTimeout);\n      this.searchAsYouTypeTimeout = undefined;\n      this.triggerNewQuery(false, () => {\n        this.usageAnalytics.logSearchEvent<IAnalyticsOmniboxSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(index, suggestions));\n      });\n\n    } else {\n      // Here, the search as you type query has returned, but the analytics event has not ye been sent.\n      // Think : user typed slowly, the query returned, and then the user selected a suggestion.\n      // Since the analytics event has not yet been sent (search as you type event have a 5 sec delay)\n      // modify the pending event, then send the newly modified analytics event immediately.\n      this.modifyEventTo = this.getOmniboxAnalyticsEventCause();\n      this.modifyCustomDataOnPending(index, suggestions);\n      this.usageAnalytics.sendAllPendingEvents();\n    }\n  }\n\n  private handleRevealAutoSuggestionsWithMouse(index: number, suggestions: string[]) {\n    if (this.searchAsYouTypeTimeout || index != 0) {\n      // Here : the user either very quickly chose the first suggestion, and the search as you type is still queued up.\n      // OR\n      // the user chose something different then the first suggestion.\n      // Remove the search as you type if it's there, and do the query with the suggestion directly.\n      this.clearSearchAsYouType();\n      this.usageAnalytics.cancelAllPendingEvents();\n      this.triggerNewQuery(false, () => {\n        this.usageAnalytics.logSearchEvent<IAnalyticsOmniboxSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(index, suggestions));\n      });\n\n    } else {\n      // Here : the user either very slowly chose a suggestion, and there is no search as you typed queued up\n      // AND\n      // the user chose the first suggestion.\n      // this means the query is already returned, but the analytics event is still queued up.\n      // modify the analytics event, and send it.\n      this.modifyEventTo = this.getOmniboxAnalyticsEventCause();\n      this.modifyCustomDataOnPending(index, suggestions);\n      this.usageAnalytics.sendAllPendingEvents();\n\n      // This should happen if :\n      // users did a (short) query first, which does not match the first suggestion. (eg: typed \"t\", then search)\n      // then, refocus the search box. The same suggestion(s) will re-appear.\n      // By selecting the first one with the mouse, we need to retrigger a query because this means the search as you type could not\n      // kick in and do the query automatically.\n      if (this.lastQuery != this.getText()) {\n        this.triggerNewQuery(false, () => {\n          this.usageAnalytics.logSearchEvent<IAnalyticsOmniboxSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(index, suggestions));\n        });\n      }\n    }\n  }\n\n  private modifyCustomDataOnPending(index: number, suggestions: string[]) {\n    let pendingEvt = this.usageAnalytics.getPendingSearchEvent();\n    if (pendingEvt instanceof PendingSearchAsYouTypeSearchEvent) {\n      let newCustomData = this.buildCustomDataForPartialQueries(index, suggestions);\n      _.each(_.keys(newCustomData), (k: string) => {\n        (<PendingSearchAsYouTypeSearchEvent>pendingEvt).modifyCustomData(k, newCustomData[k]);\n      });\n    }\n  }\n\n  private buildCustomDataForPartialQueries(index: number, suggestions: string[]): IAnalyticsOmniboxSuggestionMeta {\n    return {\n      partialQueries: this.cleanCustomData(this.partialQueries),\n      suggestionRanking: index,\n      suggestions: this.cleanCustomData(suggestions),\n      partialQuery: _.last(this.partialQueries)\n    };\n  }\n\n  private cleanCustomData(toClean: string[], rejectLength = 256) {\n    // Filter out only consecutive values that are the identical\n    toClean = _.compact(_.filter(toClean, (partial: string, pos?: number, array?: string[]) => {\n      return pos === 0 || partial !== array[pos - 1];\n    }));\n\n    // Custom dimensions cannot be an array in analytics service: Send a string joined by ; instead.\n    // Need to replace ;\n    toClean = _.map(toClean, (partial) => {\n      return partial.replace(/;/g, '');\n    });\n\n    // Reduce right to get the last X words that adds to less then rejectLength\n    let reducedToRejectLengthOrLess = [];\n    _.reduceRight(toClean, (memo: number, partial: string) => {\n      let totalSoFar = memo + partial.length;\n      if (totalSoFar <= rejectLength) {\n        reducedToRejectLengthOrLess.push(partial);\n      }\n      return totalSoFar;\n    }, 0);\n    toClean = reducedToRejectLengthOrLess.reverse();\n    let ret = toClean.join(';');\n\n    // analytics service can store max 256 char in a custom event\n    // if we're over that, call cleanup again with an arbitrary 10 less char accepted\n    if (ret.length >= 256) {\n      return this.cleanCustomData(toClean, rejectLength - 10);\n    }\n\n    return toClean.join(';');\n  }\n\n  private handleSuggestions() {\n    let suggestionsEventArgs: IPopulateOmniboxSuggestionsEventArgs = {\n      suggestions: [],\n      omnibox: this\n    };\n    this.bind.trigger(this.element, OmniboxEvents.populateOmniboxSuggestions, suggestionsEventArgs);\n    let text = this.getText();\n    if (!Utils.isNullOrEmptyString(text)) {\n      this.partialQueries.push(text);\n    }\n    return _.compact(suggestionsEventArgs.suggestions);\n  }\n\n  private handleBeforeRedirect() {\n    this.updateQueryState();\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.queryBuilder);\n    this.updateQueryState();\n    this.lastQuery = this.getQuery(data.searchAsYouType);\n\n    let result: Coveo.MagicBox.Result = this.lastQuery == this.magicBox.getDisplayedResult().input ? this.magicBox.getDisplayedResult().clone() : this.magicBox.grammar.parse(this.lastQuery).clean();\n    let preprocessResultForQueryArgs: IOmniboxPreprocessResultForQueryEventArgs = {\n      result: result\n    };\n\n    if (this.options.enableQuerySyntax) {\n      let notQuotedValues = preprocessResultForQueryArgs.result.findAll('FieldValueNotQuoted');\n      _.each(notQuotedValues, (value: Coveo.MagicBox.Result) => value.value = '\"' + value.value.replace(/\"|\\u00A0/g, ' ') + '\"');\n      if (this.options.fieldAlias) {\n        let fieldNames = preprocessResultForQueryArgs.result.findAll((result: Coveo.MagicBox.Result) => result.expression.id == 'FieldName' && result.isSuccess());\n        _.each(fieldNames, (result: Coveo.MagicBox.Result) => {\n          let alias = _.find(_.keys(this.options.fieldAlias), (alias: string) => alias.toLowerCase() == result.value.toLowerCase());\n          if (alias != null) {\n            result.value = <string>this.options.fieldAlias[alias];\n          }\n        });\n      }\n    }\n\n    this.bind.trigger(this.element, OmniboxEvents.omniboxPreprocessResultForQuery, preprocessResultForQueryArgs);\n    let query = preprocessResultForQueryArgs.result.toString();\n    new QueryboxQueryParameters(this.options).addParameters(data.queryBuilder, query);\n  }\n\n  private handleTabPress() {\n    if (this.options.enableRevealQuerySuggestAddon) {\n      this.handleTabPressForRevealSuggestions();\n    } else {\n      this.handleTabPressForOldOmniboxAddon();\n    }\n  }\n\n  private handleTabPressForRevealSuggestions() {\n    if (!this.options.enableSearchAsYouType) {\n      let suggestions = _.compact(_.map(this.lastSuggestions, (suggestion) => suggestion.text));\n      this.usageAnalytics.logCustomEvent(this.getOmniboxAnalyticsEventCause(), this.buildCustomDataForPartialQueries(0, suggestions), this.element);\n    }\n  }\n\n  private handleTabPressForOldOmniboxAddon() {\n    if (this.lastSuggestions && this.lastSuggestions[0] && this.lastSuggestions[0].dom) {\n      let firstSelected = $$(this.lastSuggestions[0].dom).find('.coveo-omnibox-selected');\n      let firstSelectable = $$(this.lastSuggestions[0].dom).find('.coveo-omnibox-selectable');\n      if (firstSelected) {\n        $$(firstSelected).trigger('tabSelect');\n      } else if (firstSelectable) {\n        $$(firstSelectable).trigger('tabSelect');\n      }\n    }\n  }\n\n  private triggerNewQuery(searchAsYouType: boolean, analyticsEvent: () => void) {\n    clearTimeout(this.searchAsYouTypeTimeout);\n    let text = this.getQuery(searchAsYouType);\n    if (this.shouldExecuteQuery(searchAsYouType)) {\n      this.lastQuery = text;\n      analyticsEvent();\n      this.queryController.executeQuery({\n        searchAsYouType: searchAsYouType,\n        logInActionsHistory: true\n      });\n    }\n  }\n\n  private getQuery(searchAsYouType: boolean) {\n    let query: string;\n    if (searchAsYouType) {\n      query = this.magicBox.getWordCompletion();\n      if (query == null && this.lastSuggestions != null && this.lastSuggestions.length > 0) {\n        let textSuggestion = _.find(this.lastSuggestions, (suggestion: IOmniboxSuggestion) => suggestion.text != null);\n        if (textSuggestion != null) {\n          query = textSuggestion.text;\n        }\n      }\n    }\n    return query || this.magicBox.getText();\n  }\n\n  public updateQueryState() {\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, this.magicBox.getText());\n  }\n\n  private handleQueryStateChanged(args: IAttributeChangedEventArg) {\n    Assert.exists(args);\n    let q = <string>args.value;\n    if (q != this.magicBox.getText()) {\n      this.magicBox.setText(q);\n    }\n  }\n\n  private handleQuerySuccess() {\n    if (!this.isRevealAutoSuggestion()) {\n      this.partialQueries = [];\n    }\n  }\n\n  private handleDuringQuery(args: IDuringQueryEventArgs) {\n    // When the query results returns ... (args.promise)\n    args.promise.then(() => {\n      // Get a handle on a pending search as you type (those events are delayed, not sent instantly)\n      let pendingEvent = this.usageAnalytics.getPendingSearchEvent();\n      if (pendingEvent instanceof PendingSearchAsYouTypeSearchEvent) {\n        (<PendingSearchAsYouTypeSearchEvent>pendingEvent).beforeResolve.then((evt) => {\n          // Check if we need to modify the event type beforeResolving it\n          args.promise.then(() => {\n            if (this.modifyEventTo) {\n              evt.modifyEventCause(this.modifyEventTo);\n              this.modifyEventTo = null;\n            }\n          });\n        });\n      }\n    });\n  }\n\n  private searchAsYouType(forceExecuteQuery = false) {\n    this.clearSearchAsYouType();\n    if (this.shouldExecuteQuery(true)) {\n      this.searchAsYouTypeTimeout = setTimeout(() => {\n        if (this.suggestionShouldTriggerQuery() || forceExecuteQuery) {\n          let suggestions = _.map(this.lastSuggestions, (suggestion) => suggestion.text);\n          let index = _.indexOf(suggestions, this.magicBox.getWordCompletion());\n          this.triggerNewQuery(true, () => {\n            this.usageAnalytics.logSearchAsYouType<IAnalyticsOmniboxSuggestionMeta>(analyticsActionCauseList.searchboxAsYouType, this.buildCustomDataForPartialQueries(index, suggestions));\n          });\n          this.clearSearchAsYouType();\n        }\n\n      }, this.options.searchAsYouTypeDelay);\n    }\n  }\n\n  private isRevealAutoSuggestion() {\n    return this.options.enableSearchAsYouType && this.options.enableRevealQuerySuggestAddon;\n  }\n\n  private shouldExecuteQuery(searchAsYouType: boolean) {\n    let text = this.getQuery(searchAsYouType);\n    return this.lastQuery != text && text != null;\n  }\n\n  private suggestionShouldTriggerQuery(suggestions = this.lastSuggestions) {\n    if (this.shouldExecuteQuery(true)) {\n      if (suggestions && suggestions[0]) {\n        let suggestion = suggestions[0];\n        // If we have access to a confidence level, return true if we are equal or above the minimum confidence level.\n        if (suggestion && suggestion.executableConfidence != undefined) {\n          return suggestion.executableConfidence >= MINIMUM_EXECUTABLE_CONFIDENCE;\n        }\n        // If we don't have access to a confidence level, return true only if it \"starts with\" the content of the search box\n        if (suggestion.text && suggestion.text.indexOf(this.magicBox.getText()) == 0) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  private clearSearchAsYouType() {\n    clearTimeout(this.searchAsYouTypeTimeout);\n    this.searchAsYouTypeTimeout = undefined;\n  }\n\n  private getOmniboxAnalyticsEventCause() {\n    if (this.searchInterface instanceof StandaloneSearchInterface) {\n      return analyticsActionCauseList.omniboxFromLink;\n    }\n    return analyticsActionCauseList.omniboxAnalytics;\n  }\n}\n\nOmnibox.options = _.extend({}, Omnibox.options, Querybox.options);\nInitialization.registerAutoCreateComponent(Omnibox);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Omnibox/Omnibox.ts\n **/","///<reference path='Omnibox.ts'/>\nimport { Omnibox, IPopulateOmniboxSuggestionsEventArgs, IOmniboxSuggestion } from './Omnibox';\nimport { OmniboxEvents } from '../../events/OmniboxEvents';\nimport { IFieldDescription } from '../../rest/FieldDescription';\nimport { IEndpointError } from '../../rest/EndpointError';\nimport { MagicBox } from '../../ExternalModulesShim';\nimport _ = require('underscore');\n\ninterface IFieldAddonHash {\n  type: string;\n  before: string;\n  after: string;\n  current: string;\n  field?: string;\n}\n\nexport class FieldAddon {\n  static INDEX = 64;\n\n  cache: { [hash: string]: Promise<string[]> } = {};\n\n  constructor(public omnibox: Omnibox) {\n    this.omnibox.bind.on(this.omnibox.element, OmniboxEvents.populateOmniboxSuggestions, (args: IPopulateOmniboxSuggestionsEventArgs) => {\n      args.suggestions.push(this.getSuggestion());\n    });\n  }\n\n  public getSuggestion(): Promise<IOmniboxSuggestion[]> {\n    var hash = this.getHash();\n    if (hash == null) {\n      return null;\n    }\n    var hashString = this.hashToString(hash);\n    if (this.cache[hashString] != null) {\n      return this.hashValueToSuggestion(hash, this.cache[hashString]);\n    }\n    var values: Promise<IOmniboxSuggestion[]>;\n    if (hash.type == 'FieldName') {\n      values = this.fieldNames(hash.current);\n    }\n    if (hash.type == 'FieldValue') {\n      values = this.fieldValues(hash.field, hash.current);\n    }\n    if (hash.type == 'SimpleFieldName') {\n      values = this.simpleFieldNames(hash.current);\n    }\n    this.cache[hashString] = values;\n    values.catch(() => {\n      delete this.cache[hashString];\n    });\n    return this.hashValueToSuggestion(hash, values);\n  }\n\n  private getHash(): IFieldAddonHash {\n    var fieldName: Coveo.MagicBox.Result = _.last(this.omnibox.resultAtCursor('FieldName'));\n    if (fieldName != null) {\n      fieldName = fieldName.findParent('Field') || fieldName;\n      var currentField = fieldName.toString();\n      var before = fieldName.before();\n      var after = fieldName.after();\n      return { type: 'FieldName', current: currentField, before: before, after: after };\n    }\n    var fieldValue: Coveo.MagicBox.Result = _.last(this.omnibox.resultAtCursor('FieldValue'));\n    if (fieldValue) {\n      var fieldQuery = fieldValue.findParent('FieldQuery') || (this.omnibox.options.enableSimpleFieldAddon && fieldValue.findParent('FieldSimpleQuery'));\n      if (fieldQuery) {\n        var field = fieldQuery.find('FieldName').toString();\n        if (this.omnibox.options.fieldAlias) {\n          if (field in this.omnibox.options.fieldAlias) {\n            field = this.omnibox.options.fieldAlias[field];\n          }\n        }\n        var value = fieldValue.toString();\n        var before = fieldValue.before();\n        var after = fieldValue.after();\n        return { type: 'FieldValue', field: field, current: value, before: before, after: after };\n      }\n    }\n    if (this.omnibox.options.enableSimpleFieldAddon) {\n      var word: Coveo.MagicBox.Result = _.last(this.omnibox.resultAtCursor('Word'));\n      if (word != null) {\n        var currentField = word.toString();\n        var before = word.before();\n        var after = word.after();\n        return { type: 'SimpleFieldName', current: currentField, before: before, after: after };\n      }\n    }\n  }\n\n  private hashToString(hash: IFieldAddonHash) {\n    if (hash == null) {\n      return null;\n    }\n    return hash.type + hash.current + (hash.field || '');\n  }\n\n  private hashValueToSuggestion(hash: IFieldAddonHash, promise: Promise<string[]>): Promise<IOmniboxSuggestion[]> {\n    return promise.then((values) => {\n      var suggestions: IOmniboxSuggestion[] = _.map(values, (value: string, i) => {\n        return {\n          text: hash.before + (hash.current.toLowerCase().indexOf(value.toLowerCase()) == 0 ? hash.current + value.substr(hash.current.length) : value) + hash.after,\n          html: MagicBox.Utils.highlightText(value, hash.current, true),\n          index: FieldAddon.INDEX - i / values.length\n        };\n      });\n      return suggestions;\n    });\n  }\n\n  private fields: Promise<string[]>;\n\n  private getFields(): Promise<string[]> {\n    if (this.fields == null) {\n      this.fields = new Promise<string[]>((resolve, reject) => {\n        if (this.omnibox.options.listOfFields != null) {\n          resolve(<string[]>this.omnibox.options.listOfFields);\n        } else {\n          var promise: Promise<IFieldDescription[] | IEndpointError> = this.omnibox.queryController.getEndpoint().listFields();\n          promise.then((fieldDescriptions: IFieldDescription[]) => {\n            var fieldNames = _.chain(fieldDescriptions)\n              .filter((fieldDescription: IFieldDescription) => fieldDescription.includeInQuery && fieldDescription.groupByField)\n              .map((fieldDescription: IFieldDescription) => fieldDescription.name.substr(1))\n              .value();\n\n            resolve(fieldNames);\n          }).catch(() => {\n            reject();\n          });\n        }\n      });\n    }\n    return this.fields;\n  }\n\n  private fieldNames(current: string): Promise<IOmniboxSuggestion[]> {\n    var withAt = current.length > 0 && current[0] == '@';\n    var fieldName = withAt ? current.substr(1) : current;\n    var fieldNameLC = fieldName.toLowerCase();\n\n    return this.getFields().then((fields: string[]) => {\n      var matchFields = _.chain(fields)\n        .map((field: string) => {\n          return {\n            index: field.toLowerCase().indexOf(fieldNameLC),\n            field: withAt ? field : '@' + field\n          };\n        })\n        .filter((field) => {\n          return field.index != -1 && field.field.length > current.length;\n        })\n        .sortBy('index')\n        .map((field) => field.field)\n        .value();\n      matchFields = _.first(matchFields, 5);\n      return matchFields;\n    });\n  }\n\n  private fieldValues(field: string, current: string): Promise<IOmniboxSuggestion[]> {\n    return this.omnibox.queryController.getEndpoint().listFieldValues({\n      pattern: '.*' + current + '.*',\n      patternType: 'RegularExpression',\n      sortCriteria: 'occurrences',\n      field: '@' + field,\n      maximumNumberOfValues: 5\n    }).then((values) => {\n      return _.chain(values)\n        .map((value) => {\n          return {\n            index: value.value.toLowerCase().indexOf(current),\n            value: value.value\n          };\n        })\n        .filter((value) => {\n          return value.value.length > current.length;\n        })\n        .sortBy('index')\n        .map((value) => {\n          return value.value.replace(/ /g, '\\u00A0');\n        })\n        .value();\n    });\n  }\n\n  private simpleFieldNames(current: string): Promise<IOmniboxSuggestion[]> {\n    var fieldName = current;\n    var fieldNameLC = fieldName.toLowerCase();\n\n    return this.getFields().then((fields: string[]) => {\n      var matchFields = _.chain(fields)\n        .map((field: string) => {\n          return {\n            index: field.toLowerCase().indexOf(fieldNameLC),\n            field: field + ':'\n          };\n        })\n        .filter((field) => {\n          return field.index != -1 && field.field.length > current.length;\n        })\n        .sortBy('index')\n        .map((field) => field.field)\n        .value();\n      matchFields = _.first(matchFields, 5);\n      return matchFields;\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Omnibox/FieldAddon.ts\n **/","///<reference path='Omnibox.ts'/>\nimport { OmniboxEvents } from '../../events/OmniboxEvents';\nimport { Omnibox, IPopulateOmniboxSuggestionsEventArgs, IOmniboxSuggestion } from './Omnibox';\nimport { IExtension } from '../../rest/Extension';\nimport { MagicBox } from '../../ExternalModulesShim';\nimport _ = require('underscore');\n\ninterface IQueryExtensionAddonHash {\n  type: string;\n  before: string;\n  after: string;\n  current: string;\n  name?: string;\n  used?: string[];\n}\n\nexport class QueryExtensionAddon {\n  static INDEX = 62;\n\n  cache: { [hash: string]: Promise<string[]> } = {};\n\n  constructor(public omnibox: Omnibox) {\n    this.omnibox.bind.on(this.omnibox.element, OmniboxEvents.populateOmniboxSuggestions, (args: IPopulateOmniboxSuggestionsEventArgs) => {\n      args.suggestions.push(this.getSuggestion());\n    });\n  }\n\n  public getSuggestion(): Promise<IOmniboxSuggestion[]> {\n    var hash = this.getHash(this.omnibox.magicBox);\n    if (hash == null) {\n      return null;\n    }\n    var hashString = this.hashToString(hash);\n    if (this.cache[hashString] != null) {\n      return this.hashValueToSuggestion(hash, this.cache[hashString]);\n    }\n    var values = (hash.type == 'QueryExtensionName' ? this.names(hash.current) : this.attributeNames(hash.name, hash.current, hash.used));\n    this.cache[hashString] = values;\n    values.catch(() => {\n      delete this.cache[hashString];\n    });\n    return this.hashValueToSuggestion(hash, values);\n  }\n\n  private getHash(magicBox: Coveo.MagicBox.Instance): IQueryExtensionAddonHash {\n    var queryExtension: Coveo.MagicBox.Result = _.last(magicBox.resultAtCursor('QueryExtension'));\n    if (queryExtension != null) {\n      var queryExtensionArgumentResults = queryExtension.findAll('QueryExtensionArgument');\n      var current = _.last(magicBox.resultAtCursor('QueryExtensionName'));\n      if (current != null) {\n        return {\n          type: 'QueryExtensionName',\n          current: current.toString(),\n          before: current.before(),\n          after: current.after()\n        };\n      }\n\n      current = _.last(magicBox.resultAtCursor('QueryExtensionArgumentName'));\n      if (current != null) {\n\n        var used: string[] = _.chain(queryExtensionArgumentResults)\n          .map((result) => {\n            var name = result.find('QueryExtensionArgumentName');\n            return name && name.toString();\n          })\n          .compact()\n          .value();\n\n        var name = queryExtension.find('QueryExtensionName').toString();\n\n        return {\n          type: 'QueryExtensionArgumentName',\n          current: current.toString(),\n          before: current.before(),\n          after: current.after(),\n          name: name,\n          used: used\n        };\n      }\n    }\n    return null;\n  }\n\n  private hashToString(hash: IQueryExtensionAddonHash) {\n    if (hash == null) {\n      return null;\n    }\n    return [hash.type, hash.current, (hash.name || ''), (hash.used ? hash.used.join() : '')].join();\n  }\n\n  private hashValueToSuggestion(hash: IQueryExtensionAddonHash, promise: Promise<string[]>): Promise<IOmniboxSuggestion[]> {\n    return promise.then((values) => {\n      var suggestions: IOmniboxSuggestion[] = _.map(values, (value, i) => {\n        return {\n          html: MagicBox.Utils.highlightText(value, hash.current, true),\n          text: hash.before + value + hash.after,\n          index: QueryExtensionAddon.INDEX - i / values.length\n        };\n      });\n      return suggestions;\n    });\n  }\n\n  private extensions: Promise<any>;\n\n  private getExtensions() {\n    if (this.extensions == null) {\n      this.extensions = this.omnibox.queryController.getEndpoint().extensions();\n    }\n    return this.extensions;\n  }\n\n  private names(current: string): Promise<string[]> {\n    var extensionName = current.toLowerCase();\n    return this.getExtensions().then((extensions: IExtension[]) => {\n      var matchExtensions = _.chain(extensions)\n        .map((extension: IExtension) => {\n          return {\n            index: extension.name.toLowerCase().indexOf(extensionName),\n            extension: extension.name\n          };\n        })\n        .filter((extension) => {\n          return extension.index != -1 && extension.extension.length > extensionName.length;\n        })\n        .sortBy('index')\n        .pluck('extension')\n        .value();\n      matchExtensions = _.first(matchExtensions, 5);\n      return matchExtensions;\n    });\n  }\n\n  private attributeNames(name: string, current: string, used: string[]): Promise<string[]> {\n    return this.getExtensions().then((extensions: IExtension[]) => {\n      var extension = _.find(extensions, (extension: IExtension) => extension.name == name);\n      if (extension == null) {\n        return [];\n      } else {\n        return _.filter(_.difference(extension.argumentNames, used), (argumentName: string) => argumentName.indexOf(current) == 0);\n      }\n    });\n  }\n\n  public hash() {\n    return;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Omnibox/QueryExtensionAddon.ts\n **/","///<reference path=\"Omnibox.ts\"/>\nimport { Omnibox, IPopulateOmniboxSuggestionsEventArgs, IOmniboxSuggestion } from './Omnibox';\nimport { $$, Dom } from '../../utils/Dom';\nimport { IRevealQuerySuggestCompletion, IRevealQuerySuggestRequest, IRevealQuerySuggestResponse } from '../../rest/RevealQuerySuggest';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { OmniboxEvents } from '../../events/OmniboxEvents';\nimport { StringUtils } from '../../utils/StringUtils';\nimport _ = require('underscore');\n\nexport class RevealQuerySuggestAddon {\n\n  static INDEX = 60;\n\n  private static suggestiontHtml(suggestion: IRevealQuerySuggestCompletion) {\n    return suggestion.highlighted.replace(/\\[(.*?)\\]|\\{(.*?)\\}|\\((.*?)\\)/g, (part, notMatched, matched, corrected) => {\n      var className = '';\n      if (matched) {\n        className = 'coveo-omnibox-hightlight';\n      }\n      if (corrected) {\n        className = 'coveo-omnibox-hightlight2';\n      }\n\n      let ret: Dom;\n      if (className) {\n        ret = $$('span', {\n          className: className\n        });\n      } else {\n        ret = $$('span');\n      }\n      ret.text(notMatched || matched || corrected);\n      return ret.el.outerHTML;\n    });\n  }\n\n  private static isPartialMatch(suggestion: IRevealQuerySuggestCompletion) {\n    // groups : 1=notMatched, 2=matched, 3=corrected\n    var parts = StringUtils.match(suggestion.highlighted, /\\[(.*?)\\]|\\{(.*?)\\}|\\((.*?)\\)/g);\n    var firstFail = _.find(parts, (part: string[]) => part[1] != null);\n    // if no fail found, this is a partial or a full match\n    if (firstFail == null) {\n      return true;\n    }\n    // if all right parts are notMatched, the right parts is autocomplete\n    return _.every(_.last(parts, _.indexOf(parts, firstFail) - parts.length), (part: string[]) => part[1] != null);\n  }\n\n  private cache: { [hash: string]: Promise<IOmniboxSuggestion[]> } = {};\n\n  constructor(public omnibox: Omnibox) {\n    $$(this.omnibox.element).on(OmniboxEvents.populateOmniboxSuggestions, (e: Event, args: IPopulateOmniboxSuggestionsEventArgs) => {\n      args.suggestions.push(this.getSuggestion());\n    });\n  }\n\n  public getSuggestion(): Promise<IOmniboxSuggestion[]> {\n\n    var text = this.omnibox.magicBox.getText();\n\n    if (text.length == 0) {\n      return null;\n    }\n\n    if (this.cache[text] != null) {\n      return this.cache[text];\n    }\n\n    let promise = this.getRevealQuerySuggest(text);\n    this.cache[text] = promise;\n    promise.catch(() => {\n      delete this.cache[text];\n    });\n    return this.cache[text];\n  }\n\n  private getRevealQuerySuggest(text: string): Promise<IOmniboxSuggestion[]> {\n    let payload = <IRevealQuerySuggestRequest>{ q: text };\n    let language = <string>String['locale'];\n    let searchHub = this.omnibox.getBindings().componentOptionsModel.get(ComponentOptionsModel.attributesEnum.searchHub);\n    let pipeline = this.omnibox.getBindings().searchInterface.options.pipeline;\n    let enableWordCompletion = this.omnibox.options.enableSearchAsYouType;\n    let context = this.omnibox.getBindings().queryController.getLastQuery().context;\n\n    if (language) {\n      payload.language = language;\n    }\n\n    if (searchHub) {\n      payload.searchHub = searchHub;\n    }\n\n    if (pipeline) {\n      payload.pipeline = pipeline;\n    }\n\n    if (context) {\n      payload.context = context;\n    }\n\n    payload.enableWordCompletion = enableWordCompletion;\n\n    return this.omnibox.queryController.getEndpoint()\n      .getRevealQuerySuggest(payload)\n      .then((result: IRevealQuerySuggestResponse) => {\n        var completions = result.completions;\n        var results: IOmniboxSuggestion[] = _.map(completions, (completion, i) => {\n          return {\n            html: RevealQuerySuggestAddon.suggestiontHtml(completion),\n            text: completion.expression,\n            index: RevealQuerySuggestAddon.INDEX - i / completions.length,\n            partial: RevealQuerySuggestAddon.isPartialMatch(completion),\n            executableConfidence: completion.executableConfidence\n          };\n        });\n        return results;\n      });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Omnibox/RevealQuerySuggestAddon.ts\n **/","///<reference path=\"Omnibox.ts\"/>\nimport { Omnibox, IPopulateOmniboxSuggestionsEventArgs, IOmniboxSuggestion } from './Omnibox';\nimport { IOmniboxDataRow } from './OmniboxInterface';\nimport { OmniboxEvents, IPopulateOmniboxEventArgs, IPopulateOmniboxEventRow } from '../../events/OmniboxEvents';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport _ = require('underscore');\n\nexport class OldOmniboxAddon {\n  constructor(public omnibox: Omnibox) {\n    this.omnibox.bind.on(this.omnibox.element, OmniboxEvents.populateOmniboxSuggestions, (args: IPopulateOmniboxSuggestionsEventArgs) => {\n      _.each(this.getSuggestion(), (suggestion) => {\n        args.suggestions.push(suggestion);\n      });\n    });\n  }\n\n  private lastQuery: string;\n  private lastSuggestions: Promise<IOmniboxSuggestion[]>[];\n\n  public getSuggestion(): Promise<IOmniboxSuggestion[]>[] {\n    let text = this.omnibox.magicBox.getText();\n\n    if (text.length == 0) {\n      return null;\n    }\n\n    if (this.lastQuery == text) {\n      return this.lastSuggestions;\n    }\n\n    this.lastQuery = text;\n\n    let eventArgs = this.buildPopulateOmniboxEventArgs();\n    $$(this.omnibox.root).trigger(OmniboxEvents.populateOmnibox, eventArgs);\n\n    return this.lastSuggestions = this.rowsToSuggestions(eventArgs.rows);\n  }\n\n  private getCurrentQueryExpression() {\n    let cursorPos = this.omnibox.getCursor();\n    let value = this.omnibox.getText();\n    let length = value.length;\n    let start = cursorPos;\n    let end = cursorPos;\n    if (value[start] == ' ') {\n      start--;\n    }\n    while (start > 0 && value[start] != ' ') {\n      start--;\n    }\n    while (end < length && value[end] != ' ') {\n      end++;\n    }\n    return value.substring(start, end);\n  }\n\n  private getRegexToSearch(strValue?: string) {\n    if (strValue == null) {\n      strValue = this.omnibox.getText();\n    }\n    return new RegExp(Utils.escapeRegexCharacter(strValue), 'i');\n  }\n\n  private getQueryExpressionBreakDown() {\n    let ret = [];\n    let queryWords = this.omnibox.getText().split(' ');\n    _.each(queryWords, (word) => {\n      ret.push({\n        word: word,\n        regex: this.getRegexToSearch(word)\n      });\n    });\n    return ret;\n  }\n\n  private replace(searchValue: string, newValue: string) {\n    this.omnibox.setText(this.omnibox.getText().replace(searchValue, newValue));\n  }\n\n  private clearCurrentExpression() {\n    this.replace(this.getCurrentQueryExpression(), '');\n  }\n\n  private insertAt(at: number, toInsert: string) {\n    let oldValue = this.omnibox.getText();\n    let newValue = [oldValue.slice(0, at), toInsert, oldValue.slice(at)].join('');\n    this.omnibox.setText(newValue);\n  }\n\n  private replaceCurrentExpression(newValue: string) {\n    this.replace(this.getCurrentQueryExpression(), newValue);\n  }\n\n  private buildPopulateOmniboxEventArgs() {\n    let currentQueryExpression = this.getCurrentQueryExpression();\n    let ret: IPopulateOmniboxEventArgs = {\n      rows: [],\n      completeQueryExpression: {\n        word: this.omnibox.getText(),\n        regex: this.getRegexToSearch()\n      },\n      currentQueryExpression: {\n        word: currentQueryExpression,\n        regex: this.getRegexToSearch(currentQueryExpression)\n      },\n      allQueryExpressions: this.getQueryExpressionBreakDown(),\n      cursorPosition: this.omnibox.getCursor(),\n      clear: () => {\n        this.omnibox.clear();\n      },\n      clearCurrentExpression: () => {\n        this.clearCurrentExpression();\n      },\n      replace: (searchValue: string, newValue: string) => {\n        this.replace(searchValue, newValue);\n      },\n      replaceCurrentExpression: (newValue: string) => {\n        this.replaceCurrentExpression(newValue);\n      },\n      insertAt: (at: number, toInsert: string) => {\n        this.insertAt(at, toInsert);\n      },\n      closeOmnibox: () => {\n        this.omnibox.magicBox.blur();\n      }\n    };\n    return ret;\n  }\n\n  private rowsToSuggestions(rows: IOmniboxDataRow[]): Promise<IOmniboxSuggestion[]>[] {\n    return _.map(rows, (row: IPopulateOmniboxEventRow) => {\n      if (!Utils.isNullOrUndefined(row.element)) {\n        return new Promise<IOmniboxSuggestion[]>((resolve) => {\n          resolve([{\n            dom: row.element,\n            index: row.zIndex\n          }]);\n        });\n      } else if (!Utils.isNullOrUndefined(row.deferred)) {\n        return new Promise<IOmniboxSuggestion[]>((resolve) => {\n          row.deferred.then((row) => {\n            if (row.element != null) {\n              resolve([{\n                dom: row.element,\n                index: row.zIndex\n              }]);\n            } else {\n              resolve(null);\n            }\n          });\n        });\n      }\n      return null;\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Omnibox/OldOmniboxAddon.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { BreadcrumbEvents, IBreadcrumbItem, IPopulateBreadcrumbEventArgs, IClearBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { Initialization } from '../Base/Initialization';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport _ = require('underscore');\n\nexport interface IBreadcrumbOptions {\n}\n\n/**\n * The Breadcrumb component displays a summary of the currently active query filters.\n *\n * For example, when the user selects a {@link Facet} value, the breadcrumbs display this value.\n *\n * The active filters are obtained by the component by firing an event in the Breadcrumb component.\n *\n * All other components having an active state can react to this event by providing custom bits of HTML to display\n * inside the breadcrumbs.\n *\n * Thus, it is possible to easily extend the Breadcrumb component using custom code to display information about custom\n * states and filters.\n *\n * See {@link BreadcrumbEvents} for the list of events and parameters sent when a Breadcrumb component is populated.\n */\nexport class Breadcrumb extends Component {\n  static ID = 'Breadcrumb';\n  static options: IBreadcrumbOptions = {};\n\n  private lastBreadcrumbs: IBreadcrumbItem[];\n\n  /**\n   * Creates a new Breadcrumb component. Binds event on {@link QueryEvents.deferredQuerySuccess} to draw the\n   * breadcrumbs.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Breadcrumb component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IBreadcrumbOptions, bindings?: IComponentBindings) {\n    super(element, Breadcrumb.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Breadcrumb, options);\n\n    this.bind.oneRootElement(InitializationEvents.afterInitialization, () => this.handleAfterInitialization());\n    this.bind.onRootElement(BreadcrumbEvents.redrawBreadcrumb, () => this.redrawBreadcrumb());\n    this.element.style.display = 'none';\n  }\n\n  /**\n   * Triggers the event to populate the breadcrumbs. Components such as {@link Facet} can populate the breadcrumbs.\n   *\n   * This method triggers a {@link BreadcrumbEvents.populateBreadcrumb} event with an\n   * {@link IPopulateBreadcrumbEventArgs} object (an array) that other components or code can populate.\n   * @returns {IBreadcrumbItem[]} A populated breadcrumb item list.\n   */\n  public getBreadcrumbs(): IBreadcrumbItem[] {\n    let args = <IPopulateBreadcrumbEventArgs>{ breadcrumbs: [] };\n    this.bind.trigger(this.root, BreadcrumbEvents.populateBreadcrumb, args);\n    this.logger.debug('Retrieved breadcrumbs', args.breadcrumbs);\n    this.lastBreadcrumbs = args.breadcrumbs;\n    return args.breadcrumbs;\n  }\n\n  /**\n   * Triggers the event to clear the current breadcrumbs that components such as {@link Facet} can populate.\n   *\n   * Also triggers a new query and logs the `breadcrumbResetAll` event in the usage analytics.\n   */\n  public clearBreadcrumbs() {\n    let args = <IClearBreadcrumbEventArgs>{};\n    this.bind.trigger(this.root, BreadcrumbEvents.clearBreadcrumb, args);\n    this.logger.debug('Clearing breadcrumbs');\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.breadcrumbResetAll, {});\n    this.queryController.executeQuery();\n  }\n\n  /**\n   * Draws the specified breadcrumb items.\n   * @param breadcrumbs The breadcrumb items to draw.\n   */\n  public drawBreadcrumb(breadcrumbs: IBreadcrumbItem[]) {\n    $$(this.element).empty();\n    if (breadcrumbs.length != 0) {\n      this.element.style.display = '';\n    } else {\n      this.element.style.display = 'none';\n    }\n\n    let breadcrumbItems = document.createElement('div');\n    $$(breadcrumbItems).addClass('coveo-breadcrumb-items');\n    this.element.appendChild(breadcrumbItems);\n    _.each(breadcrumbs, (bcrumb: IBreadcrumbItem) => {\n      let elem = bcrumb.element;\n      $$(elem).addClass('coveo-breadcrumb-item');\n      breadcrumbItems.appendChild(elem);\n    });\n\n    let clear = $$('div', {\n      className: 'coveo-breadcrumb-clear-all',\n      title: l('ClearAllFilters'),\n      tabindex: 0\n    }).el;\n\n    let clearIcon = $$('div', { className: 'coveo-icon coveo-breadcrumb-icon-clear-all' }).el;\n    clear.appendChild(clearIcon);\n\n    if (this.searchInterface.isNewDesign()) {\n      let clearText = document.createElement('div');\n      $$(clearText).text(l('Clear', ''));\n      clear.appendChild(clearText);\n      this.element.appendChild(clear);\n    } else {\n      this.element.insertBefore(clear, this.element.firstChild);\n    }\n\n    const clearAction = () => this.clearBreadcrumbs();\n    this.bind.on(clear, 'click', clearAction);\n    this.bind.on(clear, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clearAction));\n  }\n\n  private redrawBreadcrumb() {\n    this.lastBreadcrumbs ? this.drawBreadcrumb(this.lastBreadcrumbs) : this.drawBreadcrumb(this.getBreadcrumbs());\n  }\n\n  private handleDeferredQuerySuccess() {\n    this.drawBreadcrumb(this.getBreadcrumbs());\n  }\n\n  private handleAfterInitialization() {\n    // We must bind to these events after the initialization to make sure the breadcrumb generation\n    // is made with updated components. (E.G facet, facetrange, ...)\n    this.bind.onRootElement(QueryEvents.deferredQuerySuccess, () => this.handleDeferredQuerySuccess());\n  }\n}\n\nInitialization.registerAutoCreateComponent(Breadcrumb);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Breadcrumb/Breadcrumb.ts\n **/","/// <reference path='../Facet/Facet.ts' />\n\nimport { IFacetOptions, Facet } from '../Facet/Facet';\nimport { IRangeValue } from '../../rest/RangeValue';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { TemplateHelpers } from '../Templates/TemplateHelpers';\nimport { DateUtils } from '../../utils/DateUtils';\nimport { FacetRangeQueryController } from '../../controllers/FacetRangeQueryController';\nimport { IGroupByResult } from '../../rest/GroupByResult';\nimport { Initialization } from '../Base/Initialization';\nimport Globalize = require('globalize');\n\nexport interface IFacetRangeOptions extends IFacetOptions {\n  ranges?: IRangeValue[];\n  dateField?: boolean;\n}\n/**\n * The FacetRange component displays a {@link Facet} whose values are expressed as ranges. These ranges are computed\n * from the results of the current query.\n *\n * This component inherits from the Facet component. Thus, any option available for a Facet component is also available\n * for a FacetRange component. This also implies that you must specify a [field]{@link Facet.options.field} value for\n * this component to work.\n */\nexport class FacetRange extends Facet implements IComponentBindings {\n  static ID = 'FacetRange';\n  static parent = Facet;\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IFacetRangeOptions = {\n\n    /**\n     * Specifies whether the field for which you require ranges is a date field.\n     *\n     * This allows the component to correctly build the outgoing {@link IGroupByRequest}.\n     *\n     * Default value is `false`.\n     */\n    dateField: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies an array of {@link IRangeValue} to use as Facet values.\n     *\n     * It is only possible to specify a value for this option in the {@link init} call of your search interface. You\n     * cannot set it directly as an HTML attribute.\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * var myRanges = [\n     *   {\n     *      start: 0,\n     *      end: 100,\n     *      label: \"0 - 100\",\n     *      endInclusive: false\n     *    },\n     *    {\n     *      start: 100,\n     *      end: 200,\n     *      label: \"100 - 200\",\n     *      endInclusive: false\n     *    },\n     *    {\n     *      start: 200,\n     *      end: 300,\n     *      label: \"200 - 300\",\n     *      endInclusive: false\n     *    }\n     * ]\n     *\n     * Coveo.init(document.querySelector('#search'), {\n     *    FacetRange : {\n     *        ranges : myRanges\n     *    }\n     * })\n     * ```\n     *\n     * **Note:**\n     * > Ranges can overlap.\n     *\n     * By default, the index automatically generates the ranges. However, the index cannot automatically generate the\n     * ranges if the [field]{@link Facet.options.field} you specify for the FacetRange component is generated by a query\n     * function (see [Query Function](https://developers.coveo.com/x/XQCq)). When this is the case, you must specify the\n     * ranges at query time.\n     */\n    ranges: ComponentOptions.buildCustomOption<IRangeValue[]>(() => {\n      return null;\n    })\n  };\n\n  public options: IFacetRangeOptions;\n\n  /**\n   * Creates a new FacetRange component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FacetRange component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, options: IFacetRangeOptions, bindings?: IComponentBindings) {\n    super(element, ComponentOptions.initComponentOptions(element, FacetRange, options), bindings, FacetRange.ID);\n\n    this.options.enableFacetSearch = false;\n    this.options.enableSettings = false;\n    this.options.includeInOmnibox = false;\n    this.options.enableMoreLess = false;\n  }\n\n  public getValueCaption(facetValue: any): string {\n    var ret = super.getValueCaption(facetValue);\n    if (Utils.exists(this.options.valueCaption) && typeof this.options.valueCaption == 'string') {\n      var startEnd = /^(.*)\\.\\.(.*)$/.exec(facetValue.value);\n      if (startEnd != null) {\n        var helper = TemplateHelpers.getHelper(this.options.valueCaption);\n        if (helper != null) {\n          ret = helper.call(this, startEnd[1]) + ' - ' + helper.call(this, startEnd[2]);\n        } else {\n          var start = startEnd[1].match(/^[\\+\\-]?[0-9]+(\\.[0-9]+)?$/) ? <any>Number(startEnd[1]) : <any>DateUtils.convertFromJsonDateIfNeeded(startEnd[1]);\n          var end = startEnd[2].match(/^[\\+\\-]?[0-9]+(\\.[0-9]+)?$/) ? <any>Number(startEnd[2]) : <any>DateUtils.convertFromJsonDateIfNeeded(startEnd[2]);\n          ret = Globalize.format(start, this.options.valueCaption) + ' - ' + Globalize.format(end, this.options.valueCaption);\n        }\n      }\n    }\n    return ret;\n  }\n\n  protected initFacetQueryController() {\n    this.facetQueryController = new FacetRangeQueryController(this);\n  }\n\n  protected processNewGroupByResults(groupByResult: IGroupByResult) {\n    if (groupByResult != null) {\n      if (this.options.ranges == null && (!this.keepDisplayedValuesNextTime || this.values.hasSelectedOrExcludedValues())) {\n        this.keepDisplayedValuesNextTime = false;\n        groupByResult.values.sort((valueA, valueB) => {\n          var startEndA = valueA.value.split('..');\n          var startEndB = valueB.value.split('..');\n          if (this.options.dateField) {\n            return Date.parse(startEndA[0]) - Date.parse(startEndB[0]);\n          }\n          return Number(startEndA[0]) - Number(startEndB[0]);\n        });\n      }\n    }\n    super.processNewGroupByResults(groupByResult);\n  }\n}\nInitialization.registerAutoCreateComponent(FacetRange);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FacetRange/FacetRange.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { QueryEvents, INewQueryEventArgs, IBuildingQueryEventArgs, IQuerySuccessEventArgs, INoResultsEventArgs, IDoneBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { MODEL_EVENTS, IAttributeChangedEventArg } from '../../models/Model';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { analyticsActionCauseList, IAnalyticsPagerMeta, IAnalyticsActionCause } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\nimport { Assert } from '../../misc/Assert';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\n\nexport interface IPagerOptions {\n  numberOfPages: number;\n  enableNavigationButton: boolean;\n  maxNumberOfPages: number;\n  maximumNumberOfResultsFromIndex: number;\n}\n\n/**\n * The Pager component attaches itself to a `div` element and renders widgets that allow the end user to navigate\n * through the different result pages.\n *\n * This component takes care of triggering a query with the correct result range whenever the end user selects a page or\n * uses the navigation buttons (**Previous** and **Next**).\n */\nexport class Pager extends Component {\n  static ID = 'Pager';\n\n  /**\n   * The options for the Pager\n   * @componentOptions\n   */\n  static options: IPagerOptions = {\n\n    /**\n     * Specifies how many page links to display in the pager.\n     *\n     * Default value is `5` on a desktop computers and `3` on a mobile device. Minimum value is `1`.\n     */\n    numberOfPages: ComponentOptions.buildNumberOption({\n      defaultFunction: () => {\n        if (DeviceUtils.isMobileDevice()) {\n          return 3;\n        } else {\n          return 5;\n        }\n      },\n      min: 1\n    }),\n\n    /**\n     * Specifies whether the **Previous** and **Next** buttons should appear at each end of the pager when appropriate.\n     *\n     * The default value is `true`.\n     */\n    enableNavigationButton: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the maximum number of pages to display if enough results are available.\n     *\n     * This property is typically set when the default number of accessible results from the index has been changed from its default value of `1000` (10 results per page X 100 `maxNumberOfPages`).\n     * Default value is `100`\n     *\n     * @deprecated This is a deprecated option. The `Pager` now automatically adapts itself on each new query, so you no longer need to specify a value for this option. However, if the default maximum number of accessible results value was changed on your Coveo index, you should use the [`maximumNumberOfResultsFromIndex`]{@link Pager.options.maximumNumberOfResultsFromIndex} option to specify the new value.\n     */\n    maxNumberOfPages: ComponentOptions.buildNumberOption({\n      defaultValue: undefined,\n      deprecated: 'This is a deprecated option. The pager will automatically adapt itself on each new query. You no longer need to specify this option. Use maximumNumberOfResultsFromIndex instead.'\n    }),\n    /**\n     * Specifies the maximum number of results that the index can return for any query.\n     *\n     * Default value is `1000` in a Coveo index.\n     *\n     * If this value was modified in your Coveo index, you must specify the new value in this option for the Pager component to work properly\n     */\n    maximumNumberOfResultsFromIndex: ComponentOptions.buildNumberOption({\n      defaultValue: 1000\n    })\n  };\n\n  /**\n   * The current page (1-based index).\n   */\n  public currentPage: number;\n  private lastNumberOfResultsPerPage: number;\n  private listenToQueryStateChange = true;\n  private ignoreNextQuerySuccess = false;\n\n  // The normal behavior of this component is to reset to page 1 when a new\n  // query is performed by other components (i.e. not pagers).\n  //\n  // This behavior is overridden when the 'first' state is\n  // programmatically modified.\n  private needToReset = true;\n\n  private list: HTMLElement;\n\n\n  /**\n   * Creates a new Pager. Binds multiple query events ({@link QueryEvents.newQuery}, {@link QueryEvents.buildingQuery},\n   * {@link QueryEvents.querySuccess}, {@link QueryEvents.queryError} and {@link QueryEvents.noResults}. Renders itself\n   * on every query success.\n   * @param element The HTMLElement on which to instantiate the component (normally a `div`).\n   * @param options The options for the Pager component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IPagerOptions, bindings?: IComponentBindings) {\n    super(element, Pager.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Pager, options);\n    this.currentPage = 1;\n\n    this.bind.onRootElement(QueryEvents.newQuery, (args: INewQueryEventArgs) => this.handleNewQuery(args));\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.doneBuildingQuery, (args: IBuildingQueryEventArgs) => this.handleDoneBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.queryError, () => this.handleQueryError());\n    this.bind.onRootElement(QueryEvents.noResults, (args: INoResultsEventArgs) => this.handleNoResults(args));\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.FIRST, (data: IAttributeChangedEventArg) => this.handleQueryStateModelChanged(data));\n\n    this.list = document.createElement('ul');\n    $$(this.list).addClass('coveo-pager-list');\n    element.appendChild(this.list);\n  }\n\n  /**\n   * Sets the current page, then executes a query.\n   *\n   * Also logs an event in the usage analytics (`pageNumber` by default) with the new current page number as meta data.\n   *\n   * @param pageNumber The page number to navigate to.\n   * @param analyticCause The event to log in the usage analytics.\n   */\n  public setPage(pageNumber: number, analyticCause: IAnalyticsActionCause = analyticsActionCauseList.pagerNumber) {\n    Assert.exists(pageNumber);\n    this.currentPage = Math.max(Math.min(pageNumber, this.getMaxNumberOfPagesForCurrentResultsPerPage()), 1);\n    this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n    this.usageAnalytics.logCustomEvent<IAnalyticsPagerMeta>(analyticCause, { pagerNumber: this.currentPage }, this.element);\n    this.queryController.executeQuery({\n      ignoreWarningSearchEvent: true,\n      keepLastSearchUid: true,\n      origin: this\n    });\n  }\n\n  /**\n   * Navigates to the previous page, then executes a query.\n   *\n   * Also logs the `pagePrevious` event in the usage analytics with the new current page number as meta data.\n   */\n  public previousPage() {\n    this.setPage(this.currentPage - 1, analyticsActionCauseList.pagerPrevious);\n  }\n\n  /**\n   * Navigates to the next page, then executes a query.\n   *\n   * Also logs the `pageNext` event in the usage analytics with the new current page number as meta data.\n   */\n  public nextPage() {\n    this.setPage(this.currentPage + 1, analyticsActionCauseList.pagerNext);\n  }\n\n  private getMaxNumberOfPagesForCurrentResultsPerPage() {\n\n    return Math.ceil(this.options.maximumNumberOfResultsFromIndex / this.getNumberOfResultsPerPage());\n  }\n\n  private handleNewQuery(data: INewQueryEventArgs) {\n    const triggeredByPager = data && data.origin && data.origin.type == Pager.ID;\n    if (this.needToReset && !triggeredByPager) {\n      this.currentPage = 1;\n      this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n    }\n    this.needToReset = true;\n  }\n\n  private updateQueryStateModel(attrValue: number) {\n    this.listenToQueryStateChange = false;\n    this.queryStateModel.set(QueryStateModel.attributesEnum.first, attrValue);\n    this.listenToQueryStateChange = true;\n  }\n\n  private handleQueryError() {\n    this.reset();\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    this.reset();\n    if (this.ignoreNextQuerySuccess) {\n      this.ignoreNextQuerySuccess = false;\n    } else {\n      Assert.isNotUndefined(data);\n\n      const firstResult = data.query.firstResult;\n      const count = data.results.totalCountFiltered;\n\n      const pagerBoundary = this.computePagerBoundary(firstResult, count);\n      this.currentPage = pagerBoundary.currentPage;\n      if (pagerBoundary.end - pagerBoundary.start > 0) {\n        for (let i = pagerBoundary.start; i <= pagerBoundary.end; i++) {\n\n          const listItemValue = document.createElement('a');\n          $$(listItemValue).addClass(['coveo-pager-list-item-text', 'coveo-pager-anchor']);\n          $$(listItemValue).text(i.toString(10));\n\n          let listItem = $$('li', { className: 'coveo-pager-list-item', tabindex: 0 }).el;\n          if (i == this.currentPage) {\n            $$(listItem).addClass('coveo-active');\n          }\n\n          ((pageNumber: number) => {\n            let clickAction = () => this.handleClickPage(pageNumber);\n            $$(listItem).on('click', clickAction);\n            $$(listItem).on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clickAction));\n          })(i);\n\n          listItem.appendChild(listItemValue);\n          this.list.appendChild(listItem);\n        }\n\n        if (this.options.enableNavigationButton && pagerBoundary.lastResultPage > 1) {\n          this.renderNavigationButton(pagerBoundary, this.list);\n        }\n      }\n    }\n  }\n\n  private handleNoResults(data: INoResultsEventArgs) {\n    let lastValidPage;\n    if (data.results.totalCount > 0) {\n      // First scenario : The index returned less results than expected (because of folding).\n      // Recalculate the last valid page, and change to that new page.\n      const possibleValidPage = this.computePagerBoundary(data.results.totalCountFiltered, data.results.totalCount).lastResultPage;\n      if (this.currentPage > possibleValidPage) {\n        lastValidPage = possibleValidPage;\n      }\n    } else if (this.currentPage > this.getMaxNumberOfPagesForCurrentResultsPerPage()) {\n      // Second scenario : Someone tried to access a non-valid page by the URL for example, which is  higher than the current possible with the number of\n      // possible results. The last valid page will be the maximum number of results avaiable from the index.\n      lastValidPage = this.getMaxNumberOfPagesForCurrentResultsPerPage();\n    }\n\n    // This needs to be deferred because we still want all the \"querySuccess\" callbacks the complete their execution\n    // before triggering/queuing the next query;\n    // if we cannot find a lastValidPage to go to, do nothing : this means it's a query that simply return nothing.\n    if (lastValidPage != null) {\n      this.currentPage = lastValidPage;\n      data.retryTheQuery = true;\n      this.needToReset = false;\n      this.ignoreNextQuerySuccess = false;\n      this.updateQueryStateModel(this.getFirstResultNumber(this.currentPage));\n    }\n  }\n\n  private reset() {\n    $$(this.list).empty();\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    const eventArgs = this.getQueryEventArgs();\n    data.queryBuilder.firstResult = eventArgs.first;\n\n    // Set the number of results only if it was not already set by external code\n    // Most of the time this will be set by either : the SearchInterface with the resultsPerPage option\n    // Or by the ResultsPerPage component (so the end user decides).\n    // Pager will realistically never set this value itself.\n    if (data.queryBuilder.numberOfResults == null) {\n      data.queryBuilder.numberOfResults = eventArgs.count;\n    }\n  }\n\n  private handleDoneBuildingQuery(data: IDoneBuildingQueryEventArgs) {\n    // This can change on every query, for example using the ResultsPerPage component or with external code.\n    this.lastNumberOfResultsPerPage = data.queryBuilder.numberOfResults;\n  }\n\n  private computePagerBoundary(firstResult: number, totalCount: number): { start: number; end: number; lastResultPage: number; currentPage: number; } {\n    const resultPerPage: number = this.getNumberOfResultsPerPage();\n    const currentPage = Math.floor(firstResult / resultPerPage) + 1;\n    let lastPageNumber: number = Math.min(Math.ceil(totalCount / resultPerPage), this.getMaxNumberOfPagesForCurrentResultsPerPage());\n    lastPageNumber = Math.max(lastPageNumber, 1);\n    const halfLength = Math.floor(this.options.numberOfPages / 2);\n    let firstPageNumber = currentPage - halfLength;\n    firstPageNumber = Math.max(firstPageNumber, 1);\n    let endPageNumber = firstPageNumber + this.options.numberOfPages - 1;\n    endPageNumber = Math.min(endPageNumber, lastPageNumber);\n    return {\n      start: firstPageNumber,\n      end: endPageNumber,\n      lastResultPage: lastPageNumber,\n      currentPage: currentPage\n    };\n  }\n\n  private renderNavigationButton(pagerBoundary: { start: number; end: number; lastResultPage: number; currentPage: number; }, list: HTMLElement) {\n    if (this.currentPage > 1) {\n      const previous = document.createElement('li');\n      $$(previous).addClass(['coveo-pager-previous', 'coveo-pager-anchor', 'coveo-pager-list-item']);\n      const buttonLink = document.createElement('a');\n      const buttonImg = document.createElement('span');\n      buttonLink.appendChild(buttonImg);\n      buttonLink.setAttribute('title', l('Previous'));\n      previous.appendChild(buttonLink);\n      $$(previous).on('click', () => this.handleClickPrevious());\n      this.list.insertBefore(previous, this.list.firstChild);\n    }\n\n    if (this.currentPage < pagerBoundary.lastResultPage) {\n      const next = document.createElement('li');\n      $$(next).addClass(['coveo-pager-next', 'coveo-pager-anchor', 'coveo-pager-list-item']);\n      const buttonLink = document.createElement('a');\n      const buttonImg = document.createElement('span');\n      buttonLink.appendChild(buttonImg);\n      buttonLink.setAttribute('title', l('Next'));\n      next.appendChild(buttonLink);\n      $$(next).on('click', () => this.handleClickNext());\n      this.list.appendChild(next);\n    }\n  }\n\n  private handleQueryStateModelChanged(data: IAttributeChangedEventArg) {\n    if (!this.listenToQueryStateChange) {\n      return;\n    }\n    Assert.exists(data);\n    this.needToReset = false;\n    const firstResult = data.value;\n    this.currentPage = this.fromFirstResultsToPageNumber(firstResult);\n  }\n\n  private handleClickPage(pageNumber: number) {\n    Assert.exists(pageNumber);\n    this.setPage(pageNumber);\n  }\n\n  private handleClickPrevious() {\n    this.previousPage();\n  }\n\n  private handleClickNext() {\n    this.nextPage();\n  }\n\n  private fromFirstResultsToPageNumber(firstResult: number): number {\n    return (firstResult / this.getNumberOfResultsPerPage()) + 1;\n  }\n\n  private getNumberOfResultsPerPage() {\n    // If there was no query successful yet, we use the query controller value as a fallback.\n    // If it's 0 for some reason (someone wants no results .. ? ), then we fallback to 10 as the \"standard\" value.\n    // This ensure that we do not divide by 0 in the pager.\n    if (this.lastNumberOfResultsPerPage != null) {\n      return this.lastNumberOfResultsPerPage;\n    }\n    return this.queryController.options.resultsPerPage == 0 ? 10 : this.queryController.options.resultsPerPage;\n  }\n\n  private getFirstResultNumber(pageNumber: number = this.currentPage): number {\n    return (pageNumber - 1) * this.getNumberOfResultsPerPage();\n  }\n\n  private getQueryEventArgs() {\n    return {\n      count: this.getNumberOfResultsPerPage(),\n      first: this.getFirstResultNumber()\n    };\n  }\n}\n\nInitialization.registerAutoCreateComponent(Pager);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Pager/Pager.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Initialization } from '../Base/Initialization';\nimport { QueryEvents, IQuerySuccessEventArgs, INoResultsEventArgs } from '../../events/QueryEvents';\nimport { analyticsActionCauseList, IAnalyticsResultsPerPageMeta, IAnalyticsActionCause } from '../Analytics/AnalyticsActionListMeta';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport _ = require('underscore');\nimport { l } from '../../strings/Strings';\n\nexport interface IResultsPerPageOptions {\n  choicesDisplayed?: number[];\n  initialChoice?: number;\n}\n\n/**\n * The ResultsPerPage component attaches itself to a `div` and allows the end user to choose how many results to\n * display per page.\n *\n * **Note:** Adding a ResultPerPage component to your page overrides the value of\n * {@link SearchInterface.options.resultsPerPage}.\n */\nexport class ResultsPerPage extends Component {\n  static ID = 'ResultsPerPage';\n\n  /**\n   * The options for the ResultsPerPage\n   * @componentOptions\n   */\n  static options: IResultsPerPageOptions = {\n\n    /**\n     * Specifies the possible values of number of results to display per page that the end user can select from.\n     *\n     * See also {@link ResultsPerPage.options.initialChoice}.\n     *\n     * Default value is `[10, 25, 50, 100]`.\n     */\n    choicesDisplayed: ComponentOptions.buildCustomListOption<number[]>(function (list: string[]) {\n      let values = _.map(list, function (value) {\n        return parseInt(value, 10);\n      });\n      return values.length == 0 ? null : values;\n    }, {\n        defaultFunction: () => {\n          if (DeviceUtils.isMobileDevice()) {\n            return [10, 25, 50];\n          } else {\n            return [10, 25, 50, 100];\n          }\n        },\n      }),\n    /**\n     * Specifies the value to select by default for the number of results to display per page.\n     *\n     * Default value is the first value of {@link ResultsPerPage.options.choicesDisplayed}.\n     */\n    initialChoice: ComponentOptions.buildNumberOption()\n  };\n\n  private currentResultsPerPage: number;\n  private span: HTMLElement;\n  private list: HTMLElement;\n\n  /**\n   * Creates a new ResultsPerPage. The component renders itself on every query success.\n   * @param element The HTMLElement on which to instantiate the component (normally a `div`).\n   * @param options The options for the ResultsPerPage component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IResultsPerPageOptions, bindings?: IComponentBindings) {\n    super(element, ResultsPerPage.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ResultsPerPage, options);\n\n    this.currentResultsPerPage = this.getInitialChoice();\n    this.queryController.options.resultsPerPage = this.currentResultsPerPage;\n\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.queryError, () => this.handleQueryError());\n    this.bind.onRootElement(QueryEvents.noResults, (args: INoResultsEventArgs) => this.handleNoResults());\n    this.initComponent(element);\n  }\n\n  /**\n   * Sets the current number of results per page, then executes a query.\n   *\n   * Also logs an event in the usage analytics (`pagerResize` by default) with the new current number of results per\n   * page as meta data.\n   * @param resultsPerPage The new number of results per page to select.\n   * @param analyticCause The event to log in the usage analytics.\n   */\n  public setResultsPerPage(resultsPerPage: number, analyticCause: IAnalyticsActionCause = analyticsActionCauseList.pagerResize) {\n    Assert.exists(resultsPerPage);\n    Assert.check(this.options.choicesDisplayed.indexOf(resultsPerPage) != -1, 'The specified number of results is not available in the options.');\n    this.currentResultsPerPage = resultsPerPage;\n    this.queryController.options.resultsPerPage = this.currentResultsPerPage;\n    this.usageAnalytics.logCustomEvent<IAnalyticsResultsPerPageMeta>(analyticCause, { currentResultsPerPage: this.currentResultsPerPage }, this.element);\n    this.queryController.executeQuery({\n      ignoreWarningSearchEvent: true,\n      keepLastSearchUid: true,\n      origin: this\n    });\n  }\n\n  private getInitialChoice(): number {\n    let initialChoice = this.options.choicesDisplayed[0];\n    if (this.options.initialChoice !== undefined) {\n      if (this.options.choicesDisplayed.indexOf(this.options.initialChoice) > -1) {\n        initialChoice = this.options.initialChoice;\n      } else {\n        this.logger.warn('The initial number of results is not within the choices displayed. Consider setting a value that can be selected. The first choice will be selected instead.');\n      }\n    }\n    return initialChoice;\n  }\n\n  private initComponent(element: HTMLElement) {\n    this.span = $$('span', {\n      className: 'coveo-results-per-page-text'\n    }, l('ResultsPerPage')).el;\n    element.appendChild(this.span);\n    this.list = $$('ul', {\n      className: 'coveo-results-per-page-list'\n    }).el;\n    element.appendChild(this.list);\n  }\n\n  private render() {\n    $$(this.span).removeClass('coveo-results-per-page-no-results');\n    let numResultsList: number[] = this.options.choicesDisplayed;\n    for (var i = 0; i < numResultsList.length; i++) {\n\n      let listItem = $$('li', {\n        className: 'coveo-results-per-page-list-item',\n        tabindex: 0\n      });\n      if (numResultsList[i] == this.currentResultsPerPage) {\n        listItem.addClass('coveo-active');\n      }\n\n      ((resultsPerPage: number) => {\n        let clickAction = () => this.handleClickPage(numResultsList[resultsPerPage]);\n        listItem.on('click', clickAction);\n        listItem.on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clickAction));\n      })(i);\n\n      listItem.el.appendChild($$('a', {\n        className: 'coveo-results-per-page-list-item-text'\n      }, numResultsList[i].toString()).el);\n      this.list.appendChild(listItem.el);\n    }\n  }\n\n  private handleQueryError() {\n    this.reset();\n  }\n\n  private handleNoResults() {\n    this.reset();\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (data.results.results.length != 0) {\n      this.reset();\n      this.render();\n    }\n  }\n\n  private handleClickPage(resultsPerPage: number) {\n    Assert.exists(resultsPerPage);\n    this.setResultsPerPage(resultsPerPage);\n  }\n\n  private reset() {\n    $$(this.span).addClass('coveo-results-per-page-no-results');\n    $$(this.list).empty();\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultsPerPage);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultsPerPage/ResultsPerPage.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { Assert } from '../../misc/Assert';\nimport { ResultListEvents, IChangeLayoutEventArgs } from '../../events/ResultListEvents';\nimport { ResultLayoutEvents, IResultLayoutPopulateArgs } from '../../events/ResultLayoutEvents';\nimport { $$ } from '../../utils/Dom';\nimport { IQueryErrorEventArgs, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { QueryStateModel, QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { MODEL_EVENTS, IAttributesChangedEventArg } from '../../models/Model';\nimport { analyticsActionCauseList, IAnalyticsResultsLayoutChange } from '../Analytics/AnalyticsActionListMeta';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport { ResponsiveResultLayout } from '../ResponsiveComponents/ResponsiveResultLayout';\nimport { Utils } from '../../utils/Utils';\nimport _ = require('underscore');\nimport { l } from '../../strings/Strings';\n\ninterface IActiveLayouts {\n  button: {\n    el: HTMLElement;\n    visible: boolean;\n  };\n  enabled: boolean;\n}\n\nexport interface IResultLayoutOptions {\n  mobileLayouts: string[];\n  tabletLayouts: string[];\n  desktopLayouts: string[];\n}\n\n/**\n * The possible valid and supported layouts.\n *\n * See the [Result Layouts](https://developers.coveo.com/x/yQUvAg) documentation.\n */\nexport type ValidLayout = 'list' | 'card' | 'table';\nexport const defaultLayout: ValidLayout = 'list';\n\n/**\n * The ResultLayout component allows the end user to switch between multiple {@link ResultList} components that have\n * different {@link ResultList.options.layout} values.\n *\n * This component automatically populates itself with buttons to switch between the ResultList components that have a\n * valid layout value (see the {@link ValidLayout} type).\n *\n * See also the [Result Layouts](https://developers.coveo.com/x/yQUvAg) documentation.\n */\nexport class ResultLayout extends Component {\n  static ID = 'ResultLayout';\n\n  public static validLayouts: ValidLayout[] = ['list', 'card', 'table'];\n\n  public currentLayout: string;\n\n  private currentActiveLayouts: { [key: string]: IActiveLayouts };\n  private resultLayoutSection: HTMLElement;\n\n  static options: IResultLayoutOptions = {\n    /**\n     * Specifies the layouts that should be available when the search page is displayed in mobile mode.\n     *\n     * By default, the mobile mode breakpoint is at 480 px screen width.\n     *\n     * When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n     *\n     * The possible values for layouts are `list`, `card`, `table`.\n     *\n     * The default value is `card`, `table`.\n     */\n    mobileLayouts: ComponentOptions.buildListOption<ValidLayout>({ defaultValue: ['card', 'table'] }),\n    /**\n     * Specifies the layouts that should be available when the search page is displayed in tablet mode.\n     *\n     * By default, the tablet mode breakpoint is at 800 px screen width.\n     *\n     *  When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n     *\n     * The possible values for layouts are `list`, `card`, `table`.\n     *\n     * The default value is `list`, `card`, `table`.\n     */\n    tabletLayouts: ComponentOptions.buildListOption<ValidLayout>({ defaultValue: ['list', 'card', 'table'] }),\n    /**\n     * Specifies the layouts that should be available when the search page is displayed in desktop mode.\n     *\n     * By default, the desktop mode breakpoint is any screen size over 800 px.\n     *\n     *  When the breakpoint is reached, layouts that are not specified becomes inactive and the linked result list will be disabled.\n     *\n     * The possible values for layouts are `list`, `card`, `table`.\n     *\n     * The default value is `list`, `card`, `table`.\n     */\n    desktopLayouts: ComponentOptions.buildListOption<ValidLayout>({ defaultValue: ['list', 'card', 'table'] })\n  };\n\n  /**\n   * Creates a new ResultLayout component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultLayout component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IResultLayoutOptions, bindings?: IComponentBindings) {\n    super(element, ResultLayout.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ResultLayout, options);\n\n    this.currentActiveLayouts = {};\n\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.LAYOUT, this.handleQueryStateChanged.bind(this));\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.queryError, (args: IQueryErrorEventArgs) => this.handleQueryError(args));\n\n    this.resultLayoutSection = $$(this.element).closest('.coveo-result-layout-section');\n\n    this.bind.oneRootElement(InitializationEvents.afterComponentsInitialization, () => this.populate());\n    this.bind.oneRootElement(InitializationEvents.afterInitialization, () => this.handleQueryStateChanged());\n\n    ResponsiveResultLayout.init(this.root, this, this.options);\n  }\n\n  /**\n   * Changes the current layout.\n   *\n   * Also logs a `resultLayoutChange` event in the usage analytics with the new layout as metadeta.\n   *\n   * Triggers a new query.\n   *\n   * @param layout The new layout. The page must contain a valid {@link ResultList} component with a matching\n   * {@link ResultList.options.layout} value for this method to work.\n   */\n  public changeLayout(layout: ValidLayout) {\n    Assert.check(this.isLayoutDisplayedByButton(layout), 'Layout not available or invalid');\n\n    if (layout !== this.currentLayout || this.getModelValue() === '') {\n\n      this.setModelValue(layout);\n      const lastResults = this.queryController.getLastResults();\n      this.setLayout(layout, lastResults);\n      if (lastResults) {\n        this.usageAnalytics.logCustomEvent<IAnalyticsResultsLayoutChange>(analyticsActionCauseList.resultsLayoutChange, {\n          resultsLayoutChangeTo: layout\n        }, this.element);\n      } else {\n        this.usageAnalytics.logSearchEvent<IAnalyticsResultsLayoutChange>(analyticsActionCauseList.resultsLayoutChange, {\n          resultsLayoutChangeTo: layout\n        });\n        this.queryController.executeQuery();\n      }\n    }\n  }\n\n  /**\n   * Gets the current layout (`list`, `card` or `table`).\n   * @returns {string} The current current layout.\n   */\n  public getCurrentLayout() {\n    return this.currentLayout;\n  }\n\n  public disableLayouts(layouts: ValidLayout[]) {\n    if (Utils.isNonEmptyArray(layouts)) {\n      _.each(layouts, (layout) => {\n        this.disableLayout(layout);\n      });\n\n      let remainingValidLayouts = _.difference(_.keys(this.currentActiveLayouts), layouts);\n      if (remainingValidLayouts && remainingValidLayouts[0]) {\n        this.changeLayout(<ValidLayout>remainingValidLayouts[0]);\n      } else {\n        this.logger.error('Cannot disable the last valid layout ... Re-enabling the first one possible');\n        let firstPossibleValidLayout = <ValidLayout>_.keys(this.currentActiveLayouts)[0];\n        this.enableLayout(firstPossibleValidLayout);\n        this.setLayout(firstPossibleValidLayout);\n      }\n    }\n  }\n\n  public enableLayouts(layouts: ValidLayout[]) {\n    _.each(layouts, (layout) => {\n      this.enableLayout(layout);\n    });\n  }\n\n  private disableLayout(layout: ValidLayout) {\n    if (this.isLayoutDisplayedByButton(layout)) {\n      this.hideButton(layout);\n    }\n  }\n\n  private enableLayout(layout: ValidLayout) {\n    if (this.isLayoutDisplayedByButton(layout)) {\n      this.showButton(layout);\n      this.updateSelectorAppearance();\n    }\n  }\n\n\n  private hideButton(layout: ValidLayout) {\n    if (this.isLayoutDisplayedByButton(layout)) {\n      let btn = this.currentActiveLayouts[<string>layout].button;\n      $$(btn.el).hide();\n      btn.visible = false;\n      this.updateSelectorAppearance();\n    }\n  }\n\n  private showButton(layout: ValidLayout) {\n    if (this.isLayoutDisplayedByButton(layout)) {\n      let btn = this.currentActiveLayouts[<string>layout].button;\n      $$(btn.el).show();\n      btn.visible = true;\n    }\n  }\n\n  private setLayout(layout: ValidLayout, results?: IQueryResults) {\n    this.isLayoutDisplayedByButton(layout);\n    if (this.currentLayout) {\n      $$(this.currentActiveLayouts[this.currentLayout].button.el).removeClass('coveo-selected');\n    }\n    $$(this.currentActiveLayouts[layout].button.el).addClass('coveo-selected');\n    this.currentLayout = layout;\n    $$(this.element).trigger(ResultListEvents.changeLayout, <IChangeLayoutEventArgs>{ layout: layout, results: results });\n  }\n\n  private handleQuerySuccess(args: IQuerySuccessEventArgs) {\n    if (args.results.results.length === 0 || !this.shouldShowSelector()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  private handleQueryStateChanged(args?: IAttributesChangedEventArg) {\n    const modelLayout = this.getModelValue();\n    const newLayout = _.find(_.keys(this.currentActiveLayouts), l => l === modelLayout);\n    if (newLayout !== undefined) {\n      this.setLayout(<ValidLayout>newLayout);\n    } else {\n      this.setLayout(<ValidLayout>_.keys(this.currentActiveLayouts)[0]);\n    }\n  }\n\n  private handleQueryError(args: IQueryErrorEventArgs) {\n    this.hide();\n  }\n\n  private updateSelectorAppearance() {\n    if (this.shouldShowSelector()) {\n      this.show();\n    } else {\n      this.hide();\n    }\n  }\n\n  private populate() {\n    let populateArgs: IResultLayoutPopulateArgs = { layouts: [] };\n    $$(this.root).trigger(ResultLayoutEvents.populateResultLayout, populateArgs);\n    _.each(populateArgs.layouts, layout => Assert.check(_.contains(ResultLayout.validLayouts, layout), 'Invalid layout'));\n    if (!_.isEmpty(populateArgs.layouts)) {\n      _.each(populateArgs.layouts, layout => this.addButton(layout));\n      if (!this.shouldShowSelector()) {\n        this.hide();\n      }\n    }\n  }\n\n  private addButton(layout: string) {\n    const btn = $$('span', {\n      className: 'coveo-result-layout-selector',\n      tabindex: 0\n    }, $$('span', { className: 'coveo-result-layout-selector-caption' }, l(layout)));\n    btn.prepend($$('span', { className: `coveo-icon coveo-sprites-${layout}-layout` }).el);\n    if (layout === this.currentLayout) {\n      btn.addClass('coveo-selected');\n    }\n    const activateAction = () => this.changeLayout(<ValidLayout>layout);\n    btn.on('click', activateAction);\n    btn.on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, activateAction));\n    $$(this.element).append(btn.el);\n    this.currentActiveLayouts[layout] = {\n      button: {\n        visible: true,\n        el: btn.el\n      },\n      enabled: true\n    };\n  }\n\n  private hide() {\n    const elem = this.resultLayoutSection || this.element;\n    $$(elem).addClass('coveo-result-layout-hidden');\n  }\n\n  private show() {\n    const elem = this.resultLayoutSection || this.element;\n    $$(elem).removeClass('coveo-result-layout-hidden');\n  }\n\n  private getModelValue(): string {\n    return this.queryStateModel.get(QueryStateModel.attributesEnum.layout);\n  }\n\n  private setModelValue(val: string) {\n    this.queryStateModel.set(QueryStateModel.attributesEnum.layout, val);\n  }\n\n  private shouldShowSelector() {\n    return _.keys(this.currentActiveLayouts).length > 1 && _.filter(this.currentActiveLayouts, (activeLayout: IActiveLayouts) => activeLayout.button.visible).length > 1;\n  }\n\n  private isLayoutDisplayedByButton(layout: ValidLayout) {\n    return _.contains(_.keys(this.currentActiveLayouts), layout);\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultLayout);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultLayout/ResultLayout.ts\n **/","import {\n  IResponsiveComponent, IResponsiveComponentOptions,\n  ResponsiveComponentsManager\n} from './ResponsiveComponentsManager';\nimport { Dom, $$ } from '../../utils/Dom';\nimport { ResponsiveDropdown } from './ResponsiveDropdown/ResponsiveDropdown';\nimport { Component } from '../Base/Component';\nimport { ResultLayout, ValidLayout } from '../ResultLayout/ResultLayout';\nimport { Logger } from '../../misc/Logger';\nimport { SearchInterface } from '../SearchInterface/SearchInterface';\nimport _ = require('underscore');\n\nexport class ResponsiveResultLayout implements IResponsiveComponent {\n  private searchInterface: SearchInterface;\n  private resultLayout: ResultLayout;\n\n  public static init(root: HTMLElement, component: ResultLayout, options: IResponsiveComponentOptions) {\n    if (!$$(root).find(`.${Component.computeCssClassName(ResultLayout)}`)) {\n      let logger = new Logger('ResponsiveResultLayout');\n      logger.trace('No ResultLayout component found : Cannot instantiate ResponsiveResultLayout');\n      return;\n    }\n    ResponsiveComponentsManager.register(ResponsiveResultLayout, $$(root), ResultLayout.ID, component, options);\n  }\n\n  constructor(public coveoRoot: Dom, public ID: string, options: IResponsiveComponentOptions, responsiveDropdown?: ResponsiveDropdown) {\n    this.searchInterface = <SearchInterface>Component.get(this.coveoRoot.el, SearchInterface, false);\n  }\n\n  public registerComponent(accept: Component) {\n    if (accept instanceof ResultLayout) {\n      this.resultLayout = accept;\n      return true;\n    }\n    return false;\n  }\n\n  public handleResizeEvent() {\n    if (this.needSmallMode()) {\n      this.enableAndDisableLayout(<ValidLayout[]>this.resultLayout.options.mobileLayouts);\n    } else if (this.needMediumMode()) {\n      this.enableAndDisableLayout(<ValidLayout[]>this.resultLayout.options.tabletLayouts);\n    } else {\n      this.enableAndDisableLayout(<ValidLayout[]>this.resultLayout.options.desktopLayouts);\n    }\n  }\n\n  private enableAndDisableLayout(validLayouts: ValidLayout[]) {\n    let needToDisable = _.difference<any>(ResultLayout.validLayouts, validLayouts);\n    let needToEnable = _.intersection<any>(ResultLayout.validLayouts, validLayouts);\n    this.resultLayout.disableLayouts(needToDisable);\n    this.resultLayout.enableLayouts(needToEnable);\n  }\n\n  private needSmallMode(): boolean {\n    return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getSmallScreenWidth();\n  }\n\n  private needMediumMode(): boolean {\n    return this.coveoRoot.width() <= this.searchInterface.responsiveComponents.getMediumScreenWidth();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResponsiveComponents/ResponsiveResultLayout.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { HighlightUtils } from '../../utils/HighlightUtils';\nimport { Initialization } from '../Base/Initialization';\n\n/**\n * The Excerpt component renders an excerpt of its associated result and highlights the keywords from the query using\n * the appropriate template helpers.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class Excerpt extends Component {\n  static ID = 'Excerpt';\n\n  /**\n   * Creates a new Excerpt component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Excerpt component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: any, public bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, Excerpt.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Excerpt, options);\n    this.result = this.result || this.resolveResult();\n    Assert.exists(this.result);\n    this.element.innerHTML = HighlightUtils.highlightString(this.result.excerpt, this.result.excerptHighlights, null, 'coveo-highlight');\n  }\n}\n\nInitialization.registerAutoCreateComponent(Excerpt);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Excerpt/Excerpt.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { IResultLinkOptions } from './ResultLinkOptions';\nimport { ResultListEvents } from '../../events/ResultListEvents';\nimport { HighlightUtils } from '../../utils/HighlightUtils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { OS_NAME, OSUtils } from '../../utils/OSUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { Defer } from '../../misc/Defer';\nimport { $$ } from '../../utils/Dom';\nimport { StreamHighlightUtils } from '../../utils/StreamHighlightUtils';\nimport _ = require('underscore');\n\n/**\n * The ResultLink component automatically transform a search result title into a clickable link pointing to the original\n * document.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class ResultLink extends Component {\n  static ID = 'ResultLink';\n\n  /**\n   * The options for the ResultLink\n   * @componentOptions\n   */\n  static options: IResultLinkOptions = {\n\n    /**\n     * Specifies the field which the ResultLink should use to output its `href` attribute.\n     *\n     * By default, the component uses the `clickUri` field available on the document, but you can override this field\n     * by specifying a value for this option.\n     *\n     * **Tip:**\n     *\n     * > When you do not include a `field` option in your result template, you can include an `href` attribute on the\n     * > ResultLink element. When present, the `href` attribute value overrides the `clickUri` field, which is otherwise\n     * > the default field.\n     *\n     * > Specifying an `href` attribute is useful when you want to build the ResultLink using a custom script or by\n     * > concatenating the content of two or more variables.\n     *\n     * **Examples:**\n     *\n     * - With the following markup, the ResultLink will output its `href` attribute using the `uri` field instead of the\n     * default `clickUri` field:\n     *\n     * ```html\n     * <a class=\"CoveoResultLink\" field=\"@uri\"></a>\n     * ```\n     *\n     * - In the following result template, the custom `getMyKBUri()` function will provide the `href`:\n     *\n     * ```html\n     * <script id=\"KnowledgeArticle\" type=\"text/underscore\" class=\"result-template\">\n     *   <div class='CoveoIcon>'></div>\n     *   <a class=\"CoveoResultLink\" href=\"<%= getMyKBUri(raw) %>\"></a>\n     *   <div class=\"CoveoExcerpt\"></div>\n     * </script>\n     * ```\n     *\n     * See also [hrefTemplate]{@link ResultLink.options.hrefTemplate}, which can override this option.\n     */\n    field: ComponentOptions.buildFieldOption(),\n\n    /**\n     * Specifies whether the ResultLink should try to open in Microsoft Outlook.\n     *\n     * Setting this option to `true` is normally useful for ResultLink instances which are related to Microsoft Exchange\n     * emails.\n     *\n     * If this option is `true`, clicking the ResultLink will call the {@link ResultLink.openLinkInOutlook} method\n     * instead of the {@link ResultLink.openLink} method.\n     *\n     * Default value is `false`.\n     */\n    openInOutlook: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether the ResultLink should open in the {@link Quickview} component rather than loading through the\n     * original URL.\n     *\n     * Default value is `false`.\n     */\n    openQuickview: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether the ResultLink should open in a new window instead of opening in the current context.\n     *\n     * If this option is `true`, clicking the ResultLink will call the {@link ResultLink.openLinkInNewWindow} method\n     * instead of the {@link ResultLink.openLink} method.\n     *\n     * **Note:**\n     * > If a search page contains a {@link ResultsPreferences} component whose\n     * > [enableOpenInNewWindow]{@link ResultsPreferences.options.enableOpenInNewWindow} option is `true`, and the end\n     * > user checks the <b>Always open results in new window</b> box, then ResultLink components will always open in\n     * > a new window when the user clicks them, no matter what the value of their alwaysOpenInNewWindow option is.\n     *\n     * Default value is `false`.\n     */\n    alwaysOpenInNewWindow: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies a template literal from which to generate the ResultLink `href` attribute (see\n     * [Template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)).\n     *\n     * This option overrides the value of the [field]{@link ResultLink.options.field} option.\n     *\n     * The template literal can reference any number of fields from the parent result. It can also reference global\n     * scope properties.\n     *\n     * Default value is `undefined`.\n     *\n     * **Examples:**\n     *\n     * - The following markup generates a ResultLink `href` such as `http://uri.com?id=documentTitle`:\n     *\n     * ```html\n     * <a class='CoveoResultLink' data-href-template='${clickUri}?id=${title}'></a>\n     * ```\n     *\n     * - The following markup generates a ResultLink `href` such as `localhost/fooBar`:\n     *\n     * ```html\n     * <a class='CoveoResultLink' data-href-template='${window.location.hostname}/{Foo.Bar}'></a>\n     * ```\n     */\n    hrefTemplate: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies a template literal from which to generate the ResultLink display title (see\n     * [Template literals](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)).\n     *\n     * This option overrides the default ResultLink display title behavior.\n     *\n     * The template literal can reference any number of fields from the parent result. However, if the template literal\n     * references a key whose value is undefined in the parent result fields, then the ResultLink title displays the\n     * name of this key instead.\n     *\n     * This option is ignored if the ResultLink innerHTML contains any value.\n     *\n     * Default value is `undefined`.\n     *\n     * **Examples:**\n     *\n     * - The following markup generates a ResultLink display title such as `Case number: 123456` if both the\n     * `raw.objecttype` and `raw.objectnumber` keys are defined in the parent result fields:\n     *\n     * ```html\n     * <a class=\"CoveoResultLink\" data-title-template=\"${raw.objecttype} number: ${raw.objectnumber}\"></a>\n     * ```\n     *\n     * - The following markup generates `${myField}` as a ResultLink display title if the `myField` key is undefined\n     * in the parent result fields:\n     *\n     * ```html\n     * <a class=\"CoveoResultLink\" data-title-template=\"${myField}\"></a>\n     * ```\n     *\n     * - The following markup generates `Foobar` as a ResultLink display title, because the ResultLink innterHTML is not\n     * empty:\n     *\n     * ```html\n     * <a class=\"CoveoResultLink\" data-title-template=\"${will} ${be} ${ignored}\">Foobar</a>\n     * ```\n     */\n    titleTemplate: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies an event handler function to execute when the user clicks the ResultLink component.\n     *\n     * The handler function takes a JavaScript [Event](https://developer.mozilla.org/en/docs/Web/API/Event) object and\n     * an {@link IQueryResult} as its parameters.\n     *\n     * Overriding the default behavior of the `onClick` event can allow you to execute specific code instead.\n     *\n     * You can only set this option in the {@link init} call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * **Examples:**\n     *\n     * - In the following code excerpt, the ResultLink opens the original document in a custom way instead of using the\n     * normal browser behavior:\n     *\n     * ```javascript\n     * Coveo.init(document.querySelector('#search'), {\n     *   ResultLink : {\n     *     onClick : function(e, result) {\n     *       e.preventDefault();\n     *       // Custom code to execute with the URI and title of the document.\n     *       openUriInASpecialTab(result.clickUri, result.title);\n     *     }\n     *   }\n     * });\n     * ```\n     *\n     * - You can achieve the same result using the jQuery extension:\n     *\n     * ```javascript\n     * $(\"#search\").coveo('init', {\n     *   ResultLink : {\n     *     onClick : function(e, result) {\n     *       e.preventDefault();\n     *       // Custom code to execute with the URI and title of the document.\n     *       openUriInASpecialTab(result.clickUri, result.title);\n     *     }\n     *   }\n     * });\n     * ```\n     */\n    onClick: ComponentOptions.buildCustomOption<(e: Event, result: IQueryResult) => any>(() => {\n      return null;\n    })\n  };\n\n  static fields = [\n    'outlookformacuri',\n    'outlookuri',\n    'connectortype',\n    'urihash', // analytics\n    'collection', // analytics\n    'source', // analytics\n    'author' // analytics\n  ];\n\n  private toExecuteOnOpen: (e?: Event) => void;\n\n  /**\n   * Creates a new ResultLink component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultLink component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   * @param os\n   */\n  constructor(public element: HTMLElement, public options: IResultLinkOptions, public bindings?: IResultsComponentBindings, public result?: IQueryResult, public os?: OS_NAME) {\n    super(element, ResultLink.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ResultLink, options);\n    this.options = _.extend({}, this.options, this.componentOptionsModel.get(ComponentOptionsModel.attributesEnum.resultLink));\n    this.result = result || this.resolveResult();\n\n    if (this.options.openQuickview == null) {\n      this.options.openQuickview = result.raw['connectortype'] == 'ExchangeCrawler' && DeviceUtils.isMobileDevice();\n    }\n\n    this.element.setAttribute('tabindex', '0');\n\n    Assert.exists(this.componentOptionsModel);\n    Assert.exists(this.result);\n\n    if (!this.quickviewShouldBeOpened()) {\n      // We assume that anytime the contextual menu is opened on a result link\n      // this is do \"open in a new tab\" or something similar.\n      // This is not 100% accurate, but we estimate it to be the lesser of 2 evils (not logging anything)\n      $$(element).on('contextmenu', () => {\n        this.logOpenDocument();\n      });\n\n      $$(element).on('click', () => {\n        this.logOpenDocument();\n      });\n    }\n    if (/^\\s*$/.test(this.element.innerHTML)) {\n      if (!this.options.titleTemplate) {\n        this.element.innerHTML = this.result.title ? HighlightUtils.highlightString(this.result.title, this.result.titleHighlights, null, 'coveo-highlight') : this.result.clickUri;\n      } else {\n        let newTitle = this.parseStringTemplate(this.options.titleTemplate);\n        this.element.innerHTML = newTitle ? StreamHighlightUtils.highlightStreamText(newTitle, this.result.termsToHighlight, this.result.phrasesToHighlight) : this.result.clickUri;\n      }\n    }\n    this.bindEventToOpen();\n  }\n\n  /**\n   * Opens the result in the same window, no matter how the actual component is configured for the end user.\n   * @param logAnalytics  If true, the method will take care of logging an analytic event.\n   */\n  public openLink(logAnalytics = true) {\n    if (logAnalytics) {\n      this.logOpenDocument();\n    }\n    window.location.href = this.getResultUri();\n  }\n\n  /**\n   * Opens the result in a new window, no matter how the actual component is configured for the end user.\n   * @param logAnalytics If true, the method will take care of logging an analytic event.\n   */\n  public openLinkInNewWindow(logAnalytics = true) {\n    if (logAnalytics) {\n      this.logOpenDocument();\n    }\n    window.open(this.getResultUri(), '_blank');\n  }\n\n  /**\n   * Try to open the result in Microsoft Outlook if the result has an `outlookformacuri` or `outlookuri` field.\n   *\n   * Normally, this means a result link for an email.\n   *\n   * If the needed fields are not present, this method will do nothing.\n   * @param logAnalytics If true, the method will take care of logging an analytic event.\n   */\n  public openLinkInOutlook(logAnalytics = true) {\n    if (this.hasOutlookField()) {\n      if (logAnalytics) {\n        this.logOpenDocument();\n      }\n      this.openLink();\n    }\n  }\n\n  /**\n   * Open the link in the same manner the end user would do.\n   *\n   * This essentially simulate a click on the result link.\n   *\n   * @param logAnalytics If true, the method will take care of logging an analytic event.\n   */\n  public openLinkAsConfigured(logAnalytics = true) {\n    if (this.toExecuteOnOpen) {\n      if (logAnalytics) {\n        this.logOpenDocument();\n      }\n      this.toExecuteOnOpen();\n    }\n  }\n\n  protected bindEventToOpen(): boolean {\n    return this.bindOnClickIfNotUndefined() || this.bindOpenQuickviewIfNotUndefined() || this.setHrefIfNotAlready() || this.openLinkThatIsNotAnAnchor();\n  }\n\n  private bindOnClickIfNotUndefined() {\n    if (this.options.onClick != undefined) {\n      this.toExecuteOnOpen = (e: MouseEvent) => {\n        this.options.onClick.call(this, e, this.result);\n      };\n\n      $$(this.element).on('click', (e: MouseEvent) => {\n        this.toExecuteOnOpen(e);\n      });\n\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  private bindOpenQuickviewIfNotUndefined() {\n    if (this.quickviewShouldBeOpened()) {\n      this.toExecuteOnOpen = () => {\n        $$(this.bindings.resultElement).trigger(ResultListEvents.openQuickview);\n      };\n\n      $$(this.element).on('click', (e: Event) => {\n        e.preventDefault();\n        this.toExecuteOnOpen();\n      });\n\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  private openLinkThatIsNotAnAnchor() {\n    if (!this.elementIsAnAnchor()) {\n      this.toExecuteOnOpen = () => {\n        if (this.options.alwaysOpenInNewWindow) {\n          if (this.options.openInOutlook) {\n            this.openLinkInOutlook();\n          } else {\n            this.openLinkInNewWindow();\n          }\n        } else {\n          this.openLink();\n        }\n      };\n\n      $$(this.element).on('click', () => {\n        this.toExecuteOnOpen();\n      });\n\n      return true;\n    }\n    return false;\n  }\n\n  private setHrefIfNotAlready() {\n    // Do not erase any value put in href by the template, etc. Allows\n    // using custom click urls while still keeping analytics recording\n    // and other behavior brought by the component.\n    if (this.elementIsAnAnchor() && !Utils.isNonEmptyString($$(this.element).getAttribute('href'))) {\n      $$(this.element).setAttribute('href', this.getResultUri());\n      if (this.options.alwaysOpenInNewWindow && !(this.options.openInOutlook && this.hasOutlookField())) {\n        $$(this.element).setAttribute('target', '_blank');\n      }\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  private logOpenDocument = _.debounce(() => {\n    this.queryController.saveLastQuery();\n    let documentURL = $$(this.element).getAttribute('href');\n    if (documentURL == undefined || documentURL == '') {\n      documentURL = this.result.clickUri;\n    }\n    this.usageAnalytics.logClickEvent(analyticsActionCauseList.documentOpen, {\n      documentURL: documentURL,\n      documentTitle: this.result.title,\n      author: Utils.getFieldValue(this.result, 'author'),\n    }, this.result, this.root);\n    Defer.flush();\n  }, 1500, true);\n\n  private getResultUri(): string {\n    if (this.options.hrefTemplate) {\n      return this.parseStringTemplate(this.options.hrefTemplate);\n    }\n    if (this.options.field == undefined && this.options.openInOutlook) {\n      this.setField();\n    }\n    if (this.options.field != undefined) {\n      return Utils.getFieldValue(this.result, <string>this.options.field);\n    } else {\n      return this.result.clickUri;\n    }\n  }\n\n  private elementIsAnAnchor() {\n    return this.element.tagName == 'A';\n  }\n\n  private setField() {\n    let os = Utils.exists(this.os) ? this.os : OSUtils.get();\n    if (os == OS_NAME.MACOSX && this.hasOutlookField()) {\n      this.options.field = '@outlookformacuri';\n    } else if (os == OS_NAME.WINDOWS && this.hasOutlookField()) {\n      this.options.field = '@outlookuri';\n    }\n  }\n\n  private hasOutlookField() {\n    let os = Utils.exists(this.os) ? this.os : OSUtils.get();\n    if (os == OS_NAME.MACOSX && this.result.raw['outlookformacuri'] != undefined) {\n      return true;\n    } else if (os == OS_NAME.WINDOWS && this.result.raw['outlookuri'] != undefined) {\n      return true;\n    }\n    return false;\n  }\n\n  private isUriThatMustBeOpenedInQuickview(): boolean {\n    return this.result.clickUri.toLowerCase().indexOf('ldap://') == 0;\n  }\n\n  private quickviewShouldBeOpened() {\n    return (this.options.openQuickview || this.isUriThatMustBeOpenedInQuickview()) && QueryUtils.hasHTMLVersion(this.result);\n  }\n\n  private parseStringTemplate(template: string): string {\n    if (!template) {\n      return '';\n    }\n    return template.replace(/\\$\\{(.*?)\\}/g, (value: string) => {\n      let key = value.substring(2, value.length - 1);\n      let newValue = this.readFromObject(this.result, key);\n      if (!newValue) {\n        newValue = this.readFromObject(window, key);\n      }\n      if (!newValue) {\n        this.logger.warn(`${key} used in the ResultLink template is undefined for this result: ${this.result.title}`);\n      }\n      return newValue || value;\n    });\n  }\n\n  private readFromObject(object: Object, key: string): string {\n    if (object && key.indexOf('.') !== -1) {\n      let newKey = key.substring(key.indexOf('.') + 1);\n      key = key.substring(0, key.indexOf('.'));\n      return this.readFromObject(object[key], newKey);\n    }\n    return object ? object[key] : undefined;\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultLink);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultLink/ResultLink.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { ResultLink } from '../ResultLink/ResultLink';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { DeviceUtils } from '../../utils/DeviceUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { ISearchEndpoint } from '../../rest/SearchEndpointInterface';\nimport { $$ } from '../../utils/Dom';\nimport { FieldTable } from '../FieldTable/FieldTable';\nimport { get } from '../Base/RegisteredNamedMethods';\nimport { IResultLinkOptions } from '../ResultLink/ResultLinkOptions';\nimport { Icon } from '../Icon/Icon';\nimport _ = require('underscore');\n\nexport interface IThumbnailOptions extends IResultLinkOptions {\n  noThumbnailClass?: string;\n  clickable?: boolean;\n}\n\n/**\n * The Thumbnail component automatically fetches the thumbnail of the result object and outputs an HTML `img` tag with\n * it.\n */\nexport class Thumbnail extends Component {\n  static ID = 'Thumbnail';\n\n  /**\n   * Options for the Thumbnail\n   * @componentOptions\n   */\n  static options: IThumbnailOptions = {\n\n    /**\n     * Specifies the CSS class to use on the `img` tag that the Thumbnail component outputs when a result has no\n     * thumbnail in the index.\n     *\n     * Default value is `coveo-no-thumbnail`.\n     */\n    noThumbnailClass: ComponentOptions.buildStringOption({ defaultValue: 'coveo-no-thumbnail' }),\n\n    /**\n     * Specifies whether to create a clickable {@link ResultLink} around the Thumbnail.\n     *\n     * Default value is `false`.\n     *\n     * If set to true, you can use the options specified on {@link ResultLink.options}\n     */\n    clickable: ComponentOptions.buildBooleanOption({ defaultValue: false })\n  };\n\n  static parent = ResultLink;\n\n  static fields = [\n    'outlookformacuri',\n    'outlookuri',\n    'connectortype',\n    'urihash',  //     ⎫\n    'collection', //   ⎬--- analytics\n    'source' //        ⎭\n  ];\n\n  public img: HTMLImageElement;\n\n  /**\n   * Creates a new Thumbnail component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Thumbnail component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IThumbnailOptions, public bindings?: IResultsComponentBindings, public result?: IQueryResult) {\n    super(element, Thumbnail.ID, bindings);\n\n    this.options = ComponentOptions.initOptions(element, <any>Thumbnail.options, options);\n\n    if (this.element.tagName.toLowerCase() != 'img') {\n      this.img = <HTMLImageElement>$$('img').el;\n      this.element.appendChild(this.img);\n    } else {\n      this.img = <HTMLImageElement>this.element;\n    }\n\n    if (this.options.clickable) {\n      if (this.element.tagName.toLowerCase() != 'img') {\n        new ResultLink(this.element, this.options, this.bindings, this.result);\n      } else {\n        let href = $$('a');\n        $$(this.element).replaceWith(href.el);\n        $$(href).append(this.element);\n        new ResultLink(href.el, this.options, this.bindings, this.result);\n      }\n    }\n\n\n    // We need to set src to a blank image right away to avoid the image from\n    // changing size once it's loaded. Also, doing this prevents a border from\n    // appearing on some browsers when there is no thumbnail. I've found no other\n    // way to get rid of it...\n    this.img.setAttribute('src', 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==');\n\n    if (QueryUtils.hasThumbnail(result)) {\n      this.buildThumbnailImage();\n    } else {\n      this.logger.info('Result has no thumbnail. Cannot build thumbnail image, instanciating an Icon component instead.');\n      new Icon(element, { small: true }, bindings, result);\n    }\n  }\n\n  private buildThumbnailImage() {\n    let endpoint = this.bindings.queryController.getEndpoint();\n\n    if (endpoint.isJsonp() || DeviceUtils.isIE8or9()) {\n      // For jsonp and IE8-9 (XDomain) we can't GET/POST for binary data. We are limited\n      // to only setting the src attribute directly on the img.\n      this.buildImageWithDirectSrcAttribute(endpoint);\n    } else {\n      // Base 64 img allows us to GET/POST the image as raw binary, so that we can also\n      // pass the credential of the user. Useful for phonegap among others.\n      this.buildImageWithBase64SrcAttribute(endpoint);\n    }\n  }\n\n  private buildImageWithDirectSrcAttribute(endpoint: ISearchEndpoint) {\n    let dataStreamUri = endpoint.getViewAsDatastreamUri(this.result.uniqueId, '$Thumbnail$', { contentType: 'image/png' });\n    this.img.setAttribute('src', dataStreamUri);\n    this.resizeContainingFieldTable();\n  }\n\n  private buildImageWithBase64SrcAttribute(endpoint: ISearchEndpoint) {\n    endpoint.getRawDataStream(this.result.uniqueId, '$Thumbnail$')\n      .then((response) => {\n        let rawBinary = String.fromCharCode.apply(null, new Uint8Array(response));\n        this.img.setAttribute('src', 'data:image/png;base64, ' + btoa(rawBinary));\n        this.resizeContainingFieldTable();\n      })\n      .catch(() => {\n        this.setEmptyThumbnailClass();\n      });\n  }\n\n  private resizeContainingFieldTable() {\n    let closestFieldTableElement = $$(this.element).closest(Component.computeCssClassName(FieldTable));\n    if (closestFieldTableElement != null) {\n      let fieldTable = <FieldTable>get(closestFieldTableElement);\n      fieldTable.updateToggleHeight();\n    }\n  }\n\n  private setEmptyThumbnailClass() {\n    $$(this.img).addClass(this.options.noThumbnailClass);\n  }\n}\n\nThumbnail.options = _.extend({}, ResultLink.options, Thumbnail.options);\n\nInitialization.registerAutoCreateComponent(Thumbnail);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Thumbnail/Thumbnail.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Initialization } from '../Base/Initialization';\nimport { FieldValue, IFieldValueOptions } from './FieldValue';\nimport { $$ } from '../../utils/Dom';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport _ = require('underscore');\n\nexport interface IFieldTableOptions {\n  allowMinimization: boolean;\n  expandedTitle: string;\n  minimizedTitle: string;\n  minimizedByDefault: boolean;\n}\n\n/**\n * The FieldTable component displays a set of {@link FieldValue} components in a table that can optionally be\n * expandable and minimizable. This component automatically takes care of not displaying empty field values.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n *\n * **Example:**\n *\n * ```\n * // This is the FieldTable component itself, which holds a list of table rows.\n * // Each row is a FieldValue component.\n * <table class='CoveoFieldTable'>\n *    // Items\n *    <tr data-field='@sysdate' data-caption='Date' data-helper='dateTime' />\n *    <tr data-field='@sysauthor' data-caption='Author' />\n *    <tr data-field='@clickuri' data-html-value='true' data-caption='URL' data-helper='anchor' data-helper-options='{text: \\\"<%= raw.syssource %>\\\" , target:\\\"_blank\\\"}'>\n * </table>\n * ```\n */\nexport class FieldTable extends Component {\n  static ID = 'FieldTable';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IFieldTableOptions = {\n\n    /**\n     * Specifies whether to allow the minimization (collapsing) of the FieldTable.\n     *\n     * If you set this option to `false`, the component will not create the **Minimize** / **Expand** toggle links.\n     *\n     * See also {@link FieldTable.options.expandedTitle}, {@link FieldTable.options.minimizedTitle} and\n     * {@link FieldTable.options.minimizedByDefault}.\n     *\n     * Default value is `true`.\n     */\n    allowMinimization: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link FieldTable.options.allowMinimization} is `true`, specifies the caption to show on the **Minimize** link\n     * (the link that appears when the FieldTable is expanded).\n     *\n     * Default value is `\"Details\"`.\n     */\n    expandedTitle: ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Details', depend: 'allowMinimization' }),\n\n    /**\n     * If {@link FieldTable.options.allowMinimization} is `true`, specifies the caption to show on the **Expand** link\n     * (the link that appears when the FieldTable is minimized).\n     *\n     * Default value is `\"Details\"`.\n     */\n    minimizedTitle: ComponentOptions.buildLocalizedStringOption({ defaultValue: 'Details', depend: 'allowMinimization' }),\n\n    /**\n     * If {@link FieldTable.options.allowMinimization} is `true`, specifies whether to minimize the table by default.\n     *\n     * Default value is `undefined`, and the FieldTable will collapse by default if the result it is associated with has\n     * a non-empty excerpt.\n     */\n    minimizedByDefault: ComponentOptions.buildBooleanOption({ depend: 'allowMinimization' })\n  };\n\n  public isExpanded: boolean;\n  private toggleButton: HTMLElement;\n  private toggleIcon: HTMLElement;\n  private toggleCaption: HTMLElement;\n  private toggleButtonInsideTable: HTMLElement;\n  private toggleContainer: HTMLElement;\n  private toggleContainerHeight: number;\n\n  /**\n   * Creates a new FieldTable.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FieldTable component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IFieldTableOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, ValueRow.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, FieldTable, options);\n\n    var rows = $$(this.element).findAll('tr[data-field]');\n    _.each(rows, (e: HTMLElement) => {\n      new ValueRow(e, {}, bindings, result);\n    });\n\n    if ($$(this.element).find('tr') == null) {\n      $$(element).detach();\n    }\n\n    if (this.isTogglable()) {\n      this.toggleContainer = $$('div', { className: 'coveo-field-table-toggle-container' }).el;\n      this.buildToggle();\n      $$(this.toggleContainer).insertBefore(this.element);\n      this.toggleContainer.appendChild(this.element);\n    } else {\n      this.isExpanded = true;\n    }\n  }\n\n  /**\n   * Toggles between expanding (showing) and minimizing (collapsing) the FieldTable.\n   *\n   * @param anim Specifies whether to show a sliding animation when toggling the display of the FieldTable.\n   */\n  public toggle(anim = false) {\n    if (this.isTogglable()) {\n      this.isExpanded = !this.isExpanded;\n      this.isExpanded ? this.expand(anim) : this.minimize(anim);\n    }\n  }\n\n  /**\n   * Expands (shows) the FieldTable,\n   * @param anim Specifies whether to show a sliding animation when expanding the FieldTable.\n   */\n  public expand(anim = false) {\n    if (this.isTogglable()) {\n      this.isExpanded = true;\n      this.toggleCaption.textContent = this.options.expandedTitle;\n      $$(this.toggleIcon).addClass('coveo-opened');\n      $$(this.toggleButtonInsideTable).addClass('coveo-opened');\n      anim ? this.slideToggle(true) : this.slideToggle(true, false);\n    }\n  }\n\n  /**\n   * Minimizes (collapses) the FieldTable.\n   * @param anim Specifies whether to show a sliding animation when minimizing the FieldTable.\n   */\n  public minimize(anim = false) {\n    if (this.isTogglable()) {\n      this.isExpanded = false;\n      this.toggleCaption.textContent = this.options.minimizedTitle;\n      $$(this.toggleIcon).removeClass('coveo-opened');\n      $$(this.toggleButtonInsideTable).removeClass('coveo-opened');\n      anim ? this.slideToggle(false) : this.slideToggle(false, false);\n    }\n  }\n\n  /**\n   * Updates the toggle height if the content was dynamically resized, so that the expanding and minimizing animation\n   * can match the new content size.\n   */\n  public updateToggleHeight() {\n    this.updateToggleContainerHeight();\n    this.isExpanded ? this.expand() : this.minimize();\n  }\n\n  protected isTogglable() {\n    if (this.searchInterface.isNewDesign() && this.options.allowMinimization) {\n      return true;\n    } else if (!this.searchInterface.isNewDesign()) {\n      this.logger.trace('Cannot open or close the field table with older design', this);\n    }\n    return false;\n  }\n\n  private buildToggle() {\n    this.toggleIcon = $$('span', { className: 'coveo-field-table-toggle-icon' }).el;\n    this.toggleCaption = $$('span', { className: 'coveo-field-table-toggle-caption', tabindex: 0 }).el;\n\n    this.toggleButton = $$('div', { className: 'coveo-field-table-toggle' }).el;\n    this.toggleButton.appendChild(this.toggleCaption);\n    this.toggleButton.appendChild(this.toggleIcon);\n    $$(this.toggleButton).insertBefore(this.element);\n\n    this.toggleButtonInsideTable = $$('span', { className: 'coveo-field-table-toggle-icon-up coveo-field-table-toggle' }).el;\n    this.element.appendChild(this.toggleButtonInsideTable);\n\n    if (this.options.minimizedByDefault === true) {\n      this.isExpanded = false;\n    } else if (this.options.minimizedByDefault === false) {\n      this.isExpanded = true;\n    } else {\n      this.isExpanded = !QueryUtils.hasExcerpt(this.result);\n    }\n\n    setTimeout(() => {\n      this.updateToggleHeight();\n    }); // Wait until toggleContainer.scrollHeight is computed.\n\n    const toggleAction = () => this.toggle(true);\n    $$(this.toggleButton).on('click', toggleAction);\n    $$(this.toggleButtonInsideTable).on('click', toggleAction);\n    $$(this.toggleButton).on('keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, toggleAction));\n  }\n\n  private slideToggle(visible: boolean = true, anim: boolean = true) {\n    if (!anim) {\n      $$(this.toggleContainer).addClass('coveo-no-transition');\n    }\n    if (visible) {\n      this.toggleContainer.style.display = 'block';\n      this.toggleContainer.style.height = this.toggleContainerHeight + 'px';\n    } else {\n      this.toggleContainer.style.height = this.toggleContainerHeight + 'px';\n      this.toggleContainer.style.height = '0';\n    }\n    if (!anim) {\n      this.toggleContainer.offsetHeight; // Force reflow\n      $$(this.toggleContainer).removeClass('coveo-no-transition');\n    }\n  }\n\n  private updateToggleContainerHeight() {\n    this.toggleContainerHeight = this.toggleContainer.scrollHeight;\n  }\n}\n\nInitialization.registerAutoCreateComponent(FieldTable);\n\nexport interface IValueRowOptions extends IFieldValueOptions {\n  caption?: string;\n}\n\nclass ValueRow extends FieldValue {\n  static ID = 'ValueRow';\n  static options: IValueRowOptions = {\n    caption: ComponentOptions.buildStringOption({ postProcessing: (value, options) => value || options.field.substr(1) })\n  };\n\n  static parent = FieldValue;\n  private valueContainer: HTMLElement;\n\n  constructor(public element: HTMLElement, public options: IValueRowOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, options, bindings, result, ValueRow.ID);\n    this.options = ComponentOptions.initComponentOptions(element, ValueRow, options);\n\n    var caption = $$('th').el;\n    caption.appendChild(document.createTextNode(this.options.caption.toLocaleString()));\n    this.element.insertBefore(caption, this.getValueContainer());\n  }\n\n  protected getValueContainer() {\n    if (this.valueContainer == null) {\n      this.valueContainer = document.createElement('td');\n      this.element.appendChild(this.valueContainer);\n    }\n    return this.valueContainer;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FieldTable/FieldTable.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Initialization } from '../Base/Initialization';\nimport { TemplateHelpers } from '../Templates/TemplateHelpers';\nimport { Assert } from '../../misc/Assert';\nimport { DateUtils, IDateToStringOptions } from '../../utils/DateUtils';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Utils } from '../../utils/Utils';\nimport { Facet } from '../Facet/Facet';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\nimport { StringUtils } from '../../utils/StringUtils';\n\nexport interface IFieldValueOptions {\n  field?: IFieldOption;\n  facet?: string;\n  htmlValue?: boolean;\n  helper?: string;\n  helperOptions?: { [key: string]: any };\n  splitValues?: boolean;\n  separator?: string;\n  displaySeparator?: string;\n  textCaption?: string;\n}\n\nexport interface IAnalyticsFieldValueMeta {\n  facetId: string;\n  facetValue?: string;\n  facetTitle?: string;\n}\n\nfunction showOnlyWithHelper<T>(helpers: string[], options?: T): T {\n  if (options == null) {\n    options = <any>{};\n  }\n  (<any>options).helpers = helpers;\n  return options;\n}\n\n/**\n * The FieldValue component displays the value of a field associated to its parent search result. It is normally usable\n * within a {@link FieldTable}.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n *\n * A common use of this component is to display a specific field value which also happens to be an existing\n * {@link Facet.options.field}. When the user clicks on the FieldValue component, it activates the corresponding Facet.\n */\nexport class FieldValue extends Component {\n  static ID = 'FieldValue';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IFieldValueOptions = {\n\n    /**\n     * Specifies the field that the FieldValue should display.\n     *\n     * Specifying a value for this parameter is required in order for the FieldValue component to work.\n     */\n    field: ComponentOptions.buildFieldOption({ defaultValue: '@field', required: true }),\n\n    /**\n     * Specifies the {@link Facet} component to toggle when the end user clicks the FieldValue.\n     *\n     * Default value is the value of {@link FieldValue.options.field}.\n     *\n     * **Note:**\n     * > If the target {@link Facet.options.id} is is not the same as its {@link Facet.options.field}), you must specify\n     * > this option manually in order to link to the correct Facet.\n     */\n    facet: ComponentOptions.buildStringOption({ postProcessing: (value, options) => value || options.field }),\n\n    /**\n     * Specifies whether the content to display is an HTML element.\n     *\n     * Default value is `false`.\n     */\n    htmlValue: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * Specifies whether to split the FieldValue at each {@link FieldValue.options.separator}.\n     *\n     * This is useful for splitting groups using a {@link Facet.options.field}.\n     *\n     * When this option is `true`, the displayed values are split by the {@link FieldValue.options.displaySeparator}.\n     *\n     * Default value is `false`.\n     */\n    splitValues: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n\n    /**\n     * If {@link FieldValue.options.splitValues} is `true`, specifies the separator string which separates multi-value\n     * fields in the index.\n     *\n     * See {@link FieldValue.options.displaySeparator}.\n     *\n     * Default value is `\";\"`.\n     */\n    separator: ComponentOptions.buildStringOption({ depend: 'splitValues', defaultValue: ';' }),\n\n    /**\n     * If {@link FieldValue.options.splitValues} is `true`, specifies the string to use when displaying multi-value\n     * fields in the UI.\n     *\n     * The component will insert this string between each value it displays from a multi-value field.\n     *\n     * See also {@link FieldValue.options.separator}.\n     *\n     * Default value is `\", \"`.\n     */\n    displaySeparator: ComponentOptions.buildStringOption({ depend: 'splitValues', defaultValue: ', ' }),\n\n    /**\n     * Specifies the helper that the FieldValue should use to display its content.\n     *\n     * While several helpers exist by default (see {@link ICoreHelpers}), it is also possible for you to create your own\n     * custom helpers (see {@link TemplateHelpers}).\n     */\n    helper: ComponentOptions.buildHelperOption(),\n\n    /**\n     * Specifies the options to call on the specified helper.\n     */\n    helperOptions: ComponentOptions.buildObjectOption({\n      subOptions: {\n        text: ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n        target: ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n        'class': ComponentOptions.buildStringOption(showOnlyWithHelper(['anchor'])),\n\n        decimals: ComponentOptions.buildNumberOption(showOnlyWithHelper(['currency'], { min: 0 })),\n        symbol: ComponentOptions.buildStringOption(showOnlyWithHelper(['currency'])),\n\n        useTodayYesterdayAndTomorrow: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n        useWeekdayIfThisWeek: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n        omitYearIfCurrentOne: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n        useLongDateFormat: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: false })),\n        includeTimeIfToday: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n        includeTimeIfThisWeek: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: true })),\n        alwaysIncludeTime: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'], { defaultValue: false })),\n        predefinedFormat: ComponentOptions.buildStringOption(showOnlyWithHelper(['date', 'dateTime', 'emailDateTime', 'time'])),\n\n        companyDomain: ComponentOptions.buildStringOption(showOnlyWithHelper(['email'])),\n        lengthLimit: ComponentOptions.buildNumberOption(showOnlyWithHelper(['email'], { min: 1 })),\n        truncateName: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['email'])),\n\n        alt: ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n        height: ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n        width: ComponentOptions.buildStringOption(showOnlyWithHelper(['image'])),\n\n        presision: ComponentOptions.buildNumberOption(showOnlyWithHelper(['size'], { min: 0, defaultValue: 2 })),\n        base: ComponentOptions.buildNumberOption(showOnlyWithHelper(['size'], { min: 0, defaultValue: 0 })),\n        isMilliseconds: ComponentOptions.buildBooleanOption(showOnlyWithHelper(['timeSpan'])),\n      }\n    }),\n\n    /**\n     * Specifies a caption to display before the value.\n     *\n     * Default value is `undefined`.\n     */\n    textCaption: ComponentOptions.buildLocalizedStringOption()\n  };\n\n  static simpleOptions = _.omit(FieldValue.options, 'helperOptions');\n\n  static helperOptions = <any>{\n    helperOptions: FieldValue.options.helperOptions\n  };\n\n  /**\n   * Creates a new FieldValue.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FieldValue component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options: IFieldValueOptions, bindings?: IComponentBindings, public result?: IQueryResult, fieldValueClassId: string = FieldValue.ID) {\n    super(element, fieldValueClassId, bindings);\n\n    this.options = ComponentOptions.initOptions(element, FieldValue.simpleOptions, options);\n\n    if (this.options.helper != null) {\n      this.options = ComponentOptions.initOptions(element, FieldValue.helperOptions, this.options);\n      let toFilter = _.keys(FieldValue.options.helperOptions['subOptions']);\n      let toKeep = _.filter(toFilter, (optionKey) => {\n        let optionDefinition = FieldValue.options.helperOptions['subOptions'][optionKey];\n        if (optionDefinition) {\n          let helpers = optionDefinition.helpers;\n          return helpers != null && _.contains(helpers, this.options.helper);\n        }\n        return false;\n      });\n\n      this.options.helperOptions = _.omit(this.options.helperOptions, (value, key) => {\n        return !_.contains(toKeep, key);\n      });\n    }\n\n    this.result = this.result || this.resolveResult();\n    Assert.exists(this.result);\n\n    let loadedValueFromComponent = this.getValue();\n    if (loadedValueFromComponent == null) {\n      // Completely remove the element to ease stuff such as adding separators in CSS\n      if (this.element.parentElement != null) {\n        this.element.parentElement.removeChild(this.element);\n      }\n    } else {\n      let values: string[];\n\n      if (_.isArray(loadedValueFromComponent)) {\n        values = loadedValueFromComponent;\n      } else if (this.options.splitValues) {\n        if (_.isString(loadedValueFromComponent)) {\n          values = _.map(loadedValueFromComponent.split(this.options.separator), (v: string) => {\n            return v.trim();\n          });\n        }\n      } else {\n        loadedValueFromComponent = loadedValueFromComponent.toString();\n        values = [loadedValueFromComponent];\n      }\n      this.appendValuesToDom(values);\n      if (this.options.textCaption != null) {\n        this.prependTextCaptionToDom();\n      }\n    }\n  }\n\n  /**\n   * Gets the current FieldValue from the current {@link IQueryResult}.\n   *\n   * @returns {any} The current FieldValue or `null` if value is and `Object`.\n   */\n  public getValue() {\n    let value = Utils.getFieldValue(this.result, <string>this.options.field);\n    if (!_.isArray(value) && _.isObject(value)) {\n      value = null;\n    }\n    return value;\n  }\n\n  /**\n   * Renders a value to HTML using all of the current FieldValue component options.\n   * @param value The value to render.\n   * @returns {HTMLElement} The element containing the rendered value.\n   */\n  public renderOneValue(value: string): HTMLElement {\n    let element = $$('span').el;\n    let toRender = value;\n    if (this.options.helper) {\n      toRender = TemplateHelpers.getHelper(this.options.helper).call(this, value, this.getHelperOptions());\n\n      let fullDateStr = this.getFullDate(value, this.options.helper);\n      if (fullDateStr) {\n        element.setAttribute('title', fullDateStr);\n      }\n    }\n\n    if (this.options.helper == 'date' || this.options.helper == 'dateTime' || this.options.helper == 'emailDateTime') {\n      toRender = StringUtils.capitalizeFirstLetter(toRender);\n    }\n    if (this.options.htmlValue) {\n      element.innerHTML = toRender;\n    } else {\n      element.appendChild(document.createTextNode(toRender));\n    }\n    this.bindEventOnValue(element, value);\n    return element;\n  }\n\n  protected getValueContainer() {\n    return this.element;\n  }\n\n  private getHelperOptions() {\n    let inlineOptions = ComponentOptions.loadStringOption(this.element, 'helperOptions', {});\n    if (Utils.isNonEmptyString(inlineOptions)) {\n      return _.extend({}, this.options.helperOptions, eval('(' + inlineOptions + ')'));\n    }\n    return this.options.helperOptions;\n  }\n\n  private getFullDate(date: string, helper: string) {\n    let fullDateOptions: IDateToStringOptions = {\n      useLongDateFormat: true,\n      useTodayYesterdayAndTomorrow: false,\n      useWeekdayIfThisWeek: false,\n      omitYearIfCurrentOne: false\n    };\n\n    if (helper == 'date') {\n      return DateUtils.dateToString(new Date(parseInt(date)), fullDateOptions);\n    } else if (helper == 'dateTime' || helper == 'emailDateTime') {\n      return DateUtils.dateTimeToString(new Date(parseInt(date)), fullDateOptions);\n    }\n    return '';\n  }\n\n  private appendValuesToDom(values: string[]): void {\n    _.each(values, (value, index) => {\n      if (value != undefined) {\n        this.getValueContainer().appendChild(this.renderOneValue(value));\n        if (index !== values.length - 1) {\n          this.getValueContainer().appendChild(document.createTextNode(this.options.displaySeparator));\n        }\n      }\n    });\n  }\n\n  private renderTextCaption(): HTMLElement {\n    let element = $$('span', { className: 'coveo-field-caption' }, _.escape(this.options.textCaption));\n    return element.el;\n  }\n\n  protected prependTextCaptionToDom(): void {\n    let elem = this.getValueContainer();\n    $$(elem).prepend(this.renderTextCaption());\n    // Add a class to the container so the value and the caption wrap together.\n    $$(elem).addClass('coveo-with-label');\n  }\n\n  private bindEventOnValue(element: HTMLElement, value: string) {\n    let facetAttributeName = QueryStateModel.getFacetId(this.options.facet);\n    let facets: Component[] = _.filter(this.componentStateModel.get(facetAttributeName), (facet: Component) => {\n      return !facet.disabled && !(facet instanceof Coveo['FacetRange']);\n    });\n    let atLeastOneFacetIsEnabled = facets.length > 0;\n\n    if (atLeastOneFacetIsEnabled) {\n      let selected = _.find(facets, (facet: Facet) => {\n        let facetValue = facet.values.get(value);\n        return facetValue && facetValue.selected;\n      });\n      $$(element).on('click', () => {\n        if (selected != null) {\n          _.each(facets, (facet: Facet) => facet.deselectValue(value));\n        } else {\n          _.each(facets, (facet: Facet) => facet.selectValue(value));\n        }\n        this.queryController.deferExecuteQuery({\n          beforeExecuteQuery: () => this.usageAnalytics.logSearchEvent<IAnalyticsFieldValueMeta>(analyticsActionCauseList.documentField, {\n            facetId: this.options.facet,\n            facetValue: value.toLowerCase()\n          })\n        });\n      });\n\n      if (selected) {\n        $$(element).addClass('coveo-selected');\n      }\n      $$(element).addClass('coveo-clickable');\n    }\n  }\n\n}\n\nInitialization.registerAutoCreateComponent(FieldValue);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FieldTable/FieldValue.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { HighlightUtils, StringAndHoles } from '../../utils/HighlightUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\n\nexport interface IPrintableUriOptions {\n}\n\n/**\n * The PrintableUri component displays the URI, or path, to access a result.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class PrintableUri extends Component {\n  static ID = 'PrintableUri';\n  static options: IPrintableUriOptions = {};\n\n  static fields = [\n    'parents',\n    'author'\n  ];\n\n  private uri: string;\n\n  /**\n   * Creates a new PrintableUri.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the PrintableUri component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options: IPrintableUriOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, PrintableUri.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, PrintableUri, options);\n\n    let parentsXml = Utils.getFieldValue(result, 'parents');\n    if (parentsXml) {\n      this.renderParentsXml(element, parentsXml);\n    } else {\n      this.renderUri(element, result);\n    }\n  }\n\n  public renderParentsXml(element: HTMLElement, parentsXml: string) {\n    let xmlDoc: XMLDocument = Utils.parseXml(parentsXml);\n    let parents = xmlDoc.getElementsByTagName('parent');\n\n    let tokens: HTMLElement[] = [];\n    let seperators: HTMLElement[] = [];\n\n    for (let i = 0; i < parents.length; i++) {\n      if (i > 0) {\n        let seperator = this.buildSeperator();\n        seperators.push(seperator);\n        element.appendChild(seperator);\n      }\n\n      let parent = <Element>parents.item(i);\n      let token = this.buildHtmlToken(parent.getAttribute('name'), parent.getAttribute('uri'));\n      tokens.push(token);\n      element.appendChild(token);\n    }\n\n    if (tokens.length > 1) {\n      let ellipsis: HTMLElement = this.buildEllipsis();\n      element.insertBefore(ellipsis, seperators[0]);\n      let ellipsisSeperator: HTMLElement = this.buildSeperator();\n      element.insertBefore(ellipsisSeperator, ellipsis);\n\n      let contentWidth = 0;\n      let tokensWidth: number[] = [];\n      for (let i = 0; i < tokens.length; i++) {\n        tokensWidth[i] = tokens[i].offsetWidth;\n        contentWidth += tokensWidth[i];\n      }\n      let seperatorWidth = seperators[0].offsetWidth;\n      let ellipsisWidth = ellipsis.offsetWidth;\n      let availableWidth = element.offsetWidth;\n\n      if (availableWidth <= contentWidth) {\n        contentWidth += ellipsisWidth + seperatorWidth;\n        let hidden: HTMLElement[] = [];\n        let i = 1;\n        while (i < tokens.length && availableWidth <= contentWidth) {\n          element.removeChild(tokens[i]);\n          element.removeChild(seperators[i - 1]);\n          if (i > 1) {\n            hidden.push(seperators[i - 1]);\n          }\n          hidden.push(tokens[i]);\n          contentWidth -= tokensWidth[i] + seperatorWidth;\n          i++;\n        }\n        ellipsis.onclick = () => {\n          for (let i = 0; i < hidden.length; i++) {\n            element.insertBefore(hidden[i], ellipsis);\n          }\n          element.removeChild(ellipsis);\n        };\n      } else {\n        element.removeChild(ellipsis);\n        element.removeChild(ellipsisSeperator);\n      }\n    }\n  }\n\n  public renderUri(element: HTMLElement, result?: IQueryResult) {\n    this.uri = result.clickUri;\n    let stringAndHoles: StringAndHoles;\n    if (result.printableUri.indexOf('\\\\') == -1) {\n      stringAndHoles = StringAndHoles.shortenUri(result.printableUri, $$(element).width() / 7);\n    } else {\n      stringAndHoles = StringAndHoles.shortenPath(result.printableUri, $$(element).width() / 7);\n    }\n    let uri = HighlightUtils.highlightString(stringAndHoles.value, result.printableUriHighlights, stringAndHoles.holes, 'coveo-highlight');\n    let link = $$('a');\n    link.setAttribute('title', result.printableUri);\n    link.addClass('coveo-printable-uri');\n    link.setHtml(uri);\n    link.setAttribute('href', result.clickUri);\n    this.bindLogOpenDocument(link.el);\n    element.appendChild(link.el);\n  }\n\n  public buildSeperator() {\n    let seperator = document.createElement('span');\n    seperator.innerText = '>';\n    seperator.className = 'coveo-printable-uri-separator';\n    return seperator;\n  }\n\n  public buildEllipsis() {\n    let ellipsis = document.createElement('span');\n    ellipsis.innerText = '...';\n    ellipsis.className = 'coveo-printable-uri';\n    return ellipsis;\n  }\n\n  public buildHtmlToken(name: string, uri: string) {\n    let modifiedName = name.charAt(0).toUpperCase() + name.slice(1);\n    let link = document.createElement('a');\n    this.bindLogOpenDocument(link);\n    link.href = uri;\n    this.uri = uri;\n    link.className = 'coveo-printable-uri';\n    link.appendChild(document.createTextNode(modifiedName));\n    return link;\n  }\n\n  private bindLogOpenDocument(link: HTMLElement) {\n    $$(link).on(['mousedown', 'touchend'], (e: Event) => {\n      // jQuery event != standard dom event for mouse events\n      // if we have access to the original event, use that.\n      if ((<any>e).originalEvent) {\n        e = (<any>e).originalEvent;\n      }\n      let url = $$(<HTMLElement>e.srcElement).getAttribute('href');\n      let title = $$(<HTMLElement>e.srcElement).text();\n      this.usageAnalytics.logClickEvent(analyticsActionCauseList.documentOpen, {\n        documentURL: url,\n        documentTitle: title,\n        author: Utils.getFieldValue(this.result, 'author')\n      }, this.result, this.root);\n    });\n  }\n\n}\n\nInitialization.registerAutoCreateComponent(PrintableUri);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/PrintableUri/PrintableUri.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IBuildingQueryEventArgs, INoResultsEventArgs, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { $$ } from '../../utils/Dom';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport { IQueryCorrection } from '../../rest/QueryCorrection';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { Utils } from '../../utils/Utils';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { l } from '../../strings/Strings';\nimport _ = require('underscore');\n\nexport interface IDidYouMeanOptions {\n  enableAutoCorrection?: boolean;\n}\n\n/**\n * The DidYouMean component is responsible for displaying query corrections. If this component is in the page and the\n * query returns no result but finds a possible query correction, the component either suggests the correction or\n * automatically triggers a new query with the suggested term.\n */\nexport class DidYouMean extends Component {\n  static ID = 'DidYouMean';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IDidYouMeanOptions = {\n\n    /**\n     * Specifies whether the DidYouMean component automatically triggers a new query when a query returns no result and\n     * a possible correction is available.\n     *\n     * Default value is `true`.\n     */\n    enableAutoCorrection: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n  };\n\n  public correctedTerm: string;\n\n  private hideNext: boolean;\n\n  /**\n   * Creates a new DidYouMean component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the DidYouMean component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IDidYouMeanOptions, public bindings?: IComponentBindings) {\n\n    super(element, DidYouMean.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, DidYouMean, options);\n    Assert.exists(element);\n    Assert.exists(this.options);\n\n    this.hideNext = true;\n\n    this.correctedTerm = null;\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, this.handlePrepareQueryBuilder);\n    this.bind.onRootElement(QueryEvents.querySuccess, this.handleProcessNewQueryResults);\n    this.bind.onRootElement(QueryEvents.noResults, this.handleNoResults);\n    this.bind.onRootElement(QueryEvents.newQuery, this.handleNewQuery);\n    $$(this.element).hide();\n  }\n\n  /**\n   * Executes a query with the corrected term.\n   * Throws an exception if the corrected term has not been initialized.\n   * If successful, logs a `didyoumeanClick` event in the usage analytics.\n   */\n  public doQueryWithCorrectedTerm() {\n    Assert.exists(this.correctedTerm);\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, this.correctedTerm);\n    this.queryController.deferExecuteQuery({\n      beforeExecuteQuery: () => this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.didyoumeanClick, {})\n    });\n  }\n\n  private handleNewQuery() {\n    if (this.hideNext) {\n      $$(this.element).empty();\n      $$(this.element).hide();\n      this.correctedTerm = null;\n    } else {\n      this.hideNext = true;\n    }\n  }\n\n  private handlePrepareQueryBuilder(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    data.queryBuilder.enableDidYouMean = true;\n  }\n\n  private handleNoResults(data: INoResultsEventArgs) {\n    // We do not auto-correct on search-as-you-type queries\n    if (Utils.isNonEmptyArray(data.results.queryCorrections) && !data.searchAsYouType && this.options.enableAutoCorrection) {\n      let originalQuery = this.queryStateModel.get(QueryStateModel.attributesEnum.q);\n      this.correctedTerm = data.results.queryCorrections[0].correctedQuery;\n      let correctedSentence = this.buildCorrectedSentence(data.results.queryCorrections[0]);\n      this.queryStateModel.set(QueryStateModel.attributesEnum.q, data.results.queryCorrections[0].correctedQuery);\n      data.retryTheQuery = true;\n      this.hideNext = false;\n\n      let noResultsFor = $$('div', { className: 'coveo-did-you-mean-no-results-for' }).el;\n      noResultsFor.innerHTML = l('noResultFor', '<span class=\"coveo-highlight coveo-did-you-mean-highlight\">' + StringUtils.htmlEncode(originalQuery) + '</span>');\n      this.element.appendChild(noResultsFor);\n\n      let automaticCorrect = $$('div', { className: 'coveo-did-you-mean-automatic-correct' }).el;\n      automaticCorrect.innerHTML = l('autoCorrectedQueryTo', '<span class=\"coveo-highlight\">' + correctedSentence + '</span>');\n      this.element.appendChild(automaticCorrect);\n\n      $$(this.element).show();\n      this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.didyoumeanAutomatic, {});\n    }\n  }\n\n  private handleProcessNewQueryResults(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.results);\n\n    let results = data.results;\n    this.logger.trace('Received query results from new query', results);\n\n    if (Utils.isNonEmptyArray(results.queryCorrections)) {\n      let correctedSentence = this.buildCorrectedSentence(results.queryCorrections[0]);\n      this.correctedTerm = results.queryCorrections[0].correctedQuery;\n      let didYouMean = $$('div', { className: 'coveo-did-you-mean-suggestion' }, l('didYouMean', '')).el;\n      this.element.appendChild(didYouMean);\n\n      let searchTerm = $$('a', {}, correctedSentence).el;\n      didYouMean.appendChild(searchTerm);\n\n      $$(searchTerm).on('click', () => {\n        this.doQueryWithCorrectedTerm();\n      });\n\n      $$(this.element).show();\n    }\n  }\n\n  private buildCorrectedSentence(correction: IQueryCorrection) {\n    let toReturn = [];\n    let tagStart = '<span class=\\'coveo-did-you-mean-word-correction\\'>';\n    let tagEnd = '</span>';\n    let currentOffset = 0;\n    _.each(correction.wordCorrections, (wordCorrection) => {\n      toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.offset)));\n      currentOffset = wordCorrection.offset;\n      toReturn.push(tagStart);\n      toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.length + currentOffset)));\n      toReturn.push(tagEnd);\n      currentOffset = wordCorrection.offset + wordCorrection.length;\n    });\n    toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset)));\n    return toReturn.join('');\n  }\n}\n\nInitialization.registerAutoCreateComponent(DidYouMean);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/DidYouMean/DidYouMean.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Dom, $$ } from '../../utils/Dom';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { QueryEvents, IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { l } from '../../strings/Strings';\nimport { Assert } from '../../misc/Assert';\nimport { Initialization } from '../Base/Initialization';\nimport { IEndpointError } from '../../rest/EndpointError';\nimport { MissingAuthenticationError } from '../../rest/MissingAuthenticationError';\n\nexport interface IErrorReportOptions {\n  showDetailedError: boolean;\n}\n\n/**\n * The ErrorReport component takes care of handling fatal error when doing a query on the index / Search API.\n *\n * For example, the ErrorReport component displays a message when the service responds with a 401 or 503 error. This\n * component also renders a small text area with the JSON content of the error response, for debugging purposes.\n */\nexport class ErrorReport extends Component {\n  static ID = 'ErrorReport';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IErrorReportOptions = {\n\n    /**\n     * Specifies whether to display a detailed error message as a JSON in a text content area.\n     *\n     * Default value is `true`.\n     */\n    showDetailedError: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n  private message: Dom;\n  private closePopup: () => void;\n\n  /**\n   * Creates a new ErrorReport component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ErrorReport component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IErrorReportOptions, bindings?: IComponentBindings) {\n    super(element, ErrorReport.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ErrorReport, options);\n\n    let title = $$('div', { className: 'coveo-error-report-title' }, '<h3></h3><h4></h4>');\n    this.element.appendChild(title.el);\n\n\n    let optionsElement = $$('div', { className: 'coveo-error-report-options' });\n    optionsElement.el.appendChild(this.buildPrevious());\n    optionsElement.el.appendChild(this.buildReset());\n    optionsElement.el.appendChild(this.buildRetry());\n\n    this.message = $$('div', {\n      className: 'coveo-error-report-message'\n    });\n\n    this.element.appendChild(optionsElement.el);\n    this.element.appendChild(this.message.el);\n\n    $$(this.element).hide();\n\n    this.bind.onRootElement(QueryEvents.newQuery, () => this.handleNewQuery());\n    this.bind.onRootElement(QueryEvents.queryError, (data: IQueryErrorEventArgs) => this.handleQueryError(data));\n  }\n\n  /**\n   * Performs the \"back\" action in the browser.\n   * Also logs an `errorBack` event in the usage analytics.\n   */\n  public back(): void {\n    this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorBack, {}, this.root);\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorBack, {});\n    history.back();\n  }\n\n  /**\n   * Resets the current state of the query and triggers a new query.\n   * Also logs an `errorClearQuery` event in the usage analytics.\n   */\n  public reset(): void {\n    this.queryStateModel.reset();\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorClearQuery, {});\n    this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorClearQuery, {}, this.root);\n    this.queryController.executeQuery();\n  }\n\n  /**\n   * Retries the same query, in case of a temporary service error.\n   * Also logs an `errorRetry` event in the usage analytics.\n   */\n  public retry(): void {\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorRetry, {});\n    this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.errorRetry, {}, this.root);\n    this.queryController.executeQuery();\n  }\n\n  private setErrorTitle(): void {\n    let errorTitle = {\n      h3: l('OopsError'),\n      h4: l('ProblemPersists')\n    };\n    let h3 = $$(this.element).find('h3');\n    let h4 = $$(this.element).find('h4');\n    if (h3 && h4) {\n      $$(h3).text(errorTitle.h3);\n      $$(h4).text(errorTitle.h4);\n    }\n  }\n\n  private buildPrevious(): HTMLElement {\n    let previous = $$('span', { className: 'coveo-error-report-previous' }, l('GoBack'));\n    previous.on('click', () => this.back());\n    return previous.el;\n  }\n\n  private buildReset(): HTMLElement {\n    let reset = $$('span', {\n      className: 'coveo-error-report-clear'\n    }, l('Reset'));\n\n    reset.on('click', () => this.reset());\n\n    return reset.el;\n  }\n\n  private buildRetry(): HTMLElement {\n    let retry = $$('span', {\n      className: 'coveo-error-report-retry'\n    }, l('Retry'));\n\n    retry.on('click', () => this.retry());\n\n    return retry.el;\n  }\n\n  private handleNewQuery(): void {\n    $$(this.element).hide();\n    if (this.closePopup != null) {\n      this.closePopup();\n    }\n  }\n\n  private handleQueryError(data: IQueryErrorEventArgs): void {\n    Assert.exists(data);\n    Assert.exists(data.error);\n\n    // Do not display the panel if the error is for missing authentication. The\n    // appropriate authentication provider should take care of redirecting.\n    if ((<MissingAuthenticationError>data.error).isMissingAuthentication) {\n      return;\n    }\n\n    this.message.empty();\n    this.setErrorTitle();\n\n    if (this.options.showDetailedError) {\n      let moreInfo = $$('span', {\n        className: 'coveo-error-report-more-info'\n      }, l('MoreInfo'));\n\n      moreInfo.on('click', () => {\n        moreInfo.empty();\n        this.message.el.appendChild(this.buildErrorInfo(data.error));\n      });\n\n      this.message.el.appendChild(moreInfo.el);\n    }\n\n    $$(this.element).show();\n  }\n\n  private buildErrorInfo(data: IEndpointError): HTMLElement {\n    let errorInfo = $$('div', {\n      className: 'coveo-error-info'\n    });\n\n    let textArea = $$('textarea', undefined, JSON.stringify(data, null, 2));\n    errorInfo.el.appendChild(textArea.el);\n\n    let infoLabel = $$('div', {\n      className: 'coveo-error-info-label'\n    }, l('CopyPasteToSupport'));\n    errorInfo.el.appendChild(infoLabel.el);\n\n    return errorInfo.el;\n  }\n\n}\n\nInitialization.registerAutoCreateComponent(ErrorReport);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ErrorReport/ErrorReport.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport _ = require('underscore');\n\nexport interface IExportToExcelOptions {\n  numberOfResults?: number;\n  fieldsToInclude?: IFieldOption[];\n}\n\n/**\n * The ExportToExcel component renders an item in the {@link Settings} menu to allow the end user to export the current\n * search results to the Microsoft Excel format (.xlsx).\n */\nexport class ExportToExcel extends Component {\n  static ID = 'ExportToExcel';\n\n  /**\n   * The options for the ExportToExcel\n   * @componentOptions\n   */\n  static options: IExportToExcelOptions = {\n\n    /**\n     * Specifies the number of results to include in the resulting Excel file.\n     *\n     * Generating and downloading the Excel file should take a reasonably short amount of time when using the default\n     * value. However, this amount of time will increase exponentially as you set the value higher.\n     *\n     * Consequently, you should avoid setting this value above the default index limit of 1000 search results.\n     *\n     * Default value is `100`. Minimum value is `1`.\n     */\n    numberOfResults: ComponentOptions.buildNumberOption({ defaultValue: 100, min: 1 }),\n    fieldsToInclude: ComponentOptions.buildFieldsOption()\n  };\n\n  /**\n   * Creates a new ExportToExcel component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ExportToExcel component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param _window The global Window object (used to download the Excel link).\n   */\n  constructor(public element: HTMLElement, public options: IExportToExcelOptions, public bindings?: IComponentBindings, public _window?: Window) {\n    super(element, ExportToExcel.ID, bindings);\n    this._window = this._window || window;\n    this.options = ComponentOptions.initComponentOptions(element, ExportToExcel, options);\n    this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n      args.menuData.push({\n        text: l('ExportToExcel'),\n        className: 'coveo-export-to-excel',\n        tooltip: l('ExportToExcelDescription'),\n        onOpen: () => this.download()\n      });\n    });\n  }\n\n  /**\n   * Downloads the Excel representation of the current query.\n   *\n   * Also logs an `exportToExcel` event in the usage analytics.\n   */\n  public download() {\n    let query = this.queryController.getLastQuery();\n\n    if (query) {\n      query = _.omit(query, 'numberOfResults');\n      if (this.options.fieldsToInclude) {\n        query.fieldsToInclude = <string[]>this.options.fieldsToInclude;\n      }\n      this.logger.debug('Performing query following \\'Export to Excel\\' click');\n\n      let endpoint = this.queryController.getEndpoint();\n      this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.exportToExcel, {}, this.element);\n      this._window.location.replace(endpoint.getExportToExcelLink(query, this.options.numberOfResults));\n    }\n  }\n\n  static create(element: HTMLElement, options?: IExportToExcelOptions, root?: HTMLElement): ExportToExcel {\n    return new ExportToExcel(element, options, root);\n  }\n}\n\nInitialization.registerAutoCreateComponent(ExportToExcel);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ExportToExcel/ExportToExcel.ts\n **/","import { IQueryResult } from '../../rest/QueryResult';\nimport { Component } from '../Base/Component';\nimport { SortCriteria } from '../Sort/SortCriteria';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IBuildingQueryEventArgs, IPreprocessResultsEventArgs } from '../../events/QueryEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { IQuery } from '../../rest/Query';\nimport { $$ } from '../../utils/Dom';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport _ = require('underscore');\n\nexport interface IFoldingOptions {\n  field?: IFieldOption;\n\n  childField?: IFieldOption;\n  parentField?: IFieldOption;\n\n  range?: number;\n  rearrange?: SortCriteria;\n\n  enableExpand?: boolean;\n  expandExpression?: string;\n  maximumExpandedResults?: number;\n\n  /**\n   * Manage folding for each results individually\n   */\n  getResult?: (result: IQueryResult) => IQueryResult;\n  /**\n   * Manage folding of all more results\n   */\n  getMoreResults?: (results: IQueryResult[]) => IQueryResult[];\n}\n\ninterface IResultNode {\n  score: number;\n  parent?: IResultNode;\n  result: IQueryResult;\n  children: IResultNode[];\n}\n\n/**\n * The Folding component makes it possible to render a hierarchic display of search results sharing a common field.\n *\n * This component has no visual representation of its own. Its simply folds certain search results so that the\n * {@link ResultFolding} and {@link ResultAttachments} components can nicely display them inside result templates (see\n * [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n *\n * A typical use case of the Folding component is to fold email conversations and message board threads to make it\n * possible to display them in a convenient format. Messages belonging to a single conversation typically have a unique\n * conversation ID. By indexing this ID on a field, you can use it to fold search results.\n */\nexport class Folding extends Component {\n  static ID = 'Folding';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IFoldingOptions = {\n\n    /**\n     * Specifies the name of the field on which to do the folding.\n     *\n     * Specifying a value for this options is required for this component to work.\n     */\n    field: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies the field that determines whether a given result is a child of another top result.\n     *\n     * Default value is `@topparentid`.\n     */\n    childField: ComponentOptions.buildFieldOption({ defaultValue: '@topparentid' }),\n\n    /**\n     * Specifies the field that determines whether a given result is a top result containing other child results.\n     *\n     * Default value is `@containsattachment`.\n     */\n    parentField: ComponentOptions.buildFieldOption({ defaultValue: '@containsattachment' }),\n\n    /**\n     * Specifies the number of child results to fold.\n     *\n     * **Example:**\n     * > For an email thread with a total of 20 messages, using the default value of `2` means that the component loads\n     * > up to a maximum of 2 child messages under the original message, unless the end user expands the entire\n     * > conversation using the **Show More** link (see {@link Folding.options.enableExpand}).\n     *\n     * Default value is `2`. Minimum value is `0`.\n     */\n    range: ComponentOptions.buildNumberOption({ defaultValue: 2, min: 0 }),\n\n    /**\n     * Specifies the top result and its related child results, following the sort criteria format (`date ascending`,\n     * `@somefield ascending`, etc.)\n     *\n     * **Example**\n     * > If you specify `date descending`, the Folding component re-arranges an email conversation so that the newest\n     * > email is always the top result. Doing the opposite (`date ascending`) would always make the original email the\n     * > top result, since it is also the oldest.\n     *\n     * Default value is `none`, which means that the component displays the results in the order that they were returned\n     * by the index.\n     */\n    rearrange: ComponentOptions.buildCustomOption((value) => Utils.isNonEmptyString(value) ? SortCriteria.parse(value) : null),\n\n    /**\n     * Specifies whether to add a callback function on the top result, allowing to make an additional query to load all\n     * conversations of a given thread.\n     *\n     * Concretely, the {@link ResultFolding} component uses this for its **Show More** link.\n     *\n     * See also {@link Folding.options.expandExpression} and {@link Folding.options.maximumExpandedResults}.\n     *\n     * Default value is `true`.\n     */\n    enableExpand: ComponentOptions.buildBooleanOption({ defaultValue: true })\n    ,\n    /**\n     * If {@link Folding.options.enableExpand} is `true`, specifies a custom constant expression to send when querying\n     * the expanded results.\n     *\n     * Default value is `undefined`.\n     */\n    expandExpression: ComponentOptions.buildStringOption({ depend: 'enableExpand' }),\n\n    /**\n     * If {@link Folding.options.enableExpand} is `true`, specifies the maximum number of results to load when\n     * expanding.\n     *\n     * Default value is `100`. Minimum value is `1`.\n     */\n    maximumExpandedResults: ComponentOptions.buildNumberOption({ defaultValue: 100, min: 1, depend: 'enableExpand' }),\n\n    /**\n     * Specifies the function that manages the individual folding of each result.\n     *\n     * Default value (which is implemented in Coveo.Folding.defaultGetResult) is:\n     *\n     * ```javascript\n     * var results = result.childResults || [];\n     * // Add the top result at the top of the list.\n     * results.unshift(result);\n     * // Empty childResults just to clean it.\n     * result.childResults = [];\n     * // Fold those results.\n     * results = Coveo.Folding.foldWithParent(results);\n     * // The first result is the top one.\n     * var topResult = results.shift();\n     * // All other results are childResults.\n     * topResult.childResults = results;\n     * return topResult;\n     * ```\n     *\n     * You can pre-process all the result with this option in the {@link init} call of your search interface:\n     *\n     * ```javascript\n     * // You can call the init script using \"pure\" JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    Folding: {\n     *      getResult: function(result) {\n     *        result = Coveo.Folding.defaultGetResult(result);\n     *        // Your code here\n     *      }\n     *    }\n     * })\n     *\n     * // Or you can call the init script using the jQuery extension:\n     * Coveo.$('#search').coveo('init', {\n     *    Folding: {\n     *      getResult: function(result) {\n     *        result = Coveo.Folding.defaultGetResult(result);\n     *        // Your code here\n     *      }\n     *    }\n     * });\n     * ```\n     */\n    getResult: ComponentOptions.buildCustomOption<(result: IQueryResult) => IQueryResult>(() => {\n      return null;\n    }),\n\n    /**\n     * Specifies the function that manages the folding of all results.\n     *\n     * Default value (`Coveo.Folding.defaultGetMoreResults`) is:\n     *\n     * ```javascript\n     * Coveo.Folding.defaultGetMoreResults = function(results) {\n     *    // The results are flat, just do the folding.\n     *    return Coveo.Folding.foldWithParent(results);\n     * }\n     * ```\n     */\n    getMoreResults: ComponentOptions.buildCustomOption<(results: IQueryResult[]) => IQueryResult[]>(() => {\n      return null;\n    })\n  };\n\n  /**\n   * Creates a new Folding component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Folding component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IFoldingOptions, bindings?: IComponentBindings) {\n    super(element, Folding.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Folding, options);\n\n    Assert.check(Utils.isCoveoField(<string>this.options.field), this.options.field + ' is not a valid field');\n    Assert.exists(this.options.maximumExpandedResults);\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, this.handleBuildingQuery);\n    this.bind.onRootElement(QueryEvents.preprocessResults, this.handlepreprocessResults);\n  }\n\n  // From a list of results, return a list of results and their attachments\n  // We use parentResult to build a tree of result\n  static foldWithParent(queryResults: IQueryResult[]): IQueryResult[] {\n    let rootNode: IResultNode = {\n      score: Number.NEGATIVE_INFINITY,\n      children: [],\n      result: <IQueryResult>{\n        raw: false\n      }\n    };\n\n    _.each(queryResults, (queryResult: IQueryResult, i: number) => {\n      let resultNode = Folding.findUniqueId(rootNode.children, queryResult.uniqueId);\n      // If he have no parent or is parent is him self, add it to the root\n      if (queryResult.parentResult == null || queryResult.parentResult.uniqueId == queryResult.uniqueId) {\n        // Add it only if he do not exist\n        if (resultNode == null) {\n          resultNode = {\n            result: queryResult,\n            score: i,\n            children: []\n          };\n          rootNode.children.push(resultNode);\n          resultNode.parent = rootNode;\n        }\n      } else {\n        // If the resultNode already exist\n        if (resultNode != null) {\n          resultNode.score = Math.min(i, resultNode.score);\n          // Remove himself from his parent because it will be added in his parent. This allowed to remove duplicate.\n          resultNode.parent.children = _.without(resultNode.parent.children, resultNode);\n        } else {\n          resultNode = {\n            result: queryResult,\n            score: i,\n            children: []\n          };\n        }\n\n        let parentResult = Folding.findUniqueId(rootNode.children, queryResult.parentResult.uniqueId);\n        // If the parent does not already exist, create it and add it the root\n        if (parentResult == null) {\n          parentResult = {\n            result: queryResult.parentResult,\n            score: Number.POSITIVE_INFINITY,\n            children: []\n          };\n          rootNode.children.push(parentResult);\n          parentResult.parent = rootNode;\n        }\n        // Add the resultNode to parent\n        parentResult.children.push(resultNode);\n        resultNode.parent = parentResult;\n        let parent = parentResult;\n        while (parent != null && resultNode.score < parent.score) {\n          parent.score = resultNode.score;\n          parent = parent.parent;\n        }\n      }\n    });\n    let rootResult = Folding.resultNodeToQueryResult(rootNode);\n    // Remove the root from all results\n    _.each(rootResult.attachments, (attachment) => attachment.parentResult = null);\n    return rootResult.attachments;\n  }\n\n  // 99.9% of the folding case will be alright with those default functions.\n  // Otherwise use the options getResult and getMoreResults\n  public static defaultGetResult(result: IQueryResult) {\n    let results: IQueryResult[] = result.childResults || [];\n    // Add the top result at the top of the list\n    results.unshift(result);\n    // Empty childResults just to make it more clean\n    result.childResults = [];\n    // Fold those results\n    results = Folding.foldWithParent(results);\n    // The first result is the top one\n    let topResult = results.shift();\n    // All other the results are childResults\n    topResult.childResults = results;\n    return topResult;\n  }\n\n  public static defaultGetMoreResults(results: IQueryResult[]) {\n    // The result are flat, just do the fold\n    return Folding.foldWithParent(results);\n  }\n\n  // Convert ResultNode to QueryResult\n  private static resultNodeToQueryResult(resultNode: IResultNode): IQueryResult {\n    let result = resultNode.result;\n    result.attachments = _.map(_.sortBy<IResultNode>(resultNode.children, 'score'), Folding.resultNodeToQueryResult);\n    result.parentResult = resultNode.parent != null ? resultNode.parent.result : null;\n    return result;\n  }\n\n  private static findUniqueId(resultNodes: IResultNode[], uniqueId: string): IResultNode {\n    for (let i = 0; i < resultNodes.length; i++) {\n      if (resultNodes[i].result.uniqueId == uniqueId) {\n        return resultNodes[i];\n      }\n      let resultNode = Folding.findUniqueId(resultNodes[i].children, uniqueId);\n      if (resultNode != null) {\n        return resultNode;\n      }\n    }\n    return null;\n  }\n\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n\n    if (!this.disabled) {\n      data.queryBuilder.childField = <string>this.options.childField;\n      data.queryBuilder.parentField = <string>this.options.parentField;\n      data.queryBuilder.filterField = <string>this.options.field;\n      data.queryBuilder.filterFieldRange = this.options.range;\n\n      data.queryBuilder.requiredFields.push(<string>this.options.field);\n      if (this.options.childField != null) {\n        data.queryBuilder.requiredFields.push(<string>this.options.childField);\n      }\n      if (this.options.parentField != null) {\n        data.queryBuilder.requiredFields.push(<string>this.options.parentField);\n      }\n    }\n  }\n\n  private handlepreprocessResults(data: IPreprocessResultsEventArgs) {\n    Assert.exists(data);\n    Assert.check(!data.results._folded, 'Two folding component are active at the same time for the same tab. Can\\'t process result !');\n    data.results._folded = true;\n\n    let queryResults = data.results;\n\n    let getResult: (result: IQueryResult) => IQueryResult = this.options.getResult || Folding.defaultGetResult;\n    queryResults.results = _.map(queryResults.results, getResult);\n    this.addLoadMoreHandler(<IQueryResult[]>queryResults.results, data.query);\n  }\n\n  private addLoadMoreHandler(results: IQueryResult[], originalQuery: IQuery) {\n    return _.map(results, (result) => {\n      if (this.options.enableExpand && !Utils.isNullOrUndefined(Utils.getFieldValue(result, <string>this.options.field))) {\n        result.moreResults = () => {\n          return this.moreResults(result, originalQuery);\n        };\n      }\n      return result;\n    });\n  }\n\n\n  private moreResults(result: IQueryResult, originalQuery: IQuery): Promise<IQueryResult[]> {\n    let query = _.clone(originalQuery);\n    let builder = new QueryBuilder();\n\n    query.numberOfResults = this.options.maximumExpandedResults;\n    let fieldValue = Utils.getFieldValue(result, <string>this.options.field);\n\n    if (Utils.isNonEmptyString(fieldValue)) {\n      builder.advancedExpression.addFieldExpression(<string>this.options.field, '=', [fieldValue]);\n      query.aq = builder.build().aq;\n    }\n\n    if (Utils.isNonEmptyString(originalQuery.q)) {\n      // We add keywords to get the highlight and we add @uri to get all results\n      // To ensure it plays nicely with query syntax, we ensure that the needed part of the query\n      // are correctly surrounded with the no syntax block\n      if (!originalQuery.disableQuerySyntax) {\n        query.q = `( ${originalQuery.q} ) OR @uri`;\n      } else {\n        query.disableQuerySyntax = false;\n        query.q = `( <@- ${originalQuery.q} -@> ) OR @uri`;\n      }\n    }\n\n    if (Utils.isNonEmptyString(this.options.expandExpression)) {\n      query.cq = this.options.expandExpression;\n    }\n\n    if (this.options.parentField != null) {\n      query.parentField = <string>this.options.parentField;\n    }\n\n    if (this.options.childField != null) {\n      query.childField = <string>this.options.childField;\n    }\n\n    query.filterField = null;\n    query.filterFieldRange = null;\n    query.firstResult = 0;\n\n    if (this.options.rearrange) {\n      this.options.rearrange.putInQueryBuilder(builder);\n      query.sortCriteria = builder.sortCriteria;\n      query.sortField = builder.sortField;\n    } else {\n      query.sortCriteria = originalQuery.sortCriteria;\n      query.sortField = originalQuery.sortField;\n    }\n\n    return this.queryController.getEndpoint().search(query)\n      .then((results: IQueryResults) => {\n        this.handlePreprocessMoreResults(results);\n        return results.results;\n      });\n  }\n\n  private handlePreprocessMoreResults(queryResults: IQueryResults) {\n    let getResults: (results: IQueryResult[]) => IQueryResult[] = this.options.getMoreResults || Folding.defaultGetMoreResults;\n    queryResults.results = getResults(queryResults.results);\n    $$(this.element).trigger(QueryEvents.preprocessMoreResults, {\n      results: queryResults\n    });\n  }\n}\n\nInitialization.registerAutoCreateComponent(Folding);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Folding/Folding.ts\n **/","import { Assert } from '../../misc/Assert';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { Utils } from '../../utils/Utils';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport _ = require('underscore');\n\nexport class SortCriteria {\n  private static validSorts = ['relevancy', 'date', 'qre'];\n  private static sortsNeedingDirection = ['date'];\n  private static validDirections = ['ascending', 'descending'];\n\n  /**\n   * Create a new SortCriteria\n   * @param sort The sort criteria (e.g.: relevancy, date)\n   * @param direction The direction by which to sort (e.g.: ascending, descending)\n   */\n  constructor(public sort: string, public direction: string = '') {\n    Assert.isNonEmptyString(sort);\n    Assert.check(_.contains(SortCriteria.validSorts, sort) || SortCriteria.sortIsField(sort));\n    if (SortCriteria.sortNeedsDirection(sort)) {\n      Assert.check(_.contains(SortCriteria.validDirections, direction));\n    } else {\n      Assert.check(direction == '');\n    }\n  }\n\n  /**\n   * Return a new SortCriteria from a string\n   * @param criteria The string from which to create the SortCriteria\n   */\n  static parse(criteria: string): SortCriteria {\n    Assert.isNonEmptyString(criteria);\n    var split = criteria.match(/\\S+/g);\n    return new SortCriteria(split[0], split[1]);\n  }\n\n  /**\n   * Put the sort criteria in the passed queryBuilder\n   * @param queryBuilder The queryBuilder in which to put the sort criteria.\n   */\n  public putInQueryBuilder(queryBuilder: QueryBuilder) {\n    Assert.exists(queryBuilder);\n    if (SortCriteria.sortIsField(this.sort)) {\n      queryBuilder.sortCriteria = 'field' + this.direction;\n      queryBuilder.sortField = this.sort;\n    } else if (this.direction != '') {\n      queryBuilder.sortCriteria = this.sort + this.direction;\n    } else {\n      queryBuilder.sortCriteria = this.sort;\n    }\n  }\n\n  /**\n   * Gets the value of the sort criteria from a single {@link IQueryResult}.<br/>\n   * For example, if the sort criteria is 'relevancy', it will return the value of the 'relevancy' field from result.\n   * @param result The {@link IQueryResult} from which to get the value.\n   */\n  public getValueFromResult(result: IQueryResult): any {\n    Assert.exists(result);\n\n    if (SortCriteria.sortIsField(this.sort)) {\n      return Utils.getFieldValue(result, this.sort);\n    } else if (this.sort == 'date') {\n      return result.raw['date'];\n    } else {\n      Assert.fail('Cannot retrieve value: ' + this.sort);\n    }\n  }\n\n  /**\n   * Returns a string representation of the sort criteria (e.g.: 'date ascending').\n   */\n  public toString(): string {\n    if (Utils.isNonEmptyString(this.direction)) {\n      return this.sort + ' ' + this.direction;\n    } else {\n      return this.sort;\n    }\n  }\n\n  /**\n   * Checks if the SortCriteria is equal to another.\n   * @param criteria The SortCriteria to compare with\n   */\n  public equals(criteria: SortCriteria): boolean {\n    Assert.exists(criteria);\n    return criteria.sort == this.sort && criteria.direction == this.direction;\n  }\n\n  private static sortIsField(criteria: string) {\n    return criteria.charAt(0) == '@';\n  }\n\n  private static sortNeedsDirection(sort: string) {\n    return _.contains(SortCriteria.sortsNeedingDirection, sort) || SortCriteria.sortIsField(sort);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Sort/SortCriteria.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { l } from '../../strings/Strings';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { BreadcrumbEvents, IPopulateBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { analyticsActionCauseList, IAnalyticsContextRemoveMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { QUERY_STATE_ATTRIBUTES, QueryStateModel } from '../../models/QueryStateModel';\nimport { $$ } from '../../utils/Dom';\nimport { Utils } from '../../utils/Utils';\nimport { Initialization } from '../Base/Initialization';\nimport { Assert } from '../../misc/Assert';\nimport _ = require('underscore');\n\nexport interface IHiddenQueryOptions {\n  maximumDescriptionLength: number;\n  title: string;\n}\n\n/**\n * The HiddenQuery component handles a \"hidden\" query parameter (`hq`) and its description (`hd`).\n *\n * Concretely, this means that if a HiddenQuery component is present in your page and you load your search interface\n * with `hq=foo&hd=bar` in the URL hash, the component adds `foo` as an expression to the query (`hq` is the hidden\n * query) and renders `bar` in the {@link Breadcrumb} (`hd` is the hidden query description).\n */\nexport class HiddenQuery extends Component {\n  static ID = 'HiddenQuery';\n\n  /**\n   * Possible options for the `HiddenQuery` component\n   * @componentOptions\n   */\n  static options: IHiddenQueryOptions = {\n\n    /**\n     * Specifies the maximum number of characters from the hidden query description (`hd`) to display in the\n     * {@link Breadcrumb}.\n     *\n     * Beyond this length, the HiddenQuery component slices the rest of the description and replaces it by `...`.\n     *\n     * Default value is `100`. Minimum value is `0`.\n     */\n    maximumDescriptionLength: ComponentOptions.buildNumberOption({ min: 0, defaultValue: 100 }),\n\n    /**\n     * Specifies the title that should appear in the {@link Breadcrumb} when the HiddenQuery populates it.\n     *\n     * Default value is the localized string for `\"Additional filters:\"`\n     */\n    title: ComponentOptions.buildLocalizedStringOption({ defaultValue: l('AdditionalFilters') + ': ' })\n  };\n\n  /**\n   * Creates a new HiddenQuery component, which binds multiple events ({@link QueryEvents.buildingQuery},\n   * {@link BreadcrumbEvents.populateBreadcrumb} and {@link BreadcrumbEvents.clearBreadcrumb}).\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the HiddenQuery component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IHiddenQueryOptions, bindings?: IComponentBindings) {\n\n    super(element, HiddenQuery.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, HiddenQuery, options);\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(BreadcrumbEvents.populateBreadcrumb, (args: IPopulateBreadcrumbEventArgs) => this.handlePopulateBreadcrumb(args));\n    this.bind.onRootElement(BreadcrumbEvents.clearBreadcrumb, () => this.setStateEmpty());\n  }\n\n  /**\n   * Clears any `hd` or `hq` set in the {@link QueryStateModel}.\n   * Also logs the `contextRemove` event in the usage analytics and triggers a new query.\n   */\n  public clear() {\n    this.setStateEmpty();\n    let hiddenDescriptionRemoved = this.getDescription();\n    this.usageAnalytics.logSearchEvent<IAnalyticsContextRemoveMeta>(analyticsActionCauseList.contextRemove, { contextName: hiddenDescriptionRemoved });\n    this.queryController.executeQuery();\n  }\n\n  private setStateEmpty() {\n    this.queryStateModel.set(QUERY_STATE_ATTRIBUTES.HD, '');\n    this.queryStateModel.set(QUERY_STATE_ATTRIBUTES.HQ, '');\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n    let hiddenQuery = this.queryStateModel.get(QUERY_STATE_ATTRIBUTES.HQ);\n    if (Utils.isNonEmptyString(hiddenQuery)) {\n      data.queryBuilder.advancedExpression.add(hiddenQuery);\n    }\n  }\n\n  private handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs) {\n    let description = this.getDescription();\n    if (!_.isEmpty(description) && !_.isEmpty(this.queryStateModel.get(QUERY_STATE_ATTRIBUTES.HQ))) {\n      let elem = document.createElement('div');\n      $$(elem).addClass('coveo-hidden-query-breadcrumb');\n\n      let title = document.createElement('span');\n      $$(title).addClass('coveo-hidden-query-breadcrumb-title');\n      $$(title).text(this.options.title);\n      elem.appendChild(title);\n\n      let values = document.createElement('span');\n      $$(values).addClass('coveo-hidden-query-breadcrumb-values');\n      elem.appendChild(values);\n\n      let value = document.createElement('span');\n      $$(value).addClass('coveo-hidden-query-breadcrumb-value');\n      $$(value).text(description);\n      values.appendChild(value);\n\n      let clear = document.createElement('span');\n      $$(clear).addClass('coveo-hidden-query-breadcrumb-clear');\n      elem.appendChild(clear);\n\n      $$(elem).on('click', () => this.clear());\n\n      args.breadcrumbs.push({\n        element: elem\n      });\n    }\n  }\n\n  private getDescription() {\n    let description = this.queryStateModel.get(QueryStateModel.attributesEnum.hd);\n    if (_.isEmpty(description)) {\n      description = this.queryStateModel.get(QueryStateModel.attributesEnum.hq);\n    }\n    if (!_.isEmpty(description)) {\n      if (description.length > this.options.maximumDescriptionLength) {\n        description = description.slice(0, this.options.maximumDescriptionLength) + ' ...';\n      }\n    }\n    return description;\n  }\n}\nInitialization.registerAutoCreateComponent(HiddenQuery);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HiddenQuery/HiddenQuery.ts\n **/","/// <reference path=\"../../controllers/HierarchicalFacetQueryController.ts\" />\n/// <reference path=\"HierarchicalFacetValuesList.ts\" />\n/// <reference path=\"HierarchicalFacetSearch.ts\" />\n/// <reference path=\"HierarchicalBreadcrumbValuesList.ts\" />\n/// <reference path=\"HierarchicalFacetValueElement.ts\" />\n\nimport { IFacetOptions } from '../Facet/Facet';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { Facet } from '../Facet/Facet';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { HierarchicalFacetValuesList } from './HierarchicalFacetValuesList';\nimport { HierarchicalFacetQueryController } from '../../controllers/HierarchicalFacetQueryController';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport { Defer } from '../../misc/Defer';\nimport { HierarchicalFacetSearchValuesList } from './HierarchicalFacetSearchValuesList';\nimport { HierarchicalFacetSearch } from './HierarchicalFacetSearch';\nimport { HierarchicalBreadcrumbValuesList } from './HierarchicalBreadcrumbValuesList';\nimport { IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { IPopulateBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { IPopulateOmniboxEventArgs } from '../../events/OmniboxEvents';\nimport { OmniboxHierarchicalValuesList } from './OmniboxHierarchicalValuesList';\nimport { HierarchicalFacetValueElement } from './HierarchicalFacetValueElement';\nimport { Initialization } from '../Base/Initialization';\nimport { ISearchAlertsPopulateMessageEventArgs } from '../../events/SearchAlertEvents';\nimport _ = require('underscore');\n\nexport interface IHierarchicalFacetOptions extends IFacetOptions {\n  delimitingCharacter?: string;\n  levelStart?: number;\n  levelEnd?: number;\n  marginByLevel?: number;\n}\n\nexport interface IValueHierarchy {\n  childs?: IValueHierarchy[];\n  parent?: IValueHierarchy;\n  originalPosition?: number;\n  facetValue: FacetValue;\n  level: number;\n  keepOpened: boolean;\n  hasChildSelected: boolean;\n  allChildShouldBeSelected: boolean;\n}\n\ninterface IFlatHierarchy {\n  facetValue: FacetValue;\n  level: number;\n  parent: string;\n  self: string;\n}\n\n/**\n * The HierarchicalFacet component inherits all of its options and behavior from the normal {@link Facet} component, but\n * is meant to be used for hierarchical values.\n *\n * The HierarchicalFacet component could be used to display files in a file system, or categories for documents in a\n * hierarchy.\n *\n * This facet requires a group by field with a special format in order to work correctly.\n *\n * **Example:**\n *\n * If you have the following files indexed on a file system:\n * ```\n * c:\\\n *    folder1\\\n *        text1.txt\n *    folder2\\\n *      folder3\\\n *        text2.txt\n * ```\n * The document `text1.txt` would need to have a field with the following format:\n * `@field : c; c|folder1;`\n *\n * The document `text2.txt` would have a field with the following format:\n * `@field: c; c|folder2; c|folder2|folder3;`\n *\n * The | character allows the facet to build its hierarchy (`folder3` inside `folder2` inside `c`).\n *\n * Since both documents contain the `c` value, selecting that value in the facet would return both documents.\n *\n * Selecting the `folder3` value in the facet would only return the `text2.txt` document.\n */\nexport class HierarchicalFacet extends Facet implements IComponentBindings {\n  static ID = 'HierarchicalFacet';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IHierarchicalFacetOptions = {\n\n    /**\n     * The character that allows to specify the hierarchical dependency.\n     *\n     * **Example:**\n     *\n     * If your field has the following values:\n     *\n     * `@field: c; c>folder2; c>folder2>folder3;`\n     *\n     * Then your delimiting character is `>`.\n     *\n     * Default value is `|`.\n     */\n    delimitingCharacter: ComponentOptions.buildStringOption({ defaultValue: '|' }),\n\n    /**\n     * Specifies at which level (0-based index) of the hierarchy the HierarchicalFacet should start displaying its\n     * values.\n     *\n     * **Example:**\n     *\n     * If you have the following files indexed on a file system:\n     * ```\n     * c:\\\n     *    folder1\\\n     *        text1.txt\n     *    folder2\\\n     *      folder3\\\n     *        text2.txt\n     * ```\n     * Then, setting levelStart to `1` displays `folder1` and `folder2` in the HierarchicalFacet, but omits `c:`.\n     *\n     * Default (and minimum) value is `0`.\n     */\n    levelStart: ComponentOptions.buildNumberOption({ defaultValue: 0, min: 0 }),\n\n    /**\n     * Specifies at which level (0-based index) of the hierarchy the HierarchicalFacet should stop displaying its\n     * values.\n     *\n     * Default value is `undefined`, which means the HierarchicalFacet component renders all hierarchical levels.\n     * Minimum value is `0`.\n     */\n    levelEnd: ComponentOptions.buildNumberOption({ min: 0 }),\n\n    /**\n     * Specifies the margin (in pixels) to display between each hierarchical level when expanding.\n     *\n     * Default value is `10`.\n     */\n    marginByLevel: ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 })\n  };\n\n  static parent = Facet;\n\n  public options: IHierarchicalFacetOptions;\n  public facetValuesList: HierarchicalFacetValuesList;\n  public numberOfValuesToShow: number;\n  public facetQueryController: HierarchicalFacetQueryController;\n  public topLevelHierarchy: IValueHierarchy[];\n  public shouldReshuffleFacetValuesClientSide = false;\n\n  private valueHierarchy: { [facetValue: string]: IValueHierarchy };\n  private firstPlacement = true;\n  private originalNumberOfValuesToShow: number;\n\n  private correctLevels: IFlatHierarchy[] = [];\n\n  /**\n   * Creates a new HierarchicalFacet.\n   * @param element\n   * @param options\n   * @param bindings\n   */\n  public constructor(public element: HTMLElement, options: IHierarchicalFacetOptions, public bindings: IComponentBindings) {\n    super(element, options, bindings, HierarchicalFacet.ID);\n    this.options = ComponentOptions.initComponentOptions(element, HierarchicalFacet, this.options);\n    this.numberOfValuesToShow = this.originalNumberOfValuesToShow = (this.options.numberOfValues || 5);\n    this.numberOfValues = Math.max(this.options.numberOfValues, 10000);\n    this.options.injectionDepth = Math.max(this.options.injectionDepth, 10000);\n    this.logger.info('Hierarchy facet : Set number of values very high in order to build hierarchy', this.numberOfValues, this);\n    this.logger.info('Hierarchy facet : Set injection depth very high in order to build hierarchy', this.options.injectionDepth);\n  }\n\n  /**\n   * Selects a single value.\n   * @param value The value to select.\n   * @param selectChildren Specifies whether to also select all child values (if any). Default value is the opposite of\n   * the {@link Facet.options.useAnd} value set for this HierarchicalFacet.\n   */\n  public selectValue(value: FacetValue, selectChildren?: boolean): void;\n  public selectValue(value: string, selectChildren?: boolean): void;\n  public selectValue(value: any, selectChildren = !this.options.useAnd) {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    let valueHierarchy = this.getValueFromHierarchy(value);\n    if (selectChildren) {\n      this.selectChilds(valueHierarchy, valueHierarchy.childs);\n    }\n    this.flagParentForSelection(valueHierarchy);\n    super.selectValue(value);\n  }\n\n  /**\n   * Selects multiple values\n   * @param values The array of values to select.\n   * @param selectChildren Specifies whether to also select all child values (if any). Default value is the opposite of\n   * the {@link Facet.options.useAnd} value set for this HierarchicalFacet.\n   */\n  public selectMultipleValues(values: FacetValue[], selectChildren?: boolean): void;\n  public selectMultipleValues(values: string[], selectChildren?: boolean): void;\n  public selectMultipleValues(values: any[], selectChildren = !this.options.useAnd): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists(values);\n    _.each(values, (value) => {\n      let valueHierarchy = this.getValueFromHierarchy(value);\n      this.flagParentForSelection(valueHierarchy);\n      if (selectChildren) {\n        _.each(valueHierarchy.childs, (child) => {\n          this.selectValue(child.facetValue);\n        });\n      }\n    });\n    super.selectMultipleValues(values);\n  }\n\n  /**\n   * Deselects a single value\n   * @param value The value to deselect.\n   * @param deselectChildren Specifies whether to also deselect all child values (if any). Default value is `true`.\n   */\n  public deselectValue(value: FacetValue, deselectChildren?: boolean): void;\n  public deselectValue(value: string, deselectChildren?: boolean): void;\n  public deselectValue(value: any, deselectChildren = true) {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    let valueHierarchy = this.getValueFromHierarchy(value);\n    if (deselectChildren) {\n      let hasChilds = valueHierarchy.childs != undefined;\n      if (hasChilds) {\n        let activeChilds = _.filter<IValueHierarchy>(valueHierarchy.childs, (child) => {\n          let valueToCompare = this.getFacetValueFromHierarchy(child.facetValue);\n          return valueToCompare.selected || valueToCompare.excluded;\n        });\n        valueHierarchy.hasChildSelected = false;\n        if (activeChilds.length == valueHierarchy.childs.length) {\n          this.deselectChilds(valueHierarchy, valueHierarchy.childs);\n        }\n      }\n    }\n    this.deselectParent(valueHierarchy.parent);\n    this.unflagParentForSelection(valueHierarchy);\n    super.deselectValue(value);\n  }\n\n  /**\n   * Excludes a single value.\n   * @param value The value to exclude.\n   * @param excludeChildren Specifies whether to also exclude all child values (if any). Default value is the opposite\n   * of the {@link Facet.options.useAnd} value set for this HierarchicalFacet.\n   */\n  public excludeValue(value: FacetValue, excludeChildren?: boolean): void;\n  public excludeValue(value: string, excludeChildren?: boolean): void;\n  public excludeValue(value: any, excludeChildren = !this.options.useAnd): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    let valueHierarchy = this.getValueFromHierarchy(value);\n    if (excludeChildren) {\n      this.excludeChilds(valueHierarchy.childs);\n    } else {\n      this.deselectChilds(valueHierarchy, valueHierarchy.childs);\n      this.close(valueHierarchy);\n    }\n    this.flagParentForSelection(valueHierarchy);\n    super.excludeValue(value);\n  }\n\n  /**\n   * Un-excludes a single value.\n   * @param value The value to un-exclude.\n   * @param unexludeChildren Specifies whether to also un-exclude all child values (if any). Default value is the\n   * opposite of the {@link Facet.options.useAnd} value set for this HierarchicalFacet.\n   */\n  public unexcludeValue(value: FacetValue, unexludeChildren?: boolean): void;\n  public unexcludeValue(value: string, unexludeChildren?: boolean): void;\n  public unexcludeValue(value: any, unexludeChildren = !this.options.useAnd): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    let valueHierarchy = this.getValueFromHierarchy(value);\n    if (unexludeChildren) {\n      this.unexcludeChilds(valueHierarchy.childs);\n    }\n    this.unflagParentForSelection(valueHierarchy);\n    super.unexcludeValue(value);\n  }\n\n  /**\n   * Deselects multiple values.\n   * @param values The array of values to deselect.\n   * @param deselectChildren Specifies whether to also deselect all child values (if any). Default value is the opposite\n   * of the {@link Facet.options.useAnd} value set for this HierarchicalFacet.\n   */\n  public deselectMultipleValues(values: FacetValue[], deselectChildren?: boolean): void;\n  public deselectMultipleValues(values: string[], deselectChildren?: boolean): void;\n  public deselectMultipleValues(values: any[], deselectChildren = !this.options.useAnd): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists(values);\n    _.each(values, (value) => {\n      let valueHierarchy = this.getValueFromHierarchy(value);\n      valueHierarchy.hasChildSelected = false;\n      this.unflagParentForSelection(valueHierarchy);\n      if (deselectChildren) {\n        _.each(valueHierarchy.childs, (child) => {\n          let childInHierarchy = this.getValueFromHierarchy(child.facetValue);\n          childInHierarchy.hasChildSelected = false;\n          this.deselectValue(child.facetValue);\n        });\n      }\n    });\n    super.deselectMultipleValues(values);\n  }\n\n  /**\n   * Toggles the selection of a single value (selects value if not selected; deselects value if selected).\n   * @param value The value to select or deselect.\n   */\n  public toggleSelectValue(value: FacetValue): void;\n  public toggleSelectValue(value: string): void;\n  public toggleSelectValue(value: any): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    if (this.getFacetValueFromHierarchy(value).selected == false) {\n      this.selectValue(value);\n    } else {\n      this.deselectValue(value);\n    }\n  }\n\n  /**\n   * Toggles the exclusion of a single value (excludes value if not excluded; un-excludes value if excluded).\n   * @param value The value to exclude or un-exclude.\n   */\n  public toggleExcludeValue(value: FacetValue): void;\n  public toggleExcludeValue(value: string): void;\n  public toggleExcludeValue(value: any): void {\n    this.ensureDom();\n    this.ensureValueHierarchyExists([value]);\n    if (this.getFacetValueFromHierarchy(value).excluded == false) {\n      this.excludeValue(value);\n    } else {\n      this.unexcludeValue(value);\n    }\n  }\n\n  /**\n   * Gets the caption of a single value.\n   * @param facetValue The value whose caption the method should return.\n   * @returns {string} The caption of the value.\n   */\n  public getValueCaption(facetValue: IIndexFieldValue): string;\n  public getValueCaption(facetValue: FacetValue): string;\n  public getValueCaption(facetValue: any): string {\n    let stringValue = this.getSelf(facetValue);\n    let ret = stringValue;\n    if (Utils.exists(this.options.valueCaption)) {\n      if (typeof this.options.valueCaption == 'object') {\n        ret = this.options.valueCaption[stringValue] || ret;\n      }\n      if (typeof this.options.valueCaption == 'function') {\n        ret = this.options.valueCaption.call(this, facetValue);\n      }\n    }\n    return ret;\n  }\n\n  /**\n   * Gets the values that the HierarchicalFacet is currently displaying.\n   * @returns {any[]} An array containing all the values that the HierarchicalFacet is currently displaying.\n   */\n  public getDisplayedValues(): string[] {\n    let displayed = _.filter(this.values.getAll(), (v) => {\n      let valFromHierarchy = this.getValueFromHierarchy(v);\n      if (valFromHierarchy) {\n        let elem = this.getElementFromFacetValueList(v);\n        return !$$(elem).hasClass('coveo-inactive');\n      }\n      return false;\n    });\n    return _.pluck(displayed, 'value');\n  }\n\n  /**\n   * Updates the sort criteria for the HierarchicalFacet.\n   * @param criteria The new sort criteria.\n   */\n  public updateSort(criteria: string) {\n    this.firstPlacement = true;\n    super.updateSort(criteria);\n  }\n\n  /**\n   * Opens (expands) a single value and shows all its children.\n   * @param value The value to open.\n   */\n  public open(value: FacetValue);\n  public open(value: IValueHierarchy);\n  public open(value: String);\n  public open(value: any) {\n    let getter;\n    if (_.isString(value)) {\n      getter = this.getValueHierarchy(value);\n    } else if (value instanceof FacetValue) {\n      getter = this.getValueHierarchy(value.value);\n    } else {\n      getter = value;\n    }\n    if (getter != undefined) {\n      $$(this.getElementFromFacetValueList(getter.facetValue.value)).addClass('coveo-open');\n      this.showChilds(getter.childs);\n      if (getter.parent != undefined) {\n        this.open(this.getValueHierarchy(getter.facetValue.value).parent);\n      }\n      this.getValueHierarchy(getter.facetValue.value).keepOpened = true;\n    }\n  }\n\n  /**\n   * Closes (collapses) a single value and hides all its children.\n   * @param value The value to close.\n   */\n  public close(value: FacetValue);\n  public close(value: IValueHierarchy);\n  public close(value: String);\n  public close(value: any) {\n    let getter;\n    if (_.isString(value)) {\n      getter = this.getValueHierarchy(value);\n    } else if (value instanceof FacetValue) {\n      getter = this.getValueHierarchy(value.value);\n    } else {\n      getter = value;\n    }\n    if (getter != undefined) {\n      $$(this.getElementFromFacetValueList(getter.facetValue)).removeClass('coveo-open');\n      this.hideChilds(getter.childs);\n      _.each(getter.childs, (child: IValueHierarchy) => {\n        this.close(this.getValueHierarchy(child.facetValue.value));\n      });\n      this.getValueHierarchy(getter.facetValue.value).keepOpened = false;\n    }\n  }\n\n  /**\n   * Resets the HierarchicalFacet state.\n   */\n  public reset() {\n    _.each(this.getAllValueHierarchy(), (valueHierarchy) => {\n      valueHierarchy.hasChildSelected = false;\n      valueHierarchy.allChildShouldBeSelected = false;\n    });\n    // Need to close all values, otherwise we might end up with orphan(s)\n    // if a parent value, after reset, is no longer visible.\n    _.each(this.getAllValueHierarchy(), (valueHierarchy) => {\n      this.close(valueHierarchy);\n    });\n    super.reset();\n  }\n\n  public processFacetSearchAllResultsSelected(facetValues: FacetValue[]): void {\n    this.selectMultipleValues(facetValues);\n    this.triggerNewQuery();\n  }\n\n  protected triggerUpdateDeltaQuery(facetValues: FacetValue[]) {\n    this.shouldReshuffleFacetValuesClientSide = this.keepDisplayedValuesNextTime;\n    super.triggerUpdateDeltaQuery(facetValues);\n  }\n\n  protected updateSearchInNewDesign(moreValuesAvailable = true) {\n    // We always want to show search for hierarchical facet :\n    // It's useful since child values are folded under their parent most of the time\n    super.updateSearchInNewDesign(true);\n  }\n\n  protected facetValueHasChanged() {\n    this.updateQueryStateModel();\n    Defer.defer(() => {\n      this.updateAppearanceDependingOnState();\n    });\n  }\n\n\n  protected initFacetQueryController() {\n    this.facetQueryController = new HierarchicalFacetQueryController(this);\n  }\n\n  protected initFacetSearch() {\n    this.facetSearch = new HierarchicalFacetSearch(this, HierarchicalFacetSearchValuesList, this.root);\n    this.element.appendChild(this.facetSearch.build());\n  }\n\n  protected handleDeferredQuerySuccess(data: IQuerySuccessEventArgs) {\n    this.updateAppearanceDependingOnState();\n    super.handleDeferredQuerySuccess(data);\n  }\n\n  protected handlePopulateSearchAlerts(args: ISearchAlertsPopulateMessageEventArgs) {\n    if (this.values.hasSelectedOrExcludedValues()) {\n      args.text.push(new HierarchicalBreadcrumbValuesList(this, this.values.getSelected().concat(this.values.getExcluded()), this.getAllValueHierarchy()).buildAsString());\n    }\n  }\n\n  protected handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs) {\n    Assert.exists(args);\n    if (this.values.hasSelectedOrExcludedValues()) {\n      let element = new HierarchicalBreadcrumbValuesList(this, this.values.getSelected().concat(this.values.getExcluded()), this.getAllValueHierarchy()).build();\n      args.breadcrumbs.push({\n        element: element\n      });\n    }\n  }\n\n  protected handleOmniboxWithStaticValue(eventArg: IPopulateOmniboxEventArgs) {\n    let regex = eventArg.completeQueryExpression.regex;\n    let match = _.first(_.filter<IValueHierarchy>(this.getAllValueHierarchy(), (existingValue) => {\n      return regex.test(this.getValueCaption(existingValue.facetValue));\n    }), this.options.numberOfValuesInOmnibox);\n    let facetValues = _.compact(_.map(match, (gotAMatch) => {\n      let fromList = this.getFromFacetValueList(gotAMatch.facetValue);\n      return fromList ? fromList.facetValue : undefined;\n    }));\n    let element = new OmniboxHierarchicalValuesList(this, facetValues, eventArg).build();\n    eventArg.rows.push({\n      element: element,\n      zIndex: this.omniboxZIndex\n    });\n  }\n\n  protected rebuildValueElements() {\n    this.shouldReshuffleFacetValuesClientSide = this.shouldReshuffleFacetValuesClientSide || this.keepDisplayedValuesNextTime;\n    this.numberOfValues = Math.max(this.numberOfValues, 10000);\n    this.processHierarchy();\n    this.setValueListContent();\n    super.rebuildValueElements();\n    this.buildParentChildRelationship();\n    this.checkForOrphans();\n    this.checkForNewUnselectedChild();\n    this.crop();\n    this.shouldReshuffleFacetValuesClientSide = false;\n  }\n\n  protected initFacetValuesList() {\n    this.facetValuesList = new HierarchicalFacetValuesList(this, HierarchicalFacetValueElement);\n    this.element.appendChild(this.facetValuesList.build());\n  }\n\n  protected updateMoreLess() {\n    let moreValuesAvailable = this.numberOfValuesToShow < this.topLevelHierarchy.length;\n    let lessIsShown = this.numberOfValuesToShow > this.originalNumberOfValuesToShow;\n    super.updateMoreLess(lessIsShown, moreValuesAvailable);\n  }\n\n  protected handleClickMore(): void {\n    this.numberOfValuesToShow += this.originalNumberOfValuesToShow;\n    this.numberOfValuesToShow = Math.min(this.numberOfValuesToShow, this.values.size());\n    this.crop();\n    this.updateMoreLess();\n  }\n\n  protected handleClickLess() {\n    this.numberOfValuesToShow = this.originalNumberOfValuesToShow;\n    this.crop();\n    this.updateMoreLess();\n  }\n\n  protected updateNumberOfValues() {\n    this.numberOfValues = Math.max(this.numberOfValues, 10000);\n  }\n\n  private ensureValueHierarchyExists(facetValues: any) {\n    if (facetValues[0] && typeof facetValues[0] == 'string') {\n      facetValues = _.map(facetValues, (value: string) => {\n        return FacetValue.createFromValue(value);\n      });\n    }\n    let atLeastOneDoesNotExists = false;\n    _.each(facetValues, (facetValue: FacetValue) => {\n      if (this.getValueHierarchy(facetValue.value) == undefined) {\n        atLeastOneDoesNotExists = true;\n      }\n    });\n    if (atLeastOneDoesNotExists) {\n      this.processHierarchy(facetValues);\n    }\n  }\n\n  private crop() {\n    // Partition the top level or the facet to only operate on the values that are not selected or excluded\n    let partition = _.partition(this.topLevelHierarchy, (hierarchy: IValueHierarchy) => {\n      return hierarchy.facetValue.selected || hierarchy.facetValue.excluded || hierarchy.hasChildSelected;\n    });\n\n    // Hide and show the partitionned top level values, depending on the numberOfValuesToShow\n    let numberOfValuesLeft = this.numberOfValuesToShow - partition[0].length;\n    _.each(_.last(partition[1], partition[1].length - numberOfValuesLeft), (toHide: IValueHierarchy) => {\n      this.hideFacetValue(toHide);\n      this.hideChilds(toHide.childs);\n    });\n    _.each(_.first(partition[1], numberOfValuesLeft), (toShow: IValueHierarchy) => {\n      this.showFacetValue(toShow);\n    });\n  }\n\n  private placeChildsUnderTheirParent(hierarchy: IValueHierarchy, hierarchyElement: HTMLElement) {\n    let toIterateOver = hierarchy.childs;\n    if (toIterateOver) {\n      let toIterateOverSorted = this.facetValuesList.sortFacetValues(_.pluck(toIterateOver, 'facetValue')).reverse();\n      _.each(toIterateOverSorted, (child) => {\n        let childFromHierarchy = this.getValueFromHierarchy(child);\n        if (childFromHierarchy) {\n          let childElement = this.getElementFromFacetValueList(child);\n          $$(childElement).insertAfter(hierarchyElement);\n          if (childFromHierarchy.childs && childFromHierarchy.childs.length != 0) {\n            this.placeChildsUnderTheirParent(childFromHierarchy, childElement);\n          }\n        }\n      });\n    }\n\n    if (hierarchy.keepOpened) {\n      this.open(hierarchy);\n      this.showChilds(hierarchy.childs);\n    } else {\n      this.hideChilds(hierarchy.childs);\n    }\n  }\n\n  private addCssClassToParentAndChilds(hierarchy: IValueHierarchy, hierarchyElement: HTMLElement) {\n    $$(hierarchyElement).addClass('coveo-has-childs');\n    if (hierarchy.hasChildSelected) {\n      $$(hierarchyElement).addClass('coveo-has-childs-selected');\n    }\n    let openAndCloseChilds = $$('div', {\n      className: 'coveo-has-childs-toggle'\n    }).el;\n\n    $$(openAndCloseChilds).on('click', () => {\n      $$(hierarchyElement).hasClass('coveo-open') ? this.close(hierarchy) : this.open(hierarchy);\n    });\n\n    $$(hierarchyElement).prepend(openAndCloseChilds);\n  }\n\n  private buildParentChildRelationship() {\n    let fragment = document.createDocumentFragment();\n    fragment.appendChild(this.facetValuesList.valueContainer);\n    let sorted = _.map(this.facetValuesList.sortFacetValues(), (facetValue: FacetValue) => {\n      return this.getValueFromHierarchy(facetValue);\n    });\n    _.each(sorted, (hierarchy: IValueHierarchy) => {\n      let hierarchyElement = this.getElementFromFacetValueList(hierarchy.facetValue);\n      if (Utils.isNonEmptyArray(hierarchy.childs)) {\n        this.placeChildsUnderTheirParent(hierarchy, hierarchyElement);\n        this.addCssClassToParentAndChilds(hierarchy, hierarchyElement);\n      } else {\n        $$(hierarchyElement).addClass('coveo-no-childs');\n      }\n      hierarchyElement.style.marginLeft = (this.options.marginByLevel * (hierarchy.level - this.options.levelStart)) + 'px';\n    });\n\n    $$(<HTMLElement>fragment).insertAfter(this.headerElement);\n  }\n\n  private setValueListContent() {\n    this.facetValuesList.hierarchyFacetValues = _.map(this.correctLevels, (hierarchy) => {\n      if (!this.values.contains(hierarchy.facetValue.value)) {\n        hierarchy.facetValue.occurrences = 0;\n        this.values.add(hierarchy.facetValue);\n      }\n      return hierarchy.facetValue;\n    });\n  }\n\n  private createHierarchy(valuesToBuildWith: FacetValue[]) {\n    let flatHierarchy = _.map(valuesToBuildWith, (value: FacetValue) => {\n      let parent = this.getParent(value);\n      let self = value.lookupValue || value.value;\n      return {\n        facetValue: value,\n        level: this.getLevel(value),\n        parent: parent,\n        self: self\n      };\n    });\n    this.setInHierarchy(flatHierarchy);\n    _.each(this.getAllValueHierarchy(), (valueHierarchy) => {\n      if (valueHierarchy.facetValue.selected) {\n        this.flagParentForSelection(valueHierarchy);\n      }\n    });\n    return flatHierarchy;\n  }\n\n  private processHierarchy(facetValues = this.values.getAll()) {\n    _.each(this.getAllValueHierarchy(), (hierarchy: IValueHierarchy) => {\n      if (this.values.get(hierarchy.facetValue.value) == undefined) {\n        this.deleteValueHierarchy(this.getLookupOrValue(hierarchy.facetValue));\n      }\n    });\n    this.createHierarchy(facetValues);\n  }\n\n  private setInHierarchy(flatHierarchy: IFlatHierarchy[]) {\n    this.correctLevels = _.filter<IFlatHierarchy>(flatHierarchy, (hierarchy) => {\n      let isCorrectMinimumLevel = this.options.levelStart == undefined || hierarchy.level >= this.options.levelStart;\n      let isCorrectMaximumLevel = this.options.levelEnd == undefined || hierarchy.level < this.options.levelEnd;\n      return isCorrectMinimumLevel && isCorrectMaximumLevel;\n    });\n    _.each(this.correctLevels, (hierarchy: IFlatHierarchy) => {\n      let childs = _.map(_.filter<IFlatHierarchy>(this.correctLevels, (possibleChild: IFlatHierarchy) => {\n        return possibleChild.parent != null && possibleChild.parent.toLowerCase() == hierarchy.self.toLowerCase();\n      }), (child): IValueHierarchy => {\n        return {\n          facetValue: child.facetValue,\n          level: child.level,\n          keepOpened: false,\n          hasChildSelected: false,\n          allChildShouldBeSelected: false\n        };\n      });\n\n      let parent = hierarchy.parent != null ? _.find<IFlatHierarchy>(this.correctLevels, (possibleParent) => {\n        return possibleParent.self.toLowerCase() == hierarchy.parent.toLowerCase();\n      }) : null;\n\n      let hierarchyThatAlreadyExists = this.getValueHierarchy(hierarchy.facetValue.value);\n      if (hierarchyThatAlreadyExists && hierarchyThatAlreadyExists.childs.length != childs.length) {\n        hierarchyThatAlreadyExists.childs = childs;\n      }\n      let hierarchyThatAlreadyExistsAtParent;\n      if (parent) {\n        hierarchyThatAlreadyExistsAtParent = this.getValueHierarchy(parent.facetValue.value);\n      }\n      this.setValueHierarchy(hierarchy.facetValue.value, {\n        childs: childs,\n        parent: parent == undefined ? undefined : {\n          facetValue: parent.facetValue,\n          level: parent.level,\n          keepOpened: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.keepOpened : false,\n          hasChildSelected: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.hasChildSelected : false,\n          originalPosition: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.originalPosition : undefined,\n          allChildShouldBeSelected: hierarchyThatAlreadyExistsAtParent ? hierarchyThatAlreadyExistsAtParent.allChildShouldBeSelected : false\n        },\n        facetValue: hierarchy.facetValue,\n        level: hierarchy.level,\n        keepOpened: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.keepOpened : false,\n        hasChildSelected: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.hasChildSelected : false,\n        originalPosition: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.originalPosition : undefined,\n        allChildShouldBeSelected: hierarchyThatAlreadyExists ? hierarchyThatAlreadyExists.allChildShouldBeSelected : false\n      });\n    });\n\n    this.topLevelHierarchy = _.chain(this.values.getAll())\n      .filter((value: FacetValue) => {\n        let fromHierarchy = this.getValueFromHierarchy(value);\n        if (fromHierarchy) {\n          return fromHierarchy.level == (this.options.levelStart || 0);\n        } else {\n          return false;\n        }\n      })\n      .map((value: FacetValue) => {\n        return this.getValueFromHierarchy(value);\n      })\n      .value();\n  }\n\n  private getParent(value: FacetValue) {\n    let lastIndexOfDelimiting = this.getLookupOrValue(value).lastIndexOf(this.options.delimitingCharacter);\n    if (lastIndexOfDelimiting != -1) {\n      return this.getLookupOrValue(value).substring(0, lastIndexOfDelimiting);\n    }\n    return undefined;\n  }\n\n  private getSelf(value: FacetValue) {\n    let parent = this.getParent(value);\n    if (parent == undefined) {\n      return this.getLookupOrValue(value);\n    } else {\n      let indexOfParent = this.getLookupOrValue(value).indexOf(parent);\n      return this.getLookupOrValue(value).substring(indexOfParent + parent.length + 1);\n    }\n  }\n\n  private showFacetValue(value: IValueHierarchy) {\n    $$(this.getElementFromFacetValueList(value.facetValue.value)).removeClass('coveo-inactive');\n  }\n\n  private hideFacetValue(value: IValueHierarchy) {\n    $$(this.getElementFromFacetValueList(value.facetValue.value)).addClass('coveo-inactive');\n  }\n\n  private hideChilds(children: IValueHierarchy[]) {\n    _.each(children, (child) => {\n      this.hideFacetValue(child);\n    });\n  }\n\n  private showChilds(children: IValueHierarchy[]) {\n    _.each(children, (child) => {\n      this.showFacetValue(child);\n    });\n  }\n\n  private selectChilds(parent: IValueHierarchy, children: IValueHierarchy[]) {\n    this.flagParentForSelection(parent);\n    parent.allChildShouldBeSelected = true;\n    this.selectMultipleValues(_.map(children, (child) => {\n      return child.facetValue;\n    }));\n  }\n\n  private deselectChilds(parent: IValueHierarchy, children: IValueHierarchy[]) {\n    parent.hasChildSelected = false;\n    parent.allChildShouldBeSelected = false;\n    this.deselectMultipleValues(_.map(children, (child) => {\n      return child.facetValue;\n    }));\n  }\n\n  private excludeChilds(children: IValueHierarchy[]) {\n    this.excludeMultipleValues(_.map(children, (child) => {\n      return child.facetValue;\n    }));\n  }\n\n  private unexcludeChilds(children: IValueHierarchy[]) {\n    this.unexcludeMultipleValues(_.map(children, (child) => {\n      return child.facetValue;\n    }));\n  }\n\n  private selectParent(parent: IValueHierarchy) {\n    if (parent != undefined) {\n      this.selectValue(parent.facetValue);\n      if (parent.parent) {\n        this.selectParent(this.getValueHierarchy(parent.parent.facetValue.value));\n      }\n    }\n  }\n\n  private deselectParent(parent: IValueHierarchy) {\n    if (parent != undefined) {\n      this.deselectValue(parent.facetValue, false);\n    }\n  }\n\n  private flagParentForSelection(valueHierarchy: IValueHierarchy) {\n    let parent = valueHierarchy.parent;\n    let current = valueHierarchy;\n    while (parent) {\n      let parentInHierarchy = this.getValueHierarchy(parent.facetValue.value);\n      parentInHierarchy.hasChildSelected = true;\n      let found = _.find(parentInHierarchy.childs, (child: IValueHierarchy) => {\n        return child.facetValue.value.toLowerCase() == current.facetValue.value.toLowerCase();\n      });\n      if (found) {\n        if (this.getValueHierarchy(found.facetValue.value).hasChildSelected) {\n          found.hasChildSelected = true;\n        }\n      }\n      parent = parentInHierarchy.parent;\n      current = parentInHierarchy;\n    }\n  }\n\n  private unflagParentForSelection(valueHierarchy: IValueHierarchy) {\n    let parent = valueHierarchy.parent;\n    while (parent) {\n      let parentInHierarchy = this.getValueHierarchy(parent.facetValue.value);\n      let otherSelectedChilds = _.filter<IValueHierarchy>(parentInHierarchy.childs, (child) => {\n        let childInHierarchy = this.getValueHierarchy(child.facetValue.value);\n        if (childInHierarchy != undefined) {\n          return childInHierarchy.facetValue.value != valueHierarchy.facetValue.value\n            && (childInHierarchy.facetValue.selected || childInHierarchy.facetValue.excluded || childInHierarchy.hasChildSelected);\n        }\n      });\n\n      if (otherSelectedChilds.length == 0) {\n        parentInHierarchy.hasChildSelected = false;\n      }\n      parentInHierarchy.allChildShouldBeSelected = false;\n      parent = parentInHierarchy.parent;\n    }\n  }\n\n  public getValueFromHierarchy(value: any): IValueHierarchy {\n    let getter = value instanceof FacetValue ? value.value : value;\n    return this.getValueHierarchy(getter);\n  }\n\n  private getFacetValueFromHierarchy(value: any): FacetValue {\n    return this.getValueFromHierarchy(value).facetValue;\n  }\n\n  private getLookupOrValue(value: FacetValue) {\n    return value.lookupValue || value.value;\n  }\n\n  private getElementFromFacetValueList(value: any) {\n    let ret = this.getFromFacetValueList(value);\n    if (ret) {\n      return ret.renderer.listItem;\n    } else {\n      return $$('div').el;\n    }\n  }\n\n  private getFromFacetValueList(value: any) {\n    let fromHierarchy = this.getValueFromHierarchy(value);\n    if (fromHierarchy != undefined) {\n      return this.facetValuesList.get(value);\n    } else {\n      return undefined;\n    }\n  }\n\n  private getLevel(value: FacetValue) {\n    return value.value.split(this.options.delimitingCharacter).length - 1;\n  }\n\n  public getAllValueHierarchy(): { [facetValue: string]: IValueHierarchy } {\n    if (this.valueHierarchy == null) {\n      this.valueHierarchy = {};\n    }\n    return this.valueHierarchy;\n  }\n\n  private deleteValueHierarchy(key: string) {\n    if (this.valueHierarchy != null) {\n      delete this.valueHierarchy[key.toLowerCase()];\n    }\n  }\n\n  private getValueHierarchy(key: string): IValueHierarchy {\n    if (this.valueHierarchy == null) {\n      return undefined;\n    }\n    return this.valueHierarchy[key.toLowerCase()];\n  }\n\n  private setValueHierarchy(key: string, value: IValueHierarchy) {\n    if (this.valueHierarchy == null) {\n      this.valueHierarchy = {};\n    }\n    this.valueHierarchy[key.toLowerCase()] = value;\n  }\n\n  private checkForOrphans() {\n    _.each(this.valueHierarchy, (v: IValueHierarchy) => {\n      if (this.getLevel(v.facetValue) != this.options.levelStart) {\n        if (this.getValueHierarchy(this.getParent(v.facetValue)) == undefined) {\n          this.logger.error(`Orphan value found in HierarchicalFacet : ${v.facetValue.value}`, `Needed : ${this.getParent(v.facetValue)} but not found`);\n          this.logger.warn(`Removing incoherent facet value : ${v.facetValue.value}`);\n          this.hideFacetValue(v);\n        }\n      }\n    });\n  }\n\n  private checkForNewUnselectedChild() {\n    // It's possible that after checking a facet value, the index returns new facet values (because of injection depth);\n    _.each(this.valueHierarchy, (v: IValueHierarchy) => {\n      if (v.allChildShouldBeSelected) {\n        let notAlreadySelected = _.find((v.childs), (child: IValueHierarchy) => {\n          return child.facetValue.selected != true;\n        });\n        if (notAlreadySelected) {\n          this.selectValue(v.facetValue, true);\n          this.logger.info('Re-executing query with new facet values returned by index');\n          this.queryController.deferExecuteQuery();\n        }\n      }\n    });\n  }\n}\nInitialization.registerAutoCreateComponent(HierarchicalFacet);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacet.ts\n **/","/// <reference path=\"HierarchicalFacet.ts\" />\n\nimport { FacetValuesList } from '../Facet/FacetValuesList';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { HierarchicalFacet, IValueHierarchy } from './HierarchicalFacet';\nimport { IFacetValueElementKlass } from '../Facet/FacetValueElement';\nimport _ = require('underscore');\n\nexport class HierarchicalFacetValuesList extends FacetValuesList {\n  public hierarchyFacetValues: FacetValue[];\n\n  constructor(public facet: HierarchicalFacet, public facetValueElementKlass: IFacetValueElementKlass) {\n    super(facet, facetValueElementKlass);\n  }\n\n  public sortFacetValues(hierarchyFacetValues = this.hierarchyFacetValues): FacetValue[] {\n    if (!this.facet.shouldReshuffleFacetValuesClientSide) {\n      let sortArray = _.map(hierarchyFacetValues, (hierarchy: FacetValue, idx: number) => {\n        return {\n          hierarchy: hierarchy,\n          idx: idx\n        };\n      });\n\n      // If we exclude the top level, the alpha order is not respected (since it is done by the index, and the first level is omitted by client side code).\n      // Do the ordering client side, in the precise case where its alpha ordering and the starting level is not 0;\n      if (this.facet.options.levelStart != 0 && this.facet.options.sortCriteria && this.facet.options.sortCriteria.toLowerCase().indexOf('alpha') != -1) {\n        let reversed = this.facet.options.sortCriteria.toLowerCase().indexOf('descending') != -1;\n\n        sortArray = sortArray.sort((first, second) => {\n          let firstInTopLevel = _.find(this.facet.topLevelHierarchy, (hierarchy: IValueHierarchy) => {\n            return hierarchy.facetValue.value.toLowerCase() == first.hierarchy.value.toLowerCase();\n          }) != null;\n\n          let secondInTopLevel = _.find(this.facet.topLevelHierarchy, (hierarchy: IValueHierarchy) => {\n            return hierarchy.facetValue.value.toLowerCase() == first.hierarchy.value.toLowerCase();\n          }) != null;\n\n          if (firstInTopLevel && secondInTopLevel) {\n            let firstValue = this.facet.getValueCaption(first.hierarchy);\n            let secondValue = this.facet.getValueCaption(second.hierarchy);\n            let compared = firstValue.localeCompare(secondValue);\n            return reversed ? -1 * compared : compared;\n          }\n          return first.idx - second.idx;\n        });\n      }\n\n      // Normally facet values are sorted by selected first, then inactive, then excluded values.\n      // For hierarchical, we want selected first, then those that have childs selected, then normal sorting.\n      sortArray = sortArray.sort((first, second) => {\n        if (first.hierarchy.selected === second.hierarchy.selected) {\n          let firstFromHierarchy = this.facet.getValueFromHierarchy(first.hierarchy);\n          let secondFromHierarchy = this.facet.getValueFromHierarchy(second.hierarchy);\n          if (firstFromHierarchy.hasChildSelected === secondFromHierarchy.hasChildSelected) {\n            return first.idx - second.idx;\n          } else {\n            return firstFromHierarchy.hasChildSelected ? -1 : 1;\n          }\n        } else {\n          return first.hierarchy.selected ? -1 : 1;\n        }\n      });\n      return _.pluck(sortArray, 'hierarchy');\n    }\n    return hierarchyFacetValues;\n  }\n\n  protected getValuesToBuildWith() {\n    if (this.facet.shouldReshuffleFacetValuesClientSide) {\n      return this.hierarchyFacetValues;\n    } else {\n      return this.sortFacetValues();\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacetValuesList.ts\n **/","/// <reference path=\"../Facet/Facet.ts\" />\n\nimport { Facet } from '../Facet/Facet';\nimport { FacetSearchValuesList } from '../Facet/FacetSearchValuesList';\nimport { HierarchicalFacetSearchValueElement } from './HierarchicalFacetSearchValueElement';\n\nexport class HierarchicalFacetSearchValuesList extends FacetSearchValuesList {\n  constructor(public facet: Facet) {\n    super(facet, HierarchicalFacetSearchValueElement);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacetSearchValuesList.ts\n **/","import { FacetValueElement } from '../Facet/FacetValueElement';\nimport { HierarchicalFacet } from '../HierarchicalFacet/HierarchicalFacet';\nimport { IValueElementEventsBinding } from '../Facet/ValueElement';\nimport { FacetValue } from '../Facet/FacetValues';\n\nexport class HierarchicalFacetSearchValueElement extends FacetValueElement {\n  constructor(public facet: HierarchicalFacet, public facetValue: FacetValue, public keepDisplayedValueNextTime: boolean) {\n    super(facet, facetValue, keepDisplayedValueNextTime);\n  }\n\n  public _handleSelectValue(eventBindings: IValueElementEventsBinding) {\n    this.facet.open(this.facetValue);\n    super.handleSelectValue(eventBindings);\n  }\n\n  public _handleExcludeClick(eventBindings: IValueElementEventsBinding) {\n    this.facet.open(this.facetValue);\n    super.handleExcludeClick(eventBindings);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacetSearchValueElement.ts\n **/","/// <reference path=\"HierarchicalFacet.ts\" />\n\nimport { FacetSearch } from '../Facet/FacetSearch';\nimport { HierarchicalFacet, IValueHierarchy } from './HierarchicalFacet';\nimport { IFacetSearchValuesListKlass } from '../Facet/FacetSearchValuesList';\nimport { FacetSearchParameters } from '../Facet/FacetSearchParameters';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { Utils } from '../../utils/Utils';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport _ = require('underscore');\n\nexport class HierarchicalFacetSearch extends FacetSearch {\n  constructor(public facet: HierarchicalFacet, public facetSearchValuesListKlass: IFacetSearchValuesListKlass, root: HTMLElement) {\n    super(facet, facetSearchValuesListKlass, root);\n  }\n\n  protected buildParamsForExcludingCurrentlyDisplayedValues() {\n    var params = super.buildParamsForExcludingCurrentlyDisplayedValues();\n    params.alwaysExclude = this.facet.getDisplayedValues();\n    if (this.facet.facetSearch.currentlyDisplayedResults) {\n      params.alwaysExclude = params.alwaysExclude.concat(this.facet.facetSearch.currentlyDisplayedResults);\n    }\n    return params;\n  }\n\n  protected selectAllValuesMatchingSearch() {\n    this.facet.showWaitingAnimation();\n\n    var searchParameters = new FacetSearchParameters(this.facet);\n    searchParameters.nbResults = this.facet.numberOfValues;\n    searchParameters.alwaysInclude = this.facet.getDisplayedValues();\n    searchParameters.setValueToSearch(this.getValueInInputForFacetSearch());\n    this.facet.facetQueryController.search(searchParameters).then((fieldValues: IIndexFieldValue[]) => {\n      this.completelyDismissSearch();\n      ModalBox.close(true);\n      var facetValues = this.getFacetValues(fieldValues);\n      this.facet.processFacetSearchAllResultsSelected(facetValues);\n    });\n    this.completelyDismissSearch();\n  }\n\n  private getFacetValues(fieldValues: IIndexFieldValue[]): FacetValue[] {\n    var values = [];\n    _.each(fieldValues, (fieldValue) => {\n      var hierarchy = this.facet.getValueFromHierarchy(fieldValue.value);\n      values.push(this.createFacetValuesFromHierarchy(hierarchy));\n    });\n    return _.flatten(values);\n  }\n\n  private createFacetValuesFromHierarchy(hierarchy: IValueHierarchy): FacetValue[] {\n    var values = [];\n    var fieldValue = hierarchy.facetValue.value;\n    var facetValue = this.facet.values.get(fieldValue);\n    if (!Utils.exists(facetValue)) {\n      facetValue = FacetValue.create(fieldValue);\n    }\n    facetValue.selected = true;\n    facetValue.excluded = false;\n    values.push(facetValue);\n    var childs = hierarchy.childs;\n    _.each(childs, (child) => {\n      var childHierarchy = this.facet.getValueFromHierarchy(child.facetValue.value);\n      values.push(this.createFacetValuesFromHierarchy(childHierarchy));\n    });\n    return values;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacetSearch.ts\n **/","/// <reference path=\"HierarchicalFacet.ts\" />\n\nimport { BreadcrumbValueList } from '../Facet/BreadcrumbValuesList';\nimport { HierarchicalFacet, IValueHierarchy } from './HierarchicalFacet';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { HierarchicalBreadcrumbValueElement } from './HierarchicalBreadcrumbValueElement';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport class HierarchicalBreadcrumbValuesList extends BreadcrumbValueList {\n  constructor(public facet: HierarchicalFacet, public facetValues: FacetValue[], public valueHierarchy: { [facetValue: string]: IValueHierarchy }) {\n    super(facet, facetValues, HierarchicalBreadcrumbValueElement);\n  }\n\n  public buildAsString() {\n    this.build();\n    if (this.elem) {\n      let joined = `${this.facet.options.title}: ` + _.map($$(this.elem).findAll('.coveo-facet-breadcrumb-value'), (value: HTMLElement) => {\n        _.each($$(value).findAll('.coveo-hierarchical-breadcrumb-separator'), (separator) => {\n          // small right black triangle\n          $$(separator).text('\\u25B8');\n        });\n        return $$(value).text();\n      }).join(', ');\n      return joined;\n    }\n    return '';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalBreadcrumbValuesList.ts\n **/","import { BreadcrumbValueElement } from '../Facet/BreadcrumbValueElement';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { HierarchicalFacet } from './HierarchicalFacet';\nimport { Dom } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport class HierarchicalBreadcrumbValueElement extends BreadcrumbValueElement {\n  constructor(public facet: HierarchicalFacet, public facetValue: FacetValue) {\n    super(facet, facetValue);\n  }\n\n  public build(): Dom {\n    var build = super.build();\n    build.addClass('coveo-hierarchical-facet-value');\n    var caption = build.find('.coveo-facet-breadcrumb-caption');\n    var values = this.facetValue.value.split(this.facet.options.delimitingCharacter);\n    values = _.map(values, (v) => {\n      return _.escape(v);\n    });\n    caption.innerHTML = values.join('<span class=\\'coveo-hierarchical-breadcrumb-separator\\'></span>');\n    return build;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalBreadcrumbValueElement.ts\n **/","/// <reference path=\"../HierarchicalFacet/HierarchicalFacet.ts\" />\n\nimport { OmniboxValuesList } from '../Facet/OmniboxValuesList';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { HierarchicalFacet } from '../HierarchicalFacet/HierarchicalFacet';\nimport { IPopulateOmniboxObject } from '../Omnibox/OmniboxInterface';\nimport { OmniboxHierarchicalValueElement } from './OmniboxHierarchicalValueElement';\n\nexport class OmniboxHierarchicalValuesList extends OmniboxValuesList {\n  constructor(public facet: HierarchicalFacet, public facetValues: FacetValue[], public omniboxObject: IPopulateOmniboxObject) {\n    super(facet, facetValues, omniboxObject, OmniboxHierarchicalValueElement);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/OmniboxHierarchicalValuesList.ts\n **/","/// <reference path=\"HierarchicalFacet.ts\" />\n\nimport { OmniboxValueElement } from '../Facet/OmniboxValueElement';\nimport { HierarchicalFacet } from './HierarchicalFacet';\nimport { FacetValue } from '../Facet/FacetValues';\nimport { IPopulateOmniboxObject } from '../Omnibox/OmniboxInterface';\nimport { IValueElementEventsBinding } from '../Facet/ValueElement';\n\nexport class OmniboxHierarchicalValueElement extends OmniboxValueElement {\n  constructor(public facet: HierarchicalFacet, public facetValue: FacetValue, public eventArg: IPopulateOmniboxObject) {\n    super(facet, facetValue, eventArg);\n  }\n\n  public _handleSelectValue(eventBindings: IValueElementEventsBinding) {\n    this.facet.open(this.facetValue);\n    super.handleSelectValue(eventBindings);\n  }\n\n  public _handleExcludeClick(eventBindings: IValueElementEventsBinding) {\n    this.facet.open(this.facetValue);\n    super.handleExcludeClick(eventBindings);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/OmniboxHierarchicalValueElement.ts\n **/","/// <reference path=\"HierarchicalFacet.ts\" />\n\nimport { FacetValueElement } from '../Facet/FacetValueElement';\nimport { HierarchicalFacet } from './HierarchicalFacet';\nimport { FacetValue } from '../Facet/FacetValues';\n\nexport class HierarchicalFacetValueElement extends FacetValueElement {\n  constructor(public facet: HierarchicalFacet, public facetValue: FacetValue, public keepDisplayedValueNextTime: boolean) {\n    super(facet, facetValue, keepDisplayedValueNextTime);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/HierarchicalFacet/HierarchicalFacetValueElement.ts\n **/","import { Template } from '../Templates/Template';\nimport { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { Cell } from './Cell';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { DefaultMatrixResultPreviewTemplate } from './DefaultMatrixResultPreviewTemplate';\nimport { $$ } from '../../utils/Dom';\nimport { QueryEvents, IBuildingQueryEventArgs, IDoneBuildingQueryEventArgs, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { QueryBuilder } from '../Base/QueryBuilder';\nimport { Utils } from '../../utils/Utils';\nimport { IGroupByRequest } from '../../rest/GroupByRequest';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { IQuery } from '../../rest/Query';\nimport Globalize = require('globalize');\nimport _ = require('underscore');\n\nexport interface IMatrixOptions {\n  title?: string;\n\n  rowField: IFieldOption;\n  sortCriteria?: string;\n  maximumNumberOfRows?: number;\n  enableRowTotals?: boolean;\n\n  columnField: IFieldOption;\n  columnFieldValues?: string[];\n  columnLabels?: string[];\n  columnHeader?: string;\n  maximumNumberOfValuesInGroupBy?: number;\n  enableColumnTotals?: boolean;\n\n  computedField: IFieldOption;\n  computedFieldOperation?: string;\n  computedFieldFormat?: string;\n  cellFontSize?: string;\n\n  enableHoverPreview?: boolean;\n  previewSortCriteria?: string;\n  previewSortField?: IFieldOption;\n  previewMaxWidth?: string;\n  previewMinWidth?: string;\n  previewDelay?: number;\n  previewTemplate?: Template;\n}\n\n/**\n * The Matrix component uses the values of two fields (row and column) to display the results of the specified computed\n * field in a table.\n *\n * The user specifies the values to use for the columns. An {@link IGroupByRequest} operation performed at the same time\n * as the main query retrieves the values to use for the rows.\n *\n * In a way that is similar to the {@link Facet} component, selecting a Matrix cell allows the end user to drill down\n * inside the results by restricting the row field and the column field to match the values of the selected cell.\n */\nexport class Matrix extends Component {\n  static ID = 'Matrix';\n\n  /**\n   * The possible options for the component\n   * @componentOptions\n   */\n  static options: IMatrixOptions = {\n\n    /**\n     * Specifies the text to display at the top of the Matrix.\n     */\n    title: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the field to use for the rows.\n     *\n     * Specifying a value for this options is required for this component to work.\n     */\n    rowField: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies the field to use for the columns.\n     *\n     * Specifying a value for this options is required for this component to work.\n     */\n    columnField: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies the criteria to use for sorting the rows.\n     *\n     * See {@link IGroupByRequest.sortCriteria} for the list of possible values.\n     *\n     * Default value is `ComputedFieldDescending`.\n     */\n    sortCriteria: ComponentOptions.buildStringOption({ defaultValue: 'ComputedFieldDescending' }),\n\n    /**\n     * Specifies the maximum number of rows to display in the Matrix.\n     *\n     * Default value is `10`. Minimum value is `0`.\n     */\n    maximumNumberOfRows: ComponentOptions.buildNumberOption({ defaultValue: 10, min: 0 }),\n\n    /**\n     * Specifies whether to display a **Total** column containing the sum of each row.\n     *\n     * Default value is `true`.\n     */\n    enableRowTotals: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the field values to use for each column.\n     *\n     * See also {@link Matrix.options.columnLabels}.\n     *\n     * Default valus is `[]`, which means that the Matrix will not generate any column (except the **Total** column, if\n     * {@link Matrix.options.enableRowTotals} is `true`).\n     */\n    columnFieldValues: ComponentOptions.buildListOption<string>({ defaultValue: [] }),\n\n    /**\n     * Specifies the label values to use for each column.\n     *\n     * Default value is `[]`. The array set for this options should match the {@link Matrix.options.columnFieldValues}.\n     */\n    columnLabels: ComponentOptions.buildListOption<string>({ defaultValue: [] }),\n\n    /**\n     * Specifies the label for the first column on the left as a description of the {@link Matrix.options.columnField}.\n     *\n     * Default value is `undefined`.\n     */\n    columnHeader: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the maximum number of results to include in the {@link IGroupByRequest} for the columns.\n     *\n     * This value should always be greater than the {@link Matrix.options.maximumNumberOfRows}. If it is too small, some\n     * of the results will not be displayed in the Matrix.\n     *\n     * Default value is `100`. Minimum value is `0`.\n     */\n    maximumNumberOfValuesInGroupBy: ComponentOptions.buildNumberOption({ defaultValue: 100, min: 0 }),\n\n    /**\n     * Specifies whether to add a **Total** row containing the total of each column.\n     *\n     * Default value is `true`\n     */\n    enableColumnTotals: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the field whose computed values you want to display in the cells.\n     *\n     * Specifying a value for this options is required for this component to work.\n     */\n    computedField: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies the type of aggregate operation to perform on the {@link Matrix.options.computedField}.\n     *\n     * The possible values are:\n     * - `sum` - Computes the sum of the computed field values.\n     * - `average` - Computes the average of the computed field values.\n     * - `minimum` - Finds the minimum value of the computed field values.\n     * - `maximum` - Finds the maximum value of the computed field values.\n     *\n     * Default value is `sum`.\n     */\n    computedFieldOperation: ComponentOptions.buildStringOption({ defaultValue: 'sum' }),\n\n    /**\n     * Specifies how to format the values resulting from a {@link Matrix.options.computedFieldOperation}.\n     *\n     * The Globalize library defines all available formats (see\n     * [Globalize](https://github.com/klaaspieter/jquery-global#globalizeformat-value-format-culture-)).\n     *\n     * The most commonly used formats are:\n     * - `c0` - Formats the value as a currency.\n     * - `n0` - Formats the value as an integer.\n     * - `n2` - Formats the value as a floating point with 2 decimal digits.\n     *\n     * Default value is `c0`.\n     */\n    computedFieldFormat: ComponentOptions.buildStringOption({ defaultValue: 'c0' }),\n\n    /**\n     * Specifies the font-size to use for displaying text inside the cells.\n     *\n     * This option is mainly useful to prevent a Matrix containing many columns from cropping some of its values.\n     *\n     * However, instead of using this option to solve this kind of issue, you could also remove some of the less\n     * important columns from your Matrix or modify the CSS of your page to allow the Matrix to occupy a larger space.\n     *\n     * Default value is `''`.\n     */\n    cellFontSize: ComponentOptions.buildStringOption({ defaultValue: '' }),\n\n    /**\n     * Specifies whether to show a preview popup of cell results when hovering over a cell.\n     *\n     * See also {@link Matrix.options.previewSortCriteria}, {@link Matrix.options.previewMaxWidth},\n     * {@link Matrix.options.previewMinWidth}, {@link Matrix.options.previewDelay} and\n     * {@link Matrix.options.previewTemplate}.\n     *\n     * Default value is `true`.\n     */\n    enableHoverPreview: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the criteria to use for sorting the results of\n     * the hover preview.\n     *\n     * The available sort criteria values are the same as those of the {@link IQuery}.\n     *\n     * The possible values are:\n     * - `relevancy`: Uses all configured ranking weights and any specified ranking expressions to sort the results.\n     * - `dateascending` / `datedescending`: Sorts the results using the `@date` field value, which is typically the\n     * last modification date of an item in the index.\n     * - `qre`: Sorts the results using only the weights applied by ranking expressions. Using `qre` is much like using\n     * `relevancy`, except that `qre` does not compute automatic weights, such as weights based on keyword proximity.\n     * - `nosort`: Does not sort the results. Using `nosort` returns the items in an essentially random order.\n     * - `fieldascending` / `fielddescending`: Sorts the results using the value of a custom field.\n     * - `fieldascending` / `fielddescending`: Sorts the results using the value of a custom field.\n     *\n     * See also {@link Matrix.options.previewSortField}.\n     *\n     * Default value is `FieldDescending`.\n     */\n    previewSortCriteria: ComponentOptions.buildStringOption({ defaultValue: 'FieldDescending' }),\n\n    /**\n     * If {@link Matrix.options.previewSortCriteria} is `fieldascending` or `fielddescending`, specifies the field to\n     * use for sorting the results of the hover preview.\n     *\n     * Default value is the value of {@link Matrix.options.computedField}.\n     */\n    previewSortField: ComponentOptions.buildFieldOption(),\n\n    /**\n     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the maximum width (in pixels) of the preview\n     * popup.\n     *\n     * Default value is `500px`.\n     */\n    previewMaxWidth: ComponentOptions.buildStringOption({ defaultValue: '500px' }),\n\n    /**\n     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the minimum width (in pixels) of the preview\n     * popup.\n     *\n     * Default value is `0`.\n     */\n    previewMinWidth: ComponentOptions.buildStringOption({ defaultValue: '0' }),\n\n    /**\n     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the delay (in milliseconds) before sending the\n     * query to get the preview results.\n     *\n     * Default value is `500`.\n     */\n    previewDelay: ComponentOptions.buildNumberOption({ defaultValue: 500 }),\n\n    /**\n     * If {@link Matrix.options.enableHoverPreview} is `true`, specifies the template ID or CSS selector of the template\n     * to use to render the results of the hover preview.\n     *\n     * You must use either `data-template-id` or `data-template-selector` in the markup to specify a value for this\n     * option.\n     *\n     * **Examples:**\n     *\n     * Specifying what template to use by referring to its template ID:\n     * ```html\n     * <div class='CoveoMatrix' data-template-id='TemplateId'></div>\n     * ```\n     *\n     * Specifying what template to use by referring to its CSS selector:\n     * ```html\n     * <div class='CoveoMatrix' data-template-selector='.templateSelector'></div>\n     * ```\n     */\n    previewTemplate: ComponentOptions.buildTemplateOption()\n  };\n\n  /**\n   * Holds the data for the Matrix.\n   */\n  public data: Cell[][];\n  public groupByIndex = [];\n  public rowId = '';\n  public columnId = '';\n\n  /**\n   * The currently selected row value, or `undefined` if nothing is selected.\n   */\n  public selectedRowValue: string = undefined;\n\n  /**\n   * The currently selected column value, or `undefined` if nothing is selected.\n   */\n  public selectedColumnValue = undefined;\n\n  private numberOfRows = 0;\n  private numberOfColumns = 0;\n  private previewTimeout: number;\n\n  /**\n   * Creates a new Matrix. Also verifies whether options are valid and coherent. Binds query events.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Matrix component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IMatrixOptions, bindings?: IComponentBindings) {\n    super(element, Matrix.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Matrix, options);\n\n    if (!this.options.previewTemplate) {\n      this.options.previewTemplate = new DefaultMatrixResultPreviewTemplate(<string>this.options.computedField, this.options.computedFieldFormat);\n    }\n\n    if (!this.options.previewSortField) {\n      this.options.previewSortField = <string>this.options.computedField;\n    }\n\n    if (this.options.columnFieldValues.length != this.options.columnLabels.length) {\n      this.options.columnLabels = this.options.columnFieldValues;\n    }\n\n    this.buildMatrix();\n    if (this.options.rowField == null) {\n      this.logger.error('\\'rowField\\' option is required in the Matrix component');\n    } else if (this.options.columnField == null) {\n      this.logger.error('\\'columnField\\' option is required in the Matrix component');\n    } else if (this.options.computedField == null) {\n      this.logger.error('\\'computedField\\' option is required in the Matrix component');\n    } else {\n      this.bindEvents();\n      this.initQueryState();\n    }\n  }\n\n  /**\n   * Selects a cell by its row and column number. Does not execute a query.\n   * @param rowNumber The row number of the cell to select.\n   * @param columnNumber The column number of the cell to select.\n   */\n  public selectCell(rowNumber: number, columnNumber: number): void {\n    let rowValue, columnValue;\n    if (rowNumber !== 0 && rowNumber !== this.numberOfRows - 1) {\n      rowValue = this.getRowValue(rowNumber);\n    }\n\n    if (columnNumber !== 0 && columnNumber !== this.numberOfColumns - 1) {\n      columnValue = this.getColumnValue(columnNumber);\n    }\n\n    if (rowValue && this.isRowFacetPresent()) {\n      this.queryStateModel.set(this.rowId, [rowValue]);\n    } else {\n      this.selectedRowValue = rowValue;\n      this.queryStateModel.set(this.rowId, []);\n    }\n\n    if (columnValue && this.isColumnFacetPresent()) {\n      this.queryStateModel.set(this.columnId, [columnValue]);\n    } else {\n      this.selectedColumnValue = columnValue;\n      this.queryStateModel.set(this.columnId, []);\n    }\n  }\n\n  /**\n   * Returns the currently selected column value.\n   */\n  public getSelectedColumnValue(): string {\n    return this.selectedColumnValue;\n  }\n\n  /**\n   * Returns the currently selected row value.\n   */\n  public getSelectedRowValue(): string {\n    return this.selectedRowValue;\n  }\n\n  /**\n   * Gets the HTMLElement associated to a cell.\n   * @param rowNumber The row number of the cell.\n   * @param columnNumber The column number of the cell.\n   * @returns {HTMLElement} The associated HTMLElement.\n   */\n  public getCellElement(rowNumber: number, columnNumber: number): HTMLElement {\n    return this.data[rowNumber][columnNumber].getHTML();\n  }\n\n  /**\n   * Gets the string associated to a cell.\n   * @param rowNumber The row number of the cell.\n   * @param columnNumber The column number of the cell.\n   * @returns {string} The associated string.\n   */\n  public getCellValue(rowNumber: number, columnNumber: number): string {\n    let cell = this.getCellElement(rowNumber, columnNumber);\n    return $$(cell).text();\n  }\n\n  public drawMatrix() {\n    let headerRow = $$('div', {\n      className: 'coveo-matrix-row matrix-header-row'\n    });\n    this.drawRow(headerRow.el, 0);\n    let numberOfRowsToDraw = this.options.enableColumnTotals ? this.numberOfRows - 1 : this.numberOfRows;\n    for (let i = 1; i < numberOfRowsToDraw; i++) {\n      let row = $$('div', {\n        className: 'coveo-matrix-row'\n      }).el;\n      this.drawRow(row, i);\n    }\n\n    if (this.options.enableColumnTotals) {\n      let totalRow = $$('div', {\n        className: 'coveo-matrix-row matrix-total-row'\n      }).el;\n\n      this.drawRow(totalRow, this.numberOfRows - 1);\n    }\n\n    if (this.options.cellFontSize !== '') {\n      let cells = $$(this.element).findAll('.coveo-matrix-cell');\n      _.each(cells, (c: HTMLElement) => {\n        c.style.fontSize = this.options.cellFontSize;\n      });\n    }\n  }\n\n  private bindEvents() {\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.doneBuildingQuery, (args: IDoneBuildingQueryEventArgs) => this.handleDoneBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.deferredQuerySuccess, (args: IQuerySuccessEventArgs) => this.handleDeferredQuerySuccess(args));\n  }\n\n  private initQueryState() {\n    this.rowId = QueryStateModel.getFacetId(<string>this.options.rowField);\n    this.columnId = QueryStateModel.getFacetId(<string>this.options.columnField);\n\n    this.queryStateModel.registerNewAttribute(this.rowId, []);\n    this.queryStateModel.registerNewAttribute(this.columnId, []);\n  }\n\n  private buildMatrix() {\n    this.buildTitle();\n    this.buildBody();\n    this.data = new Array<Array<Cell>>();\n    this.addHeaderRow();\n  }\n\n  private buildTitle() {\n    let title = this.options.title ? this.options.title : '';\n    let titleHtml = $$('div', {\n      className: 'coveo-matrix-title'\n    }, title).el;\n    this.element.appendChild(titleHtml);\n  }\n\n  private buildBody() {\n    let body = $$('div', {\n      className: 'coveo-matrix'\n    }).el;\n    this.element.appendChild(body);\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs) {\n    if (!this.areFacetsPresent()) {\n      if (this.selectedRowValue && !this.isRowFacetPresent()) {\n        args.queryBuilder.advancedExpression.addFieldExpression(<string>this.options.rowField, '=', [this.selectedRowValue]);\n      }\n      if (this.selectedColumnValue && !this.isColumnFacetPresent()) {\n        args.queryBuilder.advancedExpression.addFieldExpression(<string>this.options.columnField, '=', [this.selectedColumnValue]);\n      }\n    }\n  }\n\n  private handleDoneBuildingQuery(args: IDoneBuildingQueryEventArgs) {\n    this.groupByIndex = [];\n    this.addMainGroubByRequest(args.queryBuilder);\n    this.addColumnsGroupByRequests(args.queryBuilder);\n  }\n\n  private handleDeferredQuerySuccess(args: IQuerySuccessEventArgs) {\n    this.reset();\n    this.parseResults(args.results);\n    this.addTotals();\n    this.drawMatrix();\n    this.formatCells();\n    this.selectedRowValue = undefined;\n    this.selectedColumnValue = undefined;\n  }\n\n  private addMainGroubByRequest(queryBuilder: QueryBuilder) {\n    let groupBy: IGroupByRequest = {\n      field: <string>this.options.rowField,\n      sortCriteria: this.options.sortCriteria,\n      computedFields: this.getComputedFields(),\n      maximumNumberOfValues: this.options.maximumNumberOfRows\n    };\n\n    this.groupByIndex.push(queryBuilder.groupByRequests.length);\n    queryBuilder.groupByRequests.push(groupBy);\n  }\n\n  private addColumnsGroupByRequests(queryBuilder: QueryBuilder) {\n    for (let i = 0; i < this.options.columnFieldValues.length; i++) {\n      let groupBy = {\n        field: <string>this.options.rowField,\n        sortCriteria: this.options.sortCriteria,\n        computedFields: this.getComputedFields(),\n        queryOverride: '(' + this.buildExpression(queryBuilder) + ')' + '(' + this.options.columnField + '=\\'' + this.options.columnFieldValues[i] + '\\')',\n        maximumNumberOfValues: this.options.maximumNumberOfValuesInGroupBy\n      };\n\n      this.groupByIndex.push(queryBuilder.groupByRequests.length);\n      queryBuilder.groupByRequests.push(groupBy);\n    }\n  }\n\n  private buildExpression(queryBuilder: QueryBuilder) {\n    let expression = queryBuilder.expression.build();\n    let advancedExpression = queryBuilder.advancedExpression.build();\n    let constantExpression = queryBuilder.constantExpression.build();\n    let totalQuery = '';\n    if (expression) {\n      totalQuery += ' ' + expression;\n    }\n    if (advancedExpression) {\n      totalQuery += ' ' + advancedExpression;\n    }\n    if (constantExpression) {\n      totalQuery += ' ' + constantExpression;\n    }\n    return totalQuery;\n  }\n\n  private getComputedFields() {\n    let computedFields = [{\n      field: <string>this.options.computedField,\n      operation: this.options.computedFieldOperation\n    }];\n    return computedFields;\n  }\n\n  private getCellResult(results, rowNumber: number, columnNumber: number) {\n    let rowValue = this.getRowValue(rowNumber);\n    let columnValue = this.getColumnValue(columnNumber);\n    let cellResult = 0;\n\n    for (let i = 0; i < results.values.length; i++) {\n      if (results.values[i].value === rowValue) {\n        cellResult = results.values[i].computedFieldResults[0];\n        break;\n      }\n    }\n\n    if (this.isAColumnSelected() && !this.isColumnSelected(columnValue)) {\n      cellResult = 0;\n    }\n\n    return cellResult;\n  }\n\n  private addTotals() {\n    if (this.options.enableRowTotals) {\n      this.addRowTotals();\n    }\n    if (this.options.enableColumnTotals) {\n      this.addColumnTotals();\n    }\n  }\n\n  private addRowTotals() {\n    this.addColumn();\n    this.setValue('Total', 0, this.numberOfColumns - 1);\n    for (let i = 1; i < this.numberOfRows; i++) {\n      let rowTotal = this.computeRowTotal(i);\n      this.setValue(rowTotal, i, this.numberOfColumns - 1);\n    }\n\n    // Fix sort ordering when not all columns field values are present.\n    if (this.options.sortCriteria.toLowerCase() == 'computedfielddescending') {\n      this.data.sort((a: Cell[], b: Cell[]): number => {\n        return b[this.numberOfColumns - 1].getValue() - a[this.numberOfColumns - 1].getValue();\n      });\n    }\n\n    if (this.options.sortCriteria.toLowerCase() == 'computedfieldascending') {\n      this.data.sort((a: Cell[], b: Cell[]): number => {\n        return a[this.numberOfColumns - 1].getValue() - b[this.numberOfColumns - 1].getValue();\n      });\n    }\n  }\n\n  private addColumnTotals() {\n    this.addRow();\n    this.setValue('Total', this.numberOfRows - 1, 0);\n    for (let i = 1; i < this.numberOfColumns; i++) {\n      let columnTotal = this.computeColumnTotal(i);\n      this.setValue(columnTotal, this.numberOfRows - 1, i);\n    }\n  }\n\n  private computeRowTotal(rowNumber: number): number {\n    let total = 0;\n    for (let columnNumber = 1; columnNumber < this.numberOfColumns - 1; columnNumber++) {\n      total += parseInt(this.getCellValue(rowNumber, columnNumber));\n    }\n    return total;\n  }\n\n  private computeColumnTotal(columnNumber: number): number {\n    let total = 0;\n    for (let rowNumber = 1; rowNumber < this.numberOfRows - 1; rowNumber++) {\n      total += parseInt(this.getCellValue(rowNumber, columnNumber));\n    }\n    return total;\n  }\n\n  private formatCells() {\n    for (let i = 1; i < this.numberOfRows; i++) {\n      for (let j = 1; j < this.numberOfColumns; j++) {\n        let cellValue = this.getCellValue(i, j);\n        cellValue = Globalize.format(parseInt(cellValue), this.options.computedFieldFormat);\n        this.setValue(cellValue, i, j);\n      }\n    }\n  }\n\n  private addHeaderRow() {\n    this.addRow();\n    this.addColumn();\n    this.setValue(this.options.columnHeader, 0, 0);\n    for (let i = 0; i < this.options.columnLabels.length; i++) {\n      this.addColumn();\n      this.setValue(this.options.columnLabels[i], 0, i + 1);\n    }\n  }\n\n  private addRow() {\n    this.data.push(new Array<Cell>());\n\n    for (let i = 0; i < this.numberOfColumns; i++) {\n      this.addCellToRow(this.numberOfRows, i);\n    }\n    this.numberOfRows++;\n  }\n\n  private addColumn() {\n    for (let i = 0; i < this.numberOfRows; i++) {\n      this.addCellToRow(i, this.numberOfColumns);\n    }\n\n    this.numberOfColumns++;\n  }\n\n  private addCellToRow(rowNumber: number, columnNumber: number) {\n    let column = $$('div', {\n      className: 'coveo-matrix-cell'\n    });\n\n    if (columnNumber == 0) {\n      column.addClass('matrix-first-column');\n    }\n    this.data[rowNumber].push(new Cell(0, column.el));\n  }\n\n  private setValue(value: any, rowNumber: number, columnNumber: number) {\n    let cell = this.getCellElement(rowNumber, columnNumber);\n    if (!Utils.isNullOrUndefined(value)) {\n      $$(cell).text(value.toString());\n    }\n\n    if (this.isCellSelected(this.getRowValue(rowNumber), this.getColumnValue(columnNumber))) {\n      $$(cell).addClass('coveo-matrix-selected');\n    }\n\n    if (this.isAColumnSelected() && !this.isColumnSelected(this.getColumnValue(columnNumber))) {\n      if (columnNumber != 0 && rowNumber != 0) {\n        $$(cell).addClass('coveo-matrix-unimportant');\n      }\n    }\n\n    this.data[rowNumber][columnNumber].setValue(value);\n  }\n\n  private handleClick(rowNumber: number, columnNumber: number) {\n    this.selectCell(rowNumber, columnNumber);\n    this.queryController.executeQuery();\n  }\n\n  private getRowValue(rowNumber: number): string {\n    return this.data[rowNumber][0].getValue();\n  }\n\n  private getColumnValue(columnNumber: number): string {\n    return this.options.columnFieldValues[columnNumber - 1];\n  }\n\n  private isAColumnSelected(): boolean {\n    let selectedColumnValues = this.queryStateModel.get(this.columnId) || [];\n    return selectedColumnValues.length !== 0 || this.selectedColumnValue != undefined;\n  }\n\n  private isColumnSelected(columnValue: string): boolean {\n    if (this.isAColumnSelected() && columnValue) {\n      let selectedColumnValues = this.queryStateModel.attributes[this.columnId] || [];\n      for (let i = 0; i < selectedColumnValues.length; i++) {\n        if (selectedColumnValues[i].toLowerCase() === columnValue.toLowerCase()) {\n          return true;\n        }\n      }\n    }\n    return this.selectedColumnValue == columnValue;\n  }\n\n  private isARowSelected(): boolean {\n    let selectedRowValues = this.queryStateModel.get(this.rowId) || [];\n    return selectedRowValues.length !== 0 || this.selectedRowValue !== undefined;\n  }\n\n  private isRowSelected(rowValue: string): boolean {\n    if (this.isARowSelected() && rowValue) {\n      let selectedRowValues = this.queryStateModel.get(this.rowId) || [];\n      for (let i = 0; i < selectedRowValues.length; i++) {\n        if (selectedRowValues[i].toLowerCase() === rowValue.toLowerCase()) {\n          return true;\n        }\n      }\n    }\n    return this.selectedRowValue == rowValue;\n  }\n\n  private isCellSelected(rowValue: string, columnValue: string): boolean {\n    if (this.isAColumnSelected() && this.isARowSelected()) {\n      return this.isRowSelected(rowValue) && this.isColumnSelected(columnValue);\n    } else if (this.isAColumnSelected()) {\n      return this.isColumnSelected(columnValue);\n    }\n\n    return false;\n  }\n\n  private areFacetsPresent() {\n    return this.isRowFacetPresent() && this.isColumnFacetPresent();\n  }\n\n  private isRowFacetPresent() {\n    let facet = this.componentStateModel.get(this.rowId);\n    return facet && !facet[0].disabled;\n  }\n\n  private isColumnFacetPresent() {\n    let facet = this.componentStateModel.get(this.columnId);\n    return facet && !facet[0].disabled;\n  }\n\n  private reset() {\n    $$(this.element).empty();\n    this.numberOfRows = 0;\n    this.numberOfColumns = 0;\n    this.data = new Array<Array<Cell>>();\n\n    this.buildMatrix();\n  }\n\n  private parseResults(results: IQueryResults) {\n    if (results) {\n      let mainResults = results.groupByResults[this.groupByIndex[0]];\n      if (mainResults) {\n        for (let i = 0; i < mainResults.values.length; i++) {\n          let value = mainResults.values[i].value;\n          this.addRow();\n          this.setValue(value, i + 1, 0);\n        }\n      }\n\n      for (let i = 1; i < this.numberOfRows; i++) {\n        for (let j = 1; j < this.numberOfColumns; j++) {\n          let columnResult = results.groupByResults[this.groupByIndex[j]];\n          let cellValue = this.getCellResult(columnResult, i, j);\n          this.setValue(cellValue, i, j);\n        }\n      }\n    }\n\n  }\n\n  private drawRow(row: HTMLElement, rowNumber: number) {\n    let body = $$(this.element).find('.coveo-matrix');\n    for (let i = 0; i < this.numberOfColumns; i++) {\n      let cell = this.data[rowNumber][i].getHTML();\n      $$(cell).on('click', () => {\n        let handler = (num) => {\n          this.handleClick(rowNumber, num);\n        };\n        handler(i);\n      });\n\n      if (this.options.enableHoverPreview) {\n        ((num: number) => {\n          $$(cell).on('mouseover', () => this.handleHoverIn(rowNumber, num));\n          $$(cell).on('mouseout', () => this.handleHoverOut(rowNumber, num));\n        })(i);\n      }\n      row.appendChild(cell);\n    }\n    body.appendChild(row);\n  }\n\n  private handleHoverIn(rowNumber: number, columnNumber: number) {\n    if (this.isHoverWorkingOnRow(rowNumber) && this.isHoverWorkingOnColumn(columnNumber)) {\n      this.previewTimeout = setTimeout(() => {\n        this.displayResultsPreview(rowNumber, columnNumber);\n      }, this.options.previewDelay);\n    }\n  }\n\n  private handleHoverOut(rowNumber: number, columnNumber: number) {\n    clearTimeout(this.previewTimeout);\n    let cell = this.data[rowNumber][columnNumber];\n    cell.removePreview();\n  }\n\n  private displayResultsPreview(rowNumber: number, columnNumber: number) {\n    let query = this.createPreviewQuery(rowNumber, columnNumber);\n    let cell = this.data[rowNumber][columnNumber];\n    cell.addPreview(this.options.previewMinWidth, this.options.previewMaxWidth);\n\n    let endpoint = this.queryController.getEndpoint();\n    endpoint.search(query).then((data: IQueryResults) => {\n      // During the time it take for the query to return, the matrix can change size depending\n      // on if another query was performed : Need to check for undefined before accessing the data\n      // we're trying to render;\n      if (!this.isDataAvailable(rowNumber, columnNumber)) {\n        return;\n      }\n      let cell = this.data[rowNumber][columnNumber];\n      let instantiatedResults = _.map(data.results, (r: IQueryResult) => {\n        return this.instantiateTemplate(r);\n      });\n      let html = '';\n      _.each(instantiatedResults, (result) => {\n        html += result.outerHTML;\n      });\n      cell.updatePreview(html);\n    });\n  }\n\n  private instantiateTemplate(result: IQueryResult): HTMLElement {\n    let content = this.options.previewTemplate.instantiateToElement(result, {\n      checkCondition: false,\n      responsiveComponents: this.searchInterface.responsiveComponents\n    });\n    let initParameters: IInitializationParameters = {\n      options: this.options,\n      bindings: this.getBindings(),\n      result: result\n    };\n\n    Initialization.automaticallyCreateComponentsInside(content, initParameters);\n\n    return content;\n  }\n\n  private createPreviewQuery(rowNumber: number, columnNumber: number): IQuery {\n    let rowFieldExpression = '(' + QueryUtils.buildFieldExpression(<string>this.options.rowField, '=', [this.getRowValue(rowNumber)]) + ')';\n    let columnFieldExpression = '(' + QueryUtils.buildFieldExpression(<string>this.options.columnField, '=', [this.getColumnValue(columnNumber)]) + ')';\n    let query = this.queryController.getLastQuery();\n    query.aq = rowFieldExpression;\n    query.aq += columnFieldExpression;\n    query.sortCriteria = this.options.previewSortCriteria;\n    query.sortField = <string>this.options.previewSortField;\n    let fieldSliced = this.options.computedField.slice(1);\n    let fieldExists = _.find(query.fieldsToInclude, (field: string) => {\n      return field == fieldSliced;\n    });\n    if (!fieldExists && query.fieldsToInclude) {\n      query.fieldsToInclude.push(fieldSliced);\n    }\n    return query;\n  }\n\n  private isHoverWorkingOnRow(rowNumber: number) {\n    if (this.options.enableColumnTotals) {\n      return rowNumber !== 0 && rowNumber !== this.numberOfRows - 1;\n    }\n    return rowNumber !== 0;\n  }\n\n  private isHoverWorkingOnColumn(columnNumber: number) {\n    if (this.options.enableRowTotals) {\n      return columnNumber !== 0 && columnNumber !== this.numberOfColumns - 1;\n    }\n    return columnNumber !== 0;\n  }\n\n  private isDataAvailable(row: number, column: number) {\n    return this.data[row] !== undefined && this.data[row][column] !== undefined;\n  }\n\n}\n\nInitialization.registerAutoCreateComponent(Matrix);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Matrix/Matrix.ts\n **/","import { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\n/**\n * Represent a single cell of data in the {@link Matrix} component.\n */\nexport class Cell {\n  private value: any;\n  private element: HTMLElement;\n  private previewActive = false;\n\n  constructor(value: any = 0, el?: HTMLElement) {\n    this.element = el;\n    this.value = value;\n  }\n\n  /**\n   * Return the value of the cell.\n   * @returns {any}\n   */\n  public getValue(): any {\n    return this.value;\n  }\n\n  /**\n   * Return the `HTMLElement` for the cell.\n   * @returns {HTMLElement}\n   */\n  public getHTML(): HTMLElement {\n    return this.element;\n  }\n\n  /**\n   * Set the value if the cell.\n   * @param value\n   */\n  public setValue(value: any) {\n    this.value = value;\n  }\n\n  /**\n   * Set the `HTMLElement` for the cell.\n   * @param html\n   */\n  public setHTML(html: HTMLElement) {\n    this.element = html;\n  }\n\n  /**\n   * Show the preview of the cell.\n   * @param minWidth css minWidth property : eg 100px\n   * @param maxWidth css maxWidth property : eg 100px\n   */\n  public addPreview(minWidth: string, maxWidth: string) {\n    this.previewActive = true;\n    let previewContainer = $$('div', {\n      className: 'matrix-results-preview-container'\n    });\n    previewContainer.el.style.minWidth = minWidth;\n    previewContainer.el.style.maxWidth = maxWidth;\n    previewContainer.on('click', (e: MouseEvent) => {\n      e.stopPropagation();\n    });\n    this.element.appendChild(previewContainer.el);\n    let container = $$(this.element).findAll('.matrix-results-preview-container');\n    _.each(container, (c: HTMLElement) => {\n      $$(c).hide();\n    });\n  }\n\n  /**\n   * Remove the preview of the cell\n   */\n  public removePreview() {\n    this.previewActive = false;\n    let container = $$(this.element).find('.matrix-results-preview-container');\n    if (container) {\n      $$(container).detach();\n    }\n  }\n\n  /**\n   * Update the preview with a new template\n   * @param template\n   */\n  public updatePreview(template: string) {\n    if (this.previewActive) {\n      let preview = $$(this.element).find('.matrix-results-preview-container');\n      preview.innerHTML += template;\n      $$(preview).show();\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Matrix/Cell.ts\n **/","import { Template, IInstantiateTemplateOptions } from '../Templates/Template';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { $$ } from '../../utils/Dom';\nimport Globalize = require('globalize');\n\nexport class DefaultMatrixResultPreviewTemplate extends Template {\n\n  constructor(private computedField: string, private format: string) {\n    super();\n  }\n\n  instantiateToString(object?: IQueryResult, instantiateOptions?: IInstantiateTemplateOptions): string {\n    var preview = '<div class=\\'coveo-result-frame\\'>' +\n      '<div class=\\'coveo-result-row\\'>' +\n      '<div class=\\'coveo-result-cell\\' style=\\'width: 40px; padding-right:5px;vertical-align: middle\\'>' +\n      '<a class=\\'CoveoIcon\\' data-small=\\'true\\'></a>' +\n      '</div>' +\n      '<div class=\\'coveo-result-cell\\' style=\\'font-size:13px;vertical-align: middle\\'>' +\n      '<a class=\\'CoveoResultLink\\'></a>' +\n      '</div>' +\n      '<div class=\\'coveo-result-cell\\' style=\\'width:80px; text-align:right; font-size:13px; padding-right: 5px;vertical-align: middle\\'>' +\n      Globalize.format(parseInt(object.raw[this.computedField.slice(1)]), this.format) +\n      '</div>' +\n      '</div>' +\n      '</div>';\n    return preview;\n  }\n\n  instantiateToElement(object?: IQueryResult, instantiateOptions?: IInstantiateTemplateOptions): HTMLElement {\n    return $$('div', undefined, this.instantiateToString(object)).el;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Matrix/DefaultMatrixResultPreviewTemplate.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ResultLink } from '../ResultLink/ResultLink';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { $$, Dom } from '../../utils/Dom';\nimport { ModalBox as ModalBoxModule } from '../../ExternalModulesShim';\nimport _ = require('underscore');\nimport { get } from '../Base/RegisteredNamedMethods';\n\nexport interface IYouTubeThumbnailOptions {\n  width: string;\n  height: string;\n  embed: boolean;\n}\n\n/**\n * The YouTubeThumbnail component automatically fetches the thumbnail of a YouTube video.\n *\n * This component differs from the standard {@link Thumbnail} component because the thumbnail it outputs is always\n * clickable.\n *\n * Depending on the component configuration, clicking a YouTube thumbnail can either automatically open a modal box\n * containing the `iframe` from YouTube, or open the target URL in the current window (see\n * {@link YouTubeThumbnail.options.embed}).\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class YouTubeThumbnail extends Component {\n  static ID = 'YouTubeThumbnail';\n\n  /**\n   * @componentOptions\n   */\n  static options: IYouTubeThumbnailOptions = {\n\n    /**\n     * Specifies the width (in pixels) of the YouTube thumbnail.\n     *\n     * Default value is `200px`.\n     */\n    width: ComponentOptions.buildStringOption({ defaultValue: '200px' }),\n\n    /**\n     * Specifies the height (in pixels) of the YouTube thumbnail.\n     *\n     * Default value is `112px`.\n     */\n    height: ComponentOptions.buildStringOption({ defaultValue: '112px' }),\n\n    /**\n     * Specifies whether clicking on the YouTube thumbnail loads the video in a modal box.\n     *\n     * Setting this option to `false` causes the browser to change its current location to that of the target URL when\n     * the end user clicks the YouTube thumbnail.\n     *\n     * Default value is `true`.\n     */\n    embed: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  static fields = [\n    'ytthumbnailurl'\n  ];\n\n  public resultLink: Dom;\n\n  private modalbox: Coveo.ModalBox.ModalBox;\n\n  constructor(public element: HTMLElement, public options?: IYouTubeThumbnailOptions, public bindings?: IResultsComponentBindings, public result?: IQueryResult, public ModalBox = ModalBoxModule) {\n    super(element, YouTubeThumbnail.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, YouTubeThumbnail, options);\n    this.resultLink = $$('a');\n    this.resultLink.addClass(Component.computeCssClassName(ResultLink));\n\n    let thumbnailDiv = $$('div');\n    thumbnailDiv.addClass('coveo-youtube-thumbnail-container');\n    this.resultLink.append(thumbnailDiv.el);\n\n    let img = $$('img');\n    img.el.style.width = this.options.width;\n    img.el.style.height = this.options.height;\n    img.setAttribute('src', result.raw['ytthumbnailurl']);\n    img.addClass('coveo-youtube-thumbnail-img');\n    thumbnailDiv.append(img.el);\n\n    let span = $$('span');\n    span.addClass('coveo-youtube-thumbnail-play-button');\n    thumbnailDiv.append(span.el);\n\n\n    $$(this.element).append(this.resultLink.el);\n\n    if (this.options.embed) {\n      this.options = _.extend(this.options, {\n        onClick: () => this.openYoutubeIframe()\n      });\n    }\n\n    let initOptions = this.searchInterface.options.originalOptionsObject;\n    let resultComponentBindings: IResultsComponentBindings = _.extend({}, this.getBindings(), {\n      resultElement: element\n    });\n    let initParameters: IInitializationParameters = {\n      options: _.extend({}, { initOptions: { ResultLink: options } }, initOptions),\n      bindings: resultComponentBindings,\n      result: result\n    };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters);\n\n  }\n\n  /**\n   * Open the result link embedded in this component.\n   *\n   * With a standard configuration of this component, this will open an iframe that automatically plays the video.\n   */\n  public openResultLink() {\n    let resultLinkComponent = <ResultLink>get(this.resultLink.el);\n    resultLinkComponent.openLinkAsConfigured();\n  }\n\n  private openYoutubeIframe() {\n    // need to put iframe inside div : iframe with position absolute and left:0, right : 0 , bottom: 0 is not standard/supported\n    let iframe = $$('iframe'), div = $$('div');\n    iframe.setAttribute('src', 'https://www.youtube.com/embed/' + this.extractVideoId() + '?autoplay=1');\n    iframe.setAttribute('allowfullscreen', 'allowfullscreen');\n    iframe.setAttribute('webkitallowfullscreen', 'webkitallowfullscreen');\n    iframe.setAttribute('width', '100%');\n    iframe.setAttribute('height', '100%');\n\n    div.append(iframe.el);\n\n    this.modalbox = this.ModalBox.open(div.el, {\n      overlayClose: true,\n      title: DomUtils.getQuickviewHeader(this.result, { showDate: true, title: this.result.title }, this.bindings).el.outerHTML,\n      className: 'coveo-quick-view coveo-youtube-player',\n      validation: () => true,\n      body: this.element.ownerDocument.body\n    });\n\n    $$($$(this.modalbox.wrapper).find('.coveo-quickview-close-button')).on('click', () => {\n      this.modalbox.close();\n    });\n  }\n\n  private extractVideoId() {\n    return this.result.clickUri.split('watch?v=')[1];\n  }\n}\nInitialization.registerAutoCreateComponent(YouTubeThumbnail);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/YouTube/YouTubeThumbnail.ts\n **/","import { Template } from '../Templates/Template';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { DefaultResultAttachmentTemplate } from './DefaultResultAttachmentTemplate';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IResultAttachmentsOptions {\n  resultTemplate?: Template;\n  subResultTemplate?: Template;\n  maximumAttachmentLevel?: number;\n}\n\n/**\n * The ResultAttachments component renders attachments in a result set, for example when displaying emails. This\n * component is usable inside a result template when there is an active {@link Folding} component in the page.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class ResultAttachments extends Component {\n  static ID = 'ResultAttachments';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IResultAttachmentsOptions = {\n\n    /**\n     * Specifies the template to use to render each attachment for a top result.\n     *\n     * You can specify a previously registered template for this option by referring the HTML `id` attribute or a CSS\n     * selector for the template (see {@link TemplateCache}).\n     *\n     * **Examples:**\n     *\n     * Specifying a previously registered template by referring to its HTML `id` attribute:\n     *\n     * ```html\n     * <div class=\"CoveoResultAttachments\" data-result-template-id=\"Foo\"></div>\n     * ```\n     *\n     * Specifying a previously registered template by referring to a CSS selector:\n     *\n     * ```html\n     * <div class='CoveoResultAttachments' data-result-template-selector=\".Foo\"></div>\n     * ```\n     *\n     * By default, this option uses the template specified in a child element with a `script` tag\n     */\n    resultTemplate: ComponentOptions.buildTemplateOption({ defaultFunction: (e) => new DefaultResultAttachmentTemplate() }),\n\n    /**\n     * Specifies the template to use to render sub-attachments, which are attachments within attachments, for example\n     * when multiple files are embedded within a .zip attachment.\n     *\n     * Sub-attachments can themselves contain sub-attachments, and so on up to a certain level (see\n     * {@link ResultAttachments.options.maximumAttachmentLevel}).\n     *\n     * You can specify a previously registered template for this option by referring the HTML `id` attribute or a CSS\n     * selector for the template (see {@link TemplateCache}).\n     *\n     * **Example:**\n     *\n     * Specifying a previously registered template by referring to its HTML `id` attribute:\n     *\n     * ```html\n     * <div class=\"CoveoResultAttachments\" data-sub-result-template-id=\"Foo\"></div>\n     * ```\n     *\n     * Specifying a previously registered template by referring to a CSS selector:\n     *\n     * ```html\n     * <div class=\"CoveoResultAttachments\" data-sub-result-template-selector=\".Foo\"></div>\n     * ```\n     *\n     * By default, this option uses the same value as {@link ResultAttachments.options.resultTemplate}.\n     */\n    subResultTemplate: ComponentOptions.buildTemplateOption({ postProcessing: (value: Template, options: IResultAttachmentsOptions) => value != null ? value : options.resultTemplate }),\n\n    /**\n     * Specifies the maximum nesting depth. Beyond this depth, the component stops rendering sub-attachments.\n     *\n     * Default value is `5`. Minimum value is `0`.\n     */\n    maximumAttachmentLevel: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0 })\n  };\n\n  private attachments: IQueryResult[];\n\n  /**\n   * Creates a new ResultAttachments component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultAttachments component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   * @param attachmentLevel The nesting depth.\n   */\n  constructor(public element: HTMLElement, public options?: IResultAttachmentsOptions, public bindings?: IComponentBindings, result?: IQueryResult, public attachmentLevel = 0) {\n    super(element, ResultAttachments.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, ResultAttachments, options);\n\n    this.attachments = result.attachments;\n    if (Utils.isNonEmptyArray(this.attachments)) {\n      this.renderAttachments();\n    }\n  }\n\n  private renderAttachments() {\n    _.each(this.attachments, (attachment) => {\n      QueryUtils.setStateObjectOnQueryResult(this.queryStateModel.get(), attachment);\n      QueryUtils.setSearchInterfaceObjectOnQueryResult(this.searchInterface, attachment);\n      var container = this.attachmentLevel > 0 ? this.options.subResultTemplate.instantiateToElement(attachment) : this.options.resultTemplate.instantiateToElement(attachment);\n\n      this.autoCreateComponentsInsideResult(container, _.extend({}, attachment, { attachments: [] }));\n\n      $$(container).addClass('coveo-result-attachments-container');\n      this.element.appendChild(container);\n\n      if (this.attachmentHasSubAttachment(attachment) && this.attachmentLevel < this.options.maximumAttachmentLevel) {\n        var childAttachmentContainer = $$('div').el;\n        container.appendChild(childAttachmentContainer);\n        new ResultAttachments(childAttachmentContainer, this.options, this.bindings, attachment, this.attachmentLevel + 1);\n      }\n    });\n  }\n\n  private attachmentHasSubAttachment(attachment: IQueryResult) {\n    if (Utils.isNonEmptyArray(attachment.attachments)) {\n      return true;\n    } else if (Utils.isNonEmptyArray(attachment.childResults)) {\n      attachment.attachments = attachment.childResults;\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  private autoCreateComponentsInsideResult(element: HTMLElement, result: IQueryResult) {\n    Assert.exists(element);\n    var initOptions = this.searchInterface.options;\n    var initParameters: IInitializationParameters = {\n      options: initOptions,\n      bindings: this.getBindings(),\n      result: result\n    };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters, [ResultAttachments.ID]);\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultAttachments);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultAttachments/ResultAttachments.ts\n **/","import { Template } from '../Templates/Template';\nimport { IQueryResult } from '../../rest/QueryResult';\n\n\nexport class DefaultResultAttachmentTemplate extends Template {\n\n  constructor() {\n    super();\n  }\n\n  instantiateToString(queryResult?: IQueryResult): string {\n    return '<div><span class=\"CoveoIcon\"></span> <a class=\"CoveoResultLink\"></a> <span class=\"CoveoQuickview\"></span></div>';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultAttachments/DefaultResultAttachmentTemplate.ts\n **/","import { Template } from '../Templates/Template';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { DefaultFoldingTemplate } from './DefaultFoldingTemplate';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport _ = require('underscore');\n\nexport interface IResultFoldingOptions {\n  resultTemplate?: Template;\n  normalCaption?: string;\n  expandedCaption?: string;\n  moreCaption?: string;\n  lessCaption?: string;\n  oneResultCaption?: string;\n}\n\n/**\n * The ResultFolding component renders folded result sets. It is usable inside a result template when there is an active\n * {@link Folding} component in the page. This component takes care of rendering the parent result and its child results\n * in a coherent manner.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class ResultFolding extends Component {\n  static ID = 'ResultFolding';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IResultFoldingOptions = {\n\n    /**\n     * Specifies the template to use to render each of the child results for a top result.\n     *\n     * By default, it will use the template specified in a child element with a `script` tag. This can be specified\n     * directly as an attribute of the element.\n     *\n     * **Example:**\n     *\n     * With the following markup, the ResultFolding component will use a previously registered template ID (see\n     * {@link TemplateCache}):\n     *\n     * ```html\n     * <div class='CoveoResultFolding' data-result-template-id='Foo'></div>\n     * ```\n     */\n    resultTemplate: ComponentOptions.buildTemplateOption({ defaultFunction: () => new DefaultFoldingTemplate() }),\n\n    /**\n     * Specifies the caption to display at the top of the child results when the folding result set is not expanded.\n     *\n     * Default value is `undefined`, which displays no caption.\n     */\n    normalCaption: ComponentOptions.buildLocalizedStringOption(),\n\n    /**\n     * Specifies the caption to display at the top of the child results when the folding result set is expanded.\n     *\n     * Default value is `undefined`, which displays no caption.\n     */\n    expandedCaption: ComponentOptions.buildLocalizedStringOption(),\n\n    /**\n     * Specifies the caption to display on the link to expand / show child results.\n     *\n     * Default value is the localized string for `ShowMore`.\n     */\n    moreCaption: ComponentOptions.buildLocalizedStringOption({ postProcessing: (value) => value || l('ShowMore') }),\n\n    /**\n     * Specifies the caption to display on the link to shrink the loaded folding result set back to only the top result.\n     *\n     * Default value is the localized string for `ShowLess`.\n     */\n    lessCaption: ComponentOptions.buildLocalizedStringOption({ postProcessing: (value) => value || l('ShowLess') }),\n\n    /**\n     * Specifies the caption to display when there is only one result in a folding result set.\n     *\n     * Default value is the localized string for `DisplayingTheOnlyMessage`\n     */\n    oneResultCaption: ComponentOptions.buildLocalizedStringOption({ postProcessing: (value) => value || l('DisplayingTheOnlyMessage') })\n  };\n\n  private normalCaption: HTMLElement;\n  private expandedCaption: HTMLElement;\n  private oneResultCaption: HTMLElement;\n  private results: HTMLElement;\n  private showMore: HTMLElement;\n  private showLess: HTMLElement;\n  private waitAnimation: HTMLElement;\n  private moreResultsPromise: Promise<IQueryResult[]>;\n  private showingMoreResults = false;\n\n  public childResults: IQueryResult[];\n\n  /**\n   * Creates a new ResultFolding component.\n   * @param options The options for the ResultFolding component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IResultFoldingOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, ResultFolding.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(this.element, ResultFolding, options);\n\n    Assert.exists(result);\n\n    this.buildElements();\n    this.displayThoseResults(this.result.childResults);\n    this.updateElementVisibility();\n\n    if ($$(this.element.parentElement).hasClass('CoveoCardOverlay')) {\n      this.bindOverlayEvents();\n    }\n\n    if (this.result.childResults.length == 0 && !this.result.moreResults) {\n      $$(this.element).hide();\n    }\n  }\n\n  public showMoreResults() {\n    Assert.exists(this.result.moreResults);\n\n    this.cancelAnyPendingShowMore();\n    this.moreResultsPromise = this.result.moreResults();\n    this.waitAnimation = $$('div', { className: 'coveo-loading-spinner' }).el;\n    this.results.appendChild(this.waitAnimation);\n    this.updateElementVisibility();\n\n    this.moreResultsPromise\n      .then((results?: IQueryResult[]) => {\n        this.childResults = results;\n        this.showingMoreResults = true;\n        this.displayThoseResults(results);\n        this.updateElementVisibility(results.length);\n        return results;\n      })\n      .finally((results?: IQueryResult[]) => {\n        this.moreResultsPromise = undefined;\n        $$(this.waitAnimation).detach();\n        this.waitAnimation = undefined;\n      });\n  }\n\n  public showLessResults() {\n    this.cancelAnyPendingShowMore();\n    this.showingMoreResults = false;\n    this.displayThoseResults(this.result.childResults);\n    this.updateElementVisibility();\n    this.scrollToResultElement();\n  }\n\n  private buildElements() {\n    this.buildHeader();\n    this.buildResults();\n    this.buildFooter();\n  }\n\n  private buildHeader() {\n    let header = $$('div', { className: 'coveo-folding-header' }).el;\n    this.element.appendChild(header);\n    if (this.options.normalCaption != undefined && this.options.expandedCaption != undefined) {\n      this.normalCaption = $$('div', { className: 'coveo-folding-normal-caption' }, this.options.normalCaption).el;\n      header.appendChild(this.normalCaption);\n\n      this.expandedCaption = $$('div', { className: 'coveo-folding-expanded-caption' }, this.options.expandedCaption).el;\n      header.appendChild(this.expandedCaption);\n    }\n    this.oneResultCaption = $$('div', { className: 'coveo-folding-oneresult-caption' }, this.options.oneResultCaption).el;\n    header.appendChild(this.oneResultCaption);\n  }\n\n  private buildResults() {\n    this.results = $$('div', { className: 'coveo-folding-results' }).el;\n    this.element.appendChild(this.results);\n  }\n\n  private buildFooter() {\n    let footer = $$('div', { className: 'coveo-folding-footer' }).el;\n    this.element.parentElement.appendChild(footer);\n\n    if (this.result.moreResults) {\n      this.showMore = $$('div', { className: 'coveo-folding-footer-section-for-less' }).el;\n      $$(this.showMore).on('click', () => this.showMoreResults());\n      footer.appendChild(this.showMore);\n\n      this.showLess = $$('div', { className: 'coveo-folding-footer-section-for-more' }).el;\n      $$(this.showLess).on('click', () => this.showLessResults());\n      footer.appendChild(this.showLess);\n\n      let footerIconShowMore = $$('div', { className: 'coveo-more' }, $$('span', { className: 'coveo-folding-footer-icon' }).el).el;\n      let footerIconShowLess = $$('div', { className: 'coveo-less' }, $$('span', { className: 'coveo-folding-footer-icon' }).el).el;\n      let showMoreLink = $$('a', { className: 'coveo-folding-show-more' }, this.options.moreCaption).el;\n      let showLessLink = $$('a', { className: 'coveo-folding-show-less' }, this.options.lessCaption).el;\n      this.showMore.appendChild(showMoreLink);\n      this.showLess.appendChild(showLessLink);\n      this.showMore.appendChild(footerIconShowMore);\n      this.showLess.appendChild(footerIconShowLess);\n    }\n  }\n\n  private updateElementVisibility(subResultsLength?: number) {\n    if (this.normalCaption) {\n      $$(this.normalCaption).toggle(!this.showingMoreResults && this.result.childResults.length > 0);\n    }\n    if (this.expandedCaption) {\n      $$(this.expandedCaption).toggle(this.showingMoreResults);\n    }\n    $$(this.oneResultCaption).toggleClass('coveo-hidden', !(subResultsLength && subResultsLength == 1));\n\n    if (this.showMore) {\n      $$(this.showMore).toggle(!this.showingMoreResults && !Utils.exists(this.moreResultsPromise));\n      $$(this.showLess).toggle(this.showingMoreResults);\n    }\n\n    let showIfNormal = $$(this.element).find('.coveo-show-if-normal');\n    if (showIfNormal) {\n      $$(showIfNormal).toggle(!this.showingMoreResults);\n    }\n\n    let showIfExpanded = $$(this.element).find('.coveo-show-if-expanded');\n    if (showIfExpanded) {\n      $$(showIfExpanded).toggle(this.showingMoreResults);\n    }\n  }\n\n  private scrollToResultElement() {\n    let resultElem = $$(this.element).closest('CoveoResult');\n    window.scrollTo(0, window.scrollY + resultElem.getBoundingClientRect().top);\n  }\n\n  private displayThoseResults(results: IQueryResult[]) {\n    $$(this.results).empty();\n    _.each(results, (result) => {\n      this.renderChildResult(result);\n    });\n  }\n\n  private renderChildResult(childResult: IQueryResult) {\n    QueryUtils.setStateObjectOnQueryResult(this.queryStateModel.get(), childResult);\n    QueryUtils.setSearchInterfaceObjectOnQueryResult(this.searchInterface, childResult);\n\n    let oneChild = this.options.resultTemplate.instantiateToElement(childResult, {\n      wrapInDiv: false,\n      checkCondition: false,\n      responsiveComponents: this.searchInterface.responsiveComponents\n    });\n    $$(oneChild).addClass('coveo-result-folding-child-result');\n    this.results.appendChild(oneChild);\n\n    $$(oneChild).toggleClass('coveo-normal-child-result', !this.showingMoreResults);\n    $$(oneChild).toggleClass('coveo-expanded-child-result', this.showingMoreResults);\n    this.autoCreateComponentsInsideResult(oneChild, childResult);\n  }\n\n  private autoCreateComponentsInsideResult(element: HTMLElement, result: IQueryResult) {\n    Assert.exists(element);\n\n    let initOptions = this.searchInterface.options;\n    let initParameters: IInitializationParameters = { options: initOptions, bindings: this.getBindings(), result: result };\n    Initialization.automaticallyCreateComponentsInside(element, initParameters);\n  }\n\n  private cancelAnyPendingShowMore() {\n    if (this.moreResultsPromise) {\n      this.moreResultsPromise = undefined;\n    }\n\n    Assert.doesNotExists(this.moreResultsPromise);\n    Assert.doesNotExists(this.waitAnimation);\n  }\n\n  private bindOverlayEvents() {\n    this.bind.one(this.element.parentElement, 'openCardOverlay', () => {\n      if (this.result.moreResults) {\n        this.showMoreResults();\n      }\n    });\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultFolding);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultFolding/ResultFolding.ts\n **/","import { Template } from '../Templates/Template';\nimport { IQueryResult } from '../../rest/QueryResult';\n\nexport class DefaultFoldingTemplate extends Template {\n\n  constructor() {\n    super();\n  }\n\n  instantiateToString(queryResult?: IQueryResult): string {\n    return '<div class=\"coveo-child-result\"><span class=\"CoveoIcon\"></span> <a class=\"CoveoResultLink\"></a> <span class=\"CoveoQuickview\"></span></div>';\n  }\n\n  getType() {\n    return 'DefaultFoldingTemplate';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultFolding/DefaultFoldingTemplate.ts\n **/","import { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Initialization } from '../Base/Initialization';\nimport { FieldValue, IFieldValueOptions } from './FieldValue';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IBadgeOptions extends IFieldValueOptions {\n  colors: IBadgeColors;\n}\n\n/**\n * Badge Colors\n */\nexport interface IBadgeColors extends IBadgeColor {\n  values?: { [value: string]: IBadgeColors };\n}\n\nexport interface IBadgeColor {\n  icon?: string;\n  text?: string;\n}\n\n/**\n * The Badge component outputs a field value with customizable colors and an icon preceding it.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)). It\n * extends the {@link FieldValue} component. Therefore all FieldValue options are also available for a Badge component.\n */\nexport class Badge extends FieldValue implements IComponentBindings {\n  static ID = 'Badge';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IBadgeOptions = {\n\n    /**\n     * Specifies the colors for the Badge component.\n     *\n     * You must specify the colors in a JSON format similar to what follows:\n     * ```json\n     * {\n     *   \"values\":{\n     *     \"foo\":{\n     *       \"icon\":\"blue\",\n     *       \"text\":\"#222\"\n     *     },\n     *     \"bar\":{\n     *       \"icon\":\"green\",\n     *       \"text\":\"lightgreen\"\n     *     }\n     *   },\n     *   \"icon\":\"red\",\n     *   \"text\":\"#9ab52b\"\n     * }\n     * ```\n     * This format allows you to customize both the icon and text colors for each field value as well as the default\n     * values.\n     *\n     * Colors can be specified in HTML or hexadecimal format.\n     */\n    colors: ComponentOptions.buildCustomOption<IBadgeColors>((value: string) => Badge.parseColors(value), { defaultValue: { values: {} } }),\n    textCaption: ComponentOptions.buildLocalizedStringOption()\n  };\n\n  static parent = FieldValue;\n\n  /**\n   * Creates a new Badge component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Badge component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(element: HTMLElement, public options: IBadgeOptions, bindings?: IComponentBindings, result?: IQueryResult) {\n    super(element, ComponentOptions.initComponentOptions(element, Badge, options), bindings, result, Badge.ID);\n    if (_.isString(this.options.colors)) {\n      // to support the old string options\n      this.options.colors = Badge.parseColors(<any>this.options.colors);\n    }\n    if (this.options.colors.values == null) {\n      this.options.colors.values = {};\n    }\n  }\n\n  // The following regexes are used to match the old color format:\n\n  // This one matches a single color, e.g. either \"red\" or \"foo: blue\".\n  // Its capture groups will be the following :\n  // 0:( 1:() 2:(red)) or 0:( 1:(foo) 2:(blue))\n  private static colorRegex = /(?:\\s*((?:[^:;]|\\\\[;:])*)\\s*:\\s*)?(\\w+|#[A-Fa-f0-9]{6}|#[A-Fa-f0-9]{3})/g;\n  // This one matches all colors, separated by semicolons, e.g. \"red; foo: blue; bar: green\".\n  // It wraps 'colorRegex' in other capture groups, such as the following:\n  // 0:(red) 1:(foo: blue;) 2:(bar: green)\n  private static colorsRegex = new RegExp('^(\\\\s*' + Badge.colorRegex.source + '\\\\s*;)*(\\\\s*' + Badge.colorRegex.source + ')?\\\\s*$');\n\n  /**\n   * Parses a {@link Badge.options.colors} option string into a workable JSON format.\n   *\n   * @param colorsOption The colors option string to parse. See {@link Badge.options.colors}.\n   */\n  public static parseColors(colorsOption: string): IBadgeColors {\n    if (colorsOption) {\n      if (Badge.colorsRegex.test(colorsOption)) {\n        let badgeColors: IBadgeColors = {\n          values: {}\n        };\n        let colors: string[][] = StringUtils.match(colorsOption, Badge.colorRegex);\n        _.each(colors, (color: string[]) => {\n          let [, fieldValue, colorValue] = color;\n          if (fieldValue != null) {\n            badgeColors.values[fieldValue.replace(/\\\\(:|;)/g, '$1')] = {\n              icon: colorValue\n            };\n          } else {\n            badgeColors.icon = colorValue;\n          }\n        });\n        return badgeColors;\n      }\n      try {\n        return JSON.parse(colorsOption);\n      } catch (e) {\n        Assert.fail(`Invalid colors for badge '${colorsOption}'`);\n      }\n    }\n    return {};\n  }\n\n  /**\n   * Gets the icon and text color of a field value.\n   *\n   * @param value The field value whose colors to return.\n   * @returns {{icon: string, text: string}} An object with the `icon` and `text` keys.\n   */\n  public getColor(value: string = ''): IBadgeColor {\n    var colorKey = _.find(_.keys(this.options.colors.values), (key: string) => value.toLowerCase() == key.toLowerCase());\n    var color: IBadgeColor = colorKey ? this.options.colors.values[colorKey] : {};\n    return {\n      icon: color.icon || this.options.colors.icon,\n      text: color.text || this.options.colors.text,\n    };\n  }\n\n  /**\n   * Renders one string value with the appropriate colors and icon.\n   *\n   * @param value The field value to render.\n   * @returns {HTMLElement} An HTML `<span>` tag containing the rendered value.\n   */\n  public renderOneValue(value: string): HTMLElement {\n    let valueDom = super.renderOneValue(value);\n    $$(valueDom).addClass('coveo-value');\n\n    let color = this.getColor(value);\n\n    if (this.searchInterface.isNewDesign()) {\n      var icon = $$('span', { className: 'coveo-badge-icon' }).el;\n      if (color.icon != null) {\n        icon.style.color = color.icon;\n      }\n    } else if (color.icon != null) {\n      valueDom.style.background = color.icon;\n    }\n\n    let label = $$('span', { className: 'coveo-badge-label' }, valueDom.innerHTML).el;\n\n    if (color.text != null) {\n      label.style.color = color.text;\n    }\n\n    $$(valueDom).empty();\n\n    if (this.searchInterface.isNewDesign()) {\n      valueDom.appendChild(icon);\n    }\n    valueDom.appendChild(label);\n    return valueDom;\n  }\n\n  // Override the protected method from FieldValue class to ignore a potential textCaption on a Badge.\n  protected prependTextCaptionToDom(): void {\n    return;\n  }\n}\n\nBadge.options = _.omit(Badge.options, 'textCaption');\n\nInitialization.registerAutoCreateComponent(Badge);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FieldTable/Badge.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Initialization } from '../Base/Initialization';\nimport { Utils } from '../../utils/Utils';\nimport { IRatingRequest } from '../../rest/RatingRequest';\n\nexport enum RatingValues { Undefined, Lowest, Low, Average, Good, Best };\n\nexport interface IResultRatingOptions {\n}\n/**\n * The ResultRating component renders a 5-star rating widget. Interactive rating is possible if\n * {@link SearchInterface.options.enableCollaborativeRating} is `true`.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class ResultRating extends Component {\n  static ID = 'ResultRating';\n\n  /**\n   * Creates a new ResultRating component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultRating component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IResultRatingOptions, public bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, ResultRating.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ResultRating, options);\n\n    if (!Utils.isNullOrUndefined(result.rating)) {\n      this.renderComponent(element, result.rating);\n    }\n  }\n\n  private renderComponent(element: HTMLElement, rating: number) {\n    for (let starNumber = 1; starNumber <= 5; starNumber++) {\n      this.renderStar(element, starNumber <= rating, starNumber);\n    }\n  }\n\n  private renderStar(element: HTMLElement, isChecked: boolean, value: number) {\n    let star: Dom;\n    let starElement = $$(element).find('a[rating-value=\"' + value + '\"]');\n    if (starElement == null) {\n      star = $$('a');\n      element.appendChild(star.el);\n\n      if (this.bindings.searchInterface.options.enableCollaborativeRating) {\n        star.on('click', (e) => {\n          let targetElement: HTMLElement = <HTMLElement>e.currentTarget;\n          this.rateDocument(parseInt(targetElement.getAttribute('rating-value')));\n        });\n\n        star.on('mouseover', (e) => {\n          let targetElement: HTMLElement = <HTMLElement>e.currentTarget;\n          this.renderComponent(element, parseInt(targetElement.getAttribute('rating-value')));\n        });\n\n        star.on('mouseout', () => {\n          this.renderComponent(element, this.result.rating);\n        });\n      }\n\n      star.el.setAttribute('rating-value', value.toString());\n    } else {\n      star = $$(starElement);\n    }\n\n    let basePath: String = '';\n    if (this.searchInterface.isNewDesign()) {\n      basePath = 'coveo-sprites-';\n    } else {\n      basePath = 'coveo-sprites-common-';\n    }\n    star.toggleClass(basePath + 'star_placeholder', !isChecked);\n    star.toggleClass(basePath + 'star_active', isChecked);\n  }\n\n  /**\n   * Rates a document using the the specified `rating` value.\n   * @param rating The rating to assign to the document.\n   *\n   * The possible values are:\n   *\n   * - `0`: renders no star.\n   * - `1`: renders 1 star.\n   * - `2`: renders 2 stars.\n   * - `3`: renders 3 stars.\n   * - `4`: renders 4 stars.\n   * - `5`: renders 5 stars.\n   */\n  public rateDocument(rating: RatingValues) {\n    let request: IRatingRequest = {\n      rating: RatingValues[rating],\n      uniqueId: this.result.uniqueId\n    };\n\n    this.queryController.getEndpoint().rateDocument(request)\n      .then(() => {\n        this.result.rating = rating;\n        this.renderComponent(this.element, rating);\n      })\n      .catch(() => {\n        this.logger.error('An error occurred while rating the document');\n      });\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultRating);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultRating/ResultRating.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { PreferencesPanelEvents } from '../../events/PreferencesPanelEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\n\nexport interface IPreferencesPanelOptions {\n}\n\n/**\n * The PreferencesPanel component renders a **Preferences** item inside the {@link Settings} component which the end\n * user can click to access a panel from which it is possible to specify certain customization options for the search\n * interface. These customization options are then saved in the browser local storage.\n *\n * See also the {@link ResultsFiltersPreferences} and {@link ResultsPreferences} components.\n */\nexport class PreferencesPanel extends Component {\n  static ID = 'PreferencesPanel';\n\n  static options: IPreferencesPanelOptions = {};\n\n  /**\n   * Creates a new PreferencesPanel.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the PreferencesPanel component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IPreferencesPanelOptions, bindings?: IComponentBindings) {\n    super(element, PreferencesPanel.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, PreferencesPanel, options);\n    this.buildCloseButton();\n    this.buildTitle();\n\n    this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n      args.menuData.push({\n        className: 'coveo-preferences-panel',\n        text: l('Preferences'),\n        onOpen: () => this.open(),\n        onClose: () => this.close()\n      });\n    });\n  }\n\n  /**\n   * Opens the PreferencesPanel.\n   */\n  public open(): void {\n    $$(this.element).addClass('coveo-active');\n  }\n\n  /**\n   * Closes the PreferencesPanel without saving changes.\n   *\n   * Also triggers the `exitPreferencesWithoutSave` event.\n   */\n  public close(): void {\n    $$(this.element).removeClass('coveo-active');\n    $$(this.element).trigger(PreferencesPanelEvents.exitPreferencesWithoutSave);\n  }\n\n  /**\n   * Saves the changes and executes a new query.\n   *\n   * Also triggers the `savePreferences` event.\n   */\n  public save(): void {\n    $$(this.element).trigger(PreferencesPanelEvents.savePreferences);\n    this.queryController.executeQuery();\n  }\n\n  private buildCloseButton(): void {\n    var closeButton = $$('div', { className: 'coveo-preferences-panel-close' }, $$('span', { className: 'coveo-icon' }).el);\n    closeButton.on('click', () => {\n      this.close();\n    });\n    $$(this.element).prepend(closeButton.el);\n  }\n\n  private buildTitle(): void {\n    var title = $$('div', { className: 'coveo-preferences-panel-title' }, l('Preferences')).el;\n    $$(this.element).prepend(title);\n  }\n}\n\nInitialization.registerAutoCreateComponent(PreferencesPanel);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/PreferencesPanel/PreferencesPanel.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { LocalStorageUtils } from '../../utils/LocalStorageUtils';\nimport { KEYBOARD } from '../../utils/KeyboardUtils';\nimport { PreferencesPanel } from '../PreferencesPanel/PreferencesPanel';\nimport { PreferencesPanelCheckboxInput, PreferencesPanelTextAreaInput, PreferencePanelMultiSelectInput, IPreferencePanelInputToBuild } from '../PreferencesPanel/PreferencesPanelItem';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { PreferencesPanelEvents } from '../../events/PreferencesPanelEvents';\nimport { MODEL_EVENTS } from '../../models/Model';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { QueryStateModel, QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { BreadcrumbEvents, IPopulateBreadcrumbEventArgs } from '../../events/BreadcrumbEvents';\nimport { analyticsActionCauseList, IAnalyticsCustomFiltersChangeMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Tab } from '../Tab/Tab';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IResultFilterPreference {\n  selected?: boolean;\n  custom?: boolean;\n  tab?: string[];\n  caption: string;\n  expression: string;\n}\n\nexport interface IResultsFiltersPreferencesOptions {\n  filters?: {\n    [caption: string]: { expression: string; tab?: string[]; };\n  };\n  includeInBreadcrumb?: boolean;\n  showAdvancedFilters?: boolean;\n}\n\n/**\n * The ResultFiltersPreferences component allows the end user to create custom filters to apply to queries. These\n * filters are saved in the local storage of the end user.\n *\n * Only advanced end users who understand the Coveo query syntax should actually use this feature (see\n * [Coveo Query Sytax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n *\n * This component is normally accessible through the {@link Settings} menu. Its usual location in the DOM is inside the\n * {@link PreferencesPanel} component.\n *\n * See also the {@link ResultsPreferences} component.\n */\nexport class ResultsFiltersPreferences extends Component {\n  static ID = 'ResultsFiltersPreferences';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IResultsFiltersPreferencesOptions = {\n\n    /**\n     * Specifies whether to include the active filter(s) in the {@link Breadcrumb}.\n     *\n     * Default value is `true`.\n     */\n    includeInBreadcrumb: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to show the **Create** button that allows the end user to create filters.\n     *\n     * If you set this option to `false`, only the pre-populated {@link ResultsFiltersPreferences.options.filters} will\n     * be available to the end user.\n     *\n     * Default value is `true`.\n     */\n    showAdvancedFilters: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies the default filters that all end users can apply.\n     *\n     * End users will not be able to modify or delete these filters. They do not count as \"user-made\" filters, but\n     * rather as \"built-in\" filters created by the developer of the search page.\n     *\n     * You can only set this option in the `init` call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * Filters should follow this definition:\n     *\n     * `filters: { [caption: string]: { expression: string; tab?: string[]; } }`;\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * Coveo.init(document.querySelector('#search'), {\n     *   ResultsFiltersPreferences : {\n     *     filters : {\n     *       \"Only Google Drive Items\" : {\n     *         expression : \"@connectortype == 'GoogleDriveCrawler'\"\n     *         tab: ['Tab1', 'Tab2'],\n     *       },\n     *       \"Another Filter\" : {\n     *         expression : [ ... another expression ... ]\n     *       },\n     *       [ ... ]\n     *     }\n     *   }\n     * });\n     * ```\n     *\n     * Default value is `undefined`.\n     */\n    filters: <any>ComponentOptions.buildJsonOption()\n  };\n\n  public preferences: { [caption: string]: IResultFilterPreference };\n  private preferencePanelLocalStorage: LocalStorageUtils<{ [caption: string]: IResultFilterPreference }>;\n  private preferencePanel: HTMLElement;\n  private preferenceContainer: HTMLElement;\n  private preferencePanelCheckboxInput: PreferencesPanelCheckboxInput;\n  private advancedFilters: HTMLElement;\n  private advancedFiltersBuilder: HTMLElement;\n  private advancedFiltersTextInputCaption: PreferencesPanelTextAreaInput;\n  private advancedFiltersTextInputExpression: PreferencesPanelTextAreaInput;\n  private advancedFiltersTabSelect: PreferencePanelMultiSelectInput;\n  private advancedFilterFormValidate: HTMLFormElement;\n\n  /**\n   * Creates a new ResultsFiltersPreferences component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultsFiltersPreferences component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IResultsFiltersPreferencesOptions, public bindings: IComponentBindings) {\n    super(element, ResultsFiltersPreferences.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, ResultsFiltersPreferences, options);\n\n    this.preferencePanel = $$(this.element).closest(Component.computeCssClassName(PreferencesPanel));\n    this.preferencePanelLocalStorage = new LocalStorageUtils<{ [caption: string]: IResultFilterPreference }>(ResultsFiltersPreferences.ID);\n    this.mergeLocalPreferencesWithStaticPreferences();\n\n    this.bindPreferencePanelEvent();\n    this.bindBreadcrumbEvent();\n    this.bindQueryEvent();\n\n    // We need to wait after all components are initialized before building the dom, because this component interacts with Tab\n    // And we don't know if Tab(s) are initialized before or after this component.\n    this.bind.oneRootElement(InitializationEvents.afterComponentsInitialization, () => this.createDom());\n\n    this.bind.oneQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.T, () => this.fromPreferencesToCheckboxInput());\n  }\n\n  public createDom() {\n    this.buildTitle();\n    this.buildCheckboxesInput();\n    if (this.options.showAdvancedFilters) {\n      this.buildAdvancedFilters();\n    }\n  }\n\n  public save() {\n    this.fromCheckboxInputToPreferences();\n    var toSave = _.omit(this.preferences, 'tab');\n    this.logger.info('Saving preferences', toSave);\n    this.preferencePanelLocalStorage.save(toSave);\n  }\n\n  public exitWithoutSave() {\n    this.fromPreferencesToCheckboxInput();\n  }\n\n  private bindPreferencePanelEvent() {\n    this.bind.on(this.preferencePanel, PreferencesPanelEvents.savePreferences, () => this.save());\n    this.bind.on(this.preferencePanel, PreferencesPanelEvents.exitPreferencesWithoutSave, () => this.exitWithoutSave());\n  }\n\n  private bindBreadcrumbEvent() {\n    if (this.options.includeInBreadcrumb) {\n      this.bind.onRootElement(BreadcrumbEvents.populateBreadcrumb, (args: IPopulateBreadcrumbEventArgs) => this.handlePopulateBreadcrumb(args));\n      this.bind.onRootElement(BreadcrumbEvents.clearBreadcrumb, () => this.handleClearBreadcrumb());\n    }\n  }\n\n  private bindQueryEvent() {\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs) {\n    _.each(this.getActiveFilters(), (filter) => {\n      args.queryBuilder.advancedExpression.add(filter.expression);\n    });\n  }\n\n  private handlePopulateBreadcrumb(args: IPopulateBreadcrumbEventArgs) {\n    var actives = this.getActiveFilters();\n    if (Utils.isNonEmptyArray(actives)) {\n      var container = $$('div', { className: 'coveo-results-filter-preferences-breadcrumb' });\n      var title = $$('span', { className: 'coveo-title' });\n      title.text(l('FiltersInYourPreferences') + ':');\n      container.el.appendChild(title.el);\n\n      var valuesContainer = $$('span', { className: 'coveo-values' });\n      container.el.appendChild(valuesContainer.el);\n\n      for (var i = 0; i < actives.length; i++) {\n        if (i != 0) {\n          var separator = $$('span', {\n            className: 'coveo-separator'\n          });\n          separator.text(', ');\n          valuesContainer.el.appendChild(separator.el);\n        }\n        valuesContainer.el.appendChild(this.buildBreadcrumb(actives[i]));\n      }\n      args.breadcrumbs.push({ element: container.el });\n    }\n  }\n\n  private handleClearBreadcrumb() {\n    _.each(this.getActiveFilters(), (filter) => {\n      filter.selected = false;\n    });\n    this.fromPreferencesToCheckboxInput();\n  }\n\n  private buildTitle() {\n    this.element.appendChild($$('div', {\n      className: 'coveo-title'\n    }, l('ResultsFilteringExpression')).el);\n  }\n\n  private buildAdvancedFilters() {\n    this.advancedFilters = $$('div', { className: 'coveo-advanced-filters' }, l('Create')).el;\n    this.buildAdvancedFilterInput();\n    this.buildAdvancedFilterFormValidate();\n    this.advancedFiltersBuilder = $$('div', { className: 'coveo-advanced-filters-builder' }).el;\n    this.advancedFiltersBuilder.appendChild(this.advancedFilterFormValidate);\n    $$(this.advancedFilters).on('click', () => this.openAdvancedFilterSectionOrSaveFilters());\n    var onlineHelp = $$('a', {\n      href: 'http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10006',\n      className: 'coveo-online-help'\n    }, '?');\n\n    var title = $$(this.element).find('.coveo-title');\n\n    onlineHelp.insertAfter(title);\n    $$(this.advancedFilters).insertAfter(title);\n    this.element.appendChild(this.advancedFiltersBuilder);\n  }\n\n  private buildAdvancedFilterInput() {\n    this.advancedFiltersTextInputCaption = new PreferencesPanelTextAreaInput(<IPreferencePanelInputToBuild[]>[{\n      label: l('Caption'),\n      placeholder: l('EnterExpressionName'),\n      otherAttribute: 'required'\n    }], ResultsFiltersPreferences.ID + '-advanced-caption');\n    this.advancedFiltersTextInputExpression = new PreferencesPanelTextAreaInput(<IPreferencePanelInputToBuild[]>[{\n      label: l('Expression'),\n      placeholder: l('EnterExpressionToFilterWith'),\n      otherAttribute: 'required'\n    }], ResultsFiltersPreferences.ID + '-advanced-expression');\n    this.advancedFiltersTabSelect = new PreferencePanelMultiSelectInput({\n      label: l('Tab'),\n      placeholder: l('SelectTab')\n    }, this.getAllTabs(), ResultsFiltersPreferences.ID + '-multiselect');\n  }\n\n  private buildAdvancedFilterFormValidate() {\n    this.advancedFilterFormValidate = <HTMLFormElement>$$('form').el;\n\n    var formSubmit = $$('input', {\n      type: 'submit'\n    });\n\n    var saveFormButton = $$('span', {\n      className: 'coveo-save'\n    });\n\n    var closeFormButton = $$('span', {\n      className: 'coveo-close'\n    });\n\n    var saveAndCloseContainer = $$('div', {\n      className: 'coveo-choice-container coveo-close-and-save'\n    });\n\n    saveAndCloseContainer.el.appendChild(saveFormButton.el);\n    saveAndCloseContainer.el.appendChild(closeFormButton.el);\n\n    var inputCaption = this.advancedFiltersTextInputCaption.build();\n    $$(inputCaption).addClass('coveo-caption');\n\n    var filtersTabSelect = this.advancedFiltersTabSelect.build();\n    $$(filtersTabSelect).addClass('coveo-tab');\n\n    var filtersExpression = this.advancedFiltersTextInputExpression.build();\n    $$(filtersExpression).addClass('coveo-expression');\n\n    _.each([inputCaption, filtersTabSelect, filtersExpression, saveAndCloseContainer.el, formSubmit.el], (el: HTMLElement) => {\n      this.advancedFilterFormValidate.appendChild(el);\n    });\n\n    saveFormButton.on('click', () => {\n      formSubmit.el.click();\n    });\n    closeFormButton.on('click', () => $$(this.advancedFiltersBuilder).toggleClass('coveo-active'));\n\n    $$($$(this.advancedFilterFormValidate).find('textarea')).on('keyup', (e: KeyboardEvent) => {\n      if (e.keyCode == KEYBOARD.ENTER) {\n        formSubmit.trigger('click');\n      }\n    });\n\n    $$(this.advancedFilterFormValidate).on('submit', (e: Event) => this.validateAndSaveAdvancedFilter(e));\n  }\n\n  private getAllTabs() {\n    var tabRef = Component.getComponentRef('Tab');\n    if (tabRef) {\n      var tabsElement = $$(this.root).findAll('.' + Component.computeCssClassName(tabRef));\n      return _.map(tabsElement, (tabElement: HTMLElement) => {\n        let tab = <Tab>Component.get(tabElement);\n        return tab.options.id;\n      });\n    }\n  }\n\n  private getPreferencesBoxInputToBuild(): IPreferencePanelInputToBuild[] {\n    return _.map(this.preferences, (filter: IResultFilterPreference) => {\n      return {\n        label: filter.caption,\n        tab: filter.tab,\n        expression: filter.expression\n      };\n    });\n  }\n\n  private buildCheckboxesInput() {\n    if (this.preferenceContainer != undefined) {\n      this.preferenceContainer.remove();\n    }\n    var toBuild = this.getPreferencesBoxInputToBuild();\n    if (Utils.isNonEmptyArray(toBuild)) {\n      this.preferencePanelCheckboxInput = new PreferencesPanelCheckboxInput(toBuild, ResultsFiltersPreferences.ID);\n      this.preferenceContainer = $$('div', {\n        className: 'coveo-choices-container'\n      }).el;\n      this.preferenceContainer.appendChild(this.preferencePanelCheckboxInput.build());\n\n      _.each($$(this.preferenceContainer).findAll('.coveo-choice-container'), (choiceContainer: HTMLElement) => {\n        choiceContainer.appendChild($$('div', { className: 'coveo-section coveo-section-edit-delete' }).el);\n      });\n\n      $$(this.element).append(this.preferenceContainer);\n      this.buildEditAdvancedFilter();\n      this.buildDeleteAdvancedFilter();\n      this.fromPreferencesToCheckboxInput();\n      _.each($$(this.preferenceContainer).findAll('input'), (input: HTMLElement) => {\n        $$(input).on('change', (e: Event) => {\n          this.save();\n          var target: HTMLInputElement = <HTMLInputElement>e.target;\n          var filter = this.preferences[target.value];\n          this.fromFilterToAnalyticsEvent(filter, filter.selected ? 'selected' : 'unselected');\n          this.queryController.executeQuery();\n        });\n      });\n    }\n  }\n\n  private buildDeleteAdvancedFilter() {\n    _.each(this.preferences, (filter) => {\n      if (filter.custom) {\n        var deleteElement = $$('span', {\n          className: 'coveo-delete'\n        }, $$('span', {\n          className: 'coveo-icon'\n        }).el).el;\n        var filterElement = this.getFilterElementByCaption(filter.caption);\n        var insertInto = $$($$(filterElement).closest('coveo-section').parentElement).find('.coveo-section-edit-delete');\n        insertInto.appendChild(deleteElement);\n        $$(deleteElement).on('click', () => this.confirmDelete(filter, filterElement));\n      }\n    });\n  }\n\n  private buildEditAdvancedFilter() {\n    _.each(this.preferences, (filter) => {\n      if (filter.custom) {\n        var editElement = $$('span', {\n          className: 'coveo-edit'\n        }, $$('span', { className: 'coveo-icon' }));\n        var filterElement = this.getFilterElementByCaption(filter.caption);\n        var insertInto = $$($$(filterElement).closest('coveo-section').parentElement).find('.coveo-section-edit-delete');\n        insertInto.appendChild(editElement.el);\n        editElement.on('click', () => this.editElement(filter, filterElement));\n      }\n    });\n  }\n\n  private buildBreadcrumb(filter: IResultFilterPreference): HTMLElement {\n    var elem = $$('span', { className: 'coveo-value' });\n\n    var caption = $$('span', { className: 'coveo-caption' });\n    caption.text(filter.caption);\n    elem.el.appendChild(caption.el);\n\n    var clear = $$('span', { className: 'coveo-clear' });\n    elem.el.appendChild(clear.el);\n\n    elem.on('click', () => {\n      filter.selected = false;\n      this.fromFilterToAnalyticsEvent(filter, 'cleared from breadcrumb');\n      this.fromPreferencesToCheckboxInput();\n      this.queryController.executeQuery();\n    });\n\n    return elem.el;\n  }\n\n  private confirmDelete(filter: IResultFilterPreference, filterElement: HTMLElement) {\n    if (confirm(l('AreYouSureDeleteFilter', filter.caption, filter.expression))) {\n      var isSelected = filter.selected;\n      this.deleteFilterPreference(filter, filterElement);\n      if (isSelected) {\n        this.fromFilterToAnalyticsEvent(filter, 'deleted');\n        this.queryController.executeQuery();\n      }\n    }\n  }\n\n  private editElement(filter: IResultFilterPreference, filterElement: HTMLElement) {\n    var oldCaption = this.preferences[filter.caption].caption;\n    var oldTab = this.preferences[filter.caption].tab;\n    var oldExpression = this.preferences[filter.caption].expression;\n    this.deleteFilterPreference(filter, filterElement);\n    this.openAdvancedFilterSectionOrSaveFilters();\n    this.populateEditSection({ tab: oldTab, caption: oldCaption, expression: oldExpression });\n  }\n\n  private populateEditSection(toPopulate = { tab: [''], caption: '', expression: '' }) {\n    this.advancedFiltersTextInputCaption.setValue(l('Caption'), toPopulate.caption);\n    this.advancedFiltersTextInputExpression.setValue(l('Expression'), toPopulate.expression);\n    this.advancedFiltersTabSelect.setValues(toPopulate.tab);\n  }\n\n  private deleteFilterPreference(filter: IResultFilterPreference, filterElement: HTMLElement) {\n    this.preferencePanelLocalStorage.remove(filter.caption);\n    delete this.preferences[filter.caption];\n    $$($$(filterElement).closest('.coveo-choice-container')).detach();\n  }\n\n  private openAdvancedFilterSectionOrSaveFilters() {\n    if ($$(this.advancedFiltersBuilder).hasClass('coveo-active')) {\n      $$($$(this.advancedFilterFormValidate).find('input[type=submit]')).trigger('click');\n    } else {\n      this.populateEditSection();\n      $$(this.advancedFiltersBuilder).toggleClass('coveo-active');\n    }\n  }\n\n  private validateAndSaveAdvancedFilter(e: Event) {\n    e.preventDefault();\n    $$(this.advancedFiltersBuilder).removeClass('coveo-active');\n    var caption = this.advancedFiltersTextInputCaption.getValues()[0];\n    var expression = this.advancedFiltersTextInputExpression.getValues()[0];\n    var tabs = this.advancedFiltersTabSelect.getValues();\n    this.preferences[caption] = {\n      caption: caption,\n      custom: true,\n      expression: expression,\n      tab: tabs,\n      selected: true\n    };\n    this.buildCheckboxesInput();\n    this.save();\n    this.queryStateModel.set(QueryStateModel.attributesEnum.t, this.getActiveTab());\n    this.advancedFiltersTextInputCaption.reset();\n    this.advancedFiltersTextInputExpression.reset();\n    this.advancedFiltersTabSelect.reset();\n    this.element.appendChild(this.advancedFiltersBuilder);\n    this.fromFilterToAnalyticsEvent(this.preferences[caption], 'saved');\n    this.queryController.executeQuery();\n  }\n\n  private fromPreferencesToCheckboxInput() {\n    _.each(this.getActiveFilters(), (filter: IResultFilterPreference) => {\n      this.preferencePanelCheckboxInput.select(filter.caption);\n    });\n    _.each(this.getInactiveFilters(), (filter: IResultFilterPreference) => {\n      this.preferencePanelCheckboxInput.unselect(filter.caption);\n    });\n    _.each(this.getDormantFilters(), (filter: IResultFilterPreference) => {\n      this.preferencePanelCheckboxInput.select(filter.caption);\n    });\n  }\n\n  private fromCheckboxInputToPreferences() {\n    var selecteds = this.preferencePanelCheckboxInput.getSelecteds();\n    _.each(this.preferences, (filter: IResultFilterPreference) => {\n      if (_.contains(selecteds, filter.caption)) {\n        filter.selected = true;\n      } else {\n        filter.selected = false;\n      }\n    });\n  }\n\n  private getDormantFilters() {\n    var activeTab = this.getActiveTab();\n    return _.filter(this.preferences, (filter: IResultFilterPreference) => {\n      return filter.selected && !this.filterIsInActiveTab(filter, activeTab);\n    });\n  }\n\n  private getActiveFilters() {\n    var activeTab = this.getActiveTab();\n    return _.filter(this.preferences, (filter: IResultFilterPreference) => {\n      return filter.selected && this.filterIsInActiveTab(filter, activeTab);\n    });\n  }\n\n  private getInactiveFilters() {\n    var activeTab = this.getActiveTab();\n    return _.filter(this.preferences, (filter: IResultFilterPreference) => {\n      return !filter.selected || !this.filterIsInActiveTab(filter, activeTab);\n    });\n  }\n\n  private getActiveTab() {\n    return this.queryStateModel.get(QueryStateModel.attributesEnum.t);\n  }\n\n  private filterIsInActiveTab(filter: IResultFilterPreference, tab: string) {\n    filter.tab = _.compact(filter.tab);\n    return _.contains(filter.tab, tab) || Utils.isEmptyArray(filter.tab);\n  }\n\n  private getFilterElementByCaption(caption: string): HTMLElement {\n    return $$(this.preferenceContainer).find('input[value=\\'' + caption + '\\']').parentElement;\n  }\n\n  private fromResultsFilterOptionToResultsPreferenceInterface() {\n    var ret: { [key: string]: IResultFilterPreference } = {};\n    _.each(<any>this.options.filters, (filter: { expression: string; tab?: string[]; selected?: boolean }, caption: string) => {\n      ret[caption] = {\n        expression: filter.expression,\n        tab: filter.tab,\n        selected: filter.selected ? filter.selected : false,\n        custom: false,\n        caption: caption\n      };\n    });\n    return ret;\n  }\n\n  private mergeLocalPreferencesWithStaticPreferences() {\n    var staticPreferences = this.fromResultsFilterOptionToResultsPreferenceInterface();\n    var localPreferences = this.preferencePanelLocalStorage.load();\n    var localPreferencesWithoutRemoved = _.filter<IResultFilterPreference>(localPreferences, (preference) => {\n      var isCustom = preference.custom;\n      var existsInStatic = _.find<IResultFilterPreference>(staticPreferences, (staticPreference) => {\n        return staticPreference.caption == preference.caption;\n      });\n      return isCustom || existsInStatic != undefined;\n    });\n\n    var localToMerge = {};\n    _.each(localPreferencesWithoutRemoved, (filter: IResultFilterPreference) => {\n      localToMerge[filter.caption] = {\n        expression: filter.expression,\n        tab: filter.tab,\n        selected: filter.selected,\n        custom: filter.custom,\n        caption: filter.caption\n      };\n    });\n    this.preferences = <{ [caption: string]: IResultFilterPreference; }>Utils.extendDeep(staticPreferences, localToMerge);\n  }\n\n  private fromFilterToAnalyticsEvent(filter: IResultFilterPreference, type: string) {\n    this.usageAnalytics.logSearchEvent<IAnalyticsCustomFiltersChangeMeta>(analyticsActionCauseList.customfiltersChange, {\n      customFilterName: filter.caption,\n      customFilterExpression: filter.expression,\n      customFilterType: type\n    });\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultsFiltersPreferences);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultsFiltersPreferences/ResultsFiltersPreferences.ts\n **/","import { $$ } from '../../utils/Dom';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport _ = require('underscore');\n\nexport interface IPreferencePanelInputToBuild {\n  label: string;\n  placeholder?: string;\n  tab?: string[];\n  expression?: string;\n  otherAttribute?: string;\n}\n\nexport class PreferencesPanelBoxInput {\n  public inputs: { [label: string]: HTMLElement } = {};\n  constructor(private boxInputToBuild: IPreferencePanelInputToBuild[], private nameOfInput: string, private type: string) {\n  }\n\n  public build(): HTMLElement {\n    return _.reduce(_.map(this.boxInputToBuild, (toBuild) => {\n      let choiceContainer = $$('div', {\n        className: 'coveo-choice-container'\n      });\n\n      let sectionInput = $$('div', {\n        className: 'coveo-section coveo-section-input'\n      });\n\n      let input = $$('input', {\n        className: `coveo-${toBuild.label}`,\n        id: `coveo-${toBuild.label}`,\n        type: this.type,\n        name: this.nameOfInput,\n        value: toBuild.label\n      });\n\n      if (toBuild.otherAttribute) {\n        input.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n      }\n\n      let inputIcon = $$('span', {\n        className: 'coveo-input-icon'\n      });\n\n      let label = $$('label', {\n        className: 'coveo-preferences-panel-item-label',\n        'for': `coveo-${toBuild.label}`,\n      });\n      label.text(toBuild.label);\n\n      sectionInput.append(input.el);\n      sectionInput.append(inputIcon.el);\n      sectionInput.append(label.el);\n\n      let sectionTab = $$('div', {\n        className: 'coveo-section coveo-section-tab'\n      });\n      if (toBuild.tab) {\n        sectionTab.text(toBuild.tab.join(' '));\n      }\n      let sectionExpression = $$('div', {\n        className: 'coveo-section coveo-section-expression'\n      });\n      sectionExpression.text(toBuild.expression);\n\n      choiceContainer.append(sectionInput.el);\n      choiceContainer.append(sectionTab.el);\n      choiceContainer.append(sectionExpression.el);\n      this.inputs[toBuild.label] = $$('div', undefined, choiceContainer).el;\n      return this.inputs[toBuild.label];\n    }), (memo: HTMLElement, input: HTMLElement) => {\n      memo.appendChild(input);\n      return memo;\n    }, $$('div').el);\n  }\n\n  public select(toSelect: string) {\n    Assert.exists(this.inputs[toSelect]);\n    var input = <HTMLInputElement>$$(this.inputs[toSelect]).find('input');\n    input.checked = true;\n    $$($$(this.inputs[toSelect]).find('.coveo-input-icon')).addClass('coveo-selected');\n  }\n\n  public unselect(toUnselect: string) {\n    Assert.exists(this.inputs[toUnselect]);\n    var input = <HTMLInputElement>$$(this.inputs[toUnselect]).find('input');\n    input.checked = false;\n    $$($$(this.inputs[toUnselect]).find('.coveo-input-icon')).removeClass('coveo-selected');\n  }\n\n  public getSelected(): string {\n    var checked = _.find(this.inputs, (el: HTMLElement) => {\n      var input = <HTMLInputElement>$$(el).find('input');\n      return input.checked;\n    });\n    return (<HTMLInputElement>$$(checked).find('input')).value;\n  }\n\n  public getSelecteds(): string[] {\n    var checkeds = _.filter(this.inputs, (el: HTMLElement) => {\n      var input = <HTMLInputElement>$$(el).find('input');\n      return input.checked;\n    });\n\n    return _.map(checkeds, (checked) => {\n      return (<HTMLInputElement>$$(checked).find('input')).value;\n    });\n  }\n}\n\nexport class PreferencesPanelRadioInput extends PreferencesPanelBoxInput {\n  constructor(private radioElementToBuild: IPreferencePanelInputToBuild[], private name: string) {\n    super(radioElementToBuild, name, 'radio');\n  }\n}\n\nexport class PreferencesPanelCheckboxInput extends PreferencesPanelBoxInput {\n  constructor(private checkboxElementToBuild: IPreferencePanelInputToBuild[], public name: string) {\n    super(checkboxElementToBuild, name, 'checkbox');\n  }\n\n  public build(): HTMLElement {\n    var build = super.build();\n    var icons = $$(build).findAll('.coveo-input-icon');\n    _.each(icons, (icon: HTMLElement) => {\n      var input = <HTMLInputElement>$$(icon.parentElement).find('input');\n      $$(input).on('change', () => {\n        var checked = input.checked;\n        $$(icon).toggleClass('coveo-selected', checked);\n      });\n\n      $$(icon).on('click', () => {\n        input.checked = !input.checked;\n        $$(input).trigger('change');\n      });\n    });\n    return build;\n  }\n}\n\nexport class PreferencesPanelTextInput {\n  public inputs: { [label: string]: HTMLElement } = {};\n\n  constructor(public textElementToBuild: IPreferencePanelInputToBuild[], public name: string) {\n  }\n\n  public build(): HTMLElement {\n    return _.reduce(_.map(this.textElementToBuild, (toBuild) => {\n      let choiceContainer = $$('div', {\n        className: 'coveo-choice-container'\n      });\n\n      let input = $$('input', {\n        className: `coveo-${toBuild.label}`,\n        id: `coveo-${toBuild.label}`,\n        type: 'text',\n        name: this.name,\n        placeholder: toBuild.placeholder || toBuild.label\n      });\n\n      if (toBuild.otherAttribute) {\n        input.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n      }\n\n      choiceContainer.append(input.el);\n\n      this.inputs[toBuild.label] = $$('div', undefined, choiceContainer).el;\n      return this.inputs[toBuild.label];\n    }), (memo: HTMLElement, input: HTMLElement) => {\n      memo.appendChild(input);\n      return memo;\n    }, $$('div').el);\n  }\n\n  public getValues(): string[] {\n    return _.map(this.inputs, (input, key) => {\n      return (<HTMLInputElement>this.getInput(key)).value;\n    });\n  }\n\n  public setValue(input: string, value: string) {\n    Assert.exists(this.inputs[input]);\n    (<HTMLInputElement>this.getInput(input)).value = value;\n  }\n\n  public reset(): void {\n    _.each(this.inputs, (input: HTMLElement) => {\n      var inputElement: HTMLInputElement | HTMLTextAreaElement = (<HTMLInputElement>$$(input).find('input'));\n      if (!inputElement) {\n        inputElement = (<HTMLTextAreaElement>$$(input).find('textarea'));\n      }\n      inputElement.value = '';\n    });\n  }\n\n  private getInput(input: string): HTMLElement {\n    Assert.exists(this.inputs[input]);\n    var found = $$(this.inputs[input]).find('input');\n    if (!found) {\n      found = $$(this.inputs[input]).find('textarea');\n    }\n    return found;\n  }\n}\n\nexport class PreferencesPanelTextAreaInput extends PreferencesPanelTextInput {\n\n  public build(): HTMLElement {\n    return _.reduce(_.map(this.textElementToBuild, (toBuild) => {\n      let choiceContainer = $$('div', {\n        className: 'coveo-choice-container'\n      });\n\n      let textArea = $$('textarea', {\n        className: `coveo-${toBuild.label}`,\n        name: `coveo-${toBuild.label}`,\n        placeholder: toBuild.placeholder || toBuild.label\n      });\n\n      if (toBuild.otherAttribute) {\n        textArea.setAttribute(toBuild.otherAttribute, toBuild.otherAttribute);\n      }\n      choiceContainer.append(textArea.el);\n\n      this.inputs[toBuild.label] = $$('div', undefined, choiceContainer).el;\n      return this.inputs[toBuild.label];\n    }), (memo: HTMLElement, input: HTMLElement) => {\n      memo.appendChild(input);\n      return memo;\n    }, $$('div').el);\n  }\n}\n\nexport class PreferencePanelMultiSelectInput {\n  private textInput: PreferencesPanelTextAreaInput;\n  private select: HTMLSelectElement;\n\n  constructor(private toBuild: IPreferencePanelInputToBuild, public options: string[], public name: string) {\n    this.textInput = new PreferencesPanelTextAreaInput([{ label: toBuild.label, otherAttribute: 'readonly' }], name);\n  }\n\n  public build() {\n    this.select = <HTMLSelectElement>$$('select').el;\n    this.select.setAttribute('multiple', 'multiple');\n    _.each(this.options, (option) => {\n      var optEl = $$('option', undefined, option).el;\n      this.select.appendChild(optEl);\n    });\n    $$(this.select).on('change', () => {\n      var values: string[] = _.chain(<any>this.select.options)\n        .filter((opt: HTMLOptionElement) => {\n          return opt.selected;\n        })\n        .map((opt: HTMLOptionElement) => {\n          return opt.value;\n        })\n        .value();\n\n      if (!Utils.isNullOrUndefined(values) && !Utils.isEmptyArray(values)) {\n        this.textInput.setValue(this.toBuild.label, values.join(','));\n      } else {\n        this.reset();\n      }\n    });\n    var el = this.textInput.build();\n    el.appendChild(this.select);\n    return el;\n  }\n\n  public getValues() {\n    return this.textInput.getValues()[0].split(',');\n  }\n\n  public setValues(values: string[]) {\n    this.textInput.setValue(this.toBuild.label, values.join(','));\n  }\n\n  public reset() {\n    this.textInput.setValue(this.toBuild.label, '');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/PreferencesPanel/PreferencesPanelItem.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { Initialization } from '../Base/Initialization';\nimport Globalize = require('globalize');\n\nexport interface IQueryDurationOptions {\n}\n\n/**\n * The QueryDuration component displays the duration of the last query execution.\n *\n * When a {@link QueryEvents.querySuccess} event is triggered, the QueryDuration component becomes visible. It also\n * displays the global duration, the index duration, the proxy duration, and the client duration in a single tooltip.\n *\n * If a {@link QueryEvents.queryError} event is triggered, the QueryDuration component becomes hidden.\n */\nexport class QueryDuration extends Component {\n  static ID = 'QueryDuration';\n\n  static options: IQueryDurationOptions = {\n  };\n\n  private textContainer: HTMLElement;\n\n  /**\n   * Creates a new QueryDuration component.\n   * Binds handlers on the {@link QueryEvents.querySuccess} and {@link QueryEvents.queryError} events.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the QueryDuration component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IQueryDurationOptions, bindings?: IComponentBindings) {\n    super(element, QueryDuration.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, QueryDuration, options);\n\n    this.bind.onRootElement(QueryEvents.querySuccess, (data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data));\n    this.bind.onRootElement(QueryEvents.queryError, () => $$(this.element).hide());\n    this.element.style.display = 'none';\n    this.textContainer = $$('span').el;\n    this.element.appendChild(this.textContainer);\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (!this.disabled && data.results.results.length > 0) {\n      Assert.exists(data);\n\n      let tooltip = [\n        l('Duration', this.formatQueryDuration(data.results.duration)),\n        l('IndexDuration', this.formatQueryDuration(data.results.indexDuration)),\n        l('ProxyDuration', this.formatQueryDuration(data.results.proxyDuration)),\n        l('ClientDuration', this.formatQueryDuration(data.results.clientDuration))\n      ].join('\\n');\n\n      this.textContainer.textContent = this.formatQueryDuration(data.results.duration);\n      this.element.setAttribute('title', tooltip);\n      this.element.style.display = 'inline';\n    } else {\n      this.element.style.display = 'none';\n    }\n  }\n\n  private formatQueryDuration(durationInMillis: number): string {\n    if (durationInMillis == undefined) {\n      return l('Unavailable');\n    } else {\n      var seconds = Math.max(durationInMillis / 1000, 0.01);\n      if (String['locale'] === 'en') {\n        return l('Seconds', Globalize.format(seconds, 'n2'), seconds, true);\n      } else {\n        return l('Seconds', Globalize.format(seconds, 'n2'), seconds);\n      }\n    }\n  }\n}\nInitialization.registerAutoCreateComponent(QueryDuration);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/QueryDuration/QueryDuration.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { $$, Dom } from '../../utils/Dom';\nimport { Assert } from '../../misc/Assert';\nimport { l } from '../../strings/Strings';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport Globalize = require('globalize');\nimport { QuerySummaryEvents } from '../../events/QuerySummaryEvents';\nimport _ = require('underscore');\n\nexport interface IQuerySummaryOptions {\n  enableSearchTips?: boolean;\n  onlyDisplaySearchTips?: boolean;\n}\n\n/**\n * The QuerySummary component can display information about the currently displayed range of results (e.g., \"Results\n * 1-10 of 123\").\n *\n * If the query matches no document, the QuerySummary component can instead display tips to help the end user formulate\n * a better query.\n */\nexport class QuerySummary extends Component {\n  static ID = 'QuerySummary';\n\n  /**\n   * Options for the component\n   * @componentOptions\n   */\n  static options: IQuerySummaryOptions = {\n\n    /**\n     * Specifies whether to display the search tips to the end user when there are no search results.\n     *\n     * Default value is `true`.\n     */\n    enableSearchTips: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to hide the information about the currently displayed range of results and only display the\n     * search tips instead.\n     *\n     * Default value is `false`.\n     */\n    onlyDisplaySearchTips: ComponentOptions.buildBooleanOption({ defaultValue: false })\n  };\n\n  private textContainer: HTMLElement;\n  private lastKnownGoodState: any;\n\n  /**\n   * Creates a new QuerySummary component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the QuerySummary component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IQuerySummaryOptions, bindings?: IComponentBindings) {\n    super(element, QuerySummary.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, QuerySummary, options);\n    this.bind.onRootElement(QueryEvents.querySuccess, (data: IQuerySuccessEventArgs) => this.handleQuerySuccess(data));\n    this.bind.onRootElement(QueryEvents.queryError, () => this.hide());\n    this.hide();\n    this.textContainer = $$('span').el;\n    this.element.appendChild(this.textContainer);\n  }\n\n  private hide() {\n    $$(this.element).addClass('coveo-hidden');\n  }\n\n  private show() {\n    $$(this.element).removeClass('coveo-hidden');\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    $$(this.textContainer).empty();\n    this.show();\n\n    if (!this.options.onlyDisplaySearchTips) {\n      if (data.results.results.length > 0) {\n        let first = Globalize.format(data.query.firstResult + 1, 'n0');\n        let last = Globalize.format(data.query.firstResult + data.results.results.length, 'n0');\n        let totalCount = Globalize.format(data.results.totalCountFiltered, 'n0');\n\n        let highlightFirst = $$('span', { className: 'coveo-highlight' }, first).el;\n        let highlightLast = $$('span', { className: 'coveo-highlight' }, last).el;\n        let highlightTotal = $$('span', { className: 'coveo-highlight' }, totalCount).el;\n\n        this.textContainer.innerHTML = l('ShowingResultsOf', highlightFirst.outerHTML, highlightLast.outerHTML, highlightTotal.outerHTML, data.results.results.length);\n      }\n    }\n\n    if (data.results.exception != null && data.results.exception.code != null) {\n      let code: string = ('QueryException' + data.results.exception.code).toLocaleString();\n      this.textContainer.innerHTML = l('QueryException', code);\n    } else if (data.results.results.length == 0) {\n      this.displayInfoOnNoResults();\n    } else {\n      this.lastKnownGoodState = this.queryStateModel.getAttributes();\n    }\n  }\n\n  private displayInfoOnNoResults() {\n    let queryEscaped = _.escape(this.queryStateModel.get(QueryStateModel.attributesEnum.q));\n    let noResultsForString: Dom;\n\n    if (queryEscaped != '') {\n      noResultsForString = $$('div', {\n        className: 'coveo-query-summary-no-results-string'\n      }, l('noResultFor', $$('span', { className: 'coveo-highlight' }, queryEscaped).el.outerHTML));\n    }\n    let cancelLastAction = $$('div', {\n      className: 'coveo-query-summary-cancel-last'\n    }, l('CancelLastAction'));\n\n    cancelLastAction.on('click', () => {\n      this.usageAnalytics.logCustomEvent<IAnalyticsNoMeta>(analyticsActionCauseList.noResultsBack, {}, this.root);\n      this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.noResultsBack, {});\n      if (this.lastKnownGoodState) {\n        this.queryStateModel.reset();\n        this.queryStateModel.setMultiple(this.lastKnownGoodState);\n        $$(this.root).trigger(QuerySummaryEvents.cancelLastAction);\n        this.queryController.executeQuery();\n      } else {\n        history.back();\n      }\n    });\n\n    let searchTipsInfo = $$('div', {\n      className: 'coveo-query-summary-search-tips-info'\n    });\n    searchTipsInfo.text(l('SearchTips'));\n    let searchTips = $$('ul');\n\n    let checkSpelling = $$('li');\n    checkSpelling.text(l('CheckSpelling'));\n\n    let fewerKeywords = $$('li');\n    fewerKeywords.text(l('TryUsingFewerKeywords'));\n\n    searchTips.el.appendChild(checkSpelling.el);\n    searchTips.el.appendChild(fewerKeywords.el);\n\n    if (this.queryStateModel.atLeastOneFacetIsActive()) {\n      let fewerFilter = $$('li');\n      fewerFilter.text(l('SelectFewerFilters'));\n      searchTips.el.appendChild(fewerFilter.el);\n    }\n\n    if (this.options.enableSearchTips) {\n      if (noResultsForString) {\n        this.textContainer.appendChild(noResultsForString.el);\n      }\n      this.textContainer.appendChild(cancelLastAction.el);\n      this.textContainer.appendChild(searchTipsInfo.el);\n      this.textContainer.appendChild(searchTips.el);\n    } else {\n      if (noResultsForString) {\n        this.textContainer.appendChild(noResultsForString.el);\n      }\n      this.textContainer.appendChild(cancelLastAction.el);\n    }\n  }\n}\nInitialization.registerAutoCreateComponent(QuerySummary);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/QuerySummary/QuerySummary.ts\n **/","/**\n * Argument sent to all handlers bound on {@link QuerySummaryEvents.cancelLastAction}\n */\nexport interface IQuerySummaryCancelLastActionArgs {\n}\n\n/**\n * This static class is there to contains the different string definition for all the events related to the {@link AdvancedSearch} component.\n */\nexport class QuerySummaryEvents {\n  /**\n   * Triggered when the last action is being cancelled by the query summary component\n   *\n   * Allows external code to revert their last action.\n   * @type {string}\n   */\n  public static cancelLastAction = 'cancelLastAction';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/QuerySummaryEvents.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { $$ } from '../../utils/Dom';\nimport { PopupUtils, IPosition, HorizontalAlignment, VerticalAlignment } from '../../utils/PopupUtils';\nimport { IMenuItem } from '../Menu/MenuItem';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { Initialization } from '../Base/Initialization';\nimport _ = require('underscore');\n\nexport interface ISettingsPopulateMenuArgs {\n  settings: Settings;\n  menuData: IMenuItem[];\n}\n\nexport interface ISettingsOptions {\n  menuDelay: number;\n}\n\n/**\n * The Settings component renders a **Settings** button that the end user can click to access a popup menu from which\n * it is possible to perform several contextual actions. The usual location of the **Settings** button in the page is to\n * the right of the {@link Searchbox}.\n *\n * This component can reference several components to populate its popup menu:\n * - {@link AdvancedSearch}\n * - {@link ExportToExcel}\n * - {@link PreferencesPanel} (see also {@link ResultsFiltersPreferences} and {@link ResultsPreferences})\n * - {@link SearchAlerts} (see also {@link SearchAlertsMessage})\n * - {@link ShareQuery}\n */\nexport class Settings extends Component {\n  static ID = 'Settings';\n  /**\n   * The options for Settings\n   * @componentOptions\n   */\n  static options: ISettingsOptions = {\n\n    /**\n     * Specifies the delay (in milliseconds) before hiding the popup menu when the cursor is not hovering over it.\n     *\n     * Default value is `300`. Minimum value is `0 `.\n     */\n    menuDelay: ComponentOptions.buildNumberOption({ defaultValue: 300, min: 0 })\n  };\n\n  private menu: HTMLElement;\n  private closeTimeout: number;\n  private isOpened: boolean = false;\n\n  /**\n   * Creates a new Settings component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Settings component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: ISettingsOptions, bindings?: IComponentBindings) {\n    super(element, Settings.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Settings, options);\n    this.bind.onRootElement(InitializationEvents.afterInitialization, () => this.init());\n  }\n\n  /**\n   * Opens the **Settings** popup menu.\n   */\n  public open() {\n    this.isOpened = true;\n    if (this.menu != null) {\n      $$(this.menu).detach();\n    }\n    this.menu = this.buildMenu();\n    $$(this.menu).on('mouseleave', () => this.mouseleave());\n    $$(this.menu).on('mouseenter', () => this.mouseenter());\n    PopupUtils.positionPopup(this.menu, this.element, this.root, this.getPopupPositioning(), this.root);\n\n  }\n\n  /**\n   * Closes the **Settings** popup menu.\n   */\n  public close() {\n    this.isOpened = false;\n    if (this.menu != null) {\n      $$(this.menu).detach();\n      this.menu = null;\n    }\n  }\n\n  private init() {\n    if (this.searchInterface.isNewDesign()) {\n      var square = $$('span', { className: 'coveo-settings-square' }).el;\n      var squares = $$('span', { className: 'coveo-settings-squares' }).el;\n      _.times(3, () => squares.appendChild(square.cloneNode()));\n      this.element.appendChild(squares);\n    } else {\n      var icon = $$('span', { className: 'coveo-settings-icon' }).el;\n      this.element.appendChild(icon);\n    }\n\n    $$(this.element).on('click', () => {\n      if (this.isOpened) {\n        this.close();\n      } else {\n        this.open();\n      }\n    });\n\n    $$(this.element).on('mouseleave', () => this.mouseleave());\n    $$(this.element).on('mouseenter', () => this.mouseenter());\n  }\n\n  private buildMenu(): HTMLElement {\n    var menu = $$('div', { className: 'coveo-settings-advanced-menu' }).el;\n    var settingsPopulateMenuArgs: ISettingsPopulateMenuArgs = {\n      settings: this,\n      menuData: []\n    };\n    $$(this.root).trigger(SettingsEvents.settingsPopulateMenu, settingsPopulateMenuArgs);\n    _.each(settingsPopulateMenuArgs.menuData, (menuItem) => {\n      var menuItemDom = $$('div', {\n        className: `coveo-settings-item ${menuItem.className}`,\n        title: _.escape(menuItem.tooltip || '')\n      }).el;\n      menuItemDom.appendChild($$('div', { className: 'coveo-icon' }).el);\n      menuItemDom.appendChild($$('div', { className: 'coveo-settings-text' }, _.escape(menuItem.text)).el);\n      $$(menuItemDom).on('click', () => {\n        this.close();\n        _.each(settingsPopulateMenuArgs.menuData, (menuItem) => {\n          menuItem.onClose && menuItem.onClose();\n        });\n        menuItem.onOpen();\n      });\n      menu.appendChild(menuItemDom);\n    });\n    return menu;\n  }\n\n  private mouseleave() {\n    clearTimeout(this.closeTimeout);\n    this.closeTimeout = setTimeout(() => {\n      this.close();\n    }, this.options.menuDelay);\n  }\n\n  private mouseenter() {\n    clearTimeout(this.closeTimeout);\n  }\n\n  private getPopupPositioning(): IPosition {\n    return {\n      horizontal: HorizontalAlignment.INNERRIGHT,\n      vertical: VerticalAlignment.BOTTOM,\n      verticalOffset: 8\n    };\n  }\n}\nInitialization.registerAutoCreateComponent(Settings);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Settings/Settings.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { Utils } from '../../utils/Utils';\nimport { Initialization } from '../Base/Initialization';\n\nexport interface IShareQueryOptions {\n}\n\n/**\n * The ShareQuery component populates the {@link Settings} popup menu with the **Share Query** menu item. When the end\n * user clicks this item, it displays a panel containing two input boxes: one containing a shareable link and the other\n * containing the complete current query expression.\n */\nexport class ShareQuery extends Component {\n  static ID = 'ShareQuery';\n  static options: IShareQueryOptions = {};\n\n  public dialogBoxContent: HTMLElement;\n  private linkToThisQuery: HTMLInputElement;\n  private completeQuery: HTMLInputElement;\n\n  /**\n   * Creates a new ShareQuery component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ShareQuery component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IShareQueryOptions, bindings?: IComponentBindings) {\n    super(element, ShareQuery.ID, bindings);\n    this.dialogBoxContent = this.buildContent();\n    element.appendChild(this.dialogBoxContent);\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleProcessNewQueryResults(args));\n\n    this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n      args.menuData.push({\n        className: 'coveo-share-query',\n        text: l('ShareQuery'),\n        onOpen: () => this.open(),\n        onClose: () => this.close()\n      });\n    });\n  }\n\n  /**\n   * Shows the **Share Query** panel.\n   */\n  public open() {\n    $$(this.element).addClass('coveo-share-query-opened');\n  }\n\n  /**\n   * Hides the **Share Query** panel.\n   */\n  public close() {\n    $$(this.element).removeClass('coveo-share-query-opened');\n  }\n\n  /**\n   * Gets the link to the current query.\n   */\n  public getLinkToThisQuery(): string {\n    return this.linkToThisQuery.value;\n  }\n\n  /**\n   * Sets the link to the current query.\n   */\n  public setLinkToThisQuery(link: string): void {\n    this.linkToThisQuery.value = link;\n  }\n\n  /**\n   * Gets the complete query expression string\n   */\n  public getCompleteQuery(): string {\n    return this.completeQuery.value;\n  }\n\n  /**\n   * Set the complete query expression string.\n   */\n  public setCompleteQuery(completeQuery: string) {\n    this.completeQuery.value = completeQuery;\n  }\n\n  private handleProcessNewQueryResults(args: IQuerySuccessEventArgs) {\n    Assert.exists(args);\n    Assert.exists(args.results);\n    let query = args.query;\n\n    this.linkToThisQuery.value = window.location.href;\n    this.completeQuery.value = Utils.trim(this.outputIfNotNull(query.q) + ' ' + this.outputIfNotNull(query.aq) + ' ' + this.outputIfNotNull(query.cq));\n\n    this.logger.trace('Received query results from new query', query);\n  }\n\n  private outputIfNotNull(value: string): string {\n    if (value) {\n      return '(' + value + ')';\n    }\n    return '';\n  }\n\n  private buildContent(): HTMLElement {\n    let content = $$('div', { className: 'coveo-share-query-summary-info' }).el;\n    content.appendChild($$('span', { className: 'coveo-query-summary-info-title' }, l('ShareQuery')).el);\n\n    let close = $$('div', { className: 'coveo-share-query-summary-info-close' }).el;\n    close.appendChild($$('span').el);\n    $$(close).on('click', () => this.close());\n    content.appendChild(close);\n\n    let boxes = $$('div', { className: 'coveo-share-query-summary-info-boxes' }).el;\n\n    this.linkToThisQuery = <HTMLInputElement>$$('input', {\n      'type': 'text',\n      className: 'coveo-share-query-summary-info-input'\n    }).el;\n    $$(this.linkToThisQuery).on('click', () => this.linkToThisQuery.select());\n\n    this.completeQuery = <HTMLInputElement>$$('input').el;\n    this.completeQuery.setAttribute('type', 'text');\n    $$(this.completeQuery).addClass('coveo-share-query-summary-info-input');\n\n    boxes.appendChild(this.buildTextBoxWithLabel(l('Link') + ':', this.linkToThisQuery));\n    boxes.appendChild(this.buildTextBoxWithLabel(l('CompleteQuery') + ':', this.completeQuery));\n    content.appendChild(boxes);\n\n    Component.pointElementsToDummyForm(content);\n\n    return content;\n  }\n\n  private buildTextBoxWithLabel(label: string, input: HTMLInputElement): HTMLElement {\n    let labelElement = $$('span', { className: 'coveo-share-query-summary-info-label' });\n    labelElement.text(label);\n\n    let returnDiv = $$('div').el;\n    returnDiv.appendChild(labelElement.el);\n    returnDiv.appendChild(input);\n    return returnDiv;\n  }\n\n  static create(element: HTMLElement, options?: IShareQueryOptions, root?: HTMLElement): ShareQuery {\n    Assert.exists(element);\n\n    return new ShareQuery(element, options, root);\n  }\n}\n\nInitialization.registerAutoCreateComponent(ShareQuery);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ShareQuery/ShareQuery.ts\n **/","import { Component } from '../Base/Component';\nimport { SortCriteria } from './SortCriteria.ts';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport { IAttributesChangedEventArg, MODEL_EVENTS } from '../../models/Model';\nimport { QueryStateModel, QUERY_STATE_ATTRIBUTES } from '../../models/QueryStateModel';\nimport { QueryEvents, IQuerySuccessEventArgs, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { analyticsActionCauseList, IAnalyticsResultsSortMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport { IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport _ = require('underscore');\n\nexport interface ISortOptions {\n  sortCriteria?: SortCriteria[];\n  caption?: string;\n}\n/**\n * The Sort component renders a widget that the end user can interact with to sort query results according to a single\n * criterion or list of criteria.\n */\nexport class Sort extends Component {\n  static ID = 'Sort';\n\n  /**\n   * Options for the component\n   * @componentOptions\n   */\n  static options: ISortOptions = {\n\n    /**\n     * Specifies the criterion (or criteria) for sorting.\n     *\n     * The possible criteria are:\n     * - `relevancy`\n     * - `date`\n     * - `qre`\n     * - `@fieldname` (replace `fieldname` with an actual field name (e.g., `@size`)\n     *\n     * You can also specify a direction (`ascending` or `descending`), for example `date ascending`.\n     *\n     * You can pass an array containing multiple criteria to the Sort component.\n     * If you specify multiple criteria, all criteria must have the same direction (either `ascending` or\n     * `descending`).\n     * You can only use the `date` and `@fieldname` criteria when specifying multiple criteria.\n     * Multiple criteria are evaluated in the order you specify them.\n     *\n     * It is necessary to specify a value for this option in order for this component to work.\n     */\n    sortCriteria: ComponentOptions.buildCustomListOption((values: string[] | SortCriteria[]) => {\n      return _.map(<any>values, (criteria) => { // 'any' because Underscore won't accept the union type as an argument.\n        if (typeof criteria === 'string') {\n          return SortCriteria.parse(criteria);\n        } else {\n          return <SortCriteria>criteria;\n        }\n      });\n    }, { required: true }),\n\n    /**\n     * Specifies the caption to display on the element.\n     *\n     * If you do not specify a value for this option, the component uses the tag body of the element.\n     */\n    caption: ComponentOptions.buildLocalizedStringOption({ required: true })\n  };\n\n  private currentCriteria: SortCriteria;\n\n  /**\n   * Creates a new Sort component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Sort component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ISortOptions, bindings?: IComponentBindings) {\n    super(element, Sort.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, Sort, options);\n\n    Assert.isLargerOrEqualsThan(1, this.options.sortCriteria.length);\n\n    this.bind.onQueryState(MODEL_EVENTS.CHANGE_ONE, QUERY_STATE_ATTRIBUTES.SORT, (args: IAttributesChangedEventArg) => this.handleQueryStateChanged(args));\n    this.bind.onRootElement(QueryEvents.querySuccess, (args: IQuerySuccessEventArgs) => this.handleQuerySuccess(args));\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n    this.bind.onRootElement(QueryEvents.queryError, (args: IQueryErrorEventArgs) => this.handleQueryError(args));\n    const clickAction = () => this.handleClick();\n    this.bind.on(this.element, 'click', clickAction);\n    this.bind.on(this.element, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, clickAction));\n\n    this.element.setAttribute('tabindex', '0');\n    if (Utils.isNonEmptyString(this.options.caption)) {\n      $$(this.element).text(this.options.caption);\n    }\n\n    if (this.isToggle()) {\n      this.element.innerHTML += '<span class=\"coveo-icon\" />';\n    }\n\n    this.updateAppearance();\n  }\n\n  /**\n   * Selects the Sort component. Triggers a new query if selecting the component changes the current\n   * {@link Sort.options.sortCriteria} (if it is toggled).\n   * @param direction The sort direction. Can be either `ascending` or `descending`.\n   */\n  public select(direction?: string) {\n    if (direction) {\n      this.currentCriteria = _.find(this.options.sortCriteria, (criteria: SortCriteria) => {\n        return criteria.direction == direction;\n      });\n    } else if (Utils.exists(this.currentCriteria)) {\n      var indexOfCurrentCriteria = _.indexOf(this.options.sortCriteria, this.currentCriteria);\n      Assert.check(indexOfCurrentCriteria >= 0);\n      this.currentCriteria = this.options.sortCriteria[(indexOfCurrentCriteria + 1) % this.options.sortCriteria.length];\n    } else {\n      this.currentCriteria = this.options.sortCriteria[0];\n    }\n\n    this.queryStateModel.set(QueryStateModel.attributesEnum.sort, this.currentCriteria.toString());\n  }\n\n  public enable() {\n    $$(this.element).removeClass('coveo-tab-disabled');\n    this.update();\n    super.enable();\n  }\n\n  public disable() {\n    $$(this.element).addClass('coveo-tab-disabled');\n    super.disable();\n  }\n\n  /**\n   * Gets the current {@link Sort.options.sortCriteria}.\n   * @returns {SortCriteria}\n   */\n  public getCurrentCriteria(): SortCriteria {\n    return this.currentCriteria;\n  }\n\n  /**\n   * Indicates whether the name of any of the {@link Sort.options.sortCriteria} matches the argument.\n   * @param sortId The sort criteria name to look for (e.g., `date descending`).\n   */\n  public match(sortId: string) {\n    return _.any(this.options.sortCriteria, (sortCriteria: SortCriteria) => sortId == sortCriteria.toString());\n  }\n\n  private handleQueryStateChanged(data: IAttributesChangedEventArg) {\n    this.update();\n  }\n\n  private update() {\n    // Basically, if the criteria in the model fits with one of ours, it'll become our active criteria\n    var sortCriteria = <string>this.queryStateModel.get(QueryStateModel.attributesEnum.sort);\n    if (Utils.isNonEmptyString(sortCriteria)) {\n      var criteriaFromModel = SortCriteria.parse(sortCriteria);\n      this.currentCriteria = _.find(this.options.sortCriteria, (criteria: SortCriteria) => criteriaFromModel.equals(criteria));\n    } else {\n      this.currentCriteria = null;\n    }\n    this.updateAppearance();\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    Assert.exists(data);\n\n    var sort = this.queryStateModel.get(QueryStateModel.attributesEnum.sort);\n    if (sort == QueryStateModel.defaultAttributes.sort || this.isSelected()) {\n      if (this.currentCriteria) {\n        this.currentCriteria.putInQueryBuilder(data.queryBuilder);\n      }\n    }\n  }\n\n  private handleQuerySuccess(data: IQuerySuccessEventArgs) {\n    if (data.results.results.length == 0) {\n      $$(this.element).addClass('coveo-sort-hidden');\n    } else {\n      $$(this.element).removeClass('coveo-sort-hidden');\n    }\n  }\n\n  private handleQueryError(data: IQueryErrorEventArgs) {\n    $$(this.element).addClass('coveo-sort-hidden');\n  }\n\n  private handleClick() {\n    var oldCriteria = this.currentCriteria;\n    this.select();\n    if (oldCriteria != this.currentCriteria) {\n      this.queryController.deferExecuteQuery({\n        beforeExecuteQuery: () => this.usageAnalytics.logSearchEvent<IAnalyticsResultsSortMeta>(analyticsActionCauseList.resultsSort,\n          { resultsSortBy: this.currentCriteria.sort + this.currentCriteria.direction })\n      });\n    }\n  }\n\n  private isToggle(): boolean {\n    return this.options.sortCriteria.length > 1;\n  }\n\n  private isSelected(): boolean {\n    return Utils.exists(this.currentCriteria);\n  }\n\n  private updateAppearance() {\n    $$(this.element).toggleClass('coveo-selected', this.isSelected());\n\n    if (this.isToggle()) {\n      var direction = this.currentCriteria ? this.currentCriteria.direction : this.options.sortCriteria[0].direction;\n      $$(this.element).toggleClass('coveo-ascending', direction == 'ascending');\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(Sort);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Sort/Sort.ts\n **/","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { ITriggerNotify, ITriggerExecute, ITriggerRedirect, ITriggerQuery, ITrigger } from '../../rest/Trigger';\nimport { $$ } from '../../utils/Dom';\nimport { IAnalyticsTriggerNotify, analyticsActionCauseList, IAnalyticsTriggerRedirect, IAnalyticsTriggerQuery, IAnalyticsTriggerExecute } from '../Analytics/AnalyticsActionListMeta';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport _ = require('underscore');\n\nexport interface ITriggersOptions {\n}\n\n/**\n * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n * Search API (see [Trigger](https://developers.coveo.com/x/lIM9AQ)) in the query pipeline (see\n * [Managing the Query Pipeline](https://developers.coveo.com/x/KYOy)).\n */\nexport class Triggers extends Component {\n  static ID = 'Triggers';\n  static options: ITriggersOptions = {};\n\n  /**\n   * The list of notifications returned by the Search API for the current query (via `notify` triggers).\n   *\n   * The Triggers component automatically renders this list visually.\n   */\n  public notifications: string[];\n\n  /**\n   * Creates a new Triggers component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Triggers component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param _window The window on which to execute the triggers.\n   */\n  constructor(public element: HTMLElement, public options?: ITriggersOptions, public bindings?: IComponentBindings, public _window?: Window) {\n\n    super(element, Triggers.ID, bindings);\n\n    this._window = this._window || window;\n    this.options = ComponentOptions.initComponentOptions(element, Triggers, options);\n    Assert.exists(element);\n    Assert.exists(this.options);\n\n    this.notifications = [];\n\n    this.bind.onRootElement(QueryEvents.querySuccess, this.handleProcessNewQueryResults);\n  }\n\n  private handleProcessNewQueryResults(data: IQuerySuccessEventArgs) {\n    Assert.exists(data);\n    Assert.exists(data.results);\n\n    $$(this.element).empty();\n    this.notifications.length = 0;\n    let showElement = false;\n\n    if (data.results.triggers === undefined) {\n      $$(this.element).toggleClass('coveo-visible', showElement);\n      return;\n    }\n\n    this.executeTriggers(data.results.triggers, 'notify', (trigger: ITriggerNotify) => {\n\n      this.usageAnalytics.logCustomEvent<IAnalyticsTriggerNotify>(analyticsActionCauseList.triggerNotify, {\n        notification: trigger.content\n      }, this.element);\n\n      this.notifications.push(trigger.content);\n      this.element.appendChild($$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n\n      showElement = true;\n    });\n\n    this.executeTriggers(data.results.triggers, 'redirect', (trigger: ITriggerRedirect) => {\n\n      this.usageAnalytics.logCustomEvent<IAnalyticsTriggerRedirect>(analyticsActionCauseList.triggerRedirect, {\n        redirectedTo: trigger.content\n      }, this.element);\n\n      this._window.location.replace(trigger.content);\n    }, true);\n\n    this.executeTriggers(data.results.triggers, 'query', (trigger: ITriggerQuery) => {\n      this.queryStateModel.set(QueryStateModel.attributesEnum.q, trigger.content);\n      this.queryController.executeQuery({\n        beforeExecuteQuery: () => {\n          this.usageAnalytics.logCustomEvent<IAnalyticsTriggerQuery>(analyticsActionCauseList.triggerQuery, {\n            query: trigger.content\n          }, this.element);\n        }\n      });\n    }, true);\n\n    this.executeTriggers(data.results.triggers, 'execute', (trigger: ITriggerExecute) => {\n      try {\n        let func: Function = this._window['' + trigger.content.name];\n        if (typeof func === 'function') {\n          let params = _.object(_.map(trigger.content.params, (value, index) => {\n            return ['param' + (index + 1), value];\n          }));\n          params['element'] = this.element;\n\n          this.usageAnalytics.logCustomEvent<IAnalyticsTriggerExecute>(analyticsActionCauseList.triggerExecute, {\n            executed: trigger.content.name\n          }, this.element);\n\n          func.apply(this._window, [params]);\n        } else {\n          this.logger.error(`A trigger tried to call the function '${trigger.content.name}', which doesn't exist.`, this, data.query, trigger);\n        }\n      } catch (error) {\n        this.logger.error(`A trigger called the function '${trigger.content.name}', which threw an error.`, this, data.query, trigger);\n      }\n    });\n\n    $$(this.element).toggleClass('coveo-visible', showElement);\n\n  }\n\n  private executeTriggers(trigger: ITrigger<any>[], type: string, func: (trigger: ITrigger<any>) => any, single: boolean = false) {\n    let triggersOfType = _.filter(trigger, (trigger: ITrigger<any>) => {\n      return trigger.type == type;\n    });\n    let oneOrAllTriggers = _.take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n\n    _.each(oneOrAllTriggers, func);\n  }\n}\n\nInitialization.registerAutoCreateComponent(Triggers);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Triggers/Triggers.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IRecommendationQueryOptions {\n}\n\nexport class RecommendationQuery extends Component {\n  static ID = 'RecommendationQuery';\n\n  /**\n   * The options for the RecommendationQuery component\n   * @componentOptions\n   */\n  static options: IRecommendationQueryOptions = {\n  };\n\n  private content: string;\n\n  constructor(public element: HTMLElement, public options?: IRecommendationQueryOptions, bindings?: IComponentBindings) {\n    super(element, RecommendationQuery.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, RecommendationQuery, options);\n\n    if (this.element.tagName.toLowerCase() === 'script') {\n      try {\n        this.content = Utils.decodeHTMLEntities($$(this.element).text());\n      } catch (e) {\n        return;\n      }\n      if (!_.isUndefined(this.content) && this.content != '') {\n        this.bind.onRootElement(QueryEvents.buildingQuery, this.handleBuildingQuery);\n      }\n    }\n\n  }\n\n  private handleBuildingQuery(data: IBuildingQueryEventArgs) {\n    data.queryBuilder.advancedExpression.add(this.content);\n  }\n}\n\nInitialization.registerAutoCreateComponent(RecommendationQuery);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Recommendation/RecommendationQuery.ts\n **/","import { Template } from '../Templates/Template';\nimport { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface ITemplateLoaderOptions {\n  template: Template;\n  condition?: String;\n}\n\n/**\n * The TemplateLoader component can load one result template into another. You should normally declare any reusable\n * result template outside of the {@link ResultList} component. Otherwise, the framework will evaluate the\n * `data-condition` of the reusable result template and possibly render it.\n *\n * **Example:**\n *\n * ```html\n * [ ... ]\n *\n * <!-- A reusable result template. Note that it is important to declare it outside of the ResultList component. -->\n * <script type='text/underscore' class='result-template' id='ReusableTemplate'>\n *   <table class='CoveoFieldTable'>\n *     <tr data-field='@source' data-caption='Source'></tr>\n *     <tr data-field='@percentScore' data-caption='Score'></tr>\n *   </table>\n * </script>\n *\n * [ ... ]\n *\n * <div class=\"CoveoResultList\" data-wait-animation=\"fade\" data-auto-select-fields-to-include=\"true\">\n *\n *   <!-- A custom result template for Lithium messages. -->\n *   <script type='text/underscore' class='result-template' data-condition='raw.filetype == \"lithiummessage\"'>\n *     <div>\n *       <img class='CoveoIcon' data-small='true'>\n *       <a class='CoveoResultLink'></a>\n *       <div class='CoveoTemplateLoader' data-template-id='ReusableTemplate'></div>\n *     </div>\n *   </script>\n *\n *   <!-- A custom result template for images. -->\n *   <script type='text/underscore' class='result-template' data-condition='raw.filetype == \"Image\"'>\n *     <div>\n *       <img class='CoveoIcon' data-small='true'></img>\n *         <a class='CoveoResultLink'>\n *           <img class='CoveoThumbnail'>\n *         </a>\n *       <div class='CoveoTemplateLoader' data-template-id='ReusableTemplate'></div>\n *     </div>\n *   </script>\n * </div>\n *\n * [ ... ]\n * ```\n *\n * See [Result Templates](https://developers.coveo.com/x/aIGfAQ).\n */\nexport class TemplateLoader extends Component {\n  static ID = 'TemplateLoader';\n\n  /**\n   * The possible options for a TemplateLoader.\n   * @componentOptions\n   */\n  static options: ITemplateLoaderOptions = {\n\n    /**\n     * Specifies how to find the template. This can be either a CSS selector or an HTML `id` attribute.\n     *\n     * **Examples:**\n     *\n     * - With a CSS selector: `data-template-selector='.MySelector'`\n     * - With an HTML `id`: `data-template-id='MyId'`\n     */\n    template: ComponentOptions.buildTemplateOption(),\n\n    /**\n     * Specifies the boolean condition that the result must satisfy in order for the template to load.\n     *\n     * **Example:**\n     *\n     * `data-condition='percentScore > 80'`\n     */\n    condition: ComponentOptions.buildStringOption()\n  };\n\n  /**\n   * Creates a new TemplateLoader.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the TemplateLoader component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: ITemplateLoaderOptions, public bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, TemplateLoader.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, TemplateLoader, options);\n    this.result = this.result || this.resolveResult();\n    Assert.exists(this.result);\n\n    if (this.options.condition != null) {\n      var conditionFunction = new Function('obj', 'with(obj||{}){return ' + this.options.condition + '}');\n      if (conditionFunction(this.result)) {\n        this.initialize();\n      }\n    } else {\n      this.initialize();\n    }\n  }\n\n  private initialize() {\n    if (this.options.template != null) {\n      var initOptions = this.searchInterface.options;\n      var initParameters: IInitializationParameters = {\n        options: initOptions,\n        bindings: this.bindings,\n        result: this.result\n      };\n\n      var parents = $$(this.element).parents(Component.computeCssClassName(TemplateLoader));\n      _.each(parents, (parent: HTMLElement) => {\n        let clone = <HTMLElement>parent.cloneNode();\n        $$(clone).empty();\n        let outerHTMLParent = clone.outerHTML;\n        Assert.check(outerHTMLParent.indexOf(this.element.outerHTML) === -1, 'TemplateLoader cannot load a template into itself.');\n      });\n\n      this.element.innerHTML = this.options.template.instantiateToString(this.result, {\n        checkCondition: false,\n        responsiveComponents: this.bindings ? this.bindings.searchInterface.responsiveComponents : null\n      });\n      Initialization.automaticallyCreateComponentsInside(this.element, initParameters);\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(TemplateLoader);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/TemplateLoader/TemplateLoader.ts\n **/","import { IPopulateOmniboxEventArgs } from '../../events/OmniboxEvents';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface ISuggestionForOmniboxOptionsOnSelect {\n  (value: string, args: IPopulateOmniboxEventArgs): void;\n}\n\nexport interface ISuggestionForOmniboxOptions {\n  omniboxZIndex?: number;\n  headerTitle?: string;\n  onSelect?: ISuggestionForOmniboxOptionsOnSelect;\n  numberOfSuggestions?: number;\n}\n\nexport interface ISuggestionForOmniboxTemplate {\n  header?: {\n    template: (...args: any[]) => string;\n    title: string;\n  };\n  row: (...args: any[]) => string;\n}\n\nexport interface ISuggestionForOmniboxResult {\n  value: string;\n}\n\nexport class SuggestionForOmnibox {\n\n  constructor(public structure: ISuggestionForOmniboxTemplate, public onSelect: (value: string, args: IPopulateOmniboxEventArgs) => void, public onTabPress: (value: string, args: IPopulateOmniboxEventArgs) => void) {\n  }\n\n  public buildOmniboxElement(results: ISuggestionForOmniboxResult[], args: IPopulateOmniboxEventArgs): HTMLElement {\n    let element: HTMLElement;\n    if (results.length != 0) {\n      element = $$('div').el;\n      if (this.structure.header) {\n        let header = this.buildElementHeader();\n        element.appendChild(header);\n      }\n      let rows = this.buildRowElements(results, args);\n      _.each(rows, (row) => {\n        element.appendChild(row);\n      });\n    }\n    return element;\n  }\n\n  private buildElementHeader(): HTMLElement {\n    return $$('div', undefined, this.structure.header.template({\n      headerTitle: this.structure.header.title\n    })).el;\n  }\n\n  private buildRowElements(results: ISuggestionForOmniboxResult[], args: IPopulateOmniboxEventArgs): HTMLElement[] {\n    let ret = [];\n    _.each(results, (result) => {\n      let row = $$('div', undefined, this.structure.row({\n        rawValue: result.value,\n        data: DomUtils.highlightElement(result.value, args.completeQueryExpression.word)\n      })).el;\n      $$(row).on('click', () => {\n        this.onSelect.call(this, result.value, args);\n      });\n      $$(row).on('keyboardSelect', () => {\n        this.onSelect.call(this, result.value, args);\n      });\n      $$(row).on('tabSelect', () => {\n        this.onTabPress.call(this, result.value, args);\n      });\n      ret.push(row);\n    });\n    return ret;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Misc/SuggestionForOmnibox.ts\n **/","import { ISuggestionForOmniboxOptions, SuggestionForOmnibox, ISuggestionForOmniboxTemplate } from '../Misc/SuggestionForOmnibox';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Component } from '../Base/Component';\nimport { Assert } from '../../misc/Assert';\nimport { OmniboxEvents, IPopulateOmniboxEventArgs } from '../../events/OmniboxEvents';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { l } from '../../strings/Strings';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { analyticsActionCauseList, IAnalyticsTopSuggestionMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport { StandaloneSearchInterface } from '../SearchInterface/SearchInterface';\nimport { IStringMap } from '../../rest/GenericParam';\nimport _ = require('underscore');\n\nexport interface IAnalyticsSuggestionsOptions extends ISuggestionForOmniboxOptions {\n}\n\n/**\n * The AnalyticsSuggestion component provides query suggestions based on the queries that a Coveo Analytics service most\n * commonly logs.\n *\n * This component orders possible query suggestions by their respective number of successful document views, thus\n * prioritizing the most relevant query suggestions. Consequently, when better options are available, this component\n * does not suggest queries resulting in no clicks from users or requiring refinements.\n *\n * The query suggestions appear in the {@link Omnibox} Component. The AnalyticsSuggestion component strongly\n * relates to the {@link Analytics} component. While a user is typing in a query box, the AnalyticsSuggestion component\n * allows them to see and select the most commonly used and relevant queries.\n */\nexport class AnalyticsSuggestions extends Component {\n  static ID = 'AnalyticsSuggestions';\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IAnalyticsSuggestionsOptions = {\n\n    /**\n     * Specifies the z-index position at which the query suggestions render themselves in the {@link Omnibox}\n     * component. Higher values are placed first.\n     *\n     * Default value is `52` and minimum value is `0`.\n     */\n    omniboxZIndex: ComponentOptions.buildNumberOption({ defaultValue: 52, min: 0 }),\n\n    /**\n     * Specifies the title of the query suggestions group in the {@link Omnibox} component. This option is not available\n     * when using the default Lightning Friendly Theme (see\n     * [Lightning Friendly Theme](https://developers.coveo.com/x/Y4EAAg)).\n     *\n     * Default value is the localized string for `\"Suggested Queries\"`.\n     */\n    headerTitle: ComponentOptions.buildLocalizedStringOption({ defaultValue: l('SuggestedQueries') }),\n\n    /**\n     * Specifies the number of query suggestions to request and display in the {@link Omnibox} component.\n     *\n     * Default value is `5` and minimum value is `1`.\n     */\n    numberOfSuggestions: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 })\n  };\n\n  private suggestionForOmnibox: SuggestionForOmnibox;\n  private partialQueries: string[] = [];\n  private lastSuggestions: string[] = [];\n  private resultsToBuildWith = [];\n  private currentlyDisplayedSuggestions: { [suggestion: string]: { element: HTMLElement, pos: number } };\n\n  /**\n   * Creates a new AnalyticsSuggestions component.\n   *\n   * Also binds event handlers so that when a user selects a suggestion, an `omniboxFromLink` usage analytics event is\n   * logged if the suggestion comes from a standalone search box, or an `omniboxAnalytics` usage analytics\n   * event is logged otherwise.\n   *\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the AnalyticsSuggestions component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(element: HTMLElement, public options: IAnalyticsSuggestionsOptions, bindings?: IComponentBindings) {\n    super(element, AnalyticsSuggestions.ID, bindings);\n\n\n    if (this.options && 'omniboxSuggestionOptions' in this.options) {\n      this.options = _.extend(this.options, this.options['omniboxSuggestionOptions']);\n    }\n\n    this.options = ComponentOptions.initComponentOptions(element, AnalyticsSuggestions, this.options);\n\n    let rowTemplate = (toRender: IStringMap<any>) => {\n      let rowElement = $$('div', {\n        className: 'magic-box-suggestion coveo-omnibox-selectable coveo-top-analytics-suggestion-row'\n      });\n      if (toRender['data']) {\n        rowElement.el.innerHTML = toRender['data'];\n      }\n      return rowElement.el.outerHTML;\n    };\n\n    this.options.onSelect = this.options.onSelect || this.onRowSelection;\n\n    let suggestionStructure: ISuggestionForOmniboxTemplate;\n    if (this.searchInterface.isNewDesign()) {\n      suggestionStructure = {\n        row: rowTemplate\n      };\n    } else {\n      let headerTemplate = () => {\n        let headerElement = $$('div', {\n          className: 'coveo-top-analytics-suggestion-header'\n        });\n        let iconElement = $$('span', {\n          className: 'coveo-icon-top-analytics'\n        });\n        let captionElement = $$('span', {\n          className: 'coveo-caption'\n        });\n        if (this.options.headerTitle) {\n          captionElement.text(this.options.headerTitle);\n        }\n        headerElement.append(iconElement.el);\n        headerElement.append(captionElement.el);\n        return headerElement.el.outerHTML;\n      };\n      suggestionStructure = {\n        header: { template: headerTemplate, title: this.options.headerTitle },\n        row: rowTemplate\n      };\n    }\n\n    this.suggestionForOmnibox = new SuggestionForOmnibox(suggestionStructure, (value: string, args: IPopulateOmniboxEventArgs) => {\n      this.options.onSelect.call(this, value, args);\n    }, (value: string, args: IPopulateOmniboxEventArgs) => {\n      this.onRowTab.call(this, value, args);\n    });\n    this.bind.onRootElement(OmniboxEvents.populateOmnibox, (args: IPopulateOmniboxEventArgs) => this.handlePopulateOmnibox(args));\n    this.bind.onRootElement(QueryEvents.querySuccess, () => this.partialQueries = []);\n  }\n\n  /**\n   * Selects a currently displayed query suggestion. This implies that at least one suggestion must have been returned\n   * at least once. The suggestion parameter can either be a number (0-based index position of the query suggestion to\n   * select) or a string that matches the suggestion.\n   *\n   * @param suggestion\n   */\n  public selectSuggestion(suggestion: number);\n  public selectSuggestion(suggestion: string);\n  public selectSuggestion(suggestion: any) {\n    if (this.currentlyDisplayedSuggestions) {\n      if (isNaN(suggestion)) {\n        if (this.currentlyDisplayedSuggestions[suggestion]) {\n          $$(this.currentlyDisplayedSuggestions[suggestion].element).trigger('click');\n        }\n      } else {\n        let currentlySuggested = <{ element: HTMLElement, pos: number }>_.findWhere(<any>this.currentlyDisplayedSuggestions, { pos: suggestion });\n        if (currentlySuggested) {\n          $$(currentlySuggested.element).trigger('click');\n        }\n      }\n    }\n  }\n\n  private handlePopulateOmnibox(args: IPopulateOmniboxEventArgs) {\n    Assert.exists(args);\n\n    var promise = new Promise((resolve, reject) => {\n      let searchPromise = this.usageAnalytics.getTopQueries({\n        pageSize: this.options.numberOfSuggestions,\n        queryText: args.completeQueryExpression.word\n      });\n\n      searchPromise.then((results: string[]) => {\n        this.resultsToBuildWith = _.map(results, (result) => {\n          return {\n            value: result\n          };\n        });\n        this.lastSuggestions = results;\n        if (!_.isEmpty(this.resultsToBuildWith) && args.completeQueryExpression.word != '') {\n          this.partialQueries.push(args.completeQueryExpression.word);\n        }\n        let element = this.suggestionForOmnibox.buildOmniboxElement(this.resultsToBuildWith, args);\n        this.currentlyDisplayedSuggestions = {};\n        if (element) {\n          _.map($$(element).findAll('.coveo-omnibox-selectable'), (selectable, i?) => {\n            this.currentlyDisplayedSuggestions[$$(selectable).text()] = {\n              element: selectable,\n              pos: i\n            };\n          });\n        }\n        resolve({\n          element: element,\n          zIndex: this.options.omniboxZIndex\n        });\n      });\n      searchPromise.catch(() => {\n        resolve({\n          element: undefined\n        });\n      });\n    });\n\n    args.rows.push({ deferred: promise });\n  }\n\n  private onRowSelection(value: string, args: IPopulateOmniboxEventArgs) {\n    args.clear();\n    args.closeOmnibox();\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, value);\n    this.usageAnalytics.logSearchEvent<IAnalyticsTopSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), {\n      partialQueries: this.cleanCustomData(this.partialQueries),\n      suggestionRanking: _.indexOf(_.pluck(this.resultsToBuildWith, 'value'), value),\n      suggestions: this.cleanCustomData(this.lastSuggestions),\n      partialQuery: args.completeQueryExpression.word\n    });\n    this.queryController.executeQuery();\n  }\n\n  private onRowTab(value: string, args: IPopulateOmniboxEventArgs) {\n    args.clear();\n    args.closeOmnibox();\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, `${value}`);\n    this.usageAnalytics.logCustomEvent<IAnalyticsTopSuggestionMeta>(this.getOmniboxAnalyticsEventCause(), {\n      partialQueries: this.cleanCustomData(this.partialQueries),\n      suggestionRanking: _.indexOf(_.pluck(this.resultsToBuildWith, 'value'), value),\n      suggestions: this.cleanCustomData(this.lastSuggestions),\n      partialQuery: args.completeQueryExpression.word\n    }, this.element);\n  }\n\n  private cleanCustomData(toClean: string[], rejectLength = 256) {\n    // Filter out only consecutive values that are the identical\n    toClean = _.compact(_.filter(toClean, (partial: string, pos?: number, array?: string[]) => {\n      return pos === 0 || partial !== array[pos - 1];\n    }));\n\n    // Custom dimensions cannot be an array in analytics service: Send a string joined by ; instead.\n    // Need to replace ;\n    toClean = _.map(toClean, (partial) => {\n      return partial.replace(/;/g, '');\n    });\n\n    // Reduce right to get the last X words that adds to less then rejectLength\n    let reducedToRejectLengthOrLess = [];\n    _.reduceRight(toClean, (memo: number, partial: string) => {\n      let totalSoFar = memo + partial.length;\n      if (totalSoFar <= rejectLength) {\n        reducedToRejectLengthOrLess.push(partial);\n      }\n      return totalSoFar;\n    }, 0);\n    toClean = reducedToRejectLengthOrLess.reverse();\n    let ret = toClean.join(';');\n\n    // analytics service can store max 256 char in a custom event\n    // if we're over that, call cleanup again with an arbitrary 10 less char accepted\n    if (ret.length >= 256) {\n      return this.cleanCustomData(toClean, rejectLength - 10);\n    }\n\n    return toClean.join(';');\n  }\n\n  private getOmniboxAnalyticsEventCause() {\n    if (this.searchInterface instanceof StandaloneSearchInterface) {\n      return analyticsActionCauseList.omniboxFromLink;\n    }\n    return analyticsActionCauseList.omniboxAnalytics;\n  }\n}\nInitialization.registerAutoCreateComponent(AnalyticsSuggestions);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AnalyticsSuggestions/AnalyticsSuggestions.ts\n **/","import { ISuggestionForOmniboxOptions, SuggestionForOmnibox, ISuggestionForOmniboxTemplate } from '../Misc/SuggestionForOmnibox';\nimport { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { OmniboxEvents, IPopulateOmniboxEventArgs } from '../../events/OmniboxEvents';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { IListFieldValuesRequest } from '../../rest/ListFieldValuesRequest';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport { ISuggestionForOmniboxOptionsOnSelect } from '../Misc/SuggestionForOmnibox';\nimport { IStringMap } from '../../rest/GenericParam';\nimport _ = require('underscore');\n\nexport interface IFieldSuggestionsOptions extends ISuggestionForOmniboxOptions {\n  field?: IFieldOption;\n  queryOverride?: string;\n}\n\n/**\n * The FieldSuggestions component provides query suggestions based on a particular facet field. For example, you could\n * use this component to provide auto-complete suggestions while the end user is typing a document\n * title.\n *\n * The query suggestions that this component provides appear in the {@link Omnibox} component.\n */\nexport class FieldSuggestions extends Component {\n  static ID = 'FieldSuggestions';\n\n  /**\n   * @componentOptions\n   */\n  static options: IFieldSuggestionsOptions = {\n\n    /**\n     * Specifies the field from which to provide suggestions.\n     *\n     * Specifying a value for this option is required for the FieldSuggestions component to work.\n     */\n    field: ComponentOptions.buildFieldOption({ required: true }),\n\n    /**\n     * Specifies a query override to apply when retrieving suggestions. You can use any valid query expression (see\n     * [Coveo Query Syntax Reference](http://www.coveo.com/go?dest=adminhelp70&lcid=9&context=10005)).\n     *\n     * Default value is `''`, which means that the component applies no query override by default.\n     */\n    queryOverride: ComponentOptions.buildStringOption({ defaultValue: '' }),\n\n    /**\n     * Specifies the z-index position at which the suggestions render themselves in the {@link Omnibox}.\n     *\n     * When there are multiple suggestion providers (e.g., {@link Facet} or {@link AnalyticsSuggestions}), components\n     * with a higher omniboxZIndex values render themselves first.\n     *\n     * Default value is `51`. Minimum value is `0`.\n     */\n    omniboxZIndex: ComponentOptions.buildNumberOption({ defaultValue: 51, min: 0 }),\n\n    /**\n     * Specifies the title of the result suggestions group in the {@link Omnibox} component. This option is not\n     * available when using the default Lightning Friendly Theme (see\n     * [Lightning Friendly Theme](https://developers.coveo.com/x/Y4EAAg)).\n     *\n     * Default value is the localized string for `\"SuggestedResults\"`.\n     */\n    headerTitle: ComponentOptions.buildLocalizedStringOption({ defaultValue: l('SuggestedResults') }),\n\n    /**\n     * Specifies the number of suggestions to render in the {@link Omnibox}.\n     *\n     * Default value is `5`. Minimum value is `1`.\n     */\n    numberOfSuggestions: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 1 }),\n\n    /**\n     * Specifies the event handler function to execute when the end user selects a suggested value un the\n     * {@link Omnibox}. By default, the query box text is replaced by what the end user selected and a new query is\n     * executed. You can, however, replace this default behavior by providing a callback function to execute when the\n     * value is selected.\n     *\n     * You can only set this option in the `init` call of your search interface. You cannot set it directly in the\n     * markup as an HTML attribute.\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * // You can call the init script using \"pure\" JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    FieldSuggestions : {\n     *      omniboxSuggestionOptions : {\n     *        onSelect : function(valueSelected, populateOmniBoxEventArgs){\n     *          // Do something special when a value is selected.\n     *          // You receive the selected value as the first argument, and the Omnibox object as the second argument.\n     *        }\n     *      }\n     *    }\n     * })\n     *\n     * // Or you can call the init script using the jQuery extension:\n     * $('#mySearch').coveo('init', {\n     *    FieldSuggestions : {\n     *      omniboxSuggestionOptions : {\n     *        onSelect : function(valueSelected, populateOmniBoxEventArgs){\n     *          // Do something special when a value is selected.\n     *          // You receive the selected value as the first argument, and the Omnibox object as the second argument.\n     *        }\n     *      }\n     *    }\n     * })\n     * ```\n     */\n    onSelect: ComponentOptions.buildCustomOption<ISuggestionForOmniboxOptionsOnSelect>(() => {\n      return null;\n    })\n  };\n\n  private suggestionForOmnibox: SuggestionForOmnibox;\n  private currentlyDisplayedSuggestions: { [suggestion: string]: { element: HTMLElement, pos: number } };\n\n  /**\n   * Creates a new FieldSuggestions component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FieldSuggestions component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(element: HTMLElement, public options: IFieldSuggestionsOptions, bindings?: IComponentBindings) {\n    super(element, FieldSuggestions.ID, bindings);\n\n    if (this.options && 'omniboxSuggestionOptions' in this.options) {\n      this.options = _.extend(this.options, this.options['omniboxSuggestionOptions']);\n    }\n\n    this.options = ComponentOptions.initComponentOptions(element, FieldSuggestions, options);\n\n    Assert.check(Utils.isCoveoField(<string>this.options.field), this.options.field + ' is not a valid field');\n\n    this.options.onSelect = this.options.onSelect || this.onRowSelection;\n\n    let rowTemplate = (toRender: IStringMap<string>) => {\n      let rowElement = $$('div', {\n        className: 'magic-box-suggestion coveo-omnibox-selectable coveo-top-field-suggestion-row'\n      });\n      if (toRender['data']) {\n        rowElement.el.innerHTML = toRender['data'];\n      }\n      return rowElement.el.outerHTML;\n    };\n\n    let suggestionStructure: ISuggestionForOmniboxTemplate;\n    if (this.searchInterface.isNewDesign()) {\n      suggestionStructure = {\n        row: rowTemplate\n      };\n    } else {\n      let headerTemplate = () => {\n        let headerElement = $$('div', {\n          className: 'coveo-top-field-suggestion-header'\n        });\n\n        let iconElement = $$('span', {\n          className: 'coveo-icon-top-field'\n        });\n\n        let captionElement = $$('span', {\n          className: 'coveo-caption'\n        });\n\n        if (this.options.headerTitle) {\n          captionElement.text(this.options.headerTitle);\n        }\n\n        headerElement.append(iconElement.el);\n        headerElement.append(captionElement.el);\n\n        return headerElement.el.outerHTML;\n      };\n\n      suggestionStructure = {\n        header: { template: headerTemplate, title: this.options.headerTitle },\n        row: rowTemplate\n      };\n    }\n\n    this.suggestionForOmnibox = new SuggestionForOmnibox(suggestionStructure, (value: string, args: IPopulateOmniboxEventArgs) => {\n      this.options.onSelect.call(this, value, args);\n    }, (value: string, args: IPopulateOmniboxEventArgs) => {\n      this.onRowTab(value, args);\n    });\n    this.bind.onRootElement(OmniboxEvents.populateOmnibox, (args: IPopulateOmniboxEventArgs) => this.handlePopulateOmnibox(args));\n  }\n\n  public selectSuggestion(suggestion: number);\n  public selectSuggestion(suggestion: string);\n\n  /**\n   * Selects a currently displayed query suggestion. This implies that at least one suggestion must have been returned\n   * at least once.\n   * @param suggestion Either a number (0-based index position of the query suggestion to select) or a string that\n   * matches the suggestion to select.\n   */\n  public selectSuggestion(suggestion: any) {\n    if (this.currentlyDisplayedSuggestions) {\n      if (isNaN(suggestion)) {\n        if (this.currentlyDisplayedSuggestions[suggestion]) {\n          $$(this.currentlyDisplayedSuggestions[suggestion].element).trigger('click');\n        }\n      } else {\n        let currentlySuggested = <{ element: HTMLElement, pos: number }>_.findWhere(<any>this.currentlyDisplayedSuggestions, { pos: suggestion });\n        if (currentlySuggested) {\n          $$(currentlySuggested.element).trigger('click');\n        }\n      }\n    }\n  }\n\n  private handlePopulateOmnibox(args: IPopulateOmniboxEventArgs) {\n    Assert.exists(args);\n\n    let valueToSearch = args.completeQueryExpression.word;\n    let promise = new Promise((resolve) => {\n      this.queryController.getEndpoint().listFieldValues(this.buildListFieldValueRequest(valueToSearch)).then((results: IIndexFieldValue[]) => {\n        let element = this.suggestionForOmnibox.buildOmniboxElement(results, args);\n        this.currentlyDisplayedSuggestions = {};\n        if (element) {\n          _.map($$(element).findAll('.coveo-omnibox-selectable'), (selectable, i?) => {\n            this.currentlyDisplayedSuggestions[$$(selectable).text()] = {\n              element: selectable,\n              pos: i\n            };\n          });\n          resolve({\n            element: element,\n            zIndex: this.options.omniboxZIndex\n          });\n        } else {\n          resolve({\n            element: undefined\n          });\n        }\n      }).catch(() => {\n        resolve({\n          element: undefined\n        });\n      });\n    });\n    args.rows.push({\n      deferred: promise\n    });\n  }\n\n  private onRowSelection(value: string, args: IPopulateOmniboxEventArgs) {\n    args.clear();\n    args.closeOmnibox();\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, value);\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.omniboxField, {});\n    this.queryController.executeQuery();\n  }\n\n  private onRowTab(value: string, args: IPopulateOmniboxEventArgs) {\n    args.clear();\n    args.closeOmnibox();\n    this.queryStateModel.set(QueryStateModel.attributesEnum.q, `${value}`);\n    this.usageAnalytics.logCustomEvent(analyticsActionCauseList.omniboxField, {}, this.element);\n  }\n\n  private buildListFieldValueRequest(valueToSearch: string): IListFieldValuesRequest {\n    return {\n      field: <string>this.options.field,\n      ignoreAccents: true,\n      sortCriteria: 'occurrences',\n      maximumNumberOfValues: this.options.numberOfSuggestions,\n      patternType: 'Wildcards',\n      pattern: '*' + valueToSearch + '*',\n      queryOverride: this.options.queryOverride\n    };\n  }\n}\n\nInitialization.registerAutoCreateComponent(FieldSuggestions);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/FieldSuggestions/FieldSuggestions.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IBuildingCallOptionsEventArgs, IQueryErrorEventArgs } from '../../events/QueryEvents';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { DomUtils } from '../../utils/DomUtils';\nimport { $$ } from '../../utils/Dom';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport { MissingAuthenticationError } from '../../rest/MissingAuthenticationError';\nimport _ = require('underscore');\n\nexport interface IAuthenticationProviderOptions {\n  name?: string;\n  caption?: string;\n  useIFrame?: boolean;\n  showIFrame?: boolean;\n}\n\n/**\n * The AuthenticationProvider component arranges for queries to execute with an identity that the user obtains using an\n * Authentication Provider configured on the Coveo Search API\n * (see [On-Premises SharePoint Claims Authentication](https://developers.coveo.com/x/hQLL)).\n *\n * When necessary, this component handles redirecting the browser to the address that starts the authentication process.\n *\n * Using the standard `data-tab` attribute, you can enable the AuthenticationProvider component only for tabs requiring\n * authentication (see {@link Tab}).\n */\nexport class AuthenticationProvider extends Component {\n  static ID = 'AuthenticationProvider';\n\n  /**\n   * The options for the component.\n   * @componentOptions\n   */\n  static options: IAuthenticationProviderOptions = {\n\n    /**\n     * Specifies the name of the authentication provider.\n     *\n     * See [Windows Service Configuration File](https://developers.coveo.com/x/OQMv).\n     */\n    name: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the friendly name of the authentication provider. This is the name that you want to display in the user\n     * interface when a user is logging in.\n     *\n     * Default value is the value set to {@link AuthenticationProvider.options.name}.\n     */\n    caption: ComponentOptions.buildStringOption({ postProcessing: (value, options) => value || options.name }),\n\n    /**\n     * Specifies whether to use an `<iframe>` to host the chain of redirections that make up the authentication\n     * process.\n     *\n     * Default value is `false`.\n     *\n     * Using an `<iframe>` prevents leaving the search page as part of the authentication process. However, some login\n     * providers will refuse to load in an `<iframe>`.\n     */\n    useIFrame: ComponentOptions.buildBooleanOption({ defaultValue: false, attrName: 'data-use-iframe' }),\n\n    /**\n     * If the {@link AuthenticationProvider.options.useIFrame} is set to `true`, specifies whether to make the\n     * authentication `<iframe>` visible to the user (inside a popup).\n     *\n     * Default value is `true`.\n     *\n     * When the underlying authentication provider requires no user interaction (for example, when a user authenticates\n     * using Windows Authentication along with SharePoint Claims), setting this option to `false` reduces the visual\n     * impact of the authentication process.\n     *\n     */\n    showIFrame: ComponentOptions.buildBooleanOption({\n      defaultValue: true,\n      attrName: 'data-show-iframe',\n      depend: 'useIFrame'\n    })\n  };\n\n  private handlers: ((...args: any[]) => void)[];\n\n  private redirectCount: number;\n\n  /**\n   * Creates a new AuthenticationProvider component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the AuthenticationProvider component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IAuthenticationProviderOptions = {}, bindings?: IComponentBindings, public _window?: Window) {\n    super(element, AuthenticationProvider.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, AuthenticationProvider, options);\n\n    Assert.exists(this.options.name);\n\n    this.handlers = [];\n\n    this._window = this._window || window;\n    this.redirectCount = 0;\n\n    this.bind.onRootElement(QueryEvents.buildingCallOptions, this.handleBuildingCallOptions);\n    this.bind.onRootElement(QueryEvents.queryError, this.handleQueryError);\n    this.bind.onRootElement(InitializationEvents.nuke, this.handleNuke);\n\n    this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n      args.menuData.push({\n        text: l('Reauthenticate', this.options.caption),\n        className: 'coveo-authentication-provider',\n        onOpen: () => this.authenticateWithProvider()\n      });\n    });\n  }\n\n  private handleBuildingCallOptions(args: IBuildingCallOptionsEventArgs) {\n    args.options.authentication.push(this.options.name);\n  }\n\n  private handleQueryError(args: IQueryErrorEventArgs) {\n    let missingAuthError = <MissingAuthenticationError>args.error;\n\n    if (missingAuthError.isMissingAuthentication && missingAuthError.provider === this.options.name && this.redirectCount < 2 && this.redirectCount !== -1) {\n      ++this.redirectCount;\n      this.authenticateWithProvider();\n    } else {\n      this.logger.error('The AuthenticationProvider is in a redirect loop. This may be due to a back-end configuration problem.');\n      this.redirectCount = -1;\n    }\n  }\n\n  private authenticateWithProvider() {\n    this.options.useIFrame ? this.authenticateWithIFrame() : this.redirectToAuthenticationProvider();\n  }\n\n  private redirectToAuthenticationProvider() {\n    this.logger.info(`Redirecting to authentication provider ${this.options.name}`);\n    this._window.location.href = this.getAuthenticationProviderUriForRedirect();\n  }\n\n  private authenticateWithIFrame() {\n    this.logger.info(`Using iframe to retrieve authentication for provider ${this.options.name}`);\n\n    let iframe = $$('iframe', {\n      'src': this.getAuthenticationProviderUriForIFrame()\n    }).el;\n\n    let modalbox: Coveo.ModalBox.ModalBox;\n    modalbox = this.options.showIFrame ? this.createPopupForVisibleIFrame(iframe) : this.createPopupForWaitMessage(iframe);\n\n    let handler = this.createHandler(modalbox, iframe);\n    $$(<any>this._window).one('message', handler);\n    this.handlers.push(handler);\n  }\n\n  private createHandler(modalbox: Coveo.ModalBox.ModalBox, iframe: HTMLElement): () => void {\n    return () => {\n      modalbox.close();\n      $$(iframe).detach();\n      this.logger.info(`Got authentication for provider ${this.options.name}; retrying query.`);\n      this.queryController.executeQuery();\n    };\n  }\n\n  private handleNuke() {\n    _.each(this.handlers, handler => $$(<any>this._window).off('message', handler));\n  }\n\n  private createPopupForWaitMessage(iframe: HTMLElement): Coveo.ModalBox.ModalBox {\n    let popup = $$('div', {\n      className: 'coveo-waiting-for-authentication-popup'\n    }, DomUtils.getBasicLoadingAnimation()).el;\n\n    $$(iframe).hide();\n    document.body.appendChild(iframe);\n\n    ModalBox.open(popup, {\n      title: l('Authenticating', this.options.caption)\n    });\n    return ModalBox;\n  }\n\n  private createPopupForVisibleIFrame(iframe: HTMLElement): Coveo.ModalBox.ModalBox {\n    $$(iframe).addClass('coveo-authentication-iframe');\n    let popup = $$('div', {}, iframe).el;\n\n    ModalBox.open(popup, {\n      title: l('Authenticating', this.options.caption),\n      className: 'coveo-authentication-popup'\n    });\n    return ModalBox;\n  }\n\n  private getAuthenticationProviderUriForRedirect(): string {\n    return this.queryController.getEndpoint().getAuthenticationProviderUri(this.options.name, this._window.location.href, undefined);\n  }\n\n  private getAuthenticationProviderUriForIFrame(): string {\n    return this.queryController.getEndpoint().getAuthenticationProviderUri(this.options.name, undefined, 'success');\n  }\n}\n\nInitialization.registerAutoCreateComponent(AuthenticationProvider);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AuthenticationProvider/AuthenticationProvider.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IFieldDescription } from '../../rest/FieldDescription';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { Initialization } from '../Base/Initialization';\nimport { IIndexFieldValue } from '../../rest/FieldValue';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { l } from '../../strings/Strings';\nimport { KEYBOARD, KeyboardUtils } from '../../utils/KeyboardUtils';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { ITaggingRequest } from '../../rest/TaggingRequest';\nimport { $$ } from '../../utils/Dom';\nimport { analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport _ = require('underscore');\n\nexport interface IResultTaggingOptions {\n  field: IFieldOption;\n  suggestBoxSize?: number;\n  autoCompleteTimer?: number;\n}\n\nexport interface IAnalyticsResultTaggingMeta {\n  facetId: string;\n  facetValue?: string;\n  facetTitle?: string;\n}\n\n/**\n * The ResultTagging component lists the current tag field values of its associated result and renders a control that\n * allows the end user to add values to a tag field.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class ResultTagging extends Component {\n  static ID = 'ResultTagging';\n  static autoCompleteClass = 'coveo-result-tagging-auto-complete';\n\n  /**\n   * @componentOptions\n   */\n  static options: IResultTaggingOptions = {\n\n    /**\n     * Specifies the tag field that the component will use.\n     *\n     * Specifying a value for this options is necessary for this component to work.\n     */\n    field: ComponentOptions.buildFieldOption({\n      match: (field: IFieldDescription) => field.type == 'Tag',\n      required: true\n    }),\n\n    /**\n     * Specifies the number of items to show in the list of suggested items.\n     *\n     * Default value is `5`. Minimum value is `0 `.\n     */\n    suggestBoxSize: ComponentOptions.buildNumberOption({ defaultValue: 5, min: 0 }),\n\n    /**\n     * Specifies how much time (in milliseconds) it takes for the list of suggested items to disappear when it loses\n     * focus.\n     *\n     * Default value is `2000`. Minimum value is `0`.\n     */\n    autoCompleteTimer: ComponentOptions.buildNumberOption({ defaultValue: 2000, min: 0 })\n  };\n\n  static AUTO_COMPLETE_CLASS = 'coveo-result-tagging-auto-complete';\n\n  private autoCompleteZone: HTMLElement;\n  private textBox: HTMLInputElement;\n  private autoCompletePopup: HTMLElement;\n  private tagZone: HTMLElement;\n  private tags: string[];\n\n  /**\n   * Creates a new ResultTagging component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultTagging component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement, public options?: IResultTaggingOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, ResultTagging.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, ResultTagging, options);\n    this.result = result || this.resolveResult();\n    Assert.exists(this.componentOptionsModel);\n    Assert.exists(this.result);\n\n    if (!this.options.field) {\n      this.logger.error('You must specify a field to the ResultTagging component');\n      return;\n    }\n    let fieldValue = Utils.getFieldValue(this.result, <string>this.options.field);\n    if (fieldValue && Utils.isNonEmptyString(fieldValue)) {\n      this.tags = fieldValue.split(';');\n    } else if (fieldValue && Utils.isNonEmptyArray(fieldValue)) {\n      this.tags = fieldValue;\n    } else {\n      this.tags = [];\n    }\n    this.tags = _.map(this.tags, (t) => {\n      return t.trim();\n    });\n    this.tagZone = $$('div', {\n      className: 'coveo-result-tagging-tag-zone'\n    }).el;\n    element.appendChild(this.tagZone);\n    element.appendChild(this.buildTagIcon());\n\n    this.autoCompleteZone = $$('div', {\n      className: 'coveo-result-tagging-auto-complete-zone'\n    }).el;\n    element.appendChild(this.autoCompleteZone);\n    this.autoCompleteZone.appendChild(this.buildTextBox());\n    this.autoCompleteZone.appendChild(this.buildAddIcon());\n    this.autoCompleteZone.appendChild(this.buildClearIcon());\n    this.buildExistingTags();\n  }\n\n  private buildExistingTags() {\n    if (this.tags) {\n      _.each(this.tags, (tag: string) => {\n        this.tagZone.appendChild(this.buildTagValue(tag));\n      });\n    }\n  }\n\n  private buildTagIcon(): HTMLElement {\n    let tagZone = $$('div', {\n      className: 'coveo-result-tagging-add-tag'\n    });\n    let tagTextBox = $$('span', {\n      className: 'coveo-result-tagging-add-tag-text'\n    });\n    tagTextBox.text(l('EnterTag'));\n    let tagIcon = $$('span', {\n      className: 'coveo-result-tagging-add-tag-icon'\n    });\n    tagIcon.on('click', () => {\n      _.defer(() => {\n        this.focusOnTextBox();\n      }, 20);\n    });\n    tagZone.el.appendChild(tagIcon.el);\n    tagZone.append(tagTextBox.el);\n    tagZone.setAttribute('title', l('EnterTag'));\n    return tagZone.el;\n  }\n\n  private focusOnTextBox() {\n    this.textBox.focus();\n  }\n\n  private buildTagValue(tagValue: string): HTMLElement {\n    let tag = $$('div', {\n      className: 'coveo-result-tagging-coveo-tag'\n    });\n    tag.el.appendChild(this.buildShortenedTagWithTitle(tagValue));\n    let deleteIcon = $$('span', {\n      className: 'coveo-result-tagging-delete-icon'\n    });\n    tag.el.appendChild(deleteIcon.el);\n    deleteIcon.on('click', () => {\n      this.doRemoveTag(tag.el, tagValue.toLowerCase());\n    });\n    return tag.el;\n  }\n\n  private buildShortenedTagWithTitle(tagValue: string): HTMLElement {\n    let shortenedTag = StringUtils.removeMiddle(tagValue, 16, '...');\n    let clickableValue = $$('a', {\n      title: tagValue,\n      href: 'javascript:void(0);'\n    });\n    clickableValue.text(shortenedTag);\n\n    this.bindFacetEventOnValue(clickableValue.el, tagValue);\n    return clickableValue.el;\n  }\n\n  private buildTextBox(): HTMLInputElement {\n    this.textBox = <HTMLInputElement>$$('input', {\n      type: 'text',\n      className: 'coveo-add-tag-textbox',\n      placeholder: l('EnterTag')\n    }).el;\n\n    this.autoCompletePopup = $$('div', {\n      className: ResultTagging.autoCompleteClass\n    }).el;\n    this.autoCompleteZone.appendChild(this.autoCompletePopup);\n    this.manageAutocompleteAutoHide();\n    $$(this.textBox).on('keyup', ((e: KeyboardEvent) => {\n      if (e.keyCode == KEYBOARD.UP_ARROW || e.keyCode == KEYBOARD.DOWN_ARROW || e.keyCode == KEYBOARD.ENTER) {\n        this.manageUpDownEnter(e.keyCode);\n      } else if (!KeyboardUtils.isArrowKeyPushed(e.keyCode)) {\n        this.populateSuggestions();\n      }\n      $$(this.element).removeClass('coveo-error');\n    }));\n    $$(this.textBox).on('click', () => {\n      this.populateSuggestions();\n    });\n    return this.textBox;\n  }\n\n  private buildAddIcon(): HTMLElement {\n    let icon = $$('div', {\n      className: 'coveo-result-tagging-add-tag-tick-icon'\n    });\n    let clickable = $$('span');\n    clickable.on('click', () => {\n      this.doAddTag();\n    });\n    icon.el.appendChild(clickable.el);\n    return icon.el;\n  }\n\n  private buildClearIcon(): HTMLElement {\n    let icon = $$('div', {\n      className: 'coveo-result-tagging-clear-icon'\n    });\n    let clickable = $$('span');\n    clickable.on('click', () => {\n      this.textBox.value = '';\n    });\n    icon.el.appendChild(clickable.el);\n    return icon.el;\n  }\n\n  private bindFacetEventOnValue(element: HTMLElement, value: string) {\n    let facetAttributeName = QueryStateModel.getFacetId(<string>this.options.field);\n    let facetModel: string[] = this.queryStateModel.get(facetAttributeName);\n    let facets: Component[] = this.componentStateModel.get(facetAttributeName);\n    let atLeastOneFacetIsEnabled = _.filter(facets, (value: Component) => !value.disabled).length > 0;\n\n    if (facetModel != null && atLeastOneFacetIsEnabled) {\n      $$(element).on('click', () => {\n        if (_.contains(facetModel, value)) {\n          this.queryStateModel.set(facetAttributeName, _.without(facetModel, value));\n        } else {\n          this.queryStateModel.set(facetAttributeName, _.union(facetModel, [value]));\n        }\n        this.queryController.deferExecuteQuery({\n          beforeExecuteQuery: () => this.usageAnalytics.logSearchEvent<IAnalyticsResultTaggingMeta>(analyticsActionCauseList.documentTag, {\n            facetId: <string>this.options.field,\n            facetValue: value\n          })\n        });\n      });\n\n      if (_.contains(facetModel, value)) {\n        $$(element).addClass('coveo-selected');\n      }\n      $$(element).addClass('coveo-clickable');\n    }\n  }\n\n  private clearPopup() {\n    $$(this.autoCompletePopup).hide();\n    $$(this.autoCompletePopup).empty();\n  }\n\n  private showPopup() {\n    $$(this.autoCompletePopup).show();\n  }\n\n  private populateSuggestions() {\n    let endpoint = this.queryController.getEndpoint();\n    let searchText = this.textBox.value;\n    let searchOptions = {\n      field: <string>this.options.field,\n      ignoreAccents: true,\n      sortCriteria: 'occurences',\n      maximumNumberOfValues: this.options.suggestBoxSize,\n      queryOverride: '@uri',\n      pattern: this.buildRegEx(searchText),\n      patternType: 'RegularExpression'\n    };\n    endpoint.listFieldValues(searchOptions).then((fieldValues: IIndexFieldValue[]) => {\n      this.clearPopup();\n      _.each(fieldValues, (fieldValue: IIndexFieldValue) => {\n        this.autoCompletePopup.appendChild(this.buildSelectableValue(fieldValue.lookupValue));\n      });\n      this.showPopup();\n      this.autoCompletePopup.style.width = this.textBox.offsetWidth + ' px';\n    });\n  }\n\n  private manageAutocompleteAutoHide() {\n    let timeout: any;\n\n    $$(this.textBox).on('mouseover', () => {\n      clearTimeout(timeout);\n    });\n\n    $$(this.autoCompletePopup).on('mouseout', ((e) => {\n      if ($$(<HTMLElement>e.target).hasClass(ResultTagging.autoCompleteClass)) {\n        timeout = setTimeout(() => {\n          this.clearPopup();\n        }, this.options.autoCompleteTimer);\n      }\n    }));\n\n    $$(this.autoCompletePopup).on('mouseenter', (() => {\n      clearTimeout(timeout);\n    }));\n\n    $$(this.element).on('mouseenter', (() => {\n      this.clearPopup();\n      $$(this.element).addClass('coveo-opened');\n    }));\n\n    $$($$(this.element).closest('.CoveoResult')).on('mouseleave', (() => {\n      this.clearPopup();\n      if (this.textBox.value == '') {\n        $$(this.element).removeClass('coveo-opened');\n      }\n    }));\n\n    $$($$(this.element).closest('.CoveoResult')).on('focusout', ((e) => {\n      if (this.textBox.value != '' && ($$(<HTMLElement>e.target).closest('.CoveoResult') != $$(this.element).closest('.CoveoResult'))) {\n        $$(this.element).addClass('coveo-error');\n      }\n    }));\n\n    $$($$(this.element).closest('.CoveoResult')).on('focusin', (() => {\n      $$(this.element).removeClass('coveo-error');\n    }));\n  }\n\n  // Exclude tags that are already on the result (Since we can tag with the same value twice.\n  private buildRegEx(searchTerm: string) {\n    return '(?=.*' + searchTerm + ')' + _.map(this.tags, (tag: string) => this.buildTermToExclude(tag)).join('') + '.*';\n  }\n\n  private buildTermToExclude(term: string) {\n    return '(?!^' + term + '$)';\n  }\n\n  private manageUpDownEnter(code: number) {\n    let selectableArray = $$(this.element).findAll('.coveo-selectable');\n    if (code == KEYBOARD.ENTER) {\n      this.doAddTag();\n      return;\n    }\n\n    if (selectableArray.length > 0) {\n      let newIndex = this.computeNextIndex(code, selectableArray);\n      newIndex = Math.max(0, newIndex);\n      newIndex = Math.min(selectableArray.length - 1, newIndex);\n      let selected = $$(selectableArray[newIndex]);\n      selected.addClass('coveo-selected');\n      this.textBox.value = selected.text();\n    }\n  }\n\n  private computeNextIndex(code: number, selectableArray: HTMLElement[]): number {\n    let nextIndex = 0;\n    _.each(selectableArray, (selectable: HTMLElement, index) => {\n      if ($$(selectable).hasClass('coveo-selected')) {\n        if (code == KEYBOARD.UP_ARROW) {\n          nextIndex = index - 1;\n        } else if (code == KEYBOARD.DOWN_ARROW) {\n          nextIndex = index + 1;\n        }\n        $$(selectable).removeClass('coveo-selected');\n      }\n    });\n    return nextIndex;\n  }\n\n  private buildSelectableValue(lookupValue: string): HTMLElement {\n    let line = $$('div', {\n      className: 'coveo-selectable'\n    });\n    line.el.appendChild(this.buildShortenedTagWithTitle(lookupValue));\n    line.on('click', () => {\n      this.doAddTagWithValue(lookupValue);\n    });\n    return line.el;\n  }\n\n  private doRemoveTag(element: HTMLElement, tagValue: string) {\n    let request: ITaggingRequest = {\n      fieldName: <string>this.options.field,\n      fieldValue: tagValue,\n      doAdd: false,\n      uniqueId: this.result.uniqueId\n    };\n    this.queryController.getEndpoint().tagDocument(request).then(() => {\n      this.tags.splice(_.indexOf(this.tags, tagValue), 1);\n      $$(element).detach();\n    });\n  }\n\n  private doAddTagWithValue(tagValue: string) {\n    _.each(tagValue.split(','), (tag: string) => {\n      this.doAddSingleTagValue(tag);\n    });\n  }\n\n  private doAddSingleTagValue(tagValue: string) {\n    this.clearPopup();\n    if (_.indexOf(this.tags, tagValue) > -1) {\n      $$(this.element).addClass('coveo-error');\n      return;\n    }\n    this.tags.push(tagValue);\n    let request: ITaggingRequest = {\n      fieldName: <string>this.options.field,\n      fieldValue: tagValue,\n      doAdd: true,\n      uniqueId: this.result.uniqueId\n    };\n    this.queryController.getEndpoint().tagDocument(request).then(() => {\n      this.tagZone.appendChild(this.buildTagValue(tagValue));\n      this.textBox.value = '';\n      $$(this.element).removeClass('coveo-error');\n    }).catch(() => {\n      // We do this otherwise it's possible to add the same tag while we wait for the server's response\n      this.tags = _.without(this.tags, _.findWhere(this.tags, tagValue));\n    });\n  }\n\n  private doAddTag() {\n    let tagValue = Utils.trim(this.textBox.value.toLowerCase());\n    this.doAddTagWithValue(tagValue);\n  }\n}\nInitialization.registerAutoCreateComponent(ResultTagging);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultTagging/ResultTagging.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { ComponentOptionsModel } from '../../models/ComponentOptionsModel';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { LocalStorageUtils } from '../../utils/LocalStorageUtils';\nimport { PreferencesPanel } from '../PreferencesPanel/PreferencesPanel';\nimport { PreferencesPanelCheckboxInput } from '../PreferencesPanel/PreferencesPanelItem';\nimport { PreferencesPanelEvents } from '../../events/PreferencesPanelEvents';\nimport { analyticsActionCauseList, IAnalyticsPreferencesChangeMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Initialization } from '../Base/Initialization';\nimport { IResultLinkOptions } from '../ResultLink/ResultLinkOptions';\nimport { Assert } from '../../misc/Assert';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\nimport { Defer } from '../../misc/Defer';\n\nexport interface IResultsPreferencesOptions {\n  enableOpenInOutlook?: boolean;\n  enableOpenInNewWindow?: boolean;\n}\n\n/**\n * The ResultsPreferences component allows the end user to select preferences related to the search results. These\n * preferences are then saved in the local storage of the end user.\n *\n * This component is normally accessible through the {@link Settings} menu. Its usual location in the DOM is inside the\n * {@link PreferencesPanel} component.\n *\n * See also the {@link ResultsFiltersPreferences} component.\n */\nexport class ResultsPreferences extends Component {\n  static ID = 'ResultsPreferences';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IResultsPreferencesOptions = {\n\n    /**\n     * Specifies whether to make the option to open results in Microsoft Outlook available.\n     *\n     * Default value is `false`\n     */\n    enableOpenInOutlook: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n    /**\n     * Specifies whether to make the option to open results in a new window available.\n     *\n     * Default value is `true`\n     */\n    enableOpenInNewWindow: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  public preferences: IResultLinkOptions;\n  private preferencePanelLocalStorage: LocalStorageUtils<IResultLinkOptions>;\n  private preferencesPanel: HTMLElement;\n  private preferencePanelCheckboxInput: PreferencesPanelCheckboxInput;\n\n  /**\n   * Creates a new ResultsPreference component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ResultsPreferences component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: IResultsPreferencesOptions, public bindings: IComponentBindings) {\n    super(element, ResultsPreferences.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, ResultsPreferences, options);\n\n    this.preferencesPanel = $$(this.element).closest(Component.computeCssClassName(PreferencesPanel));\n    this.preferencePanelLocalStorage = new LocalStorageUtils(ResultsPreferences.ID);\n    Assert.exists(this.componentOptionsModel);\n    Assert.exists(window.localStorage);\n    Assert.exists(this.preferencesPanel);\n\n    this.preferences = this.preferencePanelLocalStorage.load() || {};\n    this.adjustPreferencesToComponentConfig();\n\n    ComponentOptions.initComponentOptions(this.element, ResultsPreferences, this.preferences);\n\n    this.updateComponentOptionsModel();\n\n    this.bind.on(this.preferencesPanel, PreferencesPanelEvents.savePreferences, () => this.save());\n    this.bind.on(this.preferencesPanel, PreferencesPanelEvents.exitPreferencesWithoutSave, () => this.exitWithoutSave());\n\n    this.buildTitle();\n    this.buildCheckboxesInput();\n  }\n\n  /**\n   * Saves the current state of the ResultsPreferences component in the local storage.\n   */\n  public save() {\n    this.fromCheckboxInputToPreferences();\n    this.logger.info('Saving preferences', this.preferences);\n    this.preferencePanelLocalStorage.save(this.preferences);\n    this.updateComponentOptionsModel();\n  }\n\n  public exitWithoutSave() {\n    this.fromPreferencesToCheckboxInput();\n  }\n\n  private updateComponentOptionsModel() {\n    this.componentOptionsModel.set(ComponentOptionsModel.attributesEnum.resultLink, this.preferences);\n  }\n\n  private buildTitle() {\n    var title = $$('div', {\n      className: 'coveo-title'\n    }, l('LinkOpeningSettings'));\n\n    this.element.appendChild(title.el);\n  }\n\n  private buildCheckboxesInput() {\n    var inputs = [];\n    if (this.options.enableOpenInOutlook) {\n      inputs.push({ label: l('OpenInOutlookWhenPossible') });\n    }\n    if (this.options.enableOpenInNewWindow) {\n      inputs.push({ label: l('AlwaysOpenInNewWindow') });\n    }\n    this.preferencePanelCheckboxInput = new PreferencesPanelCheckboxInput(inputs, ResultsPreferences.ID);\n    var container = $$('div', {\n      className: 'coveo-choices-container'\n    });\n\n    container.el.appendChild(this.preferencePanelCheckboxInput.build());\n    var executeOnChange = container.findAll('input');\n    _.each(executeOnChange, (toExec) => {\n      $$(toExec).on('change', (e: Event) => {\n        this.fromPreferenceChangeEventToUsageAnalyticsLog(e);\n        this.save();\n        this.queryController.executeQuery();\n      });\n    });\n\n    this.element.appendChild(container.el);\n    this.fromPreferencesToCheckboxInput();\n  }\n\n  private fromCheckboxInputToPreferences() {\n    var selected = this.preferencePanelCheckboxInput.getSelecteds();\n    this.preferences = {\n      openInOutlook: false,\n      alwaysOpenInNewWindow: false\n    };\n    if (_.contains(selected, l('OpenInOutlookWhenPossible'))) {\n      this.preferences.openInOutlook = true;\n    }\n    if (_.contains(selected, l('AlwaysOpenInNewWindow'))) {\n      this.preferences.alwaysOpenInNewWindow = true;\n    }\n  }\n\n  private fromPreferencesToCheckboxInput() {\n    if (this.preferences.openInOutlook) {\n      this.preferencePanelCheckboxInput.select(l('OpenInOutlookWhenPossible'));\n    }\n    if (this.preferences.alwaysOpenInNewWindow) {\n      this.preferencePanelCheckboxInput.select(l('AlwaysOpenInNewWindow'));\n    }\n  }\n\n  private fromPreferenceChangeEventToUsageAnalyticsLog(e: Event) {\n    var type = (<HTMLInputElement>e.target).checked ? 'selected' : 'unselected';\n    var preference = (<HTMLInputElement>e.target).value;\n    this.usageAnalytics.logCustomEvent<IAnalyticsPreferencesChangeMeta>(analyticsActionCauseList.preferencesChange, { preferenceName: preference, preferenceType: type }, this.element);\n    this.usageAnalytics.logSearchEvent<IAnalyticsPreferencesChangeMeta>(analyticsActionCauseList.preferencesChange, { preferenceName: preference, preferenceType: type });\n  }\n\n  private adjustPreferencesToComponentConfig() {\n    // This method is used when there are illogical configuration between what's saved in local storage (the preferences)\n    // and how the component is configured.\n    // This can happen if an admin change the component configuration after end users have already selected a preferences.\n    // We need to adapt the saved preferences to what's actually available in the component\n    let needToSave = false;\n    if (this.preferences.alwaysOpenInNewWindow && !this.options.enableOpenInNewWindow) {\n      this.preferences.alwaysOpenInNewWindow = null;\n      needToSave = true;\n    }\n\n    if (this.preferences.openInOutlook && !this.options.enableOpenInOutlook) {\n      this.preferences.openInOutlook = null;\n      needToSave = true;\n    }\n\n    if (needToSave) {\n      Defer.defer(() => {\n        this.save();\n      });\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(ResultsPreferences);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ResultsPreferences/ResultsPreferences.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Utils } from '../../utils/Utils';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { $$ } from '../../utils/Dom';\nimport { Initialization } from '../Base/Initialization';\nimport _ = require('underscore');\n\nexport var context: any;\ndeclare var Coveo;\n\nexport interface IPipelineContextOptions {\n}\n\n/**\n * A PipelineContext is used to add contextual information about the environment inside which the query is executed.\n *\n * It allows to pass arbitrary key values pairs ( think `JSON` ), which can then be leveraged by the [Query Pipeline](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=108),\n * or by Reveal.\n *\n * This can be any arbitrary information that you can use to contextualize the query and help Coveo improve relevance by returning results tailored to a specific context.\n *\n * This component is meant to be configured using a script tag, with a JSON content.\n *\n * ```\n * <script class='CoveoPipelineContext' type='text/context'>\n *   {\n *      \"foo\" : \"bar\"\n *   }\n * </script>\n * ```\n *\n * You can also simply use JavaScript code to pass context values, using the {@link QueryBuilder.addContextValue} method.\n *\n * This mean you do not necessarily need to use this component to pass context.\n * ```\n * Coveo.$$(root).on('buildingQuery', function(args) {\n *     args.queryBuilder.addContextValue('foo', 'bar');\n * })\n * ```\n *\n * Using this component as opposed to JavaScript code means you will be able to leverage the interface editor.\n *\n * Regardless of if you use this component or JavaScript to add context, both will add the needed data in the [Query.Context]{@link IQuery.context} parameter.\n */\nexport class PipelineContext extends Component {\n  static ID = 'PipelineContext';\n  static CURRENT_URL = 'CurrentUrl';\n\n  private content: { [id: string]: string };\n\n  public constructor(public element: HTMLElement, public options?: IPipelineContextOptions, public bindings?: IComponentBindings) {\n    super(element, PipelineContext.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, PipelineContext, options);\n\n    if (this.element.tagName.toLowerCase() == 'script') {\n      try {\n        // Content can be HTML encoded for special char ({!})\n        this.content = JSON.parse(Utils.decodeHTMLEntities($$(this.element).text()));\n      } catch (e) {\n        try {\n          this.content = JSON.parse($$(this.element).text());\n        } catch (e) {\n          return;\n        }\n      }\n    }\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleBuildingQuery(args));\n  }\n\n  /**\n   * Return all the context keys configured for context.\n   * @returns {string[]|Array}\n   */\n  public getContextKeys(): string[] {\n    return this.content ? _.keys(this.content) : [];\n  }\n\n  /**\n   * Get the context value associated to the given key.\n   * @param key\n   * @returns {string}\n   */\n  public getContextValue(key: string): string {\n    return this.content[key].replace(/\\{\\!([^\\}]+)\\}/g, (all: string, contextKey: string) => {\n      if (Coveo.context != null && contextKey in Coveo.context) {\n        return Coveo.context[contextKey];\n      } else if (contextKey == PipelineContext.CURRENT_URL) {\n        return window.location.href;\n      }\n      return '';\n    });\n  }\n\n  private handleBuildingQuery(args: IBuildingQueryEventArgs) {\n    let keys = this.getContextKeys();\n    _.each(keys, (key: string) => {\n      args.queryBuilder.addContextValue(key, this.getContextValue(key));\n    });\n  }\n\n\n}\n\nInitialization.registerAutoCreateComponent(PipelineContext);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/PipelineContext/PipelineContext.ts\n **/","import { Component } from '../Base/Component';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { IResultListOptions, ResultList } from '../ResultList/ResultList';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { IPopulateOmniboxEventArgs, OmniboxEvents } from '../../events/OmniboxEvents';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { analyticsActionCauseList, IAnalyticsNoMeta } from '../Analytics/AnalyticsActionListMeta';\nimport { Assert } from '../../misc/Assert';\nimport { Utils } from '../../utils/Utils';\nimport { Initialization } from '../Base/Initialization';\nimport { IQueryResults } from '../../rest/QueryResults';\nimport _ = require('underscore');\n\nexport interface IOmniboxResultListOptions extends IResultListOptions {\n  omniboxZIndex?: number;\n  onSelect?: (result: IQueryResult, resultElement: HTMLElement, omniboxObject: IPopulateOmniboxEventArgs) => void;\n  headerTitle?: string;\n  queryOverride?: string;\n}\n\n/**\n * The OmniboxResultList component behaves exactly like the {@link ResultList} component (which it extends), except that\n * it renders itself inside the {@link Omnibox} component.\n *\n * This component can provide a kind of search-as-you-type functionality, allowing you to easily render complex Result\n * Templates inside the Omnibox component.\n *\n * **Example:**\n *\n * ```html\n * <div class=\"CoveoOmniboxResultList\">\n *   <script class=\"result-template\" type=\"text/x-underscore\">\n *     <div>\n *       <a class='CoveoResultLink'></a>\n *     </div>\n *   </script>\n * </div>\n * ```\n */\nexport class OmniboxResultList extends ResultList implements IComponentBindings {\n  static ID = 'OmniboxResultList';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: IOmniboxResultListOptions = {\n\n    /**\n     * Specifies the z-index at which to render the ResultList inside the Omnibox.\n     *\n     * Default value is `51`. Minimum value is `16` ({@link Facet} components are at `50` by default)\n     */\n    omniboxZIndex: ComponentOptions.buildNumberOption({ defaultValue: 51, min: 16 }),\n\n    /**\n     * Specifies the title to use for this section.\n     *\n     * Default value is the localized string for `Suggested Results`.\n     */\n    headerTitle: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the override to use on the query sent to the OmniboxResultList component.\n     *\n     * Default value is `undefined`, which means no default override is specified.\n     */\n    queryOverride: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the function to execute when the user selects a result suggestion.\n     *\n     * The default function opens the corresponding result URI in the browser.\n     *\n     * It is only possible to specify a value for this option in the {@link init} call of your search interface. You\n     * cannot set it directly as an HTML attribute.\n     *\n     * **Example:**\n     *\n     * ```javascript\n     * // You can call the init script using \"pure\" JavaScript:\n     * Coveo.init(document.querySelector('#search'), {\n     *    OmniboxResultList : {\n     *        //Close the omnibox, change the selected HTMLElement background color and alert the result title.\n     *        onSelect : function(result, resultElement, omniBoxObject) {\n     *            omniBoxObject.close();\n     *            resultElement.css('background-color', 'red');\n     *            alert(result.title);\n     *        }\n     *     }\n     * })\n     *\n     * // Or you can call the init script using the jQuery extension:\n     * $(\"#search\").coveo(\"init\", {\n     *    OmniboxResultList : {\n     *        //Close the Omnibox, change the selected HTMLElement background color and alert the result title.\n     *        onSelect : function(result, resultElement, omniBoxObject) {\n     *            omniBoxObject.close();\n     *            resultElement.css('background-color', 'red');\n     *            alert(result.title);\n     *        }\n     *     }\n     * })\n     * ```\n     */\n    onSelect: ComponentOptions.buildCustomOption<(result: IQueryResult, resultElement: HTMLElement, omniboxObject: IPopulateOmniboxEventArgs) => void>(() => {\n      return null;\n    })\n  };\n\n  private lastOmniboxRequest: { omniboxObject: IPopulateOmniboxEventArgs; resolve: (...args: any[]) => void; };\n\n  /**\n   * Creates a new OmniboxResultList component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the OmniboxResultList component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IOmniboxResultListOptions, public bindings?: IComponentBindings) {\n    super(element, options, bindings, OmniboxResultList.ID);\n    this.options = ComponentOptions.initComponentOptions(element, OmniboxResultList, options);\n    this.setupOptions();\n    this.bind.onRootElement(OmniboxEvents.populateOmnibox, (args: IPopulateOmniboxEventArgs) => this.handlePopulateOmnibox(args));\n    this.bind.onRootElement(QueryEvents.buildingQuery, (args: IBuildingQueryEventArgs) => this.handleQueryOverride(args));\n  }\n\n  /**\n   * Builds and returns an array of `HTMLElement` from the {@link IQueryResults} set received as an argument.\n   * @param results The IQueryResults set to build an array of `HTMLElement` from.\n   */\n  public buildResults(results: IQueryResults): HTMLElement[] {\n    return _.map(results.results, (result: IQueryResult) => {\n      let resultElement = $$(this.buildResult(result));\n      resultElement.addClass(['coveo-omnibox-selectable', 'coveo-omnibox-result-list-element']);\n      resultElement.on('keyboardSelect', () => {\n        this.options.onSelect.call(this, result, resultElement.el, this.lastOmniboxRequest.omniboxObject);\n      });\n      this.autoCreateComponentsInsideResult(resultElement.el, result);\n      return resultElement.el;\n    });\n  }\n\n  /**\n   * Creates a result container and appends each element from the received `HTMLElement` array to it. For each element\n   * it appends to the result container, this method triggers a `newResultDisplayed` event. Once all elements have been\n   * appended to the result container, the method triggers a `newResultsDisplayed` event.\n   * @param resultsElement The array of `HTMLElement` to render.\n   * @param append\n   */\n  public renderResults(resultsElement: HTMLElement[], append = false) {\n    if (this.lastOmniboxRequest) {\n      let content = $$('div').el;\n      content.appendChild($$('div', { className: 'coveo-omnibox-result-list-header' },\n        $$('span', { className: 'coveo-icon-omnibox-result-list' }).el,\n        $$('span', { className: 'coveo-caption' }, (this.options.headerTitle || l('SuggestedResults'))).el\n      ).el);\n      _.each(resultsElement, (resultElement: HTMLElement) => {\n        content.appendChild(resultElement);\n        this.triggerNewResultDisplayed(Component.getResult(resultElement), resultElement);\n      });\n      this.triggerNewResultsDisplayed();\n      this.lastOmniboxRequest.resolve({ element: content, zIndex: this.options.omniboxZIndex });\n    }\n  }\n\n  private setupOptions() {\n    this.logger.info('Disabling infinite scroll for OmniboxResultList', this);\n    this.options.enableInfiniteScroll = false;\n    this.options.onSelect = this.options.onSelect || this.onRowSelection;\n  }\n\n  private handlePopulateOmnibox(args: IPopulateOmniboxEventArgs) {\n    let promise = new Promise((resolve, reject) => {\n      this.queryController.executeQuery({\n        beforeExecuteQuery: () => this.usageAnalytics.logSearchAsYouType<IAnalyticsNoMeta>(analyticsActionCauseList.searchboxSubmit, {}),\n        searchAsYouType: true\n      });\n      this.lastOmniboxRequest = { omniboxObject: args, resolve: resolve };\n    });\n    args.rows.push({\n      deferred: promise\n    });\n  }\n\n  private handleQueryOverride(args: IBuildingQueryEventArgs) {\n    Assert.exists(args);\n    if (Utils.isNonEmptyString(this.options.queryOverride)) {\n      args.queryBuilder.constantExpression.add(this.options.queryOverride);\n    }\n  }\n\n  private onRowSelection(result: IQueryResult, resultElement: HTMLElement, omniboxObject: IPopulateOmniboxEventArgs) {\n    this.usageAnalytics.logClickEvent(analyticsActionCauseList.documentOpen, { author: Utils.getFieldValue(result, 'author') }, result, this.root);\n    window.location.href = result.clickUri;\n  }\n}\nInitialization.registerAutoCreateComponent(OmniboxResultList);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/OmniboxResultList/OmniboxResultList.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Model } from '../../models/Model';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Utils } from '../../utils/Utils';\nimport { Tab } from '../Tab/Tab';\nimport { Assert } from '../../misc/Assert';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface ICurrentTabOptions {\n  tabSectionToOpen: string;\n}\n\n/**\n * This component is used to display the name of the currently selected tab.\n * If no tabs are selected, this component is hidden.\n */\nexport class CurrentTab extends Component {\n  static ID = 'CurrentTab';\n\n  /**\n   * The options for the component\n   * @componentOptions\n   */\n  static options: ICurrentTabOptions = {\n    /**\n     * Specifies the CSS selector to the section which contains the tab.\n     * Clicking this component will toggle between opening and closing this section.\n     */\n    tabSectionToOpen: ComponentOptions.buildStringOption()\n  };\n\n  constructor(public element: HTMLElement, public options?: ICurrentTabOptions, bindings?: IComponentBindings) {\n    super(element, CurrentTab.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, CurrentTab, options);\n    let eventName = this.queryStateModel.getEventName(Model.eventTypes.changeOne + QueryStateModel.attributesEnum.t);\n    this.bind.onRootElement(eventName, this.handleTabChange);\n    if (this.options.tabSectionToOpen) {\n      let tabSection = $$(this.root).find(this.options.tabSectionToOpen);\n      $$(tabSection).addClass('coveo-targeted-by-current-tab');\n      $$(this.element).addClass('coveo-targeting-tab-section');\n      this.bind.on(this.element, 'click', () => {\n        let glassElement = $$(this.root).find('.coveo-glass');\n        if (glassElement) {\n          let glass = $$(glassElement);\n          glass.toggleClass('coveo-active-glass');\n          glass.toggleClass('coveo-active-glass-for-current-tab');\n        }\n        $$(this.element).toggleClass('coveo-opening-tab-section');\n        $$(tabSection).toggleClass('coveo-opened-by-current-tab');\n        if ($$(this.element).hasClass('coveo-opening-tab-section')) {\n          tabSection.style.zIndex = '1001';\n          this.element.style.zIndex = '1001';\n        } else {\n          tabSection.style.zIndex = undefined;\n          this.element.style.zIndex = undefined;\n        }\n      });\n    }\n  }\n\n  private handleTabChange() {\n    let selectedTabId = this.queryStateModel.get(QueryStateModel.attributesEnum.t);\n    if (Utils.isNonEmptyString(selectedTabId)) {\n      let found = false;\n      let tabs = $$(this.root).findAll(Component.computeSelectorForType(Tab.ID));\n      _.each(tabs, (elem: HTMLElement) => {\n        let tab = <Tab>Component.get(elem, Tab);\n        if (tab.options.id == selectedTabId) {\n          this.element.innerHTML = tab.element.innerHTML;\n          found = true;\n        }\n      });\n      Assert.check(found, 'Cannot find the currently active tab');\n    } else {\n      $$(this.element).hide();\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(CurrentTab);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/CurrentTab/CurrentTab.ts\n **/","import { ResultList, IResultListOptions } from '../ResultList/ResultList';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ImageResultListEvents } from '../../events/ImageResultListEvents';\nimport { ResultListEvents } from '../../events/ResultListEvents';\nimport { Initialization } from '../Base/Initialization';\nimport { InitializationEvents } from '../../events/InitializationEvents';\nimport { $$ } from '../../utils/Dom';\nimport _ = require('underscore');\n\nexport interface IImageResultListOptions extends IResultListOptions {\n  layoutType?: string;\n  heightThreshold?: number;\n  columnWidth?: number;\n}\n\n/**\n * The ImageResultList component extends the {@link ResultList} component to display image results.\n *\n * This component inherits from the {@link ResultList} component. Thus, any option available for a ResultList component\n * is also available for an ImageResultList component.\n */\nexport class ImageResultList extends ResultList implements IComponentBindings {\n  static ID = 'ImageResultList';\n  static rowLayoutTypeStr = 'row';\n  static columnLayoutTypeStr = 'column';\n\n  /**\n   * The options for the component\n   * This component inherits the options of the {@link ResultList} component.\n   * @componentOptions\n   */\n  static options: IImageResultListOptions = {\n\n    /**\n     * Specifies the type of layout to display image results with.\n     * Available values are:\n     * - `row`: Resizes images to make them fit the width of the container and have the same height for each row.\n     * - `column`: Displays the images in fixed-size columns.\n     * Default value is `row`.\n     */\n    layoutType: ComponentOptions.buildStringOption({\n      defaultValue: 'row',\n      postProcessing: (value: string) => value.toLowerCase()\n    }),\n\n    /**\n     * Specifies the maximum height of a row in a row layout.\n     *\n     * Default value is `250`. Minimum value is `16`.\n     */\n    heightThreshold: ComponentOptions.buildNumberOption({ defaultValue: 250, min: 16 }),\n\n    /**\n     * Specifies the width of a column in a column layout.\n     *\n     * Default value is `225`. Minimum value is `16`.\n     */\n    columnWidth: ComponentOptions.buildNumberOption({ defaultValue: 225, min: 16 })\n  };\n\n  private columnResultsArray: number[] = [];\n  private imagesInCurrentRow: number[] = [];\n  private resultIndex: number = 0;\n  private lastRowHeight: number = 0;\n\n  /**\n   * Creates a new ImageResultList component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the ImageResultList component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param elementClassId The class that this component should instantiate. Components that extend the base\n   * {@link ResultList} component use this. Default value is `CoveoResultList`.\n   */\n  constructor(public element: HTMLElement, public options?: IImageResultListOptions, bindings?: IComponentBindings, elementClassId: string = ResultList.ID) {\n\n    super(element, options, bindings, ImageResultList.ID);\n\n    this.options = ComponentOptions.initComponentOptions(element, ImageResultList, options);\n\n    this.lastRowHeight = this.options.heightThreshold;\n\n    this.bind.onRootElement(ResultListEvents.newResultsDisplayed, this.handleProcessNewResultsDisplayed);\n    this.bind.onRootElement(InitializationEvents.nuke, this.handleNuke);\n    this.bindWindowResizeEvent();\n  }\n\n  private getResultsElement(): HTMLElement[] {\n    return $$(this.element).findAll('.CoveoResult');\n  }\n\n  private getResultsElementImages(): HTMLElement[] {\n    return $$(this.element).findAll('.CoveoResult img');\n  }\n\n  private getResultsContainerDiv(): HTMLElement {\n    return $$(this.element).find('div');\n  }\n\n  private bindWindowResizeEvent() {\n    window.addEventListener('resize', this.resize);\n  }\n\n  private handleNuke() {\n    window.removeEventListener('resize', this.resize);\n  }\n\n  private resize() {\n    let timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(this.retrieveLayoutMethod(), 250);\n  }\n\n  private handleProcessNewResultsDisplayed() {\n    if (this.disabled) {\n      $$(this.element).hide();\n    } else {\n      $$(this.element).show();\n    }\n    this.onImageProxy(this.retrieveLayoutMethod());\n  }\n\n  private addTransitionAllToElement(elements: HTMLElement[]) {\n    _.defer(() => {\n      _.each(elements, (element) => {\n        $$(element).addClass('coveo-transition-all');\n      });\n    });\n  }\n\n  private retrieveLayoutMethod(): () => void {\n    if (!this.disabled) {\n      if (this.options.layoutType.toLowerCase() == ImageResultList.columnLayoutTypeStr) {\n        return () => this.setupColumns();\n      } else if (this.options.layoutType.toLowerCase() == ImageResultList.rowLayoutTypeStr) {\n        return () => this.setupRows();\n      }\n    }\n    return () => {\n    };\n  }\n\n  private onImageProxy(callback: () => void) {\n    _.each(this.getResultsElement(), (element: HTMLElement) => {\n      if ($$(element).findAll('img').length == 0) {\n        $$(element).detach();\n      }\n    });\n\n    let images = this.getResultsElementImages();\n    let loaded = 0;\n    let onImageLoad = (image: HTMLImageElement) => {\n      if ($$(image).height() > 0) {\n        if ($$(image).getAttribute('width') == null && $$(image).getAttribute('height') == null) {\n          $$(image).setAttribute('height', $$(image).height().toString());\n          $$(image).setAttribute('width', $$(image).width().toString());\n        }\n        loaded++;\n        if (loaded == images.length) {\n          callback();\n        }\n      } else {\n        $$(image.parentElement).detach();\n        images = _.filter(images, (img) => {\n          return !img.isEqualNode(image);\n        });\n        if (loaded == images.length) {\n          callback();\n        }\n      }\n    };\n    _.each(images, (e: HTMLImageElement) => {\n      if ((e.src && e.complete) || /*for IE 10-*/ $$(e).height() > 0) {\n        onImageLoad(e);\n      } else {\n        $$(e).one('load', () => onImageLoad(e));\n      }\n    });\n  }\n\n  private getHorizontalMargin(element: HTMLElement) {\n    let elementDom = $$(element);\n    return parseInt(elementDom.css('margin-left')) + parseInt(elementDom.css('margin-right'));\n  }\n\n  private getVerticalMargin(element: HTMLElement) {\n    let elementDom = $$(element);\n    return parseInt(elementDom.css('margin-top')) + parseInt(elementDom.css('margin-bottom'));\n  }\n\n  private setupColumns() {\n    let containerWidth = $$(this.getResultsContainerDiv()).width();\n    let result = this.getResultsElement();\n    let colWidth = this.options.columnWidth;\n    let margin = this.getHorizontalMargin(result[0]);\n\n    let numberOfColumns = Math.floor(containerWidth / (colWidth + margin));\n\n    this.columnResultsArray = [];\n    for (let i = 0; i < numberOfColumns; i++) {\n      this.columnResultsArray.push(margin);\n    }\n\n    this.positionColumns(colWidth, margin);\n    $$(this.element).trigger(ImageResultListEvents.imageResultsLayoutComplete, {});\n\n    if (this.options.enableInfiniteScroll) {\n      this.adjustNumberOfResults();\n    }\n  }\n\n  private positionColumns(colWidth: number, margin: number) {\n    let results = this.getResultsElement();\n\n    _.each(results, result => {\n      let minTopOffset = _.min(this.columnResultsArray);\n      let resultIndex = this.columnResultsArray.indexOf(minTopOffset);\n      let leftOffset = margin + (resultIndex * (colWidth + margin));\n\n      result.style.left = leftOffset + 'px';\n      result.style.top = minTopOffset + 'px';\n      result.style.width = colWidth + 'px';\n\n      this.columnResultsArray[resultIndex] = minTopOffset + result.offsetHeight + margin;\n    });\n    this.setResultsContainerHeight(_.max(this.columnResultsArray));\n\n    this.addTransitionAllToElement(results);\n  }\n\n  private setResultsContainerHeight(height: number) {\n    $$(this.element).setAttribute('height', (Math.ceil(height).toString()));\n  }\n\n  private setupRows() {\n    let results = this.getResultsElement();\n    let containerWidth = $$(this.element).width();\n    this.resultIndex = 0;\n    let topOffset = 0;\n    while (this.resultIndex < results.length) {\n      this.imagesInCurrentRow = [];\n      let rowHeight = this.getCurrentRowHeight(results, containerWidth);\n      this.setCurrentRowImagesDimensions(results, rowHeight, topOffset);\n      topOffset += rowHeight;\n    }\n    this.setResultsContainerHeight(topOffset);\n    $$(this.element).trigger(ImageResultListEvents.imageResultsLayoutComplete, {});\n    this.addTransitionAllToElement(results);\n\n    if (this.options.enableInfiniteScroll) {\n      this.adjustNumberOfResults();\n    }\n  }\n\n  private getCurrentRowHeight(results: HTMLElement[], containerWidth: number): number {\n    let divider = 0;\n    let height: number = null;\n    while ((this.resultIndex < results.length) && (height == null || height >= this.options.heightThreshold)) {\n      let imageDimensions = this.getImageDimensionsFromResult(results[this.resultIndex]);\n      if (imageDimensions != null) {\n        divider += imageDimensions.width / imageDimensions.height;\n        height = containerWidth / divider;\n      }\n      this.imagesInCurrentRow.push(this.resultIndex);\n      this.resultIndex++;\n    }\n    // correct height for last element if it can't be as wide as the container\n    if (height > this.options.heightThreshold) {\n      height = this.lastRowHeight;\n    }\n    this.lastRowHeight = height;\n    return height;\n  }\n\n  private getImageDimensionsFromResult(result: HTMLElement) {\n    let image = $$(result).find('img');\n    let height = parseInt(image.getAttribute('height'));\n    let width = parseInt(image.getAttribute('width'));\n\n    return {\n      height: height,\n      width: width\n    };\n  }\n\n  private setCurrentRowImagesDimensions(images: HTMLElement[], height: number, top: number) {\n    let leftOffset = 0;\n    _.each(this.imagesInCurrentRow, imageIndex => {\n      let image = $$(images[imageIndex]).find('img');\n      let oldWidth = parseInt(image.getAttribute('width'));\n      let oldHeight = parseInt(image.getAttribute('height'));\n      let width = oldWidth * height / oldHeight;\n      let widthMargin = this.getHorizontalMargin(image);\n      let heightMargin = this.getVerticalMargin(image);\n\n      image.setAttribute('height', Math.round(height - heightMargin).toString());\n      image.setAttribute('width', Math.round(width - widthMargin).toString());\n      image.setAttribute('left', Math.round(leftOffset).toString());\n      image.setAttribute('top', Math.round(top).toString());\n\n      leftOffset += width;\n    });\n  }\n\n  private adjustNumberOfResults() {\n    let elementHeight = Number($$(this.element).getAttribute('data-height'));\n\n    if (_.isNumber(elementHeight) == false) {\n      elementHeight = $$(this.element).height();\n    }\n\n    if ((elementHeight < $$(<HTMLElement>this.options.infiniteScrollContainer).height()) && super.hasPotentiallyMoreResultsToDisplay()) {\n      super.displayMoreResults(this.options.infiniteScrollPageSize);\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(ImageResultList);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ImageResultList/ImageResultList.ts\n **/","import _ = require('underscore');\n\nexport let underscoreInstance;\nunderscoreInstance = _;\nsetCoveoUnderscore();\nfunction setCoveoUnderscore() {\n  if (window['Coveo'] == undefined) {\n    window['Coveo'] = {};\n  }\n  if (window['Coveo']['_'] == undefined) {\n    window['Coveo']['_'] = _;\n    underscoreInstance = window['Coveo']['_'];\n  }\n}\n\nwindow['_'] = _;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Base/CoveoUnderscore.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { QueryEvents, IBuildingQueryEventArgs } from '../../events/QueryEvents';\nimport { AdvancedSearchEvents } from '../../events/AdvancedSearchEvents';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport { IAdvancedSearchInput, IAdvancedSearchPrebuiltInput, IAdvancedSearchSection, IExternalAdvancedSearchSection } from './AdvancedSearchInput';\nimport { AdvancedSearchInputFactory } from './AdvancedSearchInputFactory';\nimport { IQueryOptions } from '../../controllers/QueryController';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { QuerySummaryEvents } from '../../events/QuerySummaryEvents';\nimport _ = require('underscore');\n\n\nexport interface IAdvancedSearchOptions {\n  includeKeywords?: boolean;\n  includeDate?: boolean;\n  includeDocument?: boolean;\n}\n\n/**\n * The AdvancedSearch component is meant to render a section in the {@link Settings} menu to allow the user to easily\n * create complex queries to send to the index.\n *\n * You can create custom code that adds new sections in the **Advanced Search** panel generated by this component by\n * attaching a handler to the {@link AdvancedSearchEvents.buildingAdvancedSearch} event.\n */\nexport class AdvancedSearch extends Component {\n  static ID = 'AdvancedSearch';\n\n  /**\n   * @componentOptions\n   */\n  static options: IAdvancedSearchOptions = {\n\n    /**\n     * Specifies whether to include the built-in **Keywords** section.\n     *\n     * Default value is `true`.\n     */\n    includeKeywords: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to include the built-in **Date** section.\n     *\n     * Default value is `true`.\n     */\n    includeDate: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to include the built-in **Document** section.\n     *\n     * Default value is `true`.\n     */\n    includeDocument: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  public inputs: IAdvancedSearchInput[] = [];\n  private inputFactory = new AdvancedSearchInputFactory(this.queryController.getEndpoint());\n  private externalSections: IExternalAdvancedSearchSection[] = [];\n\n  /**\n   * Creates a new AdvancedSearch component.\n   *\n   * Triggers the {@link AdvancedSearchEvents.buildingAdvancedSearch} event.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the AdvancedSearch component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: IAdvancedSearchOptions, bindings?: IComponentBindings) {\n    super(element, AdvancedSearch.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, AdvancedSearch, options);\n    this.bindEvents();\n    this.buildComponent();\n  }\n\n  /**\n   * Launches the advanced search query.\n   * If query returns successfully, also logs an `advancedSearch` event in the usage analytics (see\n   * {@link Analytics.logSearchEvent}).\n   */\n  public executeAdvancedSearch() {\n    this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.advancedSearch, {});\n    this.queryController.executeQuery();\n  }\n\n  /**\n   * Resets the state of all form inputs inside the AdvancedSearch component.\n   */\n  public reset() {\n    _.each(this.inputs, (input) => {\n      input.reset();\n    });\n  }\n\n  private buildComponent() {\n    this.buildTitle();\n    this.buildCloseButton();\n    this.buildContent();\n    $$(this.element).hide();\n  }\n\n  private buildTitle() {\n    var title = $$('div', { className: 'coveo-advanced-search-panel-title' }, l('AdvancedSearch')).el;\n    $$(this.element).append(title);\n  }\n\n  private buildCloseButton() {\n    var closeButton = $$('div', { className: 'coveo-advanced-search-panel-close' }, $$('span', { className: 'coveo-icon' }).el);\n    closeButton.on('click', () => this.close());\n    $$(this.element).append(closeButton.el);\n  }\n\n  private buildContent() {\n    let component = $$('div');\n    let inputSections: IAdvancedSearchSection[] = [];\n    if (this.options.includeKeywords) {\n      inputSections.push(this.getKeywordsSection());\n    }\n    if (this.options.includeDate) {\n      inputSections.push(this.getDateSection());\n    }\n    if (this.options.includeDocument) {\n      inputSections.push(this.getDocumentSection());\n    }\n\n    this.externalSections = [];\n    $$(this.root).trigger(AdvancedSearchEvents.buildingAdvancedSearch, {\n      sections: this.externalSections,\n      executeQuery: (options: IQueryOptions) => {\n        return this.queryController.executeQuery(options);\n      }\n    });\n\n\n    _.each(this.externalSections, (section: IExternalAdvancedSearchSection) => {\n      component.append(this.buildExternalSection(section));\n    });\n\n    _.each(inputSections, (section) => {\n      component.append(this.buildInternalSection(section));\n    });\n\n    $$(this.element).append(component.el);\n  }\n\n  private open() {\n    $$(this.element).show();\n  }\n\n  private close() {\n    $$(this.element).hide();\n  }\n\n  private getKeywordsSection(): IAdvancedSearchSection {\n    let sectionName = l('Keywords');\n    let keywordsInputs = [];\n    keywordsInputs.push(this.inputFactory.createAllKeywordsInput());\n    keywordsInputs.push(this.inputFactory.createExactKeywordsInput());\n    keywordsInputs.push(this.inputFactory.createAnyKeywordsInput());\n    keywordsInputs.push(this.inputFactory.createNoneKeywordsInput());\n    return { name: sectionName, inputs: keywordsInputs };\n  }\n\n  private getDateSection(): IAdvancedSearchSection {\n    let sectionName = l('Date');\n    let dateInputs = [];\n    dateInputs.push(this.inputFactory.createAnytimeDateInput());\n    dateInputs.push(this.inputFactory.createInTheLastDateInput());\n    dateInputs.push(this.inputFactory.createBetweenDateInput());\n    return { name: sectionName, inputs: dateInputs };\n  }\n\n  private getDocumentSection(): IAdvancedSearchSection {\n    let sectionName = l('Document');\n    let documentInputs = [];\n    documentInputs.push(this.inputFactory.createSimpleFieldInput(l('FileType'), '@filetype'));\n    documentInputs.push(this.inputFactory.createSimpleFieldInput(l('Language'), '@language'));\n    documentInputs.push(this.inputFactory.createSizeInput());\n    documentInputs.push(this.inputFactory.createAdvancedFieldInput(l('Title'), '@title'));\n    documentInputs.push(this.inputFactory.createAdvancedFieldInput(l('Author'), '@author'));\n    return { name: sectionName, inputs: documentInputs };\n  }\n\n  private buildExternalSection(section: IExternalAdvancedSearchSection): HTMLElement {\n    let sectionHTML = this.buildSectionTitle(section);\n    this.inputs = _.union(this.inputs, <any>section.inputs);\n    sectionHTML.appendChild(section.content);\n    return sectionHTML;\n  }\n\n  private buildInternalSection(section: IAdvancedSearchSection): HTMLElement {\n    let sectionHTML = this.buildSectionTitle(section);\n    let sectionInputs = [];\n    _.each(section.inputs, (input) => {\n      sectionInputs.push(this.buildDefaultInput(input));\n    });\n    this.inputs = _.union(this.inputs, sectionInputs);\n    _.each(sectionInputs, (input) => {\n      $$(sectionHTML).append(input.build());\n    });\n\n    return sectionHTML;\n  }\n\n  private buildSectionTitle(section: IAdvancedSearchSection): HTMLElement {\n    let sectionHTML = $$('div', { className: 'coveo-advanced-search-section' });\n    let title = $$('div', { className: 'coveo-advanced-search-section-title' });\n    title.text(section.name);\n    sectionHTML.append(title.el);\n    return sectionHTML.el;\n  }\n\n  private buildDefaultInput(input: IAdvancedSearchInput | IAdvancedSearchPrebuiltInput): IAdvancedSearchInput {\n    if (this.isPrebuiltInput(input)) {\n      return this.inputFactory.create(input.name, input.parameters);\n    } else {\n      return input;\n    }\n  }\n\n  private isPrebuiltInput(input: IAdvancedSearchInput | IAdvancedSearchPrebuiltInput): input is IAdvancedSearchPrebuiltInput {\n    return (<IAdvancedSearchPrebuiltInput>input).name !== undefined;\n  }\n\n  private bindEvents() {\n    this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n      args.menuData.push({\n        text: l('AdvancedSearch'),\n        className: 'coveo-advanced-search',\n        onOpen: () => this.open(),\n        onClose: () => this.close()\n      });\n    });\n\n    this.bind.onRootElement(QueryEvents.buildingQuery, (data: IBuildingQueryEventArgs) => {\n      _.each(this.externalSections, (section: IExternalAdvancedSearchSection) => {\n        if (section.updateQuery) {\n          section.updateQuery(<any>section.inputs, data.queryBuilder);\n        }\n      });\n      _.each(this.inputs, (input) => {\n        if (input.updateQuery) {\n          input.updateQuery(data.queryBuilder);\n        }\n      });\n    });\n\n    this.bind.onRootElement(AdvancedSearchEvents.executeAdvancedSearch, () => {\n      this.executeAdvancedSearch();\n    });\n\n    this.bind.onRootElement(QuerySummaryEvents.cancelLastAction, () => {\n      this.reset();\n    });\n  }\n\n}\n\nInitialization.registerAutoCreateComponent(AdvancedSearch);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/AdvancedSearch.ts\n **/","import { ISearchEndpoint } from '../../rest/SearchEndpointInterface';\nimport { AllKeywordsInput } from './KeywordsInput/AllKeywordsInput';\nimport { ExactKeywordsInput } from './KeywordsInput/ExactKeywordsInput';\nimport { AnyKeywordsInput } from './KeywordsInput/AnyKeywordsInput';\nimport { NoneKeywordsInput } from './KeywordsInput/NoneKeywordsInput';\nimport { AnytimeDateInput } from './DateInput/AnytimeDateInput';\nimport { InTheLastDateInput } from './DateInput/InTheLastDateInput';\nimport { BetweenDateInput } from './DateInput/BetweenDateInput';\nimport { IAdvancedSearchInput } from './AdvancedSearchInput';\nimport { SimpleFieldInput } from './DocumentInput/SimpleFieldInput';\nimport { AdvancedFieldInput } from './DocumentInput/AdvancedFieldInput';\nimport { SizeInput } from './DocumentInput/SizeInput';\nimport { IFieldInputParameters } from './AdvancedSearchInput';\n\nexport class AdvancedSearchInputFactory {\n\n  constructor(private endpoint: ISearchEndpoint) {\n  }\n\n  public create(name: string, options?: IFieldInputParameters): IAdvancedSearchInput {\n    switch (name) {\n      case 'keywords_all':\n        return this.createAllKeywordsInput();\n      case 'keywords_exact':\n        return this.createExactKeywordsInput();\n      case 'keywords_any':\n        return this.createAnyKeywordsInput();\n      case 'keywords_none':\n        return this.createNoneKeywordsInput();\n      case 'date_any':\n        return this.createAnytimeDateInput();\n      case 'date_last':\n        return this.createInTheLastDateInput();\n      case 'date_between':\n        return this.createBetweenDateInput();\n      case 'document_field':\n        return this.createSimpleFieldInput(options.name, options.field);\n      case 'document_advanced_field':\n        return this.createAdvancedFieldInput(options.name, options.field);\n      case 'document_size':\n        return this.createSizeInput();\n      default:\n        return null;\n    }\n  }\n\n  public createAllKeywordsInput(): AllKeywordsInput {\n    return new AllKeywordsInput();\n  }\n\n  public createExactKeywordsInput(): ExactKeywordsInput {\n    return new ExactKeywordsInput();\n  }\n\n  public createAnyKeywordsInput(): AnyKeywordsInput {\n    return new AnyKeywordsInput();\n  }\n\n  public createNoneKeywordsInput(): NoneKeywordsInput {\n    return new NoneKeywordsInput();\n  }\n\n  public createAnytimeDateInput(): AnytimeDateInput {\n    return new AnytimeDateInput();\n  }\n\n  public createInTheLastDateInput(): InTheLastDateInput {\n    return new InTheLastDateInput();\n  }\n\n  public createBetweenDateInput(): BetweenDateInput {\n    return new BetweenDateInput();\n  }\n\n  public createSimpleFieldInput(name: string, field: string): SimpleFieldInput {\n    return new SimpleFieldInput(name, field, this.endpoint);\n  }\n\n  public createAdvancedFieldInput(name: string, field: string): AdvancedFieldInput {\n    return new AdvancedFieldInput(name, field);\n  }\n\n  public createSizeInput() {\n    return new SizeInput();\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/AdvancedSearchInputFactory.ts\n **/","import { KeywordsInput } from './KeywordsInput';\nimport { l } from '../../../strings/Strings';\n\nexport class AllKeywordsInput extends KeywordsInput {\n  constructor() {\n    super(l('AllTheseWords'));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/KeywordsInput/AllKeywordsInput.ts\n **/","import { IAdvancedSearchInput } from '../AdvancedSearchInput';\nimport { TextInput } from '../Form/TextInput';\nimport { QueryBuilder } from '../../Base/QueryBuilder';\nimport { AdvancedSearchEvents } from '../../../events/AdvancedSearchEvents';\nimport { $$ } from '../../../utils/Dom';\n\nexport class KeywordsInput implements IAdvancedSearchInput {\n\n  protected input: TextInput;\n\n  constructor(public inputName: string) {\n  }\n\n  public reset() {\n    this.clear();\n  }\n\n  public build(): HTMLElement {\n    this.input = new TextInput(this.onChange.bind(this), this.inputName);\n    return this.input.getElement();\n  }\n\n  public setValue(value: string) {\n    this.input.setValue(value);\n  }\n\n  public getValue(): string {\n    return this.input.getValue();\n  }\n\n  public clear() {\n    this.input.setValue('');\n  }\n\n  public updateQuery(queryBuilder: QueryBuilder) {\n    let value = this.getValue();\n    if (value) {\n      queryBuilder.advancedExpression.add(value);\n    }\n  }\n\n  protected onChange() {\n    if (this.input) {\n      $$(this.input.getElement()).trigger(AdvancedSearchEvents.executeAdvancedSearch);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/KeywordsInput/KeywordsInput.ts\n **/","import { $$ } from '../../../utils/Dom';\nimport { KEYBOARD } from '../../../utils/KeyboardUtils';\n\n/**\n * This class will create a text input meant to be used inside the {@link AdvancedSearch} component.\n *\n * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport class TextInput {\n\n  private element: HTMLElement;\n  private lastQueryText: string = '';\n\n  /**\n   * Create a new text input.\n   * @param onChange will be called every time the text input change it's value. `this` will be the `TextInput` instance.\n   * @param name\n   */\n  constructor(public onChange: () => void = () => { }, public name?: string) {\n    this.buildContent();\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  /**\n   * Get the currently entered value in the text input.\n   * @returns {string}\n   */\n  public getValue(): string {\n    return (<HTMLInputElement>$$(this.element).find('input')).value;\n  }\n\n  /**\n   * Set the value in the text input.\n   * @param value\n   */\n  public setValue(value: string) {\n    (<HTMLInputElement>$$(this.element).find('input')).value = value;\n  }\n\n  /**\n   * Reset the text input\n   */\n  public reset() {\n    (<HTMLInputElement>$$(this.element).find('input')).value = '';\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public build() {\n    return this.element;\n  }\n\n  private buildContent() {\n    let container = $$('div', { className: 'coveo-input' });\n    let input = $$('input', { type: 'text' });\n    input.on(['keydown', 'blur'], (e: Event) => {\n      if (e.type == 'blur' || (<KeyboardEvent>e).keyCode == KEYBOARD.ENTER) {\n        this.triggerChange();\n      }\n    });\n    (<HTMLInputElement>input.el).required = true;\n    container.append(input.el);\n    if (this.name) {\n      let label = $$('label');\n      label.text(this.name);\n      container.append(label.el);\n    }\n    this.element = container.el;\n  }\n\n  private getInput(): HTMLInputElement {\n    return <HTMLInputElement>$$(this.element).find('input');\n  }\n\n\n  private triggerChange() {\n    if (this.lastQueryText != this.getInput().value) {\n      this.onChange();\n      this.lastQueryText = this.getInput().value;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/Form/TextInput.ts\n **/","import { KeywordsInput } from './KeywordsInput';\nimport { l } from '../../../strings/Strings';\n\nexport class ExactKeywordsInput extends KeywordsInput {\n  constructor() {\n    super(l('ExactPhrase'));\n  }\n\n  public getValue(): string {\n    let value = super.getValue();\n    return value ? '\\\"' + value + '\\\"' : '';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/KeywordsInput/ExactKeywordsInput.ts\n **/","import { KeywordsInput } from './KeywordsInput';\nimport { l } from '../../../strings/Strings';\nimport _ = require('underscore');\n\nexport class AnyKeywordsInput extends KeywordsInput {\n  constructor() {\n    super(l('AnyOfTheseWords'));\n  }\n\n  public getValue(): string {\n    let value = super.getValue();\n    let splitValues = value.split(' ');\n    let generatedValue = '';\n    _.each(splitValues, (splitValue) => {\n      generatedValue += splitValue + ' OR ';\n    });\n    generatedValue = generatedValue.substr(0, generatedValue.length - 4);\n    return generatedValue;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/KeywordsInput/AnyKeywordsInput.ts\n **/","import { KeywordsInput } from './KeywordsInput';\nimport { l } from '../../../strings/Strings';\nimport _ = require('underscore');\n\nexport class NoneKeywordsInput extends KeywordsInput {\n  constructor() {\n    super(l('NoneOfTheseWords'));\n  }\n\n  public getValue(): string {\n    let value = super.getValue();\n    let generatedValue = '';\n\n    if (value) {\n      let splitValues = value.split(' ');\n      _.each(splitValues, (splitValue) => {\n        generatedValue += ' NOT ' + splitValue;\n      });\n      generatedValue = generatedValue.substr(1);\n    }\n\n    return generatedValue;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/KeywordsInput/NoneKeywordsInput.ts\n **/","import { DateInput } from './DateInput';\nimport { l } from '../../../strings/Strings';\nimport { $$ } from '../../../utils/Dom';\nimport { AdvancedSearchEvents } from '../../../events/AdvancedSearchEvents';\n\nexport class AnytimeDateInput extends DateInput {\n  constructor() {\n    super(l('Anytime'));\n  }\n\n  public build(): HTMLElement {\n    super.build();\n    let radio = this.getRadio();\n    radio.checked = true;\n    $$(radio).on('change', () => {\n      $$(this.element).trigger(AdvancedSearchEvents.executeAdvancedSearch);\n    });\n    return this.element;\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DateInput/AnytimeDateInput.ts\n **/","import { IAdvancedSearchInput } from '../AdvancedSearchInput';\nimport { AdvancedSearchEvents } from '../../../events/AdvancedSearchEvents';\nimport { QueryBuilder } from '../../Base/QueryBuilder';\nimport { $$ } from '../../../utils/Dom';\nimport { RadioButton } from '../Form/RadioButton';\nimport _ = require('underscore');\n\nexport class DateInput implements IAdvancedSearchInput {\n\n  protected element: HTMLElement;\n  private radio: RadioButton;\n\n  constructor(public inputName: string) {\n    this.buildContent();\n  }\n\n  public reset() {\n    this.radio.reset();\n  }\n\n  public build(): HTMLElement {\n    return this.element;\n  }\n\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  public getValue(): string {\n    return '';\n  }\n\n  public isSelected(): boolean {\n    return this.getRadio().checked;\n  }\n\n  public updateQuery(queryBuilder: QueryBuilder) {\n    let value = this.getValue();\n    if (value) {\n      queryBuilder.advancedExpression.add(this.getValue());\n    }\n  }\n\n  protected getRadio(): HTMLInputElement {\n    return <HTMLInputElement>$$(this.element).find('input');\n  }\n\n  private buildContent() {\n    this.radio = new RadioButton(() => {\n      this.deactivateAllInputs();\n      this.activateSelectedInput();\n    }, this.inputName);\n    this.element = this.radio.getElement();\n    $$(this.element).addClass('coveo-advanced-search-date-input-section');\n    $$(this.radio.getRadio()).addClass('coveo-advanced-search-date');\n    $$(this.radio.getLabel()).addClass('coveo-advanced-search-label');\n  }\n\n  private deactivateAllInputs() {\n    let elements = $$(this.element.parentElement).findAll('fieldset');\n    _.each(elements, (element) => {\n      (<HTMLInputElement>element).disabled = true;\n    });\n  }\n\n  private activateSelectedInput() {\n    let elements = $$(this.element).findAll('fieldset');\n    _.each(elements, (element) => {\n      (<HTMLInputElement>element).disabled = false;\n    });\n  }\n\n  protected onChange() {\n    if (this.element) {\n      $$(this.element).trigger(AdvancedSearchEvents.executeAdvancedSearch);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DateInput/DateInput.ts\n **/","import { $$ } from '../../../utils/Dom';\n\n/**\n * This class will create a radio button meant to be used inside the {@link AdvancedSearch} component.\n *\n * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport class RadioButton {\n\n  protected element: HTMLElement;\n\n  /**\n   * Create a new Radio button.\n   * @param onChange will be called every time the radio button change it's value. `this` will be the `RadioButton` instance.\n   * @param label The label for the choice.\n   */\n  constructor(public onChange: () => void = () => {\n  }, public label: string) {\n    this.buildContent();\n  }\n\n  /**\n   * Reset the radio button\n   */\n  public reset() {\n    (<HTMLInputElement>this.element).checked = false;\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public build(): HTMLElement {\n    return this.element;\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  public getValue(): string {\n    return '';\n  }\n\n  /**\n   * Return true if the radio button is selected.\n   * @returns {boolean}\n   */\n  public isSelected(): boolean {\n    return this.getRadio().checked;\n  }\n\n  /**\n   * Get the input element (the radio button itself).\n   * @returns {HTMLInputElement}\n   */\n  public getRadio(): HTMLInputElement {\n    return <HTMLInputElement>$$(this.element).find('input');\n  }\n\n  /**\n   * Get the label element.\n   * @returns {HTMLLabelElement}\n   */\n  public getLabel(): HTMLLabelElement {\n    return <HTMLLabelElement>$$(this.element).find('label');\n  }\n\n  private buildContent() {\n    let section = $$('div', { className: 'coveo-advanced-search-radio-section' });\n    let radioOption = $$('div', { className: 'coveo-radio' });\n    let radioInput = $$('input', { type: 'radio', name: 'coveo-advanced-search-radio-input', id: this.label });\n    let labelInput = $$('label', { className: 'coveo-advanced-search-radio-input-label', 'for': this.label });\n    labelInput.text(this.label);\n    radioInput.on('change', () => {\n      this.onChange();\n    });\n\n    radioOption.append(radioInput.el);\n    radioOption.append(labelInput.el);\n    section.append(radioOption.el);\n    this.element = section.el;\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/Form/RadioButton.ts\n **/","import { DateInput } from './DateInput';\nimport { $$ } from '../../../utils/Dom';\nimport { l } from '../../../strings/Strings';\nimport { Dropdown } from '../Form/Dropdown';\nimport { NumericSpinner } from '../Form/NumericSpinner';\nimport { DateUtils } from '../../../utils/DateUtils';\n\nexport class InTheLastDateInput extends DateInput {\n  public dropdown: Dropdown;\n  public spinner: NumericSpinner;\n\n  constructor() {\n    super(l('InTheLast'));\n  }\n\n  public reset() {\n    this.dropdown.reset();\n    this.spinner.reset();\n  }\n\n  public build(): HTMLElement {\n    super.build();\n    let input = $$('fieldset', { className: 'coveo-advanced-search-date-input' });\n    (<HTMLFieldSetElement>input.el).disabled = true;\n\n    this.spinner = new NumericSpinner(this.onChange.bind(this));\n    input.append(this.spinner.getElement());\n\n    this.dropdown = new Dropdown(this.onChange.bind(this), ['days', 'months']);\n    this.dropdown.setId('coveo-advanced-search-in-the-last-select');\n    input.append(this.dropdown.getElement());\n\n    this.element.appendChild(input.el);\n    return this.element;\n  }\n\n  public getValue(): string {\n    let currentDate = new Date();\n    let time = this.spinner.getIntValue();\n    let size = this.dropdown.getValue().toLowerCase();\n\n    let date = new Date();\n    if (size == 'months') {\n      date.setMonth(currentDate.getMonth() - time);\n    } else {\n      date.setDate(currentDate.getDate() - time);\n    }\n\n    return this.isSelected() && time ? '@date>=' + DateUtils.dateForQuery(date) : '';\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DateInput/InTheLastDateInput.ts\n **/","import { $$, Dom } from '../../../utils/Dom';\nimport { l } from '../../../strings/Strings';\nimport _ = require('underscore');\n\n/**\n * This class will create a dropdown meant to be used inside the {@link AdvancedSearch} component.\n *\n * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport class Dropdown {\n\n  private element: HTMLElement;\n  private selectElement: HTMLSelectElement;\n  private optionsElement: HTMLOptionElement[] = [];\n\n  /**\n   * Create a new dropdown.\n   * @param onChange will be called every time the dropdown change it's value. `this` will be the `Dropdown` instance.\n   * @param listOfValues will be the list of selectable values in the dropdown\n   * @param getDisplayValue An optional function that allow to modify the display value vs the actual value from the `listOfValues`\n   * @param label A label/title to display for this dropdown\n   */\n  constructor(public onChange: () => void = () => {\n  }, protected listOfValues: string[], private getDisplayValue: (string) => string = l, private label?: string) {\n    this.buildContent();\n    this.select(0, false);\n    this.bindEvents();\n  }\n\n  /**\n   * Reset the dropdown\n   */\n  public reset() {\n    this.select(0, false);\n  }\n\n  public setId(id: string) {\n    $$(this.element).setAttribute('id', id);\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  /**\n   * Get the currently selected value in the dropdown.\n   * @returns {string}\n   */\n  public getValue(): string {\n    return this.selectElement.value;\n  }\n\n  /**\n   * Select a value from it's 0 based index in the {@link Dropdown.listOfValues}.\n   * @param index\n   */\n  public select(index: number, executeOnChange = true) {\n    this.selectOption(this.optionsElement[index], executeOnChange);\n  }\n\n  /**\n   * Return the element on which the dropdown is bound.\n   * @returns {HTMLElement}\n   */\n  public build() {\n    return this.element;\n  }\n\n  private buildContent() {\n    this.selectElement = <HTMLSelectElement>$$('select', { className: 'coveo-dropdown' }).el;\n    let selectOptions = this.buildOptions();\n    _.each(selectOptions, (opt) => {\n      $$(this.selectElement).append(opt);\n    });\n    this.element = this.selectElement;\n  }\n\n  public selectValue(value: string) {\n    _.each(this.optionsElement, (option) => {\n      if ($$(option).getAttribute('data-value') == value) {\n        this.selectOption(option);\n      }\n    });\n  }\n\n  private selectOption(option: HTMLOptionElement, executeOnChange = true) {\n    this.selectElement.value = option.value;\n    if (executeOnChange) {\n      this.onChange();\n    }\n  }\n\n\n  private buildOptions(): HTMLElement[] {\n    let ret: HTMLElement[] = [];\n    _.each(this.listOfValues, (value: string) => {\n      ret.push(this.buildOption(value));\n    });\n    return ret;\n  }\n\n  private buildOption(value: string): HTMLElement {\n    let option = $$('option');\n    option.setAttribute('data-value', value);\n    option.setAttribute('value', value);\n    option.text(this.getDisplayValue(value));\n    this.optionsElement.push(<HTMLOptionElement>option.el);\n    return option.el;\n  }\n\n  private bindEvents() {\n    $$(this.selectElement).on('change', () => this.onChange());\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/Form/Dropdown.ts\n **/","import { $$ } from '../../../utils/Dom';\n\n/**\n * This class will create a numeric spinner meant to be used inside the {@link AdvancedSearch} component.\n *\n * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport class NumericSpinner {\n\n  private element: HTMLElement;\n  public name: string;\n\n  /**\n   * Create a new numeric spinner.\n   *\n   * @param onChange will be called every time the numeric spinner change it's value. `this` will be the `NumericSpinner` instance.\n   * @param min will be the minimum value selectable by the spinner\n   * @param max will be the maximum value selectable by the spinner\n   */\n  constructor(public onChange: () => void = () => {\n  }, public min: number = 0, public max?: number) {\n    this.buildContent();\n    this.bindEvents();\n  }\n\n  /**\n   * Reset the spinner\n   */\n  public reset() {\n    this.getSpinnerInput().value = '';\n  }\n\n  /**\n   * Return the element on which the spinner is bound.\n   * @returns {HTMLInputElement}\n   */\n  public getElement(): HTMLElement {\n    return this.element;\n  }\n\n  /**\n   * Return the current selected value in the spinner, as an int.\n   * @returns {number}\n   */\n  public getIntValue(): number {\n    return this.getSpinnerInput().value ? parseInt(this.getSpinnerInput().value, 10) : this.min;\n  }\n\n  /**\n   * Return the current selected value in the spinner, as a float.\n   * @returns {number}\n   */\n  public getFloatValue(): number {\n    return this.getSpinnerInput().value ? parseFloat(this.getSpinnerInput().value) : this.min;\n  }\n\n  /**\n   * Set the value in the spinner.\n   *\n   * @param value\n   */\n  public setValue(value: number) {\n    if (this.max && value > this.max) {\n      value = this.max;\n    }\n    if (value < this.min) {\n      value = this.min;\n    }\n    this.getSpinnerInput().value = value.toString();\n    this.onChange();\n  }\n\n  /**\n   * Return the element on which the spinner is bound.\n   */\n  public build() {\n    return this.element;\n  }\n\n  private buildContent() {\n    let numericSpinner = $$('div', { className: 'coveo-numeric-spinner' });\n    let numberInput = $$('input', { className: 'coveo-advanced-search-number-input', type: 'text' });\n    let addOn = $$('span', { className: 'coveo-add-on' });\n    addOn.el.innerHTML = `<div class=\"coveo-spinner-up\">\n                              <i class=\"coveo-sprites-arrow-up\"></i>\n                          </div>\n                          <div class=\"coveo-spinner-down\">\n                              <i class=\"coveo-sprites-arrow-down\"></i>\n                          </div>`;\n    numericSpinner.append(numberInput.el);\n    numericSpinner.append(addOn.el);\n    this.element = numericSpinner.el;\n  }\n\n  private bindEvents() {\n    let up = $$(this.element).find('.coveo-spinner-up');\n    $$(up).on('click', () => {\n      this.setValue(this.getFloatValue() + 1);\n    });\n\n    let down = $$(this.element).find('.coveo-spinner-down');\n    $$(down).on('click', () => {\n      this.setValue(this.getFloatValue() - 1);\n    });\n\n    let numberInput = <HTMLInputElement>$$(this.element).find('input');\n    $$(numberInput).on('input', () => {\n      if (numberInput.value.match(/[0-9]*/)) {\n        this.onChange();\n      }\n    });\n  }\n\n  private getSpinnerInput(): HTMLInputElement {\n    return (<HTMLInputElement>$$(this.element).find('.coveo-advanced-search-number-input'));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/Form/NumericSpinner.ts\n **/","import { DateInput } from './DateInput';\nimport { DatePicker } from '../Form/DatePicker';\nimport { l } from '../../../strings/Strings';\nimport { $$ } from '../../../utils/Dom';\n\nexport class BetweenDateInput extends DateInput {\n\n  public firstDatePicker: DatePicker = new DatePicker(this.onChange.bind(this));\n  public secondDatePicker: DatePicker = new DatePicker(this.onChange.bind(this));\n\n  constructor() {\n    super(l('Between'));\n  }\n\n  public reset() {\n    this.firstDatePicker.reset();\n    this.secondDatePicker.reset();\n  }\n\n  public build(): HTMLElement {\n    super.build();\n    let container = $$('fieldset', { className: 'coveo-advanced-search-date-input' });\n    (<HTMLFieldSetElement>container.el).disabled = true;\n\n    container.append(this.firstDatePicker.getElement());\n    container.append(this.buildAnd());\n    container.append(this.secondDatePicker.getElement());\n\n    this.element.appendChild(container.el);\n    return this.element;\n  }\n\n  public getValue(): string {\n    let firstDate = this.firstDatePicker.getValue();\n    let secondDate = this.secondDatePicker.getValue();\n    let query = '';\n    if (firstDate) {\n      query += `(@date>=${firstDate})`;\n    }\n    if (secondDate) {\n      query += `(@date<=${secondDate})`;\n    }\n    return this.isSelected() ? query : '';\n  }\n\n  private buildAnd(): HTMLElement {\n    let and = $$('div', { className: 'coveo-advanced-search-and' });\n    and.text(l('And').toLowerCase());\n    return and.el;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DateInput/BetweenDateInput.ts\n **/","declare function require(name: string);\nimport { $$ } from '../../../utils/Dom';\nimport { DateUtils } from '../../../utils/DateUtils';\nlet Pikaday = require('pikaday');\n\n\n/**\n * This class will create a date picker meant to be used inside the {@link AdvancedSearch} component.\n *\n * It can be, more specifically, used for external code using the {@link AdvancedSearchEvents.buildingAdvancedSearch}\n */\nexport class DatePicker {\n\n  private element: HTMLInputElement;\n  private picker: Pikaday;\n  public name: string;\n  private wasReset = false;\n\n  /**\n   * Create a new date picker.\n   * @param onChange will be called every time the date picker change it's value. `this` will be the `DatePicker` instance.\n   */\n  constructor(public onChange: () => void = () => { }) {\n    this.buildContent();\n  }\n\n  /**\n   * Reset the date picker\n   */\n  public reset() {\n    this.picker.setDate(undefined);\n    this.wasReset = true;\n  }\n\n  /**\n   * Return the element on which the date picker is bound.\n   * @returns {HTMLInputElement}\n   */\n  public getElement(): HTMLInputElement {\n    return this.element;\n  }\n\n  /**\n   * Get the current value for the date picker.\n   * @returns {string}\n   */\n  public getValue(): string {\n    if (this.wasReset) {\n      return '';\n    }\n    let date = this.picker.getDate();\n    return date ? DateUtils.dateForQuery(this.picker.getDate()) : '';\n  }\n\n  /**\n   * Set the current value for the date picker.\n   * @param date\n   */\n  public setValue(date: Date) {\n    this.picker.setDate(date);\n    this.wasReset = false;\n  }\n\n  /**\n   * Return the element on which the date picker is bound.\n   * @returns {HTMLInputElement}\n   */\n  public build(): HTMLInputElement {\n    return this.element;\n  }\n\n  private buildContent() {\n    this.element = <HTMLInputElement>$$('input', { className: 'coveo-button' }).el;\n    this.element.readOnly = true;\n    this.picker = new Pikaday({\n      field: this.element,\n      onSelect: this.onChange\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/Form/DatePicker.ts\n **/","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (typeof exports === 'object') {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = require('moment'); } catch (e) {}\n        module.exports = factory(moment);\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(function (req)\n        {\n            // Load moment.js as an optional dependency\n            var id = 'moment';\n            try { moment = req(id); } catch (e) {}\n            return factory(moment);\n        });\n    } else {\n        root.Pikaday = factory(root.moment);\n    }\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        if (opts.isEmpty) {\n            return '<td class=\"is-empty\"></td>';\n        }\n        var arr = [];\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    renderWeek = function (d, m, y) {\n        // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n        var onejan = new Date(y, 0, 1),\n            weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n        return '<td class=\"pika-week\">' + weekNum + '</td>';\n    },\n\n    renderRow = function(days, isRTL)\n    {\n        return '<tr>' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div class=\"pika-title\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            if (hasMoment) {\n                date = moment(opts.field.value, opts.format);\n                date = (date && date.isValid()) ? date.toDate() : null;\n            }\n            else {\n                date = new Date(Date.parse(opts.field.value));\n            }\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                if (hasMoment && opts.field.value) {\n                    opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n                } else {\n                    opts.defaultDate = new Date(Date.parse(opts.field.value));\n                }\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : null;\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            setToStartOfDay(value);\n            this._o.minDate = value;\n            this._o.minYear  = value.getFullYear();\n            this._o.minMonth = value.getMonth();\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            setToStartOfDay(value);\n            this._o.maxDate = value;\n            this._o.maxYear = value.getFullYear();\n            this._o.maxMonth = value.getMonth();\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '';\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year) + this.render(this.calendars[c].year, this.calendars[c].month) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                var self = this;\n                sto(function() {\n                    self._o.onDraw.call(self);\n                }, 0);\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    isEmpty = i < before || i >= (days + before),\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day)),\n                    dayConfig = {\n                        day: 1 + (i - before),\n                        month: month,\n                        year: year,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange\n                    };\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year));\n                    }\n                    data.push(renderRow(row, opts.isRTL));\n                    row = [];\n                    r = 0;\n                }\n            }\n            return renderTable(opts, data);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this._v) {\n                removeClass(this.el, 'is-hidden');\n                this._v = true;\n                this.draw();\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n                this.el.style.position = 'static'; // reset\n                this.el.style.left = 'auto';\n                this.el.style.top = 'auto';\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (this._o.field) {\n                removeEvent(this._o.field, 'change', this._onInputChange);\n                if (this._o.bound) {\n                    removeEvent(this._o.trigger, 'click', this._onInputClick);\n                    removeEvent(this._o.trigger, 'focus', this._onInputFocus);\n                    removeEvent(this._o.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n\n}));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/pikaday/pikaday.js\n ** module id = 273\n ** module chunks = 0 1\n **/","//! moment.js\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date = new Date(y, m, d, h, M, s, ms);\n\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date = new Date(Date.UTC.apply(null, arguments));\n\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 1st is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        if (!m) {\n            return isArray(this._weekdays) ? this._weekdays :\n                this._weekdays['standalone'];\n        }\n        return isArray(this._weekdays) ? this._weekdays[m.day()] :\n            this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from begining of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to begining of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {milliseconds: 0, months: 0};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units || 'millisecond');\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input,units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input,units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    function startOf (units) {\n        units = normalizeUnits(units);\n        // the following switch intentionally omits break keywords\n        // to utilize falling through the cases.\n        switch (units) {\n            case 'year':\n                this.month(0);\n                /* falls through */\n            case 'quarter':\n            case 'month':\n                this.date(1);\n                /* falls through */\n            case 'week':\n            case 'isoWeek':\n            case 'day':\n            case 'date':\n                this.hours(0);\n                /* falls through */\n            case 'hour':\n                this.minutes(0);\n                /* falls through */\n            case 'minute':\n                this.seconds(0);\n                /* falls through */\n            case 'second':\n                this.milliseconds(0);\n        }\n\n        // weeks are a special case\n        if (units === 'week') {\n            this.weekday(0);\n        }\n        if (units === 'isoWeek') {\n            this.isoWeekday(1);\n        }\n\n        // quarters are also special\n        if (units === 'quarter') {\n            this.month(Math.floor(this.month() / 3) * 3);\n        }\n\n        return this;\n    }\n\n    function endOf (units) {\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond') {\n            return this;\n        }\n\n        // 'date' is an alias for 'day', so it should be considered as such.\n        if (units === 'date') {\n            units = 'day';\n        }\n\n        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'year') {\n            days   = this._days   + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            return units === 'month' ? months : months / 12;\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.22.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'YYYY-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/moment.js\n ** module id = 274\n ** module chunks = 0 1\n **/","var map = {\n\t\"./af\": 276,\n\t\"./af.js\": 276,\n\t\"./ar\": 277,\n\t\"./ar-dz\": 278,\n\t\"./ar-dz.js\": 278,\n\t\"./ar-kw\": 279,\n\t\"./ar-kw.js\": 279,\n\t\"./ar-ly\": 280,\n\t\"./ar-ly.js\": 280,\n\t\"./ar-ma\": 281,\n\t\"./ar-ma.js\": 281,\n\t\"./ar-sa\": 282,\n\t\"./ar-sa.js\": 282,\n\t\"./ar-tn\": 283,\n\t\"./ar-tn.js\": 283,\n\t\"./ar.js\": 277,\n\t\"./az\": 284,\n\t\"./az.js\": 284,\n\t\"./be\": 285,\n\t\"./be.js\": 285,\n\t\"./bg\": 286,\n\t\"./bg.js\": 286,\n\t\"./bm\": 287,\n\t\"./bm.js\": 287,\n\t\"./bn\": 288,\n\t\"./bn.js\": 288,\n\t\"./bo\": 289,\n\t\"./bo.js\": 289,\n\t\"./br\": 290,\n\t\"./br.js\": 290,\n\t\"./bs\": 291,\n\t\"./bs.js\": 291,\n\t\"./ca\": 292,\n\t\"./ca.js\": 292,\n\t\"./cs\": 293,\n\t\"./cs.js\": 293,\n\t\"./cv\": 294,\n\t\"./cv.js\": 294,\n\t\"./cy\": 295,\n\t\"./cy.js\": 295,\n\t\"./da\": 296,\n\t\"./da.js\": 296,\n\t\"./de\": 297,\n\t\"./de-at\": 298,\n\t\"./de-at.js\": 298,\n\t\"./de-ch\": 299,\n\t\"./de-ch.js\": 299,\n\t\"./de.js\": 297,\n\t\"./dv\": 300,\n\t\"./dv.js\": 300,\n\t\"./el\": 301,\n\t\"./el.js\": 301,\n\t\"./en-au\": 302,\n\t\"./en-au.js\": 302,\n\t\"./en-ca\": 303,\n\t\"./en-ca.js\": 303,\n\t\"./en-gb\": 304,\n\t\"./en-gb.js\": 304,\n\t\"./en-ie\": 305,\n\t\"./en-ie.js\": 305,\n\t\"./en-il\": 306,\n\t\"./en-il.js\": 306,\n\t\"./en-nz\": 307,\n\t\"./en-nz.js\": 307,\n\t\"./eo\": 308,\n\t\"./eo.js\": 308,\n\t\"./es\": 309,\n\t\"./es-do\": 310,\n\t\"./es-do.js\": 310,\n\t\"./es-us\": 311,\n\t\"./es-us.js\": 311,\n\t\"./es.js\": 309,\n\t\"./et\": 312,\n\t\"./et.js\": 312,\n\t\"./eu\": 313,\n\t\"./eu.js\": 313,\n\t\"./fa\": 314,\n\t\"./fa.js\": 314,\n\t\"./fi\": 315,\n\t\"./fi.js\": 315,\n\t\"./fo\": 316,\n\t\"./fo.js\": 316,\n\t\"./fr\": 317,\n\t\"./fr-ca\": 318,\n\t\"./fr-ca.js\": 318,\n\t\"./fr-ch\": 319,\n\t\"./fr-ch.js\": 319,\n\t\"./fr.js\": 317,\n\t\"./fy\": 320,\n\t\"./fy.js\": 320,\n\t\"./gd\": 321,\n\t\"./gd.js\": 321,\n\t\"./gl\": 322,\n\t\"./gl.js\": 322,\n\t\"./gom-latn\": 323,\n\t\"./gom-latn.js\": 323,\n\t\"./gu\": 324,\n\t\"./gu.js\": 324,\n\t\"./he\": 325,\n\t\"./he.js\": 325,\n\t\"./hi\": 326,\n\t\"./hi.js\": 326,\n\t\"./hr\": 327,\n\t\"./hr.js\": 327,\n\t\"./hu\": 328,\n\t\"./hu.js\": 328,\n\t\"./hy-am\": 329,\n\t\"./hy-am.js\": 329,\n\t\"./id\": 330,\n\t\"./id.js\": 330,\n\t\"./is\": 331,\n\t\"./is.js\": 331,\n\t\"./it\": 332,\n\t\"./it.js\": 332,\n\t\"./ja\": 333,\n\t\"./ja.js\": 333,\n\t\"./jv\": 334,\n\t\"./jv.js\": 334,\n\t\"./ka\": 335,\n\t\"./ka.js\": 335,\n\t\"./kk\": 336,\n\t\"./kk.js\": 336,\n\t\"./km\": 337,\n\t\"./km.js\": 337,\n\t\"./kn\": 338,\n\t\"./kn.js\": 338,\n\t\"./ko\": 339,\n\t\"./ko.js\": 339,\n\t\"./ky\": 340,\n\t\"./ky.js\": 340,\n\t\"./lb\": 341,\n\t\"./lb.js\": 341,\n\t\"./lo\": 342,\n\t\"./lo.js\": 342,\n\t\"./lt\": 343,\n\t\"./lt.js\": 343,\n\t\"./lv\": 344,\n\t\"./lv.js\": 344,\n\t\"./me\": 345,\n\t\"./me.js\": 345,\n\t\"./mi\": 346,\n\t\"./mi.js\": 346,\n\t\"./mk\": 347,\n\t\"./mk.js\": 347,\n\t\"./ml\": 348,\n\t\"./ml.js\": 348,\n\t\"./mn\": 349,\n\t\"./mn.js\": 349,\n\t\"./mr\": 350,\n\t\"./mr.js\": 350,\n\t\"./ms\": 351,\n\t\"./ms-my\": 352,\n\t\"./ms-my.js\": 352,\n\t\"./ms.js\": 351,\n\t\"./mt\": 353,\n\t\"./mt.js\": 353,\n\t\"./my\": 354,\n\t\"./my.js\": 354,\n\t\"./nb\": 355,\n\t\"./nb.js\": 355,\n\t\"./ne\": 356,\n\t\"./ne.js\": 356,\n\t\"./nl\": 357,\n\t\"./nl-be\": 358,\n\t\"./nl-be.js\": 358,\n\t\"./nl.js\": 357,\n\t\"./nn\": 359,\n\t\"./nn.js\": 359,\n\t\"./pa-in\": 360,\n\t\"./pa-in.js\": 360,\n\t\"./pl\": 361,\n\t\"./pl.js\": 361,\n\t\"./pt\": 362,\n\t\"./pt-br\": 363,\n\t\"./pt-br.js\": 363,\n\t\"./pt.js\": 362,\n\t\"./ro\": 364,\n\t\"./ro.js\": 364,\n\t\"./ru\": 365,\n\t\"./ru.js\": 365,\n\t\"./sd\": 366,\n\t\"./sd.js\": 366,\n\t\"./se\": 367,\n\t\"./se.js\": 367,\n\t\"./si\": 368,\n\t\"./si.js\": 368,\n\t\"./sk\": 369,\n\t\"./sk.js\": 369,\n\t\"./sl\": 370,\n\t\"./sl.js\": 370,\n\t\"./sq\": 371,\n\t\"./sq.js\": 371,\n\t\"./sr\": 372,\n\t\"./sr-cyrl\": 373,\n\t\"./sr-cyrl.js\": 373,\n\t\"./sr.js\": 372,\n\t\"./ss\": 374,\n\t\"./ss.js\": 374,\n\t\"./sv\": 375,\n\t\"./sv.js\": 375,\n\t\"./sw\": 376,\n\t\"./sw.js\": 376,\n\t\"./ta\": 377,\n\t\"./ta.js\": 377,\n\t\"./te\": 378,\n\t\"./te.js\": 378,\n\t\"./tet\": 379,\n\t\"./tet.js\": 379,\n\t\"./tg\": 380,\n\t\"./tg.js\": 380,\n\t\"./th\": 381,\n\t\"./th.js\": 381,\n\t\"./tl-ph\": 382,\n\t\"./tl-ph.js\": 382,\n\t\"./tlh\": 383,\n\t\"./tlh.js\": 383,\n\t\"./tr\": 384,\n\t\"./tr.js\": 384,\n\t\"./tzl\": 385,\n\t\"./tzl.js\": 385,\n\t\"./tzm\": 386,\n\t\"./tzm-latn\": 387,\n\t\"./tzm-latn.js\": 387,\n\t\"./tzm.js\": 386,\n\t\"./ug-cn\": 388,\n\t\"./ug-cn.js\": 388,\n\t\"./uk\": 389,\n\t\"./uk.js\": 389,\n\t\"./ur\": 390,\n\t\"./ur.js\": 390,\n\t\"./uz\": 391,\n\t\"./uz-latn\": 392,\n\t\"./uz-latn.js\": 392,\n\t\"./uz.js\": 391,\n\t\"./vi\": 393,\n\t\"./vi.js\": 393,\n\t\"./x-pseudo\": 394,\n\t\"./x-pseudo.js\": 394,\n\t\"./yo\": 395,\n\t\"./yo.js\": 395,\n\t\"./zh-cn\": 396,\n\t\"./zh-cn.js\": 396,\n\t\"./zh-hk\": 397,\n\t\"./zh-hk.js\": 397,\n\t\"./zh-tw\": 398,\n\t\"./zh-tw.js\": 398\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 275;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale ^\\.\\/.*$\n ** module id = 275\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/af.js\n ** module id = 276\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar.js\n ** module id = 277\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-dz.js\n ** module id = 278\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-kw.js\n ** module id = 279\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-ly.js\n ** module id = 280\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-ma.js\n ** module id = 281\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-sa.js\n ** module id = 282\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ar-tn.js\n ** module id = 283\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/az.js\n ** module id = 284\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/be.js\n ** module id = 285\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/bg.js\n ** module id = 286\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/bm.js\n ** module id = 287\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/bn.js\n ** module id = 288\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/bo.js\n ** module id = 289\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/br.js\n ** module id = 290\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/bs.js\n ** module id = 291\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ca.js\n ** module id = 292\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParse : (function (months, monthsShort) {\n            var i, _monthsParse = [];\n            for (i = 0; i < 12; i++) {\n                // use custom parser to solve problem with July (červenec)\n                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n            }\n            return _monthsParse;\n        }(months, monthsShort)),\n        shortMonthsParse : (function (monthsShort) {\n            var i, _shortMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n            }\n            return _shortMonthsParse;\n        }(monthsShort)),\n        longMonthsParse : (function (months) {\n            var i, _longMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n            }\n            return _longMonthsParse;\n        }(months)),\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/cs.js\n ** module id = 293\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/cv.js\n ** module id = 294\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/cy.js\n ** module id = 295\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/da.js\n ** module id = 296\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/de.js\n ** module id = 297\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/de-at.js\n ** module id = 298\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/de-ch.js\n ** module id = 299\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/dv.js\n ** module id = 300\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/el.js\n ** module id = 301\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-au.js\n ** module id = 302\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-ca.js\n ** module id = 303\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-gb.js\n ** module id = 304\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-ie.js\n ** module id = 305\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-il.js\n ** module id = 306\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/en-nz.js\n ** module id = 307\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/eo.js\n ** module id = 308\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/es.js\n ** module id = 309\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/es-do.js\n ** module id = 310\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'MMMM [de] D [de] YYYY',\n            LLL : 'MMMM [de] D [de] YYYY h:mm A',\n            LLLL : 'dddd, MMMM [de] D [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/es-us.js\n ** module id = 311\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/et.js\n ** module id = 312\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/eu.js\n ** module id = 313\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fa.js\n ** module id = 314\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fi.js\n ** module id = 315\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minutt',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaði',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fo.js\n ** module id = 316\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fr.js\n ** module id = 317\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fr-ca.js\n ** module id = 318\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fr-ch.js\n ** module id = 319\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/fy.js\n ** module id = 320\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/gd.js\n ** module id = 321\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/gl.js\n ** module id = 322\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka horan', 'ek hor'],\n            'hh': [number + ' horanim', number + ' horam'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/gom-latn.js\n ** module id = 323\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/gu.js\n ** module id = 324\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/he.js\n ** module id = 325\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/hi.js\n ** module id = 326\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/hr.js\n ** module id = 327\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/hu.js\n ** module id = 328\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/hy-am.js\n ** module id = 329\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/id.js\n ** module id = 330\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/is.js\n ** module id = 331\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/it.js\n ** module id = 332\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ja.js\n ** module id = 333\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/jv.js\n ** module id = 334\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ka.js\n ** module id = 335\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/kk.js\n ** module id = 336\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/km.js\n ** module id = 337\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/kn.js\n ** module id = 338\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ko.js\n ** module id = 339\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кече саат] LT',\n            lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ky.js\n ** module id = 340\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/lb.js\n ** module id = 341\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/lo.js\n ** module id = 342\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/lt.js\n ** module id = 343\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/lv.js\n ** module id = 344\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/me.js\n ** module id = 345\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/mi.js\n ** module id = 346\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/mk.js\n ** module id = 347\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ml.js\n ** module id = 348\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/mn.js\n ** module id = 349\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/mr.js\n ** module id = 350\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ms.js\n ** module id = 351\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ms-my.js\n ** module id = 352\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/mt.js\n ** module id = 353\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/my.js\n ** module id = 354\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/nb.js\n ** module id = 355\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ne.js\n ** module id = 356\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/nl.js\n ** module id = 357\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/nl-be.js\n ** module id = 358\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/nn.js\n ** module id = 359\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/pa-in.js\n ** module id = 360\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/pl.js\n ** module id = 361\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/pt.js\n ** module id = 362\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/pt-br.js\n ** module id = 363\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ro.js\n ** module id = 364\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ru.js\n ** module id = 365\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sd.js\n ** module id = 366\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/se.js\n ** module id = 367\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/si.js\n ** module id = 368\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sk.js\n ** module id = 369\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += withoutSuffix || isFuture ? 'sekund' : 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sl.js\n ** module id = 370\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sq.js\n ** module id = 371\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sr.js\n ** module id = 372\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sr-cyrl.js\n ** module id = 373\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ss.js\n ** module id = 374\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sv.js\n ** module id = 375\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/sw.js\n ** module id = 376\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ta.js\n ** module id = 377\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/te.js\n ** module id = 378\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tet.js\n ** module id = 379\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tg.js\n ** module id = 380\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/th.js\n ** module id = 381\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tl-ph.js\n ** module id = 382\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tlh.js\n ** module id = 383\n ** module chunks = 0 1\n **/","\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tr.js\n ** module id = 384\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tzl.js\n ** module id = 385\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tzm.js\n ** module id = 386\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/tzm-latn.js\n ** module id = 387\n ** module chunks = 0 1\n **/","//! moment.js language configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ug-cn.js\n ** module id = 388\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/uk.js\n ** module id = 389\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/ur.js\n ** module id = 390\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/uz.js\n ** module id = 391\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/uz-latn.js\n ** module id = 392\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/vi.js\n ** module id = 393\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/x-pseudo.js\n ** module id = 394\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/yo.js\n ** module id = 395\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/zh-cn.js\n ** module id = 396\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/zh-hk.js\n ** module id = 397\n ** module chunks = 0 1\n **/","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/moment/locale/zh-tw.js\n ** module id = 398\n ** module chunks = 0 1\n **/","import { Dropdown } from '../Form/Dropdown';\nimport { FacetUtils } from '../../../ui/Facet/FacetUtils';\nimport { IIndexFieldValue } from '../../../rest/FieldValue';\nimport { ISearchEndpoint } from '../../../rest/SearchEndpointInterface';\nimport { DocumentInput } from './DocumentInput';\nimport { $$ } from '../../../utils/Dom';\nimport _ = require('underscore');\nimport { QueryBuilder } from '../../Base/QueryBuilder';\n\nexport class SimpleFieldInput extends DocumentInput {\n\n  protected element: HTMLElement;\n  public dropDown: Dropdown;\n\n  constructor(public inputName: string, public fieldName: string, private endpoint: ISearchEndpoint) {\n    super(inputName);\n  }\n\n  public reset() {\n    this.dropDown.reset();\n  }\n\n  public build(): HTMLElement {\n    let fieldInput = $$(super.build());\n    this.buildFieldSelect().then(() => {\n      fieldInput.append(this.dropDown.getElement());\n    });\n    this.element = fieldInput.el;\n    return this.element;\n  }\n\n  public getValue(): string {\n    let value = this.dropDown ? this.dropDown.getValue() : '';\n    let queryBuilder = new QueryBuilder();\n    if (value) {\n      queryBuilder.advancedExpression.addFieldExpression(this.fieldName, '==', [value]);\n      return queryBuilder.build().aq;\n    } else {\n      return '';\n    }\n  }\n\n  private buildFieldSelect() {\n    return this.endpoint.listFieldValues({\n      field: this.fieldName,\n      maximumNumberOfValues: 50\n    }).then((values: IIndexFieldValue[]) => {\n      let options = [''];\n      _.each(values, (value: IIndexFieldValue) => {\n        options.push(value.value);\n      });\n      this.dropDown = new Dropdown(this.onChange.bind(this), options, (str: string) => {\n        return FacetUtils.tryToGetTranslatedCaption(this.fieldName, str);\n      });\n    });\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DocumentInput/SimpleFieldInput.ts\n **/","import { IAdvancedSearchInput } from '../AdvancedSearchInput';\nimport { QueryBuilder } from '../../Base/QueryBuilder';\nimport { $$ } from '../../../utils/Dom';\nimport { AdvancedSearchEvents } from '../../../events/AdvancedSearchEvents';\n\nexport class DocumentInput implements IAdvancedSearchInput {\n\n  protected element: HTMLElement;\n\n  constructor(public inputName: string) {\n  }\n\n  public reset() {\n  }\n\n  public build(): HTMLElement {\n    let documentInput = $$('div', { className: 'coveo-advanced-search-document-input-section' });\n    let label = $$('span', { className: 'coveo-advanced-search-label' });\n    label.text(this.inputName);\n    documentInput.append(label.el);\n    this.element = documentInput.el;\n    return this.element;\n  }\n\n  public getValue(): string {\n    return '';\n  }\n\n  public updateQuery(queryBuilder: QueryBuilder): void {\n    let value = this.getValue();\n    if (value) {\n      queryBuilder.advancedExpression.add(this.getValue());\n    }\n  }\n\n  protected onChange() {\n    if (this.element) {\n      $$(this.element).trigger(AdvancedSearchEvents.executeAdvancedSearch);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DocumentInput/DocumentInput.ts\n **/","import { Dropdown } from '../Form/Dropdown';\nimport { TextInput } from '../Form/TextInput';\nimport { $$ } from '../../../utils/Dom';\nimport { DocumentInput } from './DocumentInput';\nimport { QueryBuilder } from '../../Base/QueryBuilder';\n\nexport class AdvancedFieldInput extends DocumentInput {\n\n  protected element: HTMLElement;\n  public mode: Dropdown;\n  public input: TextInput;\n\n  constructor(public inputName: string, public fieldName: string) {\n    super(inputName);\n  }\n\n  public reset() {\n    this.mode.reset();\n    this.input.reset();\n  }\n\n  public build(): HTMLElement {\n    let fieldInput = $$(super.build());\n    this.mode = new Dropdown(this.onChange.bind(this), ['Contains', 'DoesNotContain', 'Matches']);\n    fieldInput.append(this.mode.getElement());\n    this.input = new TextInput(this.onChange.bind(this), '');\n    fieldInput.append(this.input.getElement());\n    this.element = fieldInput.el;\n    return this.element;\n  }\n\n  public getValue(): string {\n    let inputValue = this.input.getValue();\n    let builder = new QueryBuilder();\n    if (inputValue) {\n      switch (this.mode.getValue()) {\n        case 'Contains':\n          builder.advancedExpression.addFieldExpression(this.fieldName, '=', [inputValue]);\n          return builder.build().aq;\n\n        case 'DoesNotContain':\n          builder.advancedExpression.addFieldExpression(this.fieldName, '<>', [inputValue]);\n          return builder.build().aq;\n        default:\n          builder.advancedExpression.addFieldExpression(this.fieldName, '==', [inputValue]);\n          return builder.build().aq;\n      }\n    }\n    return '';\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DocumentInput/AdvancedFieldInput.ts\n **/","import { Dropdown } from '../Form/Dropdown';\nimport { NumericSpinner } from '../Form/NumericSpinner';\nimport { $$ } from '../../../utils/Dom';\nimport { DocumentInput } from './DocumentInput';\nimport { QueryBuilder } from '../../Base/QueryBuilder';\n\n\nexport class SizeInput extends DocumentInput {\n\n  public static modes = ['AtLeast', 'AtMost'];\n  public static sizes = ['KB', 'MB', 'Bytes'];\n\n  protected element: HTMLElement;\n  public modeSelect: Dropdown;\n  public sizeInput: NumericSpinner;\n  public sizeSelect: Dropdown;\n\n  constructor() {\n    super('Size');\n  }\n\n  public reset() {\n    this.modeSelect.reset();\n    this.sizeInput.reset();\n  }\n\n  public build(): HTMLElement {\n    let sizeInput = $$(super.build());\n    let sizeInputSection = $$('div', { className: 'coveo-size-input-mode-section' });\n\n    this.modeSelect = new Dropdown(this.onChange.bind(this), SizeInput.modes);\n    this.modeSelect.setId('coveo-size-input-mode');\n    sizeInputSection.append(this.modeSelect.getElement());\n    this.sizeInput = new NumericSpinner(this.onChange.bind(this));\n    sizeInputSection.append(this.sizeInput.getElement());\n    this.sizeSelect = new Dropdown(this.onChange.bind(this), SizeInput.sizes);\n    this.sizeSelect.setId('coveo-size-input-select');\n    sizeInputSection.append(this.sizeSelect.getElement());\n    sizeInput.append(sizeInputSection.el);\n    this.element = sizeInput.el;\n    return this.element;\n  }\n\n  public getValue(): string {\n    let size = this.getSizeInBytes();\n    let queryBuilder = new QueryBuilder();\n    if (size) {\n      switch (this.modeSelect.getValue()) {\n        case 'AtLeast':\n          queryBuilder.advancedExpression.addFieldExpression('@size', '>=', [this.getSizeInBytes().toString()]);\n          return queryBuilder.build().aq;\n        default:\n          queryBuilder.advancedExpression.addFieldExpression('@size', '<=', [this.getSizeInBytes().toString()]);\n          return queryBuilder.build().aq;\n      }\n    }\n    return '';\n  }\n\n  private getSizeInBytes(): number {\n    let size = this.sizeInput.getFloatValue();\n    switch (this.sizeSelect.getValue()) {\n      case 'KB':\n        return size * 1024;\n      case 'MB':\n        return size * Math.pow(1024, 2);\n      default:\n        return size;\n    }\n  }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/AdvancedSearch/DocumentInput/SizeInput.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { SearchAlertsEvents, ISearchAlertsEventArgs, ISearchAlertsFailEventArgs } from '../../events/SearchAlertEvents';\nimport { ISubscription, ISubscriptionItemRequest, SUBSCRIPTION_TYPE, ISubscriptionRequest } from '../../rest/Subscription';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { $$, Dom } from '../../utils/Dom';\nimport {\n  analyticsActionCauseList, IAnalyticsSearchAlertsFollowDocumentMeta, IAnalyticsActionCause\n} from '../Analytics/AnalyticsActionListMeta';\nimport { QueryUtils } from '../../utils/QueryUtils';\nimport _ = require('underscore');\nimport { Utils } from '../../utils/Utils';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\n\n\nexport interface IFollowItemOptions {\n  watchedFields?: IFieldOption[];\n  modifiedDateField?: string;\n}\n\n/**\n * The FollowItem component renders a widget that the end user can click to follow a particular item (document). A user\n * following an item receives email notifications when the item changes.\n *\n * **Note:**\n * > A {@link SearchAlerts} component must be present in the page for this component to work. It is also necessary to\n * > meet certain requirements to be able to use this component (see\n * > [Deploying Search Alerts on a Coveo JS Search Page](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=248)).\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class FollowItem extends Component {\n  static ID = 'FollowItem';\n\n  static fields = [\n    'urihash'\n  ];\n\n  /**\n   * The options for the follow item component\n   * @componentOptions\n   */\n  static options: IFollowItemOptions = {\n\n    /**\n     * Specifies the {@link ISubscriptionItemRequest.watchedFields} to use when sending the\n     * {@link ISubscriptionItemRequest}.\n     *\n     * Default value is `undefined`.\n     */\n    watchedFields: ComponentOptions.buildFieldsOption(),\n\n    /**\n     * Specifies the {@link ISubscriptionItemRequest.modifiedDateField} to use when sending the\n     * {@link ISubscriptionItemRequest}.\n     *\n     * Default value is `undefined`.\n     */\n    modifiedDateField: ComponentOptions.buildStringOption(),\n  };\n\n  private container: Dom;\n  private text: Dom;\n  private subscription: ISubscription;\n\n  /**\n   * Creates a new FollowItem component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the FollowItem component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time)\n   * @param result The result to associate the component with.\n   */\n  constructor(public element: HTMLElement,\n    public options?: IFollowItemOptions,\n    public bindings?: IResultsComponentBindings,\n    public result?: IQueryResult) {\n\n    super(element, FollowItem.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, FollowItem, options);\n\n    Assert.exists(this.result);\n\n    this.container = $$(this.element);\n    this.text = $$('span');\n    this.container.append(this.text.el);\n    this.container.on('click', () => this.toggleFollow());\n    this.container.setAttribute('tabindex', '0');\n    this.bind.on(this.container, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, () => this.toggleFollow()));\n\n    this.bind.onRootElement(SearchAlertsEvents.searchAlertsDeleted, (args: ISearchAlertsEventArgs) => this.handleSubscriptionDeleted(args));\n    this.bind.onRootElement(SearchAlertsEvents.searchAlertsCreated, (args: ISearchAlertsEventArgs) => this.handleSubscriptionCreated(args));\n\n    this.container.addClass('coveo-follow-item-loading');\n\n    this.updateIsFollowed();\n  }\n\n  public setFollowed(subscription: ISubscription) {\n    this.container.removeClass('coveo-follow-item-loading');\n    this.subscription = subscription;\n    this.container.addClass('coveo-follow-item-followed');\n    this.text.text(l('SearchAlerts_unFollowing'));\n  }\n\n  public setNotFollowed() {\n    this.container.removeClass('coveo-follow-item-loading');\n    this.subscription = <ISubscription>FollowItem.buildFollowRequest(this.getId(), this.result.title, this.options);\n    this.container.removeClass('coveo-follow-item-followed');\n    this.text.text(l('SearchAlerts_follow'));\n  }\n\n  /**\n   * Follows the item if not already following it. Stops following the item otherwise.\n   *\n   * Also logs the appropriate event in the usage analytics (either `searchAlertsFollowDocument` or\n   * `searchAlertsUnfollowDocument`).\n   */\n  public toggleFollow() {\n    if (!this.container.hasClass('coveo-follow-item-loading')) {\n      this.container.removeClass('coveo-follow-item-followed');\n      this.container.addClass('coveo-follow-item-loading');\n      if (this.subscription.id) {\n        this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsUnfollowDocument);\n        this.queryController.getEndpoint()\n          .deleteSubscription(this.subscription)\n          .then(() => {\n            let eventArgs: ISearchAlertsEventArgs = {\n              subscription: this.subscription,\n              dom: this.element\n            };\n            $$(this.root).trigger(SearchAlertsEvents.searchAlertsDeleted, eventArgs);\n          })\n          .catch(() => {\n            this.container.removeClass('coveo-follow-item-loading');\n            let eventArgs: ISearchAlertsFailEventArgs = {\n              dom: this.element\n            };\n            $$(this.root).trigger(SearchAlertsEvents.searchAlertsFail, eventArgs);\n          });\n      } else {\n        this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsFollowDocument);\n        this.queryController.getEndpoint().follow(this.subscription)\n          .then((subscription: ISubscription) => {\n            let eventArgs: ISearchAlertsEventArgs = {\n              subscription: subscription,\n              dom: this.element\n            };\n            $$(this.root).trigger(SearchAlertsEvents.searchAlertsCreated, eventArgs);\n          })\n          .catch(() => {\n            this.container.removeClass('coveo-follow-item-loading');\n            let eventArgs: ISearchAlertsFailEventArgs = {\n              dom: this.element\n            };\n            $$(this.root).trigger(SearchAlertsEvents.searchAlertsFail, eventArgs);\n          });\n      }\n    }\n  }\n\n  protected getText(): string {\n    return this.text.text();\n  }\n\n  private updateIsFollowed() {\n    this.queryController.getEndpoint()\n      .listSubscriptions()\n      .then((subscriptions: ISubscription[]) => {\n        if (_.isArray(subscriptions)) {\n          let subscription: ISubscription = _.find(subscriptions, (subscription: ISubscription) => {\n            let typeConfig = <ISubscriptionItemRequest>subscription.typeConfig;\n            return typeConfig && typeConfig.id != null && typeConfig.id == this.getId();\n          });\n          if (subscription != null) {\n            this.setFollowed(subscription);\n          } else {\n            this.setNotFollowed();\n          }\n        } else {\n          this.remove();\n        }\n      })\n      .catch(() => {\n        this.remove();\n      });\n  }\n\n  private handleSubscriptionDeleted(args: ISearchAlertsEventArgs) {\n    if (args.subscription && args.subscription.type == SUBSCRIPTION_TYPE.followDocument) {\n      let typeConfig = <ISubscriptionItemRequest>args.subscription.typeConfig;\n      if (typeConfig.id == this.getId()) {\n        this.setNotFollowed();\n      }\n    }\n  }\n\n  private handleSubscriptionCreated(args: ISearchAlertsEventArgs) {\n    if (args.subscription && args.subscription.type == SUBSCRIPTION_TYPE.followDocument) {\n      let typeConfig = <ISubscriptionItemRequest>args.subscription.typeConfig;\n      if (typeConfig.id == this.getId()) {\n        this.setFollowed(args.subscription);\n      }\n    }\n  }\n\n  private remove() {\n    this.element.parentElement && this.element.parentElement.removeChild(this.element);\n  }\n\n  private getId() {\n    return Utils.getFieldValue(this.result, 'sysurihash') || Utils.getFieldValue(this.result, 'urihash');\n  }\n\n  private static buildFollowRequest(id: string, title: string, options: IFollowItemOptions): ISubscriptionRequest {\n    let typeCofig: ISubscriptionItemRequest = {\n      id: id,\n      title: title\n    };\n\n    if (options.modifiedDateField) {\n      typeCofig.modifiedDateField = options.modifiedDateField;\n    }\n\n    if (options.watchedFields) {\n      typeCofig.watchedFields = <string[]>options.watchedFields;\n    }\n\n    return {\n      type: SUBSCRIPTION_TYPE.followDocument,\n      typeConfig: typeCofig,\n      name: title\n    };\n  }\n\n  private logAnalyticsEvent(type: IAnalyticsActionCause) {\n    this.usageAnalytics.logCustomEvent<IAnalyticsSearchAlertsFollowDocumentMeta>(type, {\n      author: QueryUtils.getAuthor(this.result),\n      documentLanguage: QueryUtils.getLanguage(this.result),\n      documentSource: QueryUtils.getSource(this.result),\n      documentTitle: this.result.title,\n      contentIDValue: QueryUtils.getPermanentId(this.result).fieldValue,\n      contentIDKey: QueryUtils.getPermanentId(this.result).fieldUsed\n    }, this.element);\n  }\n}\n\nInitialization.registerAutoCreateComponent(FollowItem);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/SearchAlerts/FollowItem.ts\n **/","import { IQuery } from './Query';\n\nexport const SUBSCRIPTION_TYPE = {\n  followQuery: 'followQuery',\n  followDocument: 'followDocument',\n};\n\nexport interface ISearchAlertsEndpointOptions {\n  restUri: string;\n  accessToken?: string;\n  errorsAsSuccess?: boolean;\n}\n\nexport interface ISearchAlertsEndpointCallOptions {\n  type?: string;\n  page?: number;\n}\n\nexport interface ISearchAlertsEndpointSearchCallOptions {\n  documentIds: string[];\n}\n\n/**\n * Describe a subscription to the Coveo Search alerts service\n */\nexport interface ISubscription extends ISubscriptionRequest {\n  /**\n   * The id of the subscription\n   */\n  id: string;\n\n  /**\n   * The user associated with the subscription\n   */\n  user: ISubscriptionUser;\n}\n\n/**\n * Describe a user associated with a subscription to the Coveo Search alerts service\n */\nexport interface ISubscriptionUser {\n\n  /**\n   * The email of the user\n   */\n  email: string;\n\n  /**\n   * The token used to manage the alerts via email.\n   */\n  manageToken: string;\n}\n\n/**\n * Describe a request to subscribe to the Coveo Search alerts service\n */\nexport interface ISubscriptionRequest {\n  /**\n   * Type of subscription.<br/>\n   * Can be 'followQuery' or 'followDocument'\n   */\n  type: string;\n  /**\n   * Config of the subscription\n   */\n  typeConfig: ISubscriptionQueryRequest | ISubscriptionItemRequest;\n  /**\n   * Frequency of the alerts\n   */\n  frequency?: string;\n  /**\n   * The name that should be used by the API to identify this subscription\n   */\n  name: string;\n}\n\n/**\n * Describe a subscription to a single query\n */\nexport interface ISubscriptionQueryRequest {\n  /**\n   * Query to subscribe to\n   */\n  query: IQuery;\n  /**\n   * Which field on the result set represent the modification date for which you wish to receive alerts\n   */\n  modifiedDateField?: string;\n}\n\n/**\n * Describe a subscription to a single item (a result)\n */\nexport interface ISubscriptionItemRequest {\n  /**\n   * Unique id of the document\n   */\n  id: string;\n  /**\n   * Title of the document\n   */\n  title: string;\n  /**\n   * Which field on the result represent the modification date for which you wish to receive alerts\n   */\n  modifiedDateField?: string;\n  /**\n   * A list of field to monitor on the given document\n   */\n  watchedFields?: string[];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/rest/Subscription.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { SearchAlertsMessage } from './SearchAlertsMessage';\nimport { SettingsEvents } from '../../events/SettingsEvents';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { Querybox } from '../Querybox/Querybox';\nimport { Omnibox } from '../Omnibox/Omnibox';\nimport { IQuery } from '../../rest/Query';\nimport { AjaxError } from '../../rest/AjaxError';\nimport { ISettingsPopulateMenuArgs } from '../Settings/Settings';\nimport { SearchAlertsEvents, ISearchAlertsEventArgs, ISearchAlertsFailEventArgs } from '../../events/SearchAlertEvents';\nimport { ISubscription, ISubscriptionItemRequest, SUBSCRIPTION_TYPE, ISubscriptionRequest, ISubscriptionQueryRequest } from '../../rest/Subscription';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { $$, Dom } from '../../utils/Dom';\nimport { ModalBox } from '../../ExternalModulesShim';\nimport {\n  analyticsActionCauseList, IAnalyticsSearchAlertsUpdateMeta, IAnalyticsSearchAlertsMeta, IAnalyticsActionCause\n} from '../Analytics/AnalyticsActionListMeta';\nimport _ = require('underscore');\n\nexport interface ISearchAlertsOptions {\n  enableManagePanel?: boolean;\n  enableFollowQuery?: boolean;\n  modifiedDateField?: IFieldOption;\n  enableMessage?: boolean;\n  messageCloseDelay?: number;\n}\n\n/**\n * The Search Alerts component renders items in the {@link Settings} menu that allow the end user to follow queries\n * and to manage search alerts. A user following a query receives email notifications when the query results change.\n *\n * **Note:**\n * > It is necessary to meet certain requirements to be able to use this component (see\n * > [Deploying Search Alerts on a Coveo JS Search Page](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=248)).\n *\n * See also the {@link FollowItem} component.\n */\nexport class SearchAlerts extends Component {\n  static ID = 'SearchAlerts';\n\n  /**\n   * The options for the search alerts\n   * @componentOptions\n   */\n  static options: ISearchAlertsOptions = {\n\n    /**\n     * Specifies whether to add the **Manage Alerts** item in the {@link Settings} menu to allow the end user to manage\n     * search alerts.\n     *\n     * Clicking the **Manage Alerts** item calls the {@link SearchAlerts.openPanel} method.\n     *\n     * Default value is `true`.\n     */\n    enableManagePanel: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies whether to add the **Follow Query** item in the {@link Settings} menu to allow the end user to follow\n     * the last query.\n     *\n     * Clicking the **Follow Query** item calls the {@link SearchAlerts.followQuery} method.\n     *\n     * Default value is `true`.\n     */\n    enableFollowQuery: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * Specifies which field to use to represent the modification date when sending the\n     * {@link ISubscriptionQueryRequest}.\n     *\n     * Default value is `undefined`.\n     */\n    modifiedDateField: ComponentOptions.buildFieldOption(),\n\n    /**\n     * Specifies whether to display info and error messages when performing search alerts actions.\n     *\n     * If this options is `true`, the SearchAlerts constructor will automatically instantiate a\n     * {@link SearchAlertsMessage} component and set it to the {@link SearchAlerts.message} attribute.\n     *\n     * See also {@link SearchAlerts.options.messageCloseDelay}.\n     *\n     * Default value is `true`.\n     */\n    enableMessage: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link SearchAlerts.options.enableMessage} is `true`, specifies how long to display the search alert messages\n     * (in milliseconds).\n     *\n     * Default value is `3000`. Minimum value is `0`.\n     */\n    messageCloseDelay: ComponentOptions.buildNumberOption({ defaultValue: 3000, min: 0, depend: 'enableMessage' }),\n  };\n\n  private modal: Coveo.ModalBox.ModalBox;\n\n  /**\n   * A reference to a {@link SearchAlertsMessage} component that the SearchAlerts component uses to display messages.\n   */\n  public message: SearchAlertsMessage;\n\n  /**\n   * Creates a new SearchAlerts component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the SearchAlerts component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options: ISearchAlertsOptions, bindings?: IComponentBindings) {\n\n    super(element, SearchAlerts.ID, bindings);\n\n    this.options = ComponentOptions.initComponentOptions(element, SearchAlerts, options);\n\n    if (this.options.enableMessage) {\n      this.message = new SearchAlertsMessage(element, { closeDelay: this.options.messageCloseDelay }, this.getBindings());\n    }\n\n    if (!this.queryController.getEndpoint().options.isGuestUser) {\n      this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n        if (this.options.enableManagePanel) {\n          args.menuData.push({\n            text: l('SearchAlerts_Panel'),\n            className: 'coveo-subscriptions-panel',\n            onOpen: () => this.openPanel(),\n            onClose: () => this.close()\n          });\n        }\n      });\n    }\n\n    let once = false;\n\n    this.bind.onRootElement(QueryEvents.querySuccess, () => {\n      if (!once) {\n        once = true;\n        this.queryController.getEndpoint().listSubscriptions()\n          .then(() => {\n            this.bind.onRootElement(SettingsEvents.settingsPopulateMenu, (args: ISettingsPopulateMenuArgs) => {\n              if (this.options.enableFollowQuery) {\n                args.menuData.push({\n                  text: l('SearchAlerts_followQuery'),\n                  className: 'coveo-follow-query',\n                  tooltip: l('FollowQueryDescription'),\n                  onOpen: () => this.followQuery(),\n                  onClose: () => {\n                  }\n                });\n              }\n            });\n          })\n          .catch((e: AjaxError) => {\n            // Trap 503 error, as the listSubscription call is called on every page initialization\n            // to check for current subscriptions. By default, the search alert service is not enabled for most organization\n            // Don't want to pollute the console with un-needed noise and confusion\n            if (e.status != 503) {\n              throw e;\n            }\n          });\n      }\n    });\n  }\n\n  /**\n   * Follows the last query. The user will start receiving email notifications when the query results change.\n   *\n   * Also logs the `searchAlertsFollowQuery` event in the usage analytics with the name of the request as meta data.\n   */\n  public followQuery() {\n    let queryBuilder = this.queryController.createQueryBuilder({});\n    let request = this.buildFollowQueryRequest(queryBuilder.build(), this.options);\n\n    this.usageAnalytics.logCustomEvent<IAnalyticsSearchAlertsMeta>(analyticsActionCauseList.searchAlertsFollowQuery, {\n      subscription: request.name\n    }, this.element);\n\n    this.queryController.getEndpoint().follow(request)\n      .then((subscription: ISubscription) => {\n        if (subscription) {\n          let eventArgs: ISearchAlertsEventArgs = {\n            subscription: subscription,\n            dom: this.findQueryBoxDom()\n          };\n          $$(this.root).trigger(SearchAlertsEvents.searchAlertsCreated, eventArgs);\n        } else {\n          this.triggerSearchAlertsFail();\n        }\n      })\n      .catch(() => {\n        this.triggerSearchAlertsFail();\n      });\n  }\n\n  /**\n   * Opens the **Manage Alerts** panel. This panel allows the end user to stop following queries or items. It also\n   * allows the end user to specify email notification frequency for each followed query or item.\n   */\n  public openPanel(): Promise<ISubscription> {\n    let title = $$('div');\n\n    let close = $$('div', {\n      className: 'coveo-subscriptions-panel-close'\n    }, $$('span', {\n      className: 'coveo-icon'\n    }));\n\n    let titleInfo = $$('div', {\n      className: 'coveo-subscriptions-panel-title'\n    }, l('SearchAlerts_Panel'));\n\n    title.append(close.el);\n    title.append(titleInfo.el);\n\n    let container = $$('div');\n    container.el.innerHTML = `\n      <table class='coveo-subscriptions-panel-content' cellspacing='0'>\n        <thead>\n          <tr>\n            <th class='coveo-subscriptions-panel-content-type'>${ l('SearchAlerts_Type')}</th>\n            <th>${ l('SearchAlerts_Content')}</th>\n            <th>${ l('SearchAlerts_Frequency')}</th>\n            <th class='coveo-subscriptions-panel-content-actions'>${ l('SearchAlerts_Actions')}</th>\n          </tr>\n        </thead>\n        <tbody class='coveo-subscriptions-panel-spacer'>\n          <tr>\n            <td colsspan='3'></td>\n          </tr>\n        </tbody>\n        <tbody class='coveo-subscriptions-panel-subscriptions'>\n          <tr class='coveo-subscriptions-panel-no-subscriptions'>\n            <td colsspan='3'>${ l('SearchAlerts_PanelNoSearchAlerts')}</td>\n          </tr>\n        </tbody>\n      </table>`;\n\n    return this.queryController.getEndpoint().listSubscriptions().then((subscriptions: ISubscription[]) => {\n      _.each(subscriptions, (subscription) => {\n        this.addSearchAlert(subscription, container);\n      });\n    })\n      .catch(() => {\n        container.el.innerHTML = '<div class=\\'coveo-subscriptions-panel-fail\\'>' + l('SearchAlerts_Fail') + '</div>';\n      })\n      .finally(() => {\n        this.modal = ModalBox.open(container.el, {\n          titleClose: false,\n          overlayClose: true,\n          title: title.el.outerHTML,\n          className: 'coveo-subscriptions-panel'\n        });\n        $$($$(this.modal.modalBox).find('.coveo-subscriptions-panel-close')).on('click', () => {\n          this.close();\n        });\n      });\n  }\n\n  private handleSearchAlertsFail() {\n    this.close();\n    if (this.modal != null) {\n      this.modal.content.innerHTML = '<div class=\\'coveo-subscriptions-panel-fail\\'>' + l('SearchAlerts_Fail') + '</div>';\n    }\n  }\n\n  private close() {\n    if (this.modal) {\n      this.modal.close();\n      this.modal = null;\n    }\n  }\n\n  private addSearchAlert(subscription: ISubscription, container: Dom) {\n    let frequencies = [\n      { value: 'monthly', label: l('Monthly') },\n      { value: 'daily', label: l('Daily') },\n      { value: 'monday', label: l('Monday') },\n      { value: 'tuesday', label: l('Tuesday') },\n      { value: 'wednesday', label: l('Wednesday') },\n      { value: 'thursday', label: l('Thursday') },\n      { value: 'friday', label: l('Friday') },\n      { value: 'saturday', label: l('Saturday') },\n      { value: 'sunday', label: l('Sunday') }\n    ];\n\n    let context: string;\n    if (subscription.name) {\n      context = _.escape(subscription.name);\n    } else if (subscription.type == SUBSCRIPTION_TYPE.followQuery) {\n      let typeConfig = <ISubscriptionQueryRequest>subscription.typeConfig;\n      context = _.escape(typeConfig.query.q) || l('EmptyQuery');\n    } else {\n      let typeConfig = <ISubscriptionItemRequest>subscription.typeConfig;\n      context = _.escape(typeConfig.title || typeConfig.id);\n    }\n\n    let element = $$('tr');\n    element.addClass('coveo-subscriptions-panel-subscription');\n    element.el.innerHTML = `\n      <td class='coveo-subscriptions-panel-content-type'>${ l('SearchAlerts_Type_' + subscription.type)}</td>\n      <td>\n        <div class='coveo-subscriptions-panel-context' title='${context}'>\n          ${ context}\n        </div>\n      </td>\n      <td>\n        <div class='coveo-subscriptions-panel-frequency'>\n          <select>\n            ${ _.map(frequencies, (frequency) => `<option value='${frequency.value}'>${frequency.label}</option>`)}\n          </select>\n        </div>\n      </td>\n      <td class='coveo-subscriptions-panel-content-actions'>\n        <div class='coveo-subscriptions-panel-action coveo-subscriptions-panel-action-unfollow'>${ l('SearchAlerts_unFollowing')}</div>\n        <div class='coveo-subscriptions-panel-action coveo-subscriptions-panel-action-follow'>${ l('SearchAlerts_follow')}</div>\n      </td>`;\n\n    let noSearchAlerts = container.find('.coveo-subscriptions-panel-no-subscriptions');\n\n    element.insertBefore(noSearchAlerts);\n\n    let frequencyInput = <HTMLInputElement>element.find('.coveo-subscriptions-panel-frequency select');\n\n    frequencyInput.value = subscription.frequency;\n\n    $$(frequencyInput).on('change', (event) => {\n      subscription.frequency = frequencyInput.value;\n      this.usageAnalytics.logCustomEvent<IAnalyticsSearchAlertsUpdateMeta>(analyticsActionCauseList.searchAlertsUpdateSubscription, {\n        subscription: subscription.name,\n        frequency: subscription.frequency\n      }, this.element);\n      this.updateAndSyncSearchAlert(subscription);\n    });\n\n    $$(element.find('.coveo-subscriptions-panel-action-unfollow')).on('click', () => {\n      element.addClass('coveo-subscription-unfollowed');\n\n      this.queryController.getEndpoint()\n        .deleteSubscription(subscription)\n        .then(() => {\n          if (subscription.type == SUBSCRIPTION_TYPE.followDocument) {\n            this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsUnfollowDocument, subscription);\n          } else if (subscription.type == SUBSCRIPTION_TYPE.followQuery) {\n            this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsUnfollowQuery, subscription);\n          }\n          delete subscription.id;\n          let eventArgs: ISearchAlertsEventArgs = { subscription: subscription };\n          $$(this.root).trigger(SearchAlertsEvents.searchAlertsDeleted, eventArgs);\n        })\n        .catch(() => {\n          this.handleSearchAlertsFail();\n        });\n    });\n\n    $$(element.find('.coveo-subscriptions-panel-action-follow')).on('click', () => {\n      element.removeClass('coveo-subscription-unfollowed');\n\n      this.queryController.getEndpoint()\n        .follow(subscription)\n        .then((updatedSearchAlert) => {\n          if (subscription.type == SUBSCRIPTION_TYPE.followDocument) {\n            this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsFollowDocument, subscription);\n          } else if (subscription.type == SUBSCRIPTION_TYPE.followQuery) {\n            this.logAnalyticsEvent(analyticsActionCauseList.searchAlertsFollowQuery, subscription);\n          }\n          subscription.id = updatedSearchAlert.id;\n          let eventArgs: ISearchAlertsEventArgs = { subscription: subscription };\n          $$(this.root).trigger(SearchAlertsEvents.searchAlertsCreated, eventArgs);\n        })\n        .catch(() => {\n          this.handleSearchAlertsFail();\n        });\n    });\n  }\n\n  private updateAndSyncSearchAlert(subscription: ISubscription) {\n    this.queryController.getEndpoint()\n      .updateSubscription(subscription)\n      .then((updated: ISubscription) => _.extend(subscription, updated))\n      .catch(() => {\n        this.handleSearchAlertsFail();\n      });\n  }\n\n  private triggerSearchAlertsFail() {\n    let eventArgs: ISearchAlertsFailEventArgs = {\n      dom: this.findQueryBoxDom()\n    };\n    $$(this.root).trigger(SearchAlertsEvents.searchAlertsFail, eventArgs);\n  }\n\n  protected findQueryBoxDom(): HTMLElement {\n    let dom: HTMLElement;\n    let components = this.searchInterface.getComponents<Component>(Querybox.ID);\n    if (components && components.length > 0) {\n      dom = _.first(components).element;\n    } else {\n      let components = this.searchInterface.getComponents<Component>(Omnibox.ID);\n      if (components && components.length > 0) {\n        dom = _.first(components).element;\n      }\n    }\n    return dom;\n  }\n\n  private buildFollowQueryRequest(query: IQuery, options: ISearchAlertsOptions): ISubscriptionRequest {\n    let typeConfig: ISubscriptionQueryRequest = {\n      query: query\n    };\n\n    if (options.modifiedDateField) {\n      typeConfig.modifiedDateField = <string>options.modifiedDateField;\n    }\n\n    return {\n      type: SUBSCRIPTION_TYPE.followQuery,\n      typeConfig: typeConfig,\n      name: this.message.getFollowQueryMessage(query.q)\n    };\n  }\n\n  private logAnalyticsEvent(cause: IAnalyticsActionCause, subscription: ISubscription) {\n    this.usageAnalytics.logCustomEvent<IAnalyticsSearchAlertsMeta>(cause, {\n      subscription: subscription.name\n    }, this.element);\n  }\n\n  static create(element: HTMLElement, options?: ISearchAlertsOptions, root?: HTMLElement): SearchAlerts {\n    Assert.exists(element);\n    return new SearchAlerts(element, options, root);\n  }\n}\n\nInitialization.registerAutoCreateComponent(SearchAlerts);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/SearchAlerts/SearchAlerts.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport {\n  SearchAlertsEvents, ISearchAlertsEventArgs, ISearchAlertsFailEventArgs,\n  ISearchAlertsPopulateMessageEventArgs\n} from '../../events/SearchAlertEvents';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { ISubscriptionItemRequest, SUBSCRIPTION_TYPE, ISubscriptionQueryRequest } from '../../rest/Subscription';\nimport { PopupUtils, HorizontalAlignment, VerticalAlignment } from '../../utils/PopupUtils';\nimport { l } from '../../strings/Strings';\nimport { $$, Dom } from '../../utils/Dom';\nimport { ISearchAlertsPopulateMessageText } from '../../events/SearchAlertEvents';\nimport _ = require('underscore');\n\nexport interface ISearchAlertMessageOptions {\n  closeDelay: number;\n}\n\n/**\n * The SearchAlertsMessage component allows the {@link SearchAlerts} component to display messages.\n *\n * You should not include this component in your page. Instead, use a {@link SearchAlerts} component, and access the\n * {@link SearchAlerts.message} attribute.\n */\nexport class SearchAlertsMessage extends Component {\n  static ID = 'SubscriptionsMessages';\n\n  /**\n   * The options for the SearchAlertsMessage component\n   * @componentOptions\n   */\n  static options: ISearchAlertMessageOptions = {\n\n    /**\n     * Specifies how long to display the search alerts messages (in milliseconds).\n     *\n     * Default value is `3000`. Minimum value is `0`.\n     */\n    closeDelay: ComponentOptions.buildNumberOption({ defaultValue: 3000, min: 0 }),\n  };\n\n  private message: Dom;\n  private closeTimeout: number;\n\n  /**\n   * Creates a new SearchAlertsMessage component\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the SearchAlertsMessage component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement,\n    public options: ISearchAlertMessageOptions,\n    public bindings?: IComponentBindings) {\n\n    super(element, SearchAlertsMessage.ID, bindings);\n\n    this.bind.onRootElement(SearchAlertsEvents.searchAlertsCreated, (args: ISearchAlertsEventArgs) => this.handleSubscriptionCreated(args));\n    this.bind.oneRootElement(SearchAlertsEvents.searchAlertsFail, (args: ISearchAlertsEventArgs) => this.handleSearchAlertsFail(args));\n    this.bind.oneRootElement(SearchAlertsEvents.searchAlertsDeleted, () => this.close());\n\n    this.bind.oneRootElement(QueryEvents.newQuery, () => this.close());\n  }\n\n  public getCssClass(): string {\n    return 'coveo-subscriptions-messages';\n  }\n\n  public getFollowQueryMessage(query?: string, htmlFormatted = false): string {\n    let populateMessageArguments: ISearchAlertsPopulateMessageEventArgs = {\n      text: []\n    };\n\n    let getAdditionalTextFormatted = () => {\n      return _.map(populateMessageArguments.text, (text) => {\n        text = this.formatMessageArgumentsText(text);\n        return `${htmlFormatted ? '<li>' : '('}${text}${htmlFormatted ? '</li>' : ')'}`;\n      }).join(' ');\n    };\n\n    $$(this.root).trigger(SearchAlertsEvents.searchAlertsPopulateMessage, populateMessageArguments);\n    let additionalMessage = `${htmlFormatted ? '<ul>' : ''}${getAdditionalTextFormatted()}${htmlFormatted ? '</ul>' : ''}`;\n\n    let automaticallyBuiltMessage;\n\n    if (query && populateMessageArguments.text.length != 0) {\n      automaticallyBuiltMessage = `${_.escape(query)} ${additionalMessage}`;\n    }\n\n    if (query && populateMessageArguments.text.length == 0) {\n      automaticallyBuiltMessage = `${_.escape(query)}`;\n    }\n\n    if (!query && populateMessageArguments.text.length != 0) {\n      automaticallyBuiltMessage = `${additionalMessage}`;\n    }\n\n    if (!query && populateMessageArguments.text.length == 0) {\n      automaticallyBuiltMessage = htmlFormatted ? l('EmptyQuery') : _.unescape(l('EmptyQuery'));\n    }\n\n    return automaticallyBuiltMessage;\n  }\n\n  /**\n   * Displays a message near the passed dom attribute.\n   * @param dom Specifies where to display the message.\n   * @param message The message.\n   * @param error Specifies whether the message is an error message.\n   */\n  public showMessage(dom: Dom, message: string, error: boolean) {\n    this.message = $$('div');\n    this.message.el.innerHTML = `\n      <div class='coveo-subscriptions-messages-message'>\n        <div class='coveo-subscriptions-messages-info-close'></div>\n        <div class='coveo-subscriptions-messages-content'>${message}</div>\n      </div>`;\n\n    this.message.toggleClass('coveo-subscriptions-messages-error', error);\n    let closeButton = this.message.find('.coveo-subscriptions-messages-info-close');\n    $$(closeButton).on('click', () => this.close());\n\n    PopupUtils.positionPopup(this.message.el, dom.el, this.root, {\n      horizontal: HorizontalAlignment.INNERLEFT,\n      vertical: VerticalAlignment.BOTTOM,\n      verticalOffset: 12,\n      horizontalClip: true\n    }, this.root);\n\n    this.startCloseDelay();\n\n    this.message.on('mouseleave', () => {\n      this.startCloseDelay();\n    });\n    this.message.on('mouseenter', () => {\n      this.stopCloseDelay();\n    });\n  }\n\n  private formatMessageArgumentsText(text: string | ISearchAlertsPopulateMessageText) {\n    if (_.isString(text)) {\n      text = _.escape(text);\n    } else if (text.lineThrough) {\n      text = '<span style=\"text-decoration:line-through\">' + _.escape(text.value) + '</span>';\n    } else {\n      text = _.escape(text.value);\n    }\n    return text;\n  }\n\n  private handleSubscriptionCreated(args: ISearchAlertsEventArgs) {\n    this.close();\n    if (args.dom != null) {\n      if (args.subscription.type == SUBSCRIPTION_TYPE.followQuery) {\n        let typeConfig = <ISubscriptionQueryRequest>args.subscription.typeConfig;\n        this.showMessage($$(args.dom), l('SubscriptionsMessageFollowQuery', this.getFollowQueryMessage(typeConfig.query.q, true)), false);\n      } else {\n        let typeConfig = <ISubscriptionItemRequest>args.subscription.typeConfig;\n        this.showMessage($$(args.dom), l('SubscriptionsMessageFollow', _.escape(typeConfig.title)), false);\n      }\n    }\n  }\n\n  private handleSearchAlertsFail(args: ISearchAlertsFailEventArgs) {\n    this.close();\n    if (args.dom != null) {\n      this.showMessage($$(args.dom), l('SearchAlerts_Fail'), true);\n    }\n  }\n\n  private startCloseDelay() {\n    clearTimeout(this.closeTimeout);\n    this.closeTimeout = setTimeout(() => {\n      this.close();\n    }, this.options.closeDelay);\n  }\n\n  private stopCloseDelay() {\n    clearTimeout(this.closeTimeout);\n  }\n\n  private close() {\n    if (this.message != null) {\n      clearTimeout(this.closeTimeout);\n      this.message.remove();\n      this.message = null;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/SearchAlerts/SearchAlertsMessage.ts\n **/","\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\n\nexport interface ITextOptions {\n  value?: string;\n  size?: string;\n  style?: string;\n  color?: string;\n  weight?: string;\n  textAlign?: string;\n\n  marginTop?: string;\n  marginBottom?: string;\n  marginLeft?: string;\n  marginRight?: string;\n\n  paddingTop?: string;\n  paddingBottom?: string;\n  paddingLeft?: string;\n  paddingRight?: string;\n}\n\n/**\n * The Text component embeds itself in a result template to output a simple text value.\n *\n * The only purpose of this component is to make it possible to easily add different text values to result templates\n * when using the Coveo JavaScript Search Interface Editor (see\n * [JavaScript Search Interface Editor](http://www.coveo.com/go?dest=cloudhelp&lcid=9&context=230)).\n *\n * If you are not designing a search interface using the Coveo JavaScript Search Interface Editor, using this component\n * is unnecessary.\n *\n * This component is a result template component (see [Result Templates](https://developers.coveo.com/x/aIGfAQ)).\n */\nexport class Text extends Component {\n  static ID = 'Text';\n\n  /**\n   * @componentOptions\n   */\n  static options: ITextOptions = {\n\n    /**\n     * Specifies the localized string value that the component should render.\n     */\n    value: ComponentOptions.buildLocalizedStringOption(),\n\n    /**\n     * Specifies the size of the text (set as the `font-size` CSS property).\n     */\n    size: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the style of the text (set as the `font-style` CSS property).\n     */\n    style: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the color of the text (set as the `color` CSS property).\n     */\n    color: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the weight of the text (set as the `font-weight` CSS property).\n     */\n    weight: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the alignment of the text (set as the `text-align` CSS property).\n     */\n    textAlign: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the top margin of the text (set as the `margin-top` CSS property).\n     */\n    marginTop: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the bottom margin of the text (set as the `margin-bottom` CSS property).\n     */\n    marginBottom: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the left margin of the text (set as the `margin-left` CSS property).\n     */\n    marginLeft: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the right margin of the text (set as the `margin-right` CSS property).\n     */\n    marginRight: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the top padding of the text (set as the `padding-top` CSS property).\n     */\n    paddingTop: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the bottom padding of the text (set as the `padding-bottom` CSS property).\n     */\n    paddingBottom: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the left padding of the text (set as the `padding-left` CSS property).\n     */\n    paddingLeft: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the right padding of the text (set as the `padding-right` CSS property).\n     */\n    paddingRight: ComponentOptions.buildStringOption()\n  };\n\n  /**\n   * Creates a new Text component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Text component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ITextOptions, bindings?: IComponentBindings) {\n    super(element, Text.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Text, options);\n    $$(this.element).text(this.options.value);\n    this.element.style.fontSize = this.options.size;\n    this.element.style.fontStyle = this.options.style;\n    this.element.style.color = this.options.color;\n    this.element.style.fontWeight = this.options.weight;\n    this.element.style.textAlign = this.options.textAlign;\n    this.element.style.marginTop = this.options.marginTop;\n    this.element.style.marginBottom = this.options.marginBottom;\n    this.element.style.marginRight = this.options.marginRight;\n    this.element.style.marginLeft = this.options.marginLeft;\n    this.element.style.paddingTop = this.options.paddingTop;\n    this.element.style.paddingBottom = this.options.paddingBottom;\n    this.element.style.paddingLeft = this.options.paddingLeft;\n    this.element.style.paddingRight = this.options.paddingRight;\n  }\n}\n\nInitialization.registerAutoCreateComponent(Text);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Text/Text.ts\n **/","import { Folding, IFoldingOptions } from './Folding';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Initialization } from '../Base/Initialization';\n\n/**\n * This component inherits from the {@link Folding} component.\n * Folding conversations and threads requires different processing.\n * When you need to fold children under a parent item, use this component.<br/>\n * <b>This component works well with Chatter and Lithium.</b>\n */\nexport class FoldingForThread extends Folding {\n  static ID = 'FoldingForThread';\n\n  /**\n   * Create a new FoldingForThread component\n   * @param element\n   * @param options\n   * @param bindings\n   */\n  constructor(public element: HTMLElement, public options: IFoldingOptions, bindings?: IComponentBindings) {\n    super(element, options, bindings);\n    this.options.getMoreResults = (results: IQueryResult[]) => {\n      return Folding.foldWithParent(results)[0].attachments;\n    };\n\n    this.options.getResult = (result: IQueryResult) => {\n      var defaultResult = Folding.defaultGetResult(result);\n      defaultResult.childResults = defaultResult.attachments;\n      defaultResult.attachments = [];\n      return defaultResult;\n    };\n  }\n}\n\nInitialization.registerAutoCreateComponent(FoldingForThread);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Folding/FoldingForThread.ts\n **/","import { Initialization } from '../Base/Initialization';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\nimport { l } from '../../strings/Strings';\nimport { ChatterUtils } from '../../utils/ChatterUtils';\n\nexport interface IChatterLikedByOptions {\n  nbLikesToRender: number;\n  openInPrimaryTab: boolean;\n  openInSubTab: boolean;\n}\n\nexport class ChatterLikedBy extends Component {\n  static ID = 'ChatterLikedBy';\n\n  static options: IChatterLikedByOptions = {\n    nbLikesToRender: ComponentOptions.buildNumberOption({ defaultValue: 2, min: 0 }),\n    openInPrimaryTab: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n    openInSubTab: ComponentOptions.buildBooleanOption({ defaultValue: true })\n  };\n\n  static fields = [\n    'sflikedby',\n    'sflikedbyid',\n    'clickableuri',\n    'sffeeditemid'\n  ];\n\n  constructor(public element: HTMLElement, public options?: IChatterLikedByOptions, public bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, ChatterLikedBy.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ChatterLikedBy, options);\n\n    if (!Utils.isNullOrUndefined(Utils.getFieldValue(result, 'sflikedby')) && !Utils.isNullOrUndefined(Utils.getFieldValue(result, 'sflikedbyid'))) {\n      let likeNames = Utils.getFieldValue(result, 'sflikedby').split(';');\n      let likeIds = Utils.getFieldValue(result, 'sflikedbyid').split(';');\n\n      let rootElement = $$('div', {\n        className: 'coveo-chatter-result-box-row'\n      });\n      $$(element).append(rootElement.el);\n\n      let thumbIcon = $$('div', {\n        className: 'coveo-sprites-common-thumbup_inactive coveo-chatter-result-box-icon'\n      });\n      rootElement.append(thumbIcon.el);\n\n      let fullListElement = $$('div', {\n        className: 'coveo-chatter-result-likes'\n      });\n      rootElement.append(fullListElement.el);\n\n      this.renderLikesList(fullListElement.el, result, likeNames, likeIds, this.options.nbLikesToRender);\n    }\n  }\n\n  private renderLikesList(element: HTMLElement, result: IQueryResult, likeNames: string[], likeIds: string[], nbLikesToRender: number) {\n    let tempElement = $$('div');\n\n    for (let i = 0; i < likeIds.length - 1 && (nbLikesToRender == 0 || i < nbLikesToRender); i++) {\n      tempElement.append(this.renderLikeLink(result, likeNames[i], likeIds[i]));\n\n      if ((nbLikesToRender == 0 || i < nbLikesToRender - 1) && i < likeIds.length - 2) {\n        tempElement.append($$('span', {}, ', ').el);\n      } else if (i < likeIds.length - 1) {\n        tempElement.append($$('span', {}, ` ${l('And').toLowerCase()} `).el);\n      }\n    }\n\n    if (nbLikesToRender == 0 || likeIds.length <= nbLikesToRender) {\n      tempElement.append(this.renderLikeLink(result, likeNames[likeIds.length - 1], likeIds[likeIds.length - 1]));\n    } else {\n      let othersCount = likeIds.length - nbLikesToRender;\n      let clickableLink = $$('a');\n      clickableLink.text(` ${l('Others', othersCount.toString(), othersCount)}`);\n      clickableLink.on('click', (e: Event) => {\n        e.preventDefault();\n        $$(element).empty();\n        this.renderLikesList(element, result, likeNames, likeIds, 0);\n      });\n      tempElement.append(clickableLink.el);\n    }\n\n    if (likeIds.length > 0) {\n      let name = $$('span');\n      name.el.innerHTML = l('LikesThis', tempElement.el.innerHTML, likeIds.length);\n      $$(element).append(name.el);\n    }\n  }\n\n  private renderLikeLink(result: IQueryResult, likeName: string, likeId: string): HTMLElement {\n    let link = $$('a', {\n      href: ChatterUtils.buildURI(result.clickUri, Utils.getFieldValue(result, 'sffeeditemid'), likeId)\n    });\n    link.text(likeName);\n    return link.el;\n  }\n}\n\nInitialization.registerAutoCreateComponent(ChatterLikedBy);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ChatterLikedBy/ChatterLikedBy.ts\n **/","export class ChatterUtils {\n  static buildURI(objectURI: string, objectId: string, newObjectId: string) {\n    return objectURI.replace(objectId, newObjectId);\n  }\n\n  static bindClickEventToElement(element: HTMLElement, openInPrimaryTab: boolean, openInSubTab: boolean) {\n    return element;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/ChatterUtils.ts\n **/","import { Component } from '../Base/Component';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { ChatterUtils } from '../../utils/ChatterUtils';\nimport { l } from '../../strings/Strings';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\n\nexport interface IChatterPostAttachmentOption {\n}\n\nexport class ChatterPostAttachment extends Component {\n  static ID = 'ChatterPostAttachment';\n\n  static fields = [\n    'sfcontentversionid',\n    'sffeeditemid',\n    'sfcontentfilename'\n  ];\n\n  constructor(public element: HTMLElement, public options?: IChatterPostAttachmentOption, public bindings?: IResultsComponentBindings, public result?: IQueryResult) {\n    super(element, ChatterPostAttachment.ID, bindings);\n\n    if (!Utils.isNullOrUndefined(Utils.getFieldValue(result, 'sfcontentversionid'))) {\n      let rootElement = $$('div', {\n        className: 'coveo-chatter-result-box-row'\n      });\n      $$(element).append(rootElement.el);\n\n      let icon = $$('div', {\n        className: 'coveo-sprites-common-system coveo-chatter-result-box-icon'\n      });\n      rootElement.append(icon.el);\n\n      let linkElement = $$('a', {\n        href: ChatterUtils.buildURI(result.clickUri, Utils.getFieldValue(result, 'sffeeditemid'), Utils.getFieldValue(result, 'sfcontentversionid'))\n      });\n      rootElement.append(linkElement.el);\n\n      if (!Utils.isNullOrUndefined(Utils.getFieldValue(result, 'sfcontentfilename'))) {\n        linkElement.text(Utils.getFieldValue(result, 'sfcontentfilename'));\n      } else {\n        linkElement.text(l('ShowAttachment'));\n      }\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(ChatterPostAttachment);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ChatterPostAttachment/ChatterPostAttachment.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { ChatterUtils } from '../../utils/ChatterUtils';\nimport { Initialization } from '../Base/Initialization';\nimport { l } from '../../strings/Strings';\nimport { Utils } from '../../utils/Utils';\nimport { $$ } from '../../utils/Dom';\n\nexport interface IChatterPostedByOption {\n  enablePostedOn: boolean;\n  useFromInstead: boolean;\n  openInPrimaryTab: boolean;\n  openInSubTab: boolean;\n}\n\nexport class ChatterPostedBy extends Component {\n  static ID = 'ChatterPostedBy';\n  static options: IChatterPostedByOption = {\n    enablePostedOn: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n    useFromInstead: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n    openInPrimaryTab: ComponentOptions.buildBooleanOption({ defaultValue: false }),\n    openInSubTab: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n  };\n\n  static fields = [\n    'sfcreatedby',\n    'sfcreatedbyid',\n    'sffeeditemid',\n    'sfuserid',\n    'sfinsertedbyid',\n    'sfparentid',\n    'sfparentname'\n  ];\n\n  constructor(public element: HTMLElement, public options?: IChatterPostedByOption, public bindings?: IResultsComponentBindings, public result?: IQueryResult) {\n    super(element, ChatterPostedBy.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, ChatterPostedBy, options);\n\n    if (Utils.getFieldValue(this.result, 'sfcreatedby') != null) {\n      let from = $$('span');\n      from.text(`${this.options.useFromInstead ? l('From') : l('PostedBy')} `);\n      $$(element).append(from.el);\n      $$(element).append(this.renderLink(Utils.getFieldValue(this.result, 'sfcreatedby'), Utils.getFieldValue(this.result, 'sfcreatedbyid')));\n\n      if (this.options.enablePostedOn && !Utils.isNullOrUndefined(Utils.getFieldValue(this.result, 'sfparentname')) && !Utils.isNullOrUndefined(Utils.getFieldValue(this.result, 'sfparentid'))) {\n        // Post on user's wall\n        if (!Utils.isNullOrUndefined(Utils.getFieldValue(this.result, 'sfuserid')) && Utils.getFieldValue(this.result, 'sfuserid') != Utils.getFieldValue(this.result, 'sfinsertedbyid')) {\n          let onFeed = $$('span');\n          let content = ` ${l('OnFeed', this.renderLink(Utils.getFieldValue(this.result, 'sfparentname'), Utils.getFieldValue(this.result, 'sfparentid')).outerHTML)}`;\n          onFeed.el.innerHTML = content;\n          $$(element).append(onFeed.el);\n\n        } else if (Utils.isNullOrUndefined(Utils.getFieldValue(this.result, 'sfuserid'))) {\n          let onUser = $$('span');\n          onUser.text(` ${l('On').toLowerCase()} `);\n          $$(element).append(onUser.el);\n          $$(element).append(this.renderLink(Utils.getFieldValue(this.result, 'sfparentname'), Utils.getFieldValue(this.result, 'sfparentid')));\n        }\n      }\n    }\n  }\n\n  private renderLink(text: string, id: string): HTMLElement {\n    let link = $$('a', {\n      href: ChatterUtils.buildURI(this.result.clickUri, Utils.getFieldValue(this.result, 'sffeeditemid'), id)\n    });\n    link.text(text);\n    return ChatterUtils.bindClickEventToElement(link.el, this.options.openInPrimaryTab, this.options.openInSubTab);\n  }\n}\n\nInitialization.registerAutoCreateComponent(ChatterPostedBy);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ChatterPostedBy/ChatterPostedBy.ts\n **/","import { Component } from '../Base/Component';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Utils } from '../../utils/Utils';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\n\nexport interface IChatterTopicOption {\n}\n\nexport class ChatterTopic extends Component {\n  static ID = 'ChatterTopic';\n\n  static fields = [\n    'coveochatterfeedtopics'\n  ];\n\n  constructor(public element: HTMLElement, public options?: IChatterTopicOption, public bindings?: IResultsComponentBindings, public result?: IQueryResult) {\n    super(element, ChatterTopic.ID, bindings);\n\n    if (!Utils.isNullOrUndefined(Utils.getFieldValue(this.result, 'coveochatterfeedtopics'))) {\n      let rootElement = $$('div', {\n        className: 'coveo-chatter-result-box-row'\n      });\n\n      let topics = Utils.getFieldValue(result, 'coveochatterfeedtopics').split(';');\n\n      let icon = $$('div', {\n        className: 'coveo-sprites-common-tagging_tag coveo-chatter-result-box-icon'\n      });\n      rootElement.append(icon.el);\n\n      for (let i = 0; i < topics.length; i++) {\n        let topic = $$('span');\n        topic.text(topics[i]);\n        rootElement.append(topic.el);\n\n        if (i < topics.length - 1) {\n          let separator = $$('span');\n          separator.text(', ');\n          rootElement.append(separator.el);\n        }\n      }\n      $$(element).append(rootElement.el);\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(ChatterTopic);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/ChatterTopic/ChatterTopic.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Initialization } from '../Base/Initialization';\nimport { $$ } from '../../utils/Dom';\nimport { QueryEvents } from '../../events/QueryEvents';\nimport { IQuerySuccessEventArgs } from '../../events/QueryEvents';\n\nexport interface ILogoOptions {\n}\n\n/**\n * The Logo component adds a clickable Coveo logo in the search interface.\n */\nexport class Logo extends Component {\n  static ID = 'Logo';\n\n  static options: ILogoOptions = {};\n\n  /**\n   * Creates a new Logo component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the Logo component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ILogoOptions, bindings?: IComponentBindings) {\n    super(element, Logo.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Logo, options);\n\n    let link = $$('a', {\n      className: 'coveo-powered-by coveo-footer-logo',\n      href: 'http://www.coveo.com/'\n    });\n\n    this.element.appendChild(link.el);\n\n    this.bind.onRootElement(QueryEvents.noResults, () => this.hide());\n    this.bind.onRootElement(QueryEvents.querySuccess, (data: IQuerySuccessEventArgs) => {\n      if (data.results.results.length > 0) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    });\n    this.bind.onRootElement(QueryEvents.queryError, () => this.hide());\n  }\n\n  public hide() {\n    $$(this.element).addClass('coveo-hidden');\n  }\n\n  public show() {\n    $$(this.element).removeClass('coveo-hidden');\n  }\n}\n\nInitialization.registerAutoCreateComponent(Logo);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Logo/Logo.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions, IFieldOption } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Initialization, IInitializationParameters } from '../Base/Initialization';\nimport { IResultsComponentBindings } from '../Base/ResultsComponentBindings';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport _ = require('underscore');\nimport { Utils } from '../../utils/Utils';\nimport { YouTubeThumbnail, IYouTubeThumbnailOptions } from '../YouTube/YouTubeThumbnail';\nimport { $$ } from '../../utils/Dom';\nimport { ModalBox as ModalBoxModule } from '../../ExternalModulesShim';\n\nexport interface IBackdropOptions {\n  imageUrl?: string;\n  imageField?: IFieldOption;\n  overlayColor?: string;\n  overlayGradient?: boolean;\n}\n\n/**\n * The Backdrop component renders an image URL (either passed as a direct URL or contained in a result field) as a\n * background image. It is useful for displaying information in front of a dynamic background image.\n *\n * The Backdrop component will automatically initialize components embedded within itself:\n *\n * ```html\n *   <div class=\"CoveoBackdrop\" data-image-field=\"ytthumbnailurl\">\n *     <div class=\"CoveoFieldValue\" data-field=\"somefield\"></div>\n *   </div>\n * ```\n */\nexport class Backdrop extends Component {\n  static ID = 'Backdrop';\n\n  /**\n   * @componentOptions\n   */\n  static options: IBackdropOptions = {\n\n    /**\n     * Specifies a direct URL from which the background image will be sourced.\n     *\n     * Has priority over {@link Backdrop.options.imageField}.\n     */\n    imageUrl: ComponentOptions.buildStringOption(),\n\n    /**\n     * Specifies the field from which the background image will be pulled.\n     *\n     * If {@link Backdrop.options.imageUrl} is specified, it will override this option.\n     */\n    imageField: ComponentOptions.buildFieldOption(),\n\n    /**\n     * Specifies the color that will be overlaid on top of the background image.\n     * This option needs to be declared as a CSS color. Be sure to use RGBA with an alpha value lower than 1 in order to\n     * be able to see the image behind the overlay color.\n     *\n     * Example value : \"`rgba(101, 123, 76, 0.5)`\"\n     */\n    overlayColor: ComponentOptions.buildColorOption(),\n\n    /**\n     * Specifies whether the overlay color should be instead be rendered as a top-to-bottom gradient from\n     * {@link Backdrop.options.overlayColor} to transparent.\n     *\n     * Default value is `false`.\n     */\n    overlayGradient: ComponentOptions.buildBooleanOption({ defaultValue: false, depend: 'overlayColor' }),\n  };\n\n  /**\n   * Creates a new Backdrop component.\n   * @param element The HTMLElement on which the component will be instantiated.\n   * @param options The options for the Backdrop component.\n   * @param bindings The bindings that the component requires to function normally. If not set, it will be automatically\n   * resolved (with a slower execution time).\n   * @param result The {@link IQueryResult}.\n   */\n  constructor(public element: HTMLElement, public options?: IBackdropOptions, bindings?: IComponentBindings, public result?: IQueryResult, public _window?: Window, public ModalBox = ModalBoxModule) {\n    super(element, Backdrop.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, Backdrop, options);\n\n    this._window = this._window || window;\n\n    let background = '';\n    if (this.options.overlayColor) {\n      background += `linear-gradient(${this.options.overlayColor}, `\n        + (this.options.overlayGradient ? 'rgba(0,0,0,0)' : this.options.overlayColor) + '), ';\n    }\n\n    const imageSource = this.options.imageUrl || Utils.getFieldValue(result, <string>this.options.imageField);\n    background += `url('${imageSource}') center center`;\n\n    this.element.style.background = background;\n    this.element.style.backgroundSize = 'cover';\n\n    // Initialize components inside\n    let initOptions = this.searchInterface.options.originalOptionsObject;\n    let resultComponentBindings: IResultsComponentBindings = _.extend({}, this.getBindings(), {\n      resultElement: element\n    });\n    let initParameters: IInitializationParameters = {\n      options: _.extend({}, { initOptions: { ResultLink: options } }, initOptions),\n      bindings: resultComponentBindings,\n      result: result\n    };\n    Initialization.automaticallyCreateComponentsInside(this.element, initParameters);\n\n    this.configureSpecialBackdropActions();\n  }\n\n  private configureSpecialBackdropActions() {\n\n    // If the current backdrop is used for a youtube thumbnail, we automatically configure a component for this\n    if (Utils.getFieldValue(this.result, 'ytthumbnailurl')) {\n      // We create the element \"in memory\", but do not append it to the DOM.\n      // We don't want to see a duplicate of the preview for youtube : the backdrop already renders a preview.\n      let thumbnailYouTube = new YouTubeThumbnail($$('div').el, <IYouTubeThumbnailOptions>{\n        embed: true\n      }, <IResultsComponentBindings>this.getBindings(), this.result, this.ModalBox);\n\n      $$(this.element).on('click', (e: MouseEvent) => {\n        // Since the backdrop often contain a result link, we must make sure the click did no originate from one.\n        // Otherwise, we might end up opening 2 results at the same time\n        if (!$$(<HTMLElement>e.target).hasClass('CoveoResultLink')) {\n          thumbnailYouTube.openResultLink();\n        }\n      });\n    }\n  }\n}\n\nInitialization.registerAutoCreateComponent(Backdrop);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/Backdrop/Backdrop.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Initialization } from '../Base/Initialization';\nimport { CardOverlayEvents } from '../../events/CardOverlayEvents';\nimport { $$ } from '../../utils/Dom';\nimport { Assert } from '../../misc/Assert';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\n\nexport interface ICardOverlayOptions {\n  title: string;\n  icon?: string;\n}\n\n/**\n * The CardOverlay component displays a button that the user can click to toggle the visibility of an overlay on top of\n * an {@link IQueryResult}. While this component typically populates a {@link CardActionBar} component, it is actually\n * possible to place a CardOverlay component anywhere in any result.\n *\n * The primary purpose of the CardOverlay component is to display additional information about a result in a format that\n * fits well within a card result layout (see [Result Layouts](https://developers.coveo.com/x/yQUvAg)).\n *\n * When initialized, this component creates a `<div class=\"coveo-card-overlay\">` element as the last child of its parent\n * IQueryResult, and displays a button which toggles the visibility of the overlay.\n */\nexport class CardOverlay extends Component {\n  static ID = 'CardOverlay';\n\n  private parentCard: HTMLElement;\n  private overlay: HTMLElement;\n\n  /**\n   * @componentOptions\n   */\n  static options: ICardOverlayOptions = {\n\n    /**\n     * Specifies the string to use for the overlay title and for the button text.\n     *\n     * Setting a value for this option is required for this component to work.\n     */\n    title: ComponentOptions.buildStringOption({ required: true }),\n\n    /**\n     * Specifies the icon to use for the overlay icon and for the button icon.\n     */\n    icon: ComponentOptions.buildIconOption()\n  };\n\n  /**\n   * Creates a new CardOverlay component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the CardOverlay component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   */\n  constructor(public element: HTMLElement, public options?: ICardOverlayOptions, bindings?: IComponentBindings) {\n    super(element, CardOverlay.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, CardOverlay, options);\n\n    this.parentCard = $$(this.element).closest('.CoveoResult');\n    Assert.exists(this.parentCard);\n    $$(this.parentCard).addClass('coveo-with-card-overlay');\n    this.createOverlay();\n    this.createButton(this.element);\n    this.closeOverlay();\n  }\n\n  /**\n   * Toggles the CardOverlay visibility.\n   *\n   * @param swtch Specifying a value for this parameter forces the component visibility to take the corresponding value\n   * (`true` for visible; `false` for hidden).\n   */\n  public toggleOverlay(swtch?: boolean) {\n    if (swtch !== undefined) {\n      swtch ? this.openOverlay() : this.closeOverlay();\n    } else {\n      if ($$(this.overlay).hasClass('coveo-opened')) {\n        this.closeOverlay();\n      } else {\n        this.openOverlay();\n      }\n    }\n  }\n\n  /**\n   * Opens the CardOverlay.\n   *\n   * Also triggers the {@link CardOverlayEvents.openCardOverlay} event.\n   */\n  public openOverlay() {\n    $$(this.overlay).removeClass('coveo-hidden-for-tab-nav');\n    $$(this.overlay).addClass('coveo-opened');\n    $$(this.parentCard).addClass('coveo-card-overlay-opened');\n    this.bind.trigger(this.element, CardOverlayEvents.openCardOverlay);\n  }\n\n  /**\n   * Closes the CardOverlay.\n   *\n   * Also triggers the {@link CardOverlayEvents.closeCardOverlay} event.\n   */\n  public closeOverlay() {\n    $$(this.overlay).addClass('coveo-hidden-for-tab-nav');\n    $$(this.overlay).removeClass('coveo-opened');\n    $$(this.parentCard).removeClass('coveo-card-overlay-opened');\n    this.bind.trigger(this.element, CardOverlayEvents.closeCardOverlay);\n  }\n\n  private createOverlay() {\n    this.overlay = $$('div', { className: 'coveo-card-overlay' }).el;\n\n    // Create header\n    let overlayHeader = $$('div', { className: 'coveo-card-overlay-header' }).el;\n    this.createButton(overlayHeader);\n    this.overlay.appendChild(overlayHeader);\n\n    // Create body\n    let overlayBody = $$('div', { className: 'coveo-card-overlay-body' }).el;\n    // Transfer all of element's children to the overlay\n    while (this.element.childNodes.length > 0) {\n      overlayBody.appendChild(this.element.firstChild);\n    }\n    this.overlay.appendChild(overlayBody);\n\n    // Create footer\n    let overlayFooter = $$('div', { className: 'coveo-card-overlay-footer', tabindex: '0' },\n      $$('span', { className: 'coveo-icon coveo-sprites-arrow-down' }));\n    overlayFooter.on('click', () => this.toggleOverlay(false));\n    this.bind.on(overlayFooter.el, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, () => this.toggleOverlay(false)));\n\n    this.overlay.appendChild(overlayFooter.el);\n\n    this.parentCard.appendChild(this.overlay);\n  }\n\n  private createButton(element: HTMLElement) {\n    if (this.options.icon) {\n      element.appendChild($$('span', { className: 'coveo-icon ' + this.options.icon }).el);\n    }\n    element.appendChild($$('span', { className: 'coveo-label' }, this.options.title).el);\n    element.setAttribute('tabindex', '0');\n    $$(element).on('click', () => this.toggleOverlay());\n    this.bind.on(element, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, () => this.toggleOverlay()));\n\n  }\n}\n\nInitialization.registerAutoCreateComponent(CardOverlay);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/CardOverlay/CardOverlay.ts\n **/","/**\n * The CardOverlayEvents class contains string definitions for all events related to the {@link CardOverlay} component.\n */\nexport class CardOverlayEvents {\n\n  /**\n   * Opening a {@link CardOverlay} component triggers this event (see {@link CardOverlay.openOverlay}).\n   *\n   * @type {string}\n   */\n  public static openCardOverlay = 'openCardOverlay';\n\n  /**\n   * Closing a {@link CardOverlay} component triggers this event (see {@link CardOverlay.closeOverlay}).\n   *\n   * @type {string}\n   */\n  public static closeCardOverlay = 'closeCardOverlay';\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/events/CardOverlayEvents.ts\n **/","import { Component } from '../Base/Component';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { Initialization } from '../Base/Initialization';\nimport { IQueryResult } from '../../rest/QueryResult';\nimport { Assert } from '../../misc/Assert';\nimport { $$ } from '../../utils/Dom';\nimport { KeyboardUtils, KEYBOARD } from '../../utils/KeyboardUtils';\nimport _ = require('underscore');\n\nexport interface ICardActionBarOptions {\n  hidden?: boolean;\n  openOnMouseOver?: boolean;\n}\n\n/**\n * The CardActionBar component displays an action bar at the bottom of a card result (see\n * [Result Layouts](https://developers.coveo.com/x/yQUvAg)). It is a simple container for buttons or complementary\n * information.\n *\n * You should place this component at the bottom of a card result (i.e., as the last child of the surrounding\n * `coveo-result-frame`.\n *\n * ### Example\n * ```html\n * <div class=\"coveo-result-frame\">\n *   [ ... content ... ]\n *   <div class=\"CoveoCardActionBar\">\n *     <some-button></some-button>\n *     <some-additional-info></some-additional-info>\n *   </div>\n * </div>\n * ```\n *\n * A CardActionBar component is a two-state widget: it can either be shown or hidden. It is hidden by default.\n */\nexport class CardActionBar extends Component {\n  static ID = 'CardActionBar';\n\n  parentResult: HTMLElement;\n  arrowContainer: HTMLElement;\n  removedTabIndexElements: HTMLElement[] = [];\n\n  /**\n   * @componentOptions\n   */\n  static options: ICardActionBarOptions = {\n\n    /**\n     * Specifies whether to hide the CardActionBar by default, unless the user clicks its parent {@link IQueryResult}.\n     *\n     * Default value is `true`. This means that the component is hidden and a visual indicator is appended to its parent\n     * IQueryResult.\n     */\n    hidden: ComponentOptions.buildBooleanOption({ defaultValue: true }),\n\n    /**\n     * If {@link CardActionBar.options.hidden} is `true`, specifies whether to open the CardActionBar when the cursor\n     * hovers over it.\n     *\n     * Default value is `true`.\n     */\n    openOnMouseOver: ComponentOptions.buildBooleanOption({ defaultValue: true, depend: 'hidden' })\n  };\n\n  /**\n   * Creates a new CardActionBar component.\n   * @param element The HTMLElement on which to instantiate the component.\n   * @param options The options for the CardActionBar component.\n   * @param bindings The bindings that the component requires to function normally. If not set, these will be\n   * automatically resolved (with a slower execution time).\n   * @param result The parent result.\n   */\n  constructor(public element: HTMLElement, public options?: ICardActionBarOptions, bindings?: IComponentBindings, public result?: IQueryResult) {\n    super(element, CardActionBar.ID, bindings);\n    this.options = ComponentOptions.initComponentOptions(element, CardActionBar, options);\n\n    this.parentResult = $$(this.element).closest('CoveoResult');\n    Assert.check(this.parentResult !== undefined, 'ActionBar needs to be a child of a Result');\n\n    if (this.options.hidden) {\n      $$(this.parentResult).addClass('coveo-clickable');\n      this.appendArrow();\n      this.bindEvents();\n\n      _.forEach($$(this.element).findAll('*'), (elem: HTMLElement) => {\n        if (elem.hasAttribute('tabindex') && elem.getAttribute('tabindex') == '0') {\n          this.removedTabIndexElements.push(elem);\n          elem.removeAttribute('tabindex');\n        }\n      });\n\n    } else {\n      this.element.style.transition = 'none';\n      this.element.style.transform = 'none';\n    }\n  }\n\n  /**\n   * Shows the CardActionBar.\n   */\n  public show() {\n    $$(this.element).addClass('coveo-opened');\n    _.forEach(this.removedTabIndexElements, (e: Element) => {\n      e.setAttribute('tabindex', '0');\n    });\n  }\n\n  /**\n   * Hides the CardActionBar.\n   */\n  public hide() {\n    $$(this.element).removeClass('coveo-opened');\n    _.forEach(this.removedTabIndexElements, (e: Element) => {\n      e.removeAttribute('tabindex');\n    });\n  }\n\n  private bindEvents() {\n    $$(this.parentResult).on('click', () => this.show());\n    $$(this.parentResult).on('mouseleave', () => this.hide());\n    if (this.options.openOnMouseOver) {\n      $$(this.arrowContainer).on('mouseenter', () => this.show());\n    }\n  }\n\n  private appendArrow() {\n    this.arrowContainer = $$('div', { className: 'coveo-card-action-bar-arrow-container', tabindex: 0 }).el;\n    this.bind.on(this.arrowContainer, 'keyup', KeyboardUtils.keypressAction(KEYBOARD.ENTER, () => this.show()));\n    this.arrowContainer.appendChild($$('span', { className: 'coveo-icon coveo-sprites-arrow-up' }).el);\n    this.parentResult.appendChild(this.arrowContainer);\n  }\n}\n\nInitialization.registerAutoCreateComponent(CardActionBar);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ui/CardActionBar/CardActionBar.ts\n **/","import { CoreHelpers } from './ui/Templates/CoreHelpers';\nimport _ = require('underscore');\n\n// Webpack output a library target with a temporary name.\n// This is to allow end user to put CoveoJsSearch.Dependencie.js before or after the main CoveoJsSearch.js, without breaking\n// This code swap the current module to the \"real\" Coveo variable.\n\n\nexport function swapVar(scope: any) {\n  if (window['Coveo'] == undefined) {\n    window['Coveo'] = scope;\n  } else {\n    _.each(_.keys(scope), (k) => {\n      window['Coveo'][k] = scope[k];\n    });\n  }\n  CoreHelpers.exportAllHelpersGlobally(window['Coveo']);\n  if (window['__extends'] == undefined) {\n    var __extends = function (d, b) {\n      for (var p in b) {\n        if (b.hasOwnProperty(p)) {\n          d[p] = b[p];\n        }\n      }\n      function __() {\n        this.constructor = d;\n      }\n\n      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n    window['__extends'] = __extends;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/SwapVar.ts\n **/"]}